C3D(C3D project website)的初始版本https://github.com/facebookarchive/C3D太老了,下載一個比較新的版本的源碼:
https://github.com/chuckcho/video-caffe
安裝video-caffe的編譯環境支持包:
apt install libopencv-dev
apt-get install git cmake
apt install cmake-qt-gui
apt-get install libprotobuf-dev protobuf-compiler libleveldb-dev libsnappy-dev libhdf5-serial-dev libgflags-dev \
libgoogle-glog-dev install liblmdb-dev libatlas-base-dev gfortran
apt-get install libopenblas-dev #optional
apt-get install libssl-dev
apt-get install --no-install-recommends libboost-all-dev
apt-get install python-dev
apt-get install python-numpy
pip install opencv-python #jetson arm64不用
pip install python-dateutil
pip install pytest #optional 僅供測試驗證使用
修改Makefile.config和Makefile:
cd video-caffe
vi Makefile.config
USE_CUDNN := 1
OPENCV_VERSION := 3
CUDA_ARCH := -gencode arch=compute_20,code=sm_20 \
-gencode arch=compute_20,code=sm_21 \
-gencode arch=compute_30,code=sm_30 \
-gencode arch=compute_35,code=sm_35 \
-gencode arch=compute_50,code=sm_50 \
-gencode arch=compute_52,code=sm_52 \
-gencode arch=compute_60,code=sm_60 \
-gencode arch=compute_61,code=sm_61 \
-gencode arch=compute_70,code=sm_70 \
-gencode arch=compute_70,code=compute_70
PYTHON_LIBRARIES := boost_python3 python3.6
PYTHON_INCLUDE := /usr/include/python3.6 \
/usr/local/lib/python3.6/dist-packages/numpy/core/include
WITH_PYTHON_LAYER := 1 #optional, if you want call caffe by python script
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/aarch64-linux-gnu /usr/lib/aarch64-linux-gnu/hdf5/serial
vi Makefile
LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_serial_hl hdf5_serial
然後編譯:
mkdir build && cd build
cmake ..
make all -j8
make install
make runtest #optional, 驗證編譯和安裝
注意: 假如不是第一次編譯,video-caffe/examples/某些文件夾下面有前面上一次編譯出的可執行二進制文件了,會導致在執行 cmake .. 這裏出錯生成不了Makefile,從而後面進行不下去,這時需先把生成了可執行文件的文件夾移到外面去或者刪掉,再執行cmake ..即可
假如你需要使用C++代碼調用video-caffe,那麼編譯完後,還需執行:
cp include/caffe/proto ../include/caffe # to get caffe.pb.h for application compiling
不然編譯C++調用代碼時會報錯。
如果上面執行cmake .. 時報錯:
CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
Please set them or make sure they are set and tested correctly in the CMake files:
CUDA_cublas_device_LIBRARY (ADVANCED)
這是因爲cmake版本低了,下載源碼安裝比較新的版本的cmake:
apt remove cmake
wget https://github.com/Kitware/CMake/releases/download/v3.17.3/cmake-3.17.3.tar.gz
tar xf cmake-3.17.3.tar.gz
cd cmake
./bootstrap
make
make install
然後把cmake加入path路徑(也可以在上面用bootsrap設置make install時把cmake 安裝到/usr/bin/下去,這樣不用做下面的設置)
vi ~/.bashrc
export PATH=$PATH:/usr/local/bin
source ~/.bashrc
然後再在video-caffe/build/下執行cmake ..即可解決上面的錯誤。
如果在安裝opencv4了的環境下編譯,可能會發生類似下面的錯:
/root/video-caffe/src/caffe/util/io.cpp /root/video-caffe/src/caffe/layers/window_data_layer.cpp:293:42: error: ‘CV_LOAD_IMAGE_COLOR’ was not declared in this scope
解決辦法是:編輯/home/user/caffe/src/caffe/util/io.cpp和 /root/video-caffe/src/caffe/layers/window_data_layer.cpp
將CV_LOAD_IMAGE_COLOR 改成cv::IMREAD_COLOR
將CV_LOAD_IMAGE_GRAYSCALE 改成 cv::IMREAD_GRAYSCALE
在/root/video-caffe/src/caffe/util/io.cpp裏面還需做下面的改動:
CV_CAP_PROP_FRAME_COUNT ->CAP_PROP_FRAME_COUNT
CV_CAP_PROP_POS_FRAMES ->CAP_PROP_POS_FRAMES
生成自己的UCF101數據集後面再補充。
在UCF101數據集準備好並且生成相關的list文件並修改examples/c3d_ucf101/c3d_ucf101_solver.prototxt等配置文件後,修改exmaples/c3d_ucf101/train_ucf101.sh:
cd video-caffe
vi exmaples/c3d_ucf101/train_ucf101.sh
#!/usr/bin/env sh
set -e
./build/tools/caffe \
train \
--solver=examples/c3d_ucf101/c3d_ucf101_solver.prototxt \
--weights=pretrained-c3d_ucf101_iter_20000.caffemodel \
$@ \
2>&1 | tee examples/c3d_ucf101/c3d_ucf101_train.log
執行訓練:
nohup ./examples/c3d_ucf101/train_ucf101.sh &
如果訓練中途中斷,爲了從中斷處附近開始resume訓練(例如從iteration 17100處resume訓練),創建一個腳本文件./examples/c3d_ucf101/train_resume_ucf101.sh :
vi ./examples/c3d_ucf101/train_resume_ucf101.sh
#!/usr/bin/env sh
set -e
./build/tools/caffe \
train \
--solver=examples/c3d_ucf101/c3d_ucf101_solver.prototxt \
--snapshot=examples/c3d_ucf101/c3d_ucf101_iter_17100.solverstate \
$@ \
2>&1 | tee examples/c3d_ucf101/c3d_ucf101_train.log
再執行這個腳本即可resume訓練:
nohup ./examples/c3d_ucf101/train_resume_ucf101.sh &
關於如果製作自己的UCF101數據集以及修改訓練用的配置文件,後面有空再補充。