我的AI之路(51)--用自己的UCF101數據集訓練3D識別模型video-caffe

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數據集以及修改訓練用的配置文件,後面有空再補充。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章