TSN 编译记录

TSN代码编译记录

前言

TSN 作者yjxiong etc.开源了代码并且公布了自己训练的所有模型,提供了使用GPU得到tvl1光流的方法,以及几种数据集切分的方法,比自己的渣代码顺眼很多,这个项目很赞~
TSN-Project

但是(据说但是前都是废话),DL框架用的Caffe,提供的自然是caffemodel和prototxt文件,习惯了tensorflow和pyTorch,表示很不想用Caffe,而且工程里用到了opencv(必须是版本2.x),需要支持GPU。很麻烦,基本上要重新安装各个依赖。

很好的是,作者提供了build_all.sh脚本文件,一次安装完所有依赖。不建议直接在自己的服务器/主机上运行。建议使用docker。

当然,如果本机上使用的是caffe + CUDA8.0 + opencv-2.x(GPU support)可以考虑直接按照作者的思路

这大概是历史上最痛苦的两天….,需要用到TSN作者提供的pre-trained model on Kinetics, 然鹅TSN在服务器上各种编译不过, 整个实验工作都被blocked…,最终发现好用便捷的方案,记录如下

Temporal Segment Network编译记录

使用docker的好处就是不用担心安装失败等问题,可以尽情折腾

由于自己用的服务器上已经安装好了opencv, caffe,torch 等,且版本不同,因此最好的方案是用docker,但是TSN的作者没有提供docker镜像,有个tsn-docker的镜像里只装好了caffe,不可以用,因此主要使用以下三步进行编译

  • 1.安装docker与nvidia-docker
  • 2.使用docker pull 带有ubuntu16.04 + CUDA8.0 + opencv的镜像
  • 3.使用nvidia-docker 与主机共享内存,clone代码编译

1.安装docker与nvidia-docker

docker
nvidia-docker

2.pull镜像

    docker pull allansp84/ubuntu16.04-cuda8.0-opencv2.4.13

如果速度过慢,有很多docker加速的方法

3.编译代码

运行容器, –ipc=host容器与主机共享内存,注意不要用docker运行,使用nvidia-docker, -it:链接终端 -v:映射文件夹,这样可以同步容器和主机的文件夹, bash:显示bash

    nvidia-docker run -it -v ~/Code:/Code -v /DataSet:/DataSet --ipc=host  allansp84/ubuntu16.04-cuda8.0-opencv2.4.13 bash

进入容器后,查看显卡信息和nvcc版本是否和自己主机一致

    nvidia-smi
    nvcc --version

若一切正常,继续,否则检查nvidia驱动和cuda8.0是否正确安装
接下来clone TSN代码

    cd /Code
    git clone --recursive https://github.com/yjxiong/temporal-segment-networks
    cd temporal-segment-networks

执行编译

    bash build_all.sh

如果顺利的话,终端会显示

All tools built. Happy experimenting!”

到此时,整个工程还没有完全可用

    cd /lib/dense_flow/build

使用编译生成的可执行文件extract_gpu来提取光流进行测试

    mkdir tmp
    ./extract_gpu -f /DataSet/UCF-101/ApplyEyeMakeup/v_ApplyEyeMakeup_g01_c01.avi  -x tmp/flow_x -y tmp/flow_y -i tmp/image -b 20 -t 1 -d 0 -s 1 -o dir

如果出现莫名奇妙的问题,如果出现

1 FATAL [default] CRASH HANDLED; Application has crashed due to [SIGSEGV] signal

查看内存和CPU利用率,看是不是被这个容器阻塞

    top

若发现CPU利用率一直卡在100%

    exit
    sudo pkill -SIGHUP dockerd
    docker exec -it 容器ID bash

注意容器ID可以通过

    docker ps -a

查看

如果tmp文件夹里出现压缩包,说明提取光流方法正确,接下来真的是
Happy experimenting!

遇到的问题

1.CUDA/NVCC 版本问题

TSN编辑需要CUDA8.0
首先用nvcc查看版本

    nvcc --version

若版本为8.0,正常,若安装了8.0后但nvcc显示7.5/9.0 等版本,说明没有正确链接到nvcc,首先进入cuda文件夹查看是不是有nvcc文件

    cd /usr/local/cuda/bin

若有,则

    sudo gedit ~/.bashrc

在末尾加入

    export PATH=$PATH:/usr/local/cuda/bin

这时候再使用

    nvcc --version

就可以正常查看了~

2.opencv冲突

虽然项目中的opencv编译时候是在本地,但是在使用densor_flow的时候,会链接到opencv(GPU Support),出现诸如nvcc xxxxxxx或者 no gpu …. 或者 cuda…等等原因均是因为自己安装的opencv版本不对或者没有添加gpu支持,且加了全局symbol。

解决方案

1.卸载之前版本,安装opencv2.4.13(GPU support)
2.使用docker

其它问题

其它问题过多…..,有各种各样的原因,主要原因是已经配好了很多依赖库,或者.so文件链接失效等等….. 这里不再一一列出

ETC…

我最近如果有时间将我配置好的容器打包成镜像发布~

你可能感兴趣的:(caffe,机器学习)