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…,最终发现好用便捷的方案,记录如下
使用docker的好处就是不用担心安装失败等问题,可以尽情折腾
由于自己用的服务器上已经安装好了opencv, caffe,torch 等,且版本不同,因此最好的方案是用docker,但是TSN的作者没有提供docker镜像,有个tsn-docker的镜像里只装好了caffe,不可以用,因此主要使用以下三步进行编译
docker
nvidia-docker
docker pull allansp84/ubuntu16.04-cuda8.0-opencv2.4.13
如果速度过慢,有很多docker加速的方法
运行容器, –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!
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
就可以正常查看了~
虽然项目中的opencv编译时候是在本地,但是在使用densor_flow的时候,会链接到opencv(GPU Support),出现诸如nvcc xxxxxxx或者 no gpu …. 或者 cuda…等等原因均是因为自己安装的opencv版本不对或者没有添加gpu支持,且加了全局symbol。
1.卸载之前版本,安装opencv2.4.13(GPU support)
2.使用docker
其它问题过多…..,有各种各样的原因,主要原因是已经配好了很多依赖库,或者.so文件链接失效等等….. 这里不再一一列出
我最近如果有时间将我配置好的容器打包成镜像发布~