deep_sort文章阅读(一)yolo的训练:PART1: 安装opencv(为了make时opencv=1)

Abstract

  1. 集成了外观信息(appearance information)提升sort性能, 减少了identity witches。
  2. two stages。 offline阶段,学习 deep association metric; online阶段, 使用最近邻查询构建跟踪测量。

deepsort代码的流程应该是这样的,先单独训练检测器,比如说是yolov4,这个训练过程和追踪没有任何关系,就是单独的检测单张图片信息,提供真值训练,一直训练到检测器能够很好的检测出来结果,我们用这个训练好的检测器,把它放到deepsort网络中,这个时候对于当前帧的图片,deepsort网络会预测下一帧图片目标的位置,然后当下一帧传到检测器的时候,检测器也会推理出一个结果,然后卡尔曼滤波算法就会平衡这两个结果,得出一个最优结果。
也就是说,现在我们的首要任务是掌握如何训练yolov3,yolov4,然后再看看deepsort的追踪过程是如何实现的。
github上两个yolo库的区别

  1. alexey:这是yolov4的作者
  2. pjreddie:这是yolov1-v3的作者

训练yolov4遇到的问题。

  1. Makefile 编译不过去。在终端输入make 后报错。
 No package 'opencv4' found
./src/image_opencv.cpp:16:36: fatal error: opencv2/core/version.hpp: No such file or directory
compilation terminated.
Makefile:174: recipe for target 'obj/image_opencv.o' failed
make: *** [obj/image_opencv.o] Error 1

这里消耗了一上午。首先是cmake和安装编译一直出问题,cmake版本太低,要去官网下载相应版本,如下图所示,这里比较坑的一个点是,要下载下面那个二进制发行版本(Binary distribution),那是已经编译好的,我一开始下载的上面的那个,结果各种Error。
deep_sort文章阅读(一)yolo的训练:PART1: 安装opencv(为了make时opencv=1)_第1张图片然后我们按照这个指导,就可以了,我们可以继续编译opencv了,到这里,按照alexey的指导

git clone https://github.com/opencv/opencv.git

cd opencv
mkdir build
cd build

cmake -D CMAKE_BUILD_TYPE=RELEASE \
      -D CMAKE_INSTALL_PREFIX=/usr/local \
      -D INSTALL_C_EXAMPLES=ON \
      -D INSTALL_PYTHON_EXAMPLES=ON \
      -D WITH_V4L=ON \
      -D WITH_QT=ON \
      -D WITH_OPENGL=ON \
      -D WITH_FFMPEG=ON \
      -D BUILD_EXAMPLES=ON ..

make -j4
sudo make install
sudo sh -c 'echo "/usr/local/lib" >> /etc/ld.so.conf.d/opencv.conf'
sudo ldconfig

走到 make -j4 这一步就报错了,之后又试了这个issue里面的方法,直接在darknet里输入 cmake . && make 就可以编译成功了。

[100%] Linking CXX executable darknet
[100%] Built target darknet

弄了一上午,才完成第一步。总结一下,一开始使用make不行,就各种尝试,最后解决的关键是更新了cmake,然后使用cmake . && make 就可以了。

晚上继续了。

修改参数,今天争取将coco2014数据集跑上

  1. 按照alexyey的指导,这里一直到下载数据集那里,如果我们打开get_coco_dataset.sh 文件,最后两行内容如下
# Set Up Image Lists
paste <(awk "{print \"$PWD\"}" <5k.part) 5k.part | tr -d '\t' > 5k.txt
paste <(awk "{print \"$PWD\"}" <trainvalno5k.part) trainvalno5k.part | tr -d '\t' > trainvalno5k.txt

因为我不是用的wget下载它的链接里的数据集,我不明台他这里no5k是什么意思,所以可能txt存在不对应,所以这里参考这里的指导,修改了一下。具体就是自己创建 .part文件,然后生成txt文件。

find -name "*train*.jpg" | cut -d '.' -f 2,3 > train.part
find -name "*val*.jpg" | cut -d '.' -f 2,3 > val.part

好像又明白了,作者从训练集和验证集中挑选出了5k张作为测试集,应该是这个意思把TAT。。。
那我这一一步应该就没有必要了。
现在能够实现单卡训练了,但是发现使用上面的cmake并没有使用opencv,参照这里

