yolov4出來(lái)后梭域,簡(jiǎn)單做下測(cè)試斑举,看到結(jié)果還是相當(dāng)給力的。
注意看中間有個(gè)被遮擋的馬病涨,在yolov3中是檢測(cè)不到的富玷,yolov4中檢測(cè)出來(lái)了,精度確實(shí)提升了既穆。
那再來(lái)測(cè)試一下速度赎懦,測(cè)試視頻發(fā)在b站上了。
yolov4 test
速度也是很給力的幻工。
那這么好的東西励两,當(dāng)然要自己試試了,接下來(lái)用自己的數(shù)據(jù)訓(xùn)練測(cè)試一下囊颅。
實(shí)驗(yàn)環(huán)境:
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加速訓(xùn)練
CUDNN = 1 #使用cudnn加速訓(xùn)練
CUDNN_HALF = 1 # 針對(duì) Titan V / Tesla V100 / DGX-2 and later的優(yōu)化傅瞻,能加速檢測(cè)與訓(xùn)練
OPENCV = 1 #使用opencv ,以允許對(duì)視頻文件/網(wǎng)絡(luò)攝像頭進(jìn)行處理
OPENMP = 1 # 使用openmp盲憎,以針對(duì)多核cpu進(jìn)行加速
然后運(yùn)行 make
不出錯(cuò)則說(shuō)明darknet已編譯成功
訓(xùn)練:
進(jìn)入darknet/build/darknet/x64目錄
1.下載pre-train weights文件yolov4.conv.137
2.創(chuàng)建config文件
cp cfg/yolov4-custom.cfg yolov4-obj.cfg
vim yolov4-obj.cfg
batch_size = 64 # batch size
subdivisions=32 #每個(gè)batch分多少批嗅骄,如果內(nèi)存不足,可以調(diào)大此參數(shù)
max_batches = 6000 # 最小取6000饼疙,設(shè)置為 classes_num * 2000
steps = 4800, 5400 # 設(shè)置為max_bacthes的80% 和90%
width = 412
height = 412 # 32的倍數(shù)溺森,主要也是為了解決顯存不足
classes = 1 # 修改三個(gè) [yolo] 層的 classes參數(shù)
filters = 18 # 修改【yolo】層前面的[convolutional]中的filters, filters=(classes + 5) * 3
3.創(chuàng)建obj.name文件
vim data/obj.name
waterdrop
4.創(chuàng)建obj.data文件
vim data/obj.data
classes= 1
train = data/train.txt
valid = data/test.txt
names = data/obj.names
backup = backup/
5.將所有的圖片和標(biāo)注文件放入data/obj目標(biāo)下,并創(chuàng)建classes.txt文件窑眯,里面寫(xiě)上classes的數(shù)量
6.創(chuàng)建train.txt文件
vim data/train.txt
data/obj/img1.jpg
data/obj/img2.jpg
...
7.創(chuàng)建test.txt文件屏积,此時(shí)我們簡(jiǎn)單用train.txt
cp data/train.txt data/test.txt
8.訓(xùn)練
../../../darknet detector train data/obj.data yolo-obj.cfg yolov4.conv.137 -dont_show -mjpeg_port 8090 -map
實(shí)驗(yàn)結(jié)果:
可以看到,結(jié)果還是相當(dāng)給力的磅甩!范圍與精度都很不錯(cuò)炊林。
可能遇到的問(wèn)題與解決辦法:
問(wèn)題1
video stream stopped!
fix: 卸載opencv,通過(guò)源碼重新編譯更胖,編譯時(shí)將FFmpeg一起編譯
- FFmpeg
需要將opencv與FFmpeg一起編譯铛铁,所以首先要卸載原來(lái)的opencv
進(jìn)入opencv安裝目錄隔显,
sudo make uninstall
cd .. rm -Rf build
cd /usr find . -name "*opencv*" | xargs sudo rm -rf
yum remove opencv-data python-opencv
運(yùn)行 pkg-config --modversion opencv却妨,沒(méi)有則顯示卸載完成
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
驗(yàn)證:
ffmpeg -version
加入環(huán)境變量:
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 有可能是因?yàn)閴σ鸬牟糠仲Y源下載404括眠,可以翻墻后下載彪标,然后放入對(duì)應(yīng)目標(biāo)下
sudo ln -s /usr/local/lib64/pkgconfig/opencv4.pc /usr/share/pkgconfig/
sudo ldconfig
驗(yàn)證
pkg-config --modversion opencv4
問(wèn)題2
could not find feature2d/test/test_detectors_regression.impl.hpp
cmake中沒(méi)有包含modules路徑導(dǎo)致的,此時(shí)修改cmakelists文件的567行,加入對(duì)應(yīng)路徑即可掷豺。
vim opencv/CMakeLists.txt +567
include_directories("modules")
問(wèn)題3
opencv2/xfeatures2d.hpp file not found
類似這種問(wèn)題捞烟,都是對(duì)應(yīng)文件中 #include 對(duì)應(yīng)文件的路徑是相對(duì)路徑導(dǎo)致讀取時(shí)出錯(cuò),我們改成對(duì)應(yīng)的絕對(duì)路徑即可当船。
vim ~/opencv_build/opencv_contrib/modules/xfeatures2d/include/opencv2/xfeatures2d.hpp + 42
#include"~/opencv_build/opencv_contrib/modules/xfeatures2d/include/opencv2/xfeatures2d.hpp"
問(wèn)題4
can't load image ........ Segmentation fault
fix:這個(gè)問(wèn)題是由于Windows下的換行符為 CRLF ,而Linux下是 LF题画,所以文件從Windows復(fù)制到服務(wù)器上后格式不匹配導(dǎo)致的,只需在Linux下重新生成對(duì)應(yīng)的train.txt 即可
Update:
由于之前看到大涼山的森林火災(zāi)德频,內(nèi)心總想著能做點(diǎn)什么苍息,所以從網(wǎng)上找了一些開(kāi)源的fire detection
相關(guān)的數(shù)據(jù)和資料,處理了一下常識(shí)做了幾版壹置,結(jié)果看上去還是可以的竞思。如果有更多清晰度更高的數(shù)據(jù),效果應(yīng)該能提升不少钞护。希望有機(jī)會(huì)能為大涼山做點(diǎn)事吧盖喷。
下面是完整的測(cè)試視頻,由于數(shù)據(jù)全是低分辨率(244*244)难咕,所以可以在視頻里看到對(duì)高清分辨率的視頻有很多漏判和誤判课梳,所以下一步需要利用更多高分辨率的樣本距辆。
火焰與煙霧識(shí)別