美文网首页
yolov4环境搭建与训练自己的数据集

yolov4环境搭建与训练自己的数据集

作者: 小蛋子 | 来源:发表于2020-05-28 17:57 被阅读0次

    yolov4出来后,简单做下测试,看到结果还是相当给力的。

    yolov3.jpg
    yolov4.jpg
    注意看中间有个被遮挡的马,在yolov3中是检测不到的,yolov4中检测出来了,精度确实提升了。
    那再来测试一下速度,测试视频发在b站上了。
    yolov4 test
    速度也是很给力的。
    那这么好的东西,当然要自己试试了,接下来用自己的数据训练测试一下。

    实验环境:
    Centos 7.0 + 2080Ti +CUDA+CuDNN+ OpenCV + FFmpeg + darknet

    安装darknet

    git clone  [https://github.com/AlexeyAB/darknet](https://github.com/AlexeyAB/darknet)
    cd darknet
    

    编译前,修改Makefile

    GPU = 1    # 使用GPU加速训练
    CUDNN = 1  #使用cudnn加速训练
    CUDNN_HALF = 1  # 针对   Titan V / Tesla V100 / DGX-2 and later的优化,能加速检测与训练
    OPENCV = 1  #使用opencv ,以允许对视频文件/网络摄像头进行处理
    OPENMP = 1  # 使用openmp,以针对多核cpu进行加速
    

    然后运行 make
    不出错则说明darknet已编译成功

    训练:
    进入darknet/build/darknet/x64目录
    1.下载pre-train weights文件yolov4.conv.137
    2.创建config文件

    cp cfg/yolov4-custom.cfg yolov4-obj.cfg
    
    vim yolov4-obj.cfg
    
    batch_size = 64  # batch size
    subdivisions=32 #每个batch分多少批,如果内存不足,可以调大此参数
    max_batches = 6000  # 最小取6000,设置为 classes_num * 2000
    steps = 4800, 5400   # 设置为max_bacthes的80% 和90%
    width = 412 
    height = 412  # 32的倍数,主要也是为了解决显存不足
    classes = 1  # 修改三个 [yolo] 层的 classes参数
    filters = 18 # 修改【yolo】层前面的[convolutional]中的filters, filters=(classes + 5) * 3
    

    3.创建obj.name文件

    vim data/obj.name
    waterdrop
    

    4.创建obj.data文件

    vim data/obj.data
    
    classes= 1
    train = data/train.txt
    valid = data/test.txt
    names = data/obj.names
    backup = backup/
    

    5.将所有的图片和标注文件放入data/obj目标下,并创建classes.txt文件,里面写上classes的数量

    6.创建train.txt文件

    vim data/train.txt
    
    data/obj/img1.jpg
    data/obj/img2.jpg
    ...
    

    7.创建test.txt文件,此时我们简单用train.txt

    cp data/train.txt data/test.txt
    

    8.训练

    ../../../darknet detector train data/obj.data yolo-obj.cfg yolov4.conv.137 -dont_show -mjpeg_port 8090 -map
    

    实验结果:


    water_drop_detect.jpg

    可以看到,结果还是相当给力的!范围与精度都很不错。

    可能遇到的问题与解决办法:

    问题1

    video stream stopped!
    

    fix: 卸载opencv,通过源码重新编译,编译时将FFmpeg一起编译

    1. FFmpeg
      需要将opencv与FFmpeg一起编译,所以首先要卸载原来的opencv
      进入opencv安装目录,
    sudo make uninstall 
    
    cd .. rm -Rf build
    
    cd /usr find . -name "*opencv*" | xargs sudo rm -rf
    
    yum remove opencv-data python-opencv
    

    运行 pkg-config --modversion opencv,没有则显示卸载完成

    git clone [https://git.ffmpeg.org/ffmpeg.git](https://git.ffmpeg.org/ffmpeg.git) ffmpeg
    
    cd source_directory ./configure --enable-shared --disable-static --disable-x86asm
    
    make 
    
    sudo make install
    
    sudo vi /etc/ld.so.conf
    
    include ld.so.conf.d/*.conf
    
    /usr/local/ffmpeg/lib
    
    sudo ldconfig
    

    验证:

    ffmpeg -version
    

    加入环境变量:

    vi /etc/profile
    
    export PATH="/usr/local/ffmpeg/bin:$PATH"
    
    source /etc/profile
    

    安装opencv

    安装依赖

    sudo yum install epel-release git gcc gcc-c++ cmake3 qt5-qtbase-devel     python3 python3-devel python3-pip cmake python3-devel python3-numpy     gtk2-devel libpng-devel jasper-devel openexr-devel libwebp-devel     libjpeg-turbo-devel libtiff-devel tbb-devel libv4l-devel     eigen3-devel freeglut-devel mesa-libGL mesa-libGL-devel     boost boost-thread boost-devel gstreamer1-plugins-base
    

    下载源码:

    mkdir -p ~/opencv_build && cd ~/opencv_build
    git clone [https://github.com/opencv/opencv.git](https://github.com/opencv/opencv.git)
    git clone [https://github.com/opencv/opencv_contrib.git](https://github.com/opencv/opencv_contrib.git)
    

    编译

    cd ~/opencv_build/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 OPENCV_GENERATE_PKGCONFIG=ON     -D OPENCV_EXTRA_MODULES_PATH=~/opencv_build/opencv_contrib/modules     -D BUILD_EXAMPLES=ON -D WITH_FFMPEG=ON ..
    make -j8
    sudo make install
    

    如果遇到卡顿,可以查看cmakedownloadlog 有可能是因为墙引起的部分资源下载404,可以翻墙后下载,然后放入对应目标下

    sudo ln -s /usr/local/lib64/pkgconfig/opencv4.pc /usr/share/pkgconfig/ 
    sudo ldconfig
    

    验证

    pkg-config --modversion opencv4
    

    问题2

    could not find feature2d/test/test_detectors_regression.impl.hpp
    

    cmake中没有包含modules路径导致的,此时修改cmakelists文件的567行,加入对应路径即可。

    vim opencv/CMakeLists.txt +567
    
    include_directories("modules")
    

    问题3

    opencv2/xfeatures2d.hpp file not found
    

    类似这种问题,都是对应文件中 #include 对应文件的路径是相对路径导致读取时出错,我们改成对应的绝对路径即可。

    vim ~/opencv_build/opencv_contrib/modules/xfeatures2d/include/opencv2/xfeatures2d.hpp + 42
    
    #include"~/opencv_build/opencv_contrib/modules/xfeatures2d/include/opencv2/xfeatures2d.hpp"
    
    

    问题4

    can't load image ........ Segmentation fault
    

    fix:这个问题是由于Windows下的换行符为 CRLF ,而Linux下是 LF,所以文件从Windows复制到服务器上后格式不匹配导致的,只需在Linux下重新生成对应的train.txt 即可

    Update:
    由于之前看到大凉山的森林火灾,内心总想着能做点什么,所以从网上找了一些开源的fire detection相关的数据和资料,处理了一下常识做了几版,结果看上去还是可以的。如果有更多清晰度更高的数据,效果应该能提升不少。希望有机会能为大凉山做点事吧。

    forest_test.jpg

    下面是完整的测试视频,由于数据全是低分辨率(244*244),所以可以在视频里看到对高清分辨率的视频有很多漏判和误判,所以下一步需要利用更多高分辨率的样本。
    火焰与烟雾识别

    相关文章

      网友评论

          本文标题:yolov4环境搭建与训练自己的数据集

          本文链接:https://www.haomeiwen.com/subject/uciaahtx.html