If you set GPU=1 or/and OPENCV=1 then you should use just make instead of cmake . & make

所以我们再次尝试安装opencv,通过source code的方式,这里一直遇到的一个问题如下

  libgtk2.0-dev: Depends: libgtk2.0-0 (= 2.20.0-0ubuntu4) but 2.20.1-0ubuntu2.1 is to be installed

参照这个方法,成功解决了这个问题。明天继续编译。

第二天早。

这里编译继续出现错误。太难了。。。
刚才编译make install 都成功了,然而yolo还是检测不到,猜测应该是python没有配置对,再来一次。感觉这两天全要浪费在这里了,既然已经花费了这么多时间,那就好好记录一下吧。

   Python 2:
--     Interpreter:                 /usr/bin/python2.7 (ver 2.7.12)
--     Libraries:                   /usr/lib/x86_64-linux-gnu/libpython2.7.so (ver 2.7.12)
--     numpy:                       /usr/lib/python2.7/dist-packages/numpy/core/include (ver 1.11.0)
--     install path:                lib/python2.7/dist-packages/cv2/python-2.7
-- 
--   Python (for build):            /usr/bin/python2.7

如上所示,这里如果我们不指定Python版本,它默认是使用Python2.7编译的,对于Python3来说,Ubuntu16.04好像默认的是Python3.5,这里我们继续试一试。
按照这篇博客的指导,使用cmake时加了如下参数:

$ cmake -D CMAKE_BUILD_TYPE=RELEASE 
    -D CMAKE_INSTALL_PREFIX=/usr/local 
    -D INSTALL_PYTHON_EXAMPLES=ON 
    -D INSTALL_C_EXAMPLES=OFF 
    -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.1.0/modules 
    -D PYTHON_EXECUTABLE=~/.virtualenvs/cv/bin/python 
    -D BUILD_EXAMPLES=ON ..

这里一个重要参数就是PYTHON_EXECUTABLE 它是用来指定编译的Python路径,而且如果这里用PYTHON_EXECUTABLE 那么他就只能用Python2,如果要用Python要改成 PYTHON3_EXECUTABLE' ,就挺坑的。

  1. 另外还有一个点,Ubuntu16.04默认带的是python2.7和python3.5, 我们在编译时会遇到如下内容
-- Detected processor: x86_64
-- Found PythonInterp: /usr/bin/python2.7 (found suitable version "2.7.12", minimum required is "2.7") 
-- Could NOT find PythonLibs (missing: PYTHON_LIBRARIES PYTHON_INCLUDE_DIRS) (Required is exact version "2.7.12")
-- Found PythonInterp: /home/wlj/anaconda3/envs/py35/bin/python3.5 (found suitable version "3.5.2", minimum required is "3.2") 
-- Found PythonLibs: /home/wlj/anaconda3/envs/py35/lib/libpython3.5m.so (found suitable exact version "3.5.2") 

这就是我们用python3.7编译不通过的原因,在/usr/lib/x86_64-linux-gnu/libpython3.5m.so 这里只有3.5的so,!!!
不过我刚才有测试了一下python3.7,发现又可以了,看来问题的关键是在于
PYTHON3_EXECUTABLE=/home/wlj/anaconda/bin/python3.7 这样就好了,

--   Other third-party libraries:
--     Lapack:                      NO
--     Eigen:                       NO
--     Custom HAL:                  NO
--     Protobuf:                    build (3.5.1)
-- 
--   OpenCL:                        YES (no extra features)
--     Include path:                /home/wlj/Downloads/opencv-4.1.1/3rdparty/include/opencl/1.2
--     Link libraries:              Dynamic load
-- 
--   Python 3:
--     Interpreter:                 /home/wlj/anaconda3/bin/python3.7 (ver 3.7.3)
--     Libraries:                   /home/wlj/anaconda3/lib/libpython3.7m.so (ver 3.7.3)
--     numpy:                       /home/wlj/anaconda3/lib/python3.7/site-packages/numpy/core/include (ver 1.17.2)
--     install path:                lib/python3.7/site-packages/cv2/python-3.7
-- 
--   Python (for build):            /usr/bin/python2.7
-- 
--   Java:                          
--     ant:                         NO
--     JNI:                         /opt/jdk1.8.0_231/include /opt/jdk1.8.0_231/include/linux /opt/jdk1.8.0_231/include
--     Java wrappers:               NO
--     Java tests:                  NO
-- 
--   Install to:                    /usr/local
-- -----------------------------------------------------------------
-- 
-- Configuring done
-- Generating done
-- Build files have been written to: /home/wlj/Downloads/opencv-4.1.1/build

