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

2020-05-28  本文已影响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),所以可以在视频里看到对高清分辨率的视频有很多漏判和误判,所以下一步需要利用更多高分辨率的样本。
火焰与烟雾识别

上一篇 下一篇

猜你喜欢

热点阅读