所以我cmake的最后配置为

 cmake -D CMAKE_BUILD_TYPE=RELEASE \     
 -D CMAKE_INSTALL_PREFIX=/usr/local \
       -D INSTALL_PYTHON_EXAMPLES=ON \
      -D WITH_QT=ON \
      -D WITH_OPENGL=ON \
      -D WITH_FFMPEG=ON \
    -D OPENCV_EXTRA_MODULES_PATH=/home/wlj/Downloads/opencv_contrib/modules \
     -D PYTHON3_EXECUTABLE=/home/wlj/anaconda3/bin/python3.7 \
      -D BUILD_EXAMPLES=OFF ..

但是这个配置到 make -j6 这一步时,运行到50%会报错

[ 51%] Linking CXX shared library ../../lib/libopencv_dnn.so
[ 51%] Built target opencv_dnn
Makefile:162: recipe for target 'all' failed
make: *** [all] Error 2

然后又修改了几个如下

cmake -D CMAKE_BUILD_TYPE=RELEASE \
 -D CMAKE_INSTALL_PREFIX=/usr/local \
       -D INSTALL_PYTHON_EXAMPLES=ON \
       # 关掉
      -D WITH_QT=OFF \
      -D WITH_OPENGL=ON \
      -D WITH_FFMPEG=ON \
      #这一行不要了
    -D OPENCV_EXTRA_MODULES_PATH=/home/wlj/Downloads/opencv_contrib/modules \ 
     -D PYTHON3_EXECUTABLE=/home/wlj/anaconda3/bin/python3.7 \
     #关掉
      -D BUILD_EXAMPLES=OFF ..

配置如上,就可以make成功了

[ 99%] Linking CXX executable ../../bin/opencv_perf_video
[ 99%] Building CXX object modules/gapi/CMakeFiles/opencv_test_gapi.dir/test/own/gapi_types_tests.cpp.o
[ 99%] Building CXX object modules/gapi/CMakeFiles/opencv_test_gapi.dir/test/own/mat_tests.cpp.o
[ 99%] Built target opencv_perf_video
[ 99%] Building CXX object modules/gapi/CMakeFiles/opencv_test_gapi.dir/test/own/scalar_tests.cpp.o
[100%] Building CXX object modules/gapi/CMakeFiles/opencv_test_gapi.dir/test/test_main.cpp.o
[100%] Building CXX object modules/gapi/CMakeFiles/opencv_test_gapi.dir/test/util/any_tests.cpp.o
[100%] Building CXX object modules/gapi/CMakeFiles/opencv_test_gapi.dir/test/util/optional_tests.cpp.o
[100%] Building CXX object modules/gapi/CMakeFiles/opencv_test_gapi.dir/test/util/variant_tests.cpp.o
[100%] Linking CXX executable ../../bin/opencv_test_gapi
[100%] Built target opencv_test_gapi

然后我们依次执行如下命令

$ sudo make install
$ sudo ldconfig

最后在终端输入如下命令,检测是否成功

pkg-config --modversion opencv
Package opencv was not found in the pkg-config search path.
Perhaps you should add the directory containing `opencv.pc'
to the PKG_CONFIG_PATH environment variable
No package 'opencv' found

这里并没有一次成功。。。路径的问题~~继续搞。

查阅资料后发现,需要在cmake编译时添加 -D OPENCV_GENERATE_PKGCONFIG=YES 所以又需要重新编译了。 解释参考这里
然后检查的命令也不一样了,应该如下图所示。

(base) wlj@wlj-OUC:~$ pkg-config --cflags opencv4
-I/usr/local/include/opencv4/opencv -I/usr/local/include/opencv4

今天发现yolov4内部里面好像有一个安装opencv4的脚本,不知道能不能成功,路径是./darknet/scripts/install_OpenCV4.sh.

你可能感兴趣的:(yolo,深度学习,pytorch)