Paper Yolo v4:https://arxiv.org/abs/2004.10934
更多详细信息:http://pjreddie.com/darknet/yolo/
How to evaluate AP of YOLOv4 on the MS COCO evaluation server
yolov4.weights
file: https://drive.google.com/open?id=1cewMfusmPjYWbrnuJRuKhPMwRe_b9PaTcfg/coco.data
should beclasses= 80
train = /trainvalno5k.txt
valid = /testdev2017.txt
names = data/coco.names
backup = backup
eval=coco
/results/
folder near with ./darknet
executable file./darknet detector valid cfg/coco.data cfg/yolov4.cfg yolov4.weights
/results/coco_results.json
to detections_test-dev2017_yolov4_results.json
and compress it to detections_test-dev2017_yolov4_results.zip
detections_test-dev2017_yolov4_results.zip
to the MS COCO evaluation server for the test-dev2019 (bbox)
How to evaluate FPS of YOLOv4 on GPU
GPU=1 CUDNN=1 CUDNN_HALF=1 OPENCV=1
in the Makefile
(or use the same settings with Cmake)yolov4.weights
file 245 MB: yolov4.weights (Google-drive mirror yolov4.weights )./darknet detector demo cfg/coco.data cfg/yolov4.cfg yolov4.weights test.mp4 -dont_show -ext_output
./darknet detector demo cfg/coco.data cfg/yolov4.cfg yolov4.weights test.mp4 -benchmark
Pre-trained models
There are weights-file for different cfg-files (trained for MS COCO dataset):
FPS on RTX 2070 (R) and Tesla V100 (V):
yolov4.cfg - 245 MB: yolov4.weights (Google-drive mirror yolov4.weights ) paper Yolo v4 just change width=
and height=
parameters in yolov4.cfg
file and use the same yolov4.weights
file for all cases:
width=608 height=608
in cfg: 65.7% [email protected] (43.5% [email protected]:0.95) - 34(R) FPS / 62(V) FPS - 128.5 BFlopswidth=512 height=512
in cfg: 64.9% [email protected] (43.0% [email protected]:0.95) - 45(R) FPS / 83(V) FPS - 91.1 BFlopswidth=416 height=416
in cfg: 62.8% [email protected] (41.2% [email protected]:0.95) - 55(R) FPS / 96(V) FPS - 60.1 BFlopswidth=320 height=320
in cfg: 60% [email protected] ( 38% [email protected]:0.95) - 63(R) FPS / 123(V) FPS - 35.5 BFlopsyolov3-微小-prn.cfg - 33.1%[email protected] - 370(R)FPS - 3.5 BFlops - 18.8 MB:yolov3-微小-prn.weights
ENET-coco.cfg(EfficientNetB0-Yolov3) - 45.5%[email protected] - 55(R)FPS - 3.7 BFlops - 18.3 MB:enetb0-coco_final.weights
yolov3-openimages.cfg -247 MB-18(R)FPS-OpenImages数据集:yolov3-openimages.weights
单击我 -Yolo v3型号
单击我 -Yolo v2型号
放到编译后:darknet.exe
您可以通过以下路径获取cfg文件: darknet/cfg/
OpenCV_DIR
= C:\opencv\build
- include
和x64
文件夹图像)cudnn.h
,libcudnn.so
...如此处所述https://docs.nvidia.com/deeplearning/sdk/cudnn-install /index.html#installlinux-tar上的Windows拷贝cudnn.h
,cudnn64_7.dll
,cudnn64_7.lib
这里desribed https://docs.nvidia.com/deeplearning/sdk/cudnn-install/index.html#installwindows)其他框架中的Yolo v3
yolov3.weights
/ cfg
文件yolov3.ckpt
/ pb/meta
:使用mystic123或jinyu121项目,TensorFlow -精简版yolov3.weights
/ cfg
配合使用:C ++示例或Python示例Datasets
./scripts/get_coco_dataset.sh
to get labeled MS COCO detection datasetpython ./scripts/get_openimages_dataset.py
for labeling train detection datasetpython ./scripts/voc_label.py
用于标记Train / Test / Val检测数据集./scripts/get_imagenet_train.sh
(也imagenet_label.sh
用于标记有效集)结果示例
其他:https://www.youtube.com/user/pjreddie/videos
[conv_lstm]
/ conv-rnn层[crnn]
)以精确检测视频的功能[net] mixup=1 cutmix=1 mosaic=1 blur=1
。添加的激活:SWISH,MISH,NORM_CHAN,NORM_CHAN_SOFTMAXCUDNN_HALF
Makefile
darknet.sln
darknet detector demo
... 可以检测视频(文件/流)random=1
darknet detector map
...-map
在训练过程中添加了平均损耗和准确度mAP(标志)图表./darknet detector demo ... -json_port 8070 -mjpeg_port 8090
作为JSON和MJPEG服务器运行,以使用软件或Web浏览器通过网络在线获取结果并添加了手册- 如何训练Yolo v4-v2(以检测您的自定义对象)
另外,您可能对使用简化的存储库感兴趣,该存储库中已实现INT8量化(+ 30%的加速和-1%的mAP降低):https://github.com/AlexeyAB/yolo2_light
如何在命令行上使用
在Linux上,请使用./darknet
代替darknet.exe
,例如:./darknet detector test ./cfg/coco.data ./cfg/yolov4.cfg ./yolov4.weights
在Linux上./darknet
,在根目录中找到可执行文件,而在Windows上,在目录中找到可执行文件。\build\darknet\x64
darknet.exe detector test cfg/coco.data cfg/yolov4.cfg yolov4.weights -thresh 0.25
darknet.exe detector test cfg/coco.data yolov4.cfg yolov4.weights -ext_output dog.jpg
darknet.exe detector demo cfg/coco.data cfg/yolov4.cfg yolov4.weights -ext_output test.mp4
darknet.exe detector demo cfg/coco.data cfg/yolov4.cfg yolov4.weights -c 0
darknet.exe detector demo cfg/coco.data cfg/yolov4.cfg yolov4.weights http://192.168.0.80:8080/video?dummy=param.mjpg
darknet.exe detector demo cfg/coco.data cfg/yolov4.cfg yolov4.weights test.mp4 -out_filename res.avi
darknet.exe detector demo cfg/coco.data cfg/yolov3-tiny.cfg yolov3-tiny.weights test.mp4
ip-address:8070
和8090的多个连接:./darknet detector demo ./cfg/coco.data ./cfg/yolov3.cfg ./yolov3.weights test50.mp4 -json_port 8070 -mjpeg_port 8090 -ext_output
darknet.exe detector demo cfg/coco.data cfg/yolov3-tiny.cfg yolov3-tiny.weights -i 1 test.mp4
darknet.exe detect cfg/yolov4.cfg yolov4.weights -i 0 -thresh 0.25
http://ec2-35-160-228-91.us-west-2.compute.amazonaws.com:8090
在Chrome / Firefox中(Darknet应该使用OpenCV进行编译): ./darknet detector train cfg/coco.data yolov4.cfg yolov4.conv.137 -dont_show -mjpeg_port 8090 -map
darknet.exe detector test cfg/combine9k.data cfg/yolo9000.cfg yolo9000.weights
data/train.txt
并将检测结果保存到result.json
文件中,请使用: darknet.exe detector test cfg/coco.data cfg/yolov4.cfg yolov4.weights -ext_output -dont_show -out result.json < data/train.txt
data/train.txt
并保存检测结果以result.txt
供使用:darknet.exe detector test cfg/coco.data cfg/yolov4.cfg yolov4.weights -dont_show -ext_output < data/train.txt > result.txt
data/new_train.txt
并将检测结果以Yolo训练格式保存为每个图像作为标签.txt
(通过这种方式,您可以增加训练数据量)使用: darknet.exe detector test cfg/coco.data cfg/yolov4.cfg yolov4.weights -thresh 0.25 -dont_show -save_labels < data/new_train.txt
darknet.exe detector calc_anchors data/obj.data -num_of_clusters 9 -width 416 -height 416
darknet.exe detector map data/obj.data yolo-obj.cfg backup\yolo-obj_7000.weights
darknet.exe detector map data/obj.data yolo-obj.cfg backup\yolo-obj_7000.weights -iou_thresh 0.75
用于在任何Android智能手机上使用网络摄像机mjpeg-stream
下载Android手机mjpeg-stream soft:IP网络摄像头/ Smart WebCam
通过WiFi(通过WiFi路由器)或USB将Android手机连接到计算机
在手机上启动Smart WebCam
替换下面的地址,在电话应用程序(Smart WebCam)中显示并启动:
darknet.exe detector demo data/coco.data yolov4.cfg yolov4.weights http://192.168.0.80:8080/video?dummy=param.mjpg -i 0
cmake
)该CMakeLists.txt
将尝试查找已安装的可选依赖像CUDA,cudnn,ZED与那些身材。它还将创建一个共享对象库文件以darknet
用于代码开发。
在克隆的存储库中执行以下操作:
mkdir build-release
cd build-release
cmake ..
make
make install
make
)只需make
在darknet目录中即可。在制作之前,您可以在Makefile
:链接中设置此类选项。
GPU=1
使用CUDA进行构建以通过使用GPU加速(CUDA应该在中/usr/local/cuda
)CUDNN=1
使用cuDNN v5-v7进行构建,以通过使用GPU加速培训(cuDNN应该在中/usr/local/cudnn
)CUDNN_HALF=1
为Tensor Core构建(在Titan V / Tesla V100 / DGX-2及更高版本上)加速检测3倍,训练2倍OPENCV=1
使用OpenCV 4.x / 3.x / 2.4.x进行构建-允许检测来自网络摄像机或网络摄像机的视频文件和视频流DEBUG=1
调试Yolo版本OPENMP=1
使用OpenMP支持进行构建以通过使用多核CPU来加速YoloLIBSO=1
生成一个库darknet.so
和uselib
使用该库的二进制可运行文件。或者,您也可以尝试运行,LD_LIBRARY_PATH=./:$LD_LIBRARY_PATH ./uselib test.mp4
如何从自己的代码中使用此SO库-您可以查看C ++示例:https://github.com/AlexeyAB/darknet/blob/master/src/yolo_console_dll.cpp 或在这样的方式:LD_LIBRARY_PATH=./:$LD_LIBRARY_PATH ./uselib data/coco.names cfg/yolov4.cfg yolov4.weights test.mp4
ZED_CAMERA=1
构建具有ZED-3D摄像机支持的库(应安装ZED SDK),然后运行 LD_LIBRARY_PATH=./:$LD_LIBRARY_PATH ./uselib data/coco.names cfg/yolov4.cfg yolov4.weights zed_camera
要在Linux上运行Darknet,请使用本文提供的示例,只需使用./darknet
代替darknet.exe
,即使用以下命令:./darknet detector test ./cfg/coco.data ./cfg/yolov4.cfg ./yolov4.weights
CMake-GUI
)如果您已经安装了Visual Studio 2015/2017/2019,CUDA> 10.0,cuDNN> 7.0和OpenCV> 2.4,则这是在Windows上构建Darknet的推荐方法。
使用CMake-GUI
如下所示这个IMAGE:
vcpkg
)如果您已经安装了Visual Studio 2015/2017/2019,CUDA> 10.0,cuDNN> 7.0,OpenCV> 2.4,则要编译Darknet,建议使用 CMake-GUI。
否则,请按照下列步骤操作:
将Visual Studio安装或更新到至少2017版,并确保已对其进行全面修补(如果不确定是否自动更新到最新版本,请再次运行安装程序)。如果需要从头开始安装,请从此处下载VS:Visual Studio社区
安装CUDA和cuDNN
安装git
和cmake
。确保它们至少在当前帐户的路径上
安装vcpkg并尝试安装测试库以确保一切正常,例如vcpkg install opengl
定义环境变量,VCPKG_ROOT
指向的安装路径vcpkg
用名称VCPKG_DEFAULT_TRIPLET
和值定义另一个环境变量x64-windows
打开Powershell并键入以下命令:
PS \ > cd $ env: VCPKG_ROOT
PS代码\ vcpkg > 。\ vcpkg install pthreads opencv [ ffmpeg ] #如果您要使用cuda加速的openCV,请替换为opencv [cuda,ffmpeg]
darknet
文件夹并使用命令进行构建.\build.ps1
。如果要使用Visual Studio,将在构建后找到由CMake为您创建的两个自定义解决方案,一个在中build_win_debug
,另一个在中build_win_release
,其中包含系统的所有适当配置标志。C:\opencv_3.0\opencv\build\x64\vc14\lib;$(CUDA_PATH)\lib\$(PlatformName);$(CUDNN)\lib\x64;%(AdditionalLibraryDirectories)
..\..\3rdparty\lib\x64\pthreadVC2.lib;cublas.lib;curand.lib;cudart.lib;cudnn.lib;%(AdditionalDependencies)
OPENCV;_TIMESPEC_DEFINED;_CRT_SECURE_NO_WARNINGS;_CRT_RAND_S;WIN32;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions)
仅对于小型数据集,有时对于4个GPU集learning_rate = 0.00025
(例如,learning_rate = 0.001 / GPU)而言,降低学习率更好。在这种情况下burn_in =
,请max_batches =
在您的cfg文件中增加4倍的时间。即使用burn_in = 4000
代替1000
。steps=
如果policy=steps
设置相同。
https://groups.google.com/d/msg/darknet/NbJqonJBTSY/Te5PfIpuCAAJ
(培养老YOLO V2 yolov2-voc.cfg
,yolov2-tiny-voc.cfg
,yolo-voc.cfg
,yolo-voc.2.0.cfg
,... 通过链接点击)
培训Yolo v4(和v3):
因此,如果classes=1
应该filters=18
。如果classes=2
再写filters=21
。
(不要写在cfg文件中:filters =(classs + 5)x3)
(通常filters
取决于classes
,coords
和的数量mask
,即filters = (classes + coords + 1)*
,其中mask
是锚的索引。如果mask
不存在,则filters = (classes + coords + 1)*num
)
因此,例如,对于2个对象,您的文件yolo-obj.cfg
应该yolov4-custom.cfg
在3个 [yolo]层的每一层中均不同于以下行:
[convolutional]
filters=21
[region]
classes=2
classes= 2
train = data/train.txt
valid = data/test.txt
names = data/obj.names
backup = backup/
它将.txt
为.jpg
同一目录中具有相同名称但具有.txt
-extension的每个-image-file- 创建一个-file ,并将其放置到文件中:该图像上的对象编号和对象坐标,用于新行中的每个对象:
哪里:
例如,将为img1.jpg
您创建img1.txt
包含:
1 0.716797 0.395833 0.216406 0.147222
0 0.687109 0.379167 0.255469 0.158333
1 0.420312 0.395833 0.140625 0.166667
data/obj/img1.jpg
data/obj/img2.jpg
data/obj/img3.jpg
8.1。对于每4个纪元(设置valid=valid.txt
或train.txt
在obj.data
文件中)使用mAP(平均平均精度)计算进行训练并运行:darknet.exe detector train data/obj.data yolo-obj.cfg yolov4.conv.137 -map
注意:如果在训练过程中看到nan
“ avg
(损失)”字段的值-则训练有误,但如果出现nan
在其他行中-则训练进行得很好。
注意:如果您在cfg文件中更改了width =或height =,则新的宽度和高度必须被32整除。
注意:训练后,请使用以下命令进行检测:darknet.exe detector test data/obj.data yolo-obj.cfg yolo-obj_8000.weights
注意:如果Out of memory
发生错误,.cfg
则应在-file中增加subdivisions=16
32或64:链接
执行与上述完整yolo模型相同的所有步骤。除了:
如果您具有CUDA 10.0,cuDNN 7.4和OpenCV 3.x(路径:C:\opencv_3.0\opencv\build\include
&C:\opencv_3.0\opencv\build\x64\vc14\lib
),则打开build\darknet\darknet.sln
,设置x64并释放 https://hsto.org/webt/uh/fk/-e/uhfk-eb0q-hwd9hsxhrikbokd6u.jpeg并执行以下操作:构建->构建darknet。还要添加Windows系统变量CUDNN
以及CUDNN的路径:https://developer.nvidia.com/rdp/cudnn-archive
添加CUDNN
具有CUDNN路径的Windows系统变量:https://devblogs.nvidia.com/parallelforall/wp-content/uploads/ 2015/01 / VS2013-R-5.jpg
.c
档案.cu
档案http_stream.cpp
从\src
目录darknet.h
从\include
目录编译为.exe(X64&Release)并将.dll-s与.exe放在附近:https://hsto.org/webt/uh/fk/-e/uhfk-eb0q-hwd9hsxhrikbokd6u.jpeg
pthreadVC2.dll, pthreadGC2.dll
来自\ 3rdparty \ dll \ x64
cusolver64_91.dll, curand64_91.dll, cudart64_91.dll, cublas64_91.dll
-91(对于CUDA 9.1或您的版本),来自C:\ Program Files \ NVIDIA GPU Computing Toolkit \ CUDA \ v9.1 \ bin
对于OpenCV的3.2:opencv_world320.dll
与opencv_ffmpeg320_64.dll
从C:\opencv_3.0\opencv\build\x64\vc14\bin
对于OpenCV的2.4.13: opencv_core2413.dll
,opencv_highgui2413.dll
并opencv_ffmpeg2413_64.dll
从 C:\opencv_2.4.13\opencv\build\x64\vc14\bin
首先在1个GPU上进行约1000次迭代的训练: darknet.exe detector train cfg/coco.data cfg/yolov4.cfg yolov4.conv.137
然后停止并通过使用部分训练的模型/backup/yolov4_1000.weights
运行训练来进行multigpu(最多4个GPU):darknet.exe detector train cfg/coco.data cfg/yolov4.cfg /backup/yolov4_1000.weights -gpus 0,1,2,3
要进行培训,请cfg/yolov4-custom.cfg
下载预训练的权重文件(162 MB):yolov4.conv.137(Google驱动器镜像yolov4.conv.137)
创建yolo-obj.cfg
内容与中相同的文件yolov4-custom.cfg
(或复制yolov4-custom.cfg
到yolo-obj.cfg)
和:
batch=64
subdivisions=16
classes*2000
但不小于4000
),max_batches=6000
如果您训练3节课,则更改为festeps=4800,5400
width=416 height=416
或任何32的值的倍数:https://github.com/AlexeyAB/darknet/blob/0039fd26786ab5f71d5af725fc18b3f521e7acfd/cfg/yolov3.cfg#L8-L9classes=80
为3 [yolo]
层中每层的对象数:
filters=255
] 更改为[convolutional]
每层前3个中的filter =(classs + 5)x3 [yolo]
,请记住,它只需是[convolutional]
每个[yolo]
层之前的最后一个。
[Gaussian_yolo]
层,改变[ filters=57
]过滤器=(类+ 9)X3在3 [convolutional]
每个前[Gaussian_yolo]
层
obj.names
在目录中创建文件build\darknet\x64\data\
,并带有对象名称-每个都在新行中
obj.data
在目录中创建文件build\darknet\x64\data\
,其中包含(其中class =对象数):
将对象的图像文件(.jpg)放在目录中 build\darknet\x64\data\obj\
您应该在数据集中的图像上标记每个对象。使用此可视化GUI软件来标记对象的边界框并为Yolo v2和v3生成注释文件:https://github.com/AlexeyAB/Yolo_mark
-从0
到的整数对象编号(classes-1)
-浮动值相对于图片的宽度和高度,可以等于(0.0 to 1.0]
= /
或 = /
-矩形的中心(不是左上角)train.txt
在directory中创建文件build\darknet\x64\data\
,其中包含图像的文件名,每个文件名都换行,并具有相对于的路径darknet.exe
,例如,包含:下载卷积层的预训练权重并放置到目录中 build\darknet\x64
yolov4.cfg
,yolov4-custom.cfg
(162 MB):yolov4.conv.137(谷歌驱动镜yolov4.conv.137)csresnext50-panet-spp.cfg
(133 MB):csresnext50-panet-spp.conv.112yolov3.cfg, yolov3-spp.cfg
(154 MB):darknet53.conv.74yolov3-tiny-prn.cfg , yolov3-tiny.cfg
(6 MB):yolov3-tiny.conv.11enet-coco.cfg (EfficientNetB0-Yolov3)
(14 MB):enetb0-coco.conv.132使用命令行开始培训: darknet.exe detector train data/obj.data yolo-obj.cfg yolov4.conv.137
要在Linux上训练,请使用以下命令:(./darknet detector train data/obj.data yolo-obj.cfg yolov4.conv.137
仅使用./darknet
代替darknet.exe
)
yolo-obj_last.weights
将保存到中build\darknet\x64\backup\
)yolo-obj_xxxx.weights
将保存到中build\darknet\x64\backup\
)darknet.exe detector train data/obj.data yolo-obj.cfg yolov4.conv.137 -dont_show
如果您在没有监视器的计算机(如云Amazon EC2)上进行训练,则可以禁用Loss-Window的使用)darknet.exe detector train data/obj.data yolo-obj.cfg yolov4.conv.137 -dont_show -mjpeg_port 8090 -map
然后http://ip-address:8090
在Chrome / Firefox浏览器中打开URL )yolo-obj_final.weights
从路径中获取结果build\darknet\x64\backup\
每进行100次迭代后,您可以停止,然后从这一点开始训练。例如,经过2000次迭代后,您可以停止训练,之后再开始使用以下方法开始训练:darknet.exe detector train data/obj.data yolo-obj.cfg backup\yolo-obj_2000.weights
(在原始存储库https://github.com/pjreddie/darknet中,权重文件每1万次迭代仅保存一次if(iterations > 1000)
)
同样,您可以比所有45000次迭代更早地获得结果。
通常,每个类(对象)需要进行2000次迭代,但总计不少于4000次迭代。但是对于何时停止训练的更精确定义,请使用以下手册:
区域平均IOU:0.798363,类:0.893232,对象:0.700808,无对象:0.004567,平均调用率:1.000000,计数:8区域平均IOU:0.800677,类:0.892181,对象:0.701590,无对象:0.004574,平均调用率:1.000000 ,数:8
9002:0.211667,0.60730 平均,0.001000速率,3.868000秒,576128图像加载:0.000000秒
当您发现平均损失0.xxxxxx平均不再在许多次迭代中减少时,您应该停止训练。最终平均损失可能从0.05
(对于小模型和简单数据集)到3.0
(对于大模型和困难数据集)。
.weights
从中提取一些最后的文件,darknet\build\darknet\x64\backup
并从中选择最好的文件:例如,您在9000次迭代后停止了训练,但最佳结果可以给出以前的权重之一(7000、8000、9000)。可能由于过度拟合而发生。过度拟合 -这种情况是您可以从训练数据集中检测图像上的对象,但无法检测其他图像上的对象。您应该从Early Stopping Point获得权重:
要从早期停止点获取权重:
2.1。首先,obj.data
您必须在文件中指定验证数据集的路径valid = valid.txt
(格式valid.txt
为中的train.txt
),如果您没有验证图片,则只需复制data\train.txt
到即可data\valid.txt
。
2.2如果在9000次迭代后停止训练,要验证以前的权重,请使用以下命令:
(如果您使用另一个GitHub存储库,请使用darknet.exe detector recall
...而不是darknet.exe detector map
...)
darknet.exe detector map data/obj.data yolo-obj.cfg backup\yolo-obj_7000.weights
darknet.exe detector map data/obj.data yolo-obj.cfg backup\yolo-obj_8000.weights
darknet.exe detector map data/obj.data yolo-obj.cfg backup\yolo-obj_9000.weights
每个权重(7000、8000、9000)的comapre最后输出线:
选择具有最高mAP(平均平均精度)或IoU(与联合相交)的权重文件
例如,较大的mAP会赋予权重yolo-obj_8000.weights
-然后使用此权重进行检测。
或者只是用-map
国旗训练:
darknet.exe detector train data/obj.data yolo-obj.cfg yolov4.conv.137 -map
因此,您将在“损失图”窗口中看到“ mAP图”(红线)。将使用valid=valid.txt
文件中指定的obj.data
文件(1 Epoch = images_in_train_txt / batch
迭代)为每个4个时期计算mAP
(将3类的最大x轴值更改max_batches=
为2000*classes
-fe max_batches=6000
)
自定义对象检测的示例: darknet.exe detector test data/obj.data yolo-obj.cfg yolo-obj_8000.weights
IoU(联合上方的相交)-物体联合上方的平均insectect和检测到的某个阈值= 0.24
mAP(平均平均精度)- average precisions
每个类别的average precision
平均值,其中是同一类别的每个可能阈值(每个检测概率)的PR曲线上11点的平均值(以PascalVOC表示的Precision-Recall,其中Precision = TP /(TP + FP)和Recall = TP /(TP + FN)),第11页:http://homepages.inf.ed.ac.uk/ckiw/postscript/ijcv_voc09.pdf
mAP是PascalVOC竞赛中默认的精度指标,与MS COCO竞赛中的AP50指标相同。在Wiki方面,指标Precision和Recall的含义与PascalVOC竞赛中的含义略有不同,但是IoU 始终具有相同的含义。
自定义对象检测的示例: darknet.exe detector test data/obj.data yolo-obj.cfg yolo-obj_8000.weights
random=1
在.cfg
-file文件中设置标志-通过训练Yolo不同的分辨率,它将提高精度:链接
提高您的网络分辨率.cfg
-file( height=608
,width=608
或32任何价值倍数) -它会增加精度
检查您要检测的每个对象是否在数据集中被强制标记-数据集中的任何对象都不应没有标签。在大多数培训问题中-数据集中有错误的标签(通过使用某些转换脚本,使用第三方工具标记的标签来获得标签,...)。始终使用以下方法检查数据集:https://github.com/AlexeyAB/Yolo_mark
我的损失非常高,而mAP却很低,训练错了吗? -show_imgs
在training命令的末尾运行带有flag的训练,您是否看到正确的有界对象框(在Windows或文件中aug_...jpg
)?如果否-您的训练数据集有误。
对于您要检测的每个对象-训练数据集中必须至少有一个相似的对象,且它们具有大致相同的形状:形状,对象的侧面,相对大小,旋转角度,倾斜度,照明度。希望训练数据集包含不同对象的图像:比例,旋转,照明,不同侧面,不同背景的图像-每个班级或以上,您最好拥有2000张不同的图像,并且您应训练2000*classes
迭代或更多次
希望您的训练数据集包含带有您不想检测的未标记对象的图像-无边界框的负样本(空.txt
文件)-使用与带有对象的图像一样多的负样本图像
标记对象的最佳方法是:仅标记对象的可见部分,或标记对象的可见和重叠部分,或标记比整个对象多一点(有一点间隙)?随心所欲标记-您希望如何检测它。
要在每个图像中使用大量对象进行训练,请在cfg文件max=200
的最后[yolo]
一层或最后一层中添加参数或更高的值[region]
(YoloV3可以检测到的全局最大对象数0,0615234375*(width*height)
是宽度和高度是[net]
cfg文件中部分的参数)
用于训练小对象(将图像调整为416x416后小于16x16)-设置layers = 23
为https://github.com/AlexeyAB/darknet/blob/6f718c257815a984253346bba8fb7aa756c55090/cfg/yolov4.cfg#L895 设置stride=4
为https:// /github.com/AlexeyAB/darknet/blob/6f718c257815a984253346bba8fb7aa756c55090/cfg/yolov4.cfg#L892 并设置stride=4
为https://github.com/AlexeyAB/darknet/blob/6f718c257815a984253346bba8fb7aa756c55090/cfg/yolov4。
对于小型和大型对象的训练,请使用修改后的模型:
一般规则-您的训练数据集应包括一组要检测的相对大小的对象:
train_network_width * train_obj_width / train_image_width ~= detection_network_width * detection_obj_width / detection_image_width
train_network_height * train_obj_height / train_image_height ~= detection_network_height * detection_obj_height / detection_image_height
即,对于Test数据集中的每个对象,Training数据集中必须至少有1个对象具有相同的class_id和大约相同的相对大小:
object width in percent from Training dataset
?= object width in percent from Test dataset
也就是说,如果训练集中仅存在占图像80-90%的对象,则受训练的网络将无法检测到占图像1-10%的对象。
加快训练速度(降低检测精度)stopbackward=1
在cfg文件中为第136层设置参数
每个:model of object, side, illimination, scale, each 30 grad
转角和倾斜角- 从神经网络的内部角度来看,它们是不同的对象。因此,要检测的对象越不同,应使用越复杂的网络模型。
为了使检测到的边界框更准确,您可以ignore_thresh = .9 iou_normalizer=0.5 iou_loss=giou
在每个[yolo]
图层上添加3个参数并进行训练,它将增加[email protected],但减少[email protected]。
仅当您是神经检测网络专家时-才为cfg文件width
和height
从cfg文件重新计算数据集的锚点: darknet.exe detector calc_anchors data/obj.data -num_of_clusters 9 -width 416 -height 416
然后在cfg文件anchors
的3 [yolo]
层中的每一个中设置相同的9 。但是,您应该masks=
为每个[yolo]层更改锚点的索引,以使第一[yolo]层的锚点大于60x60,第二个层大于30x30,剩下的第三个层。同样,您应该filters=(classes + 5)*
在每个[yolo]层之前更改。如果许多计算出的锚不适合在适当的图层下-则只需尝试使用所有默认锚即可。
通过在.cfg
-file(height=608
和width=608
)或(height=832
和width=832
)或(32的任何值)中设置来提高网络分辨率-这可以提高精度并可以检测小对象:link
.weights
已针对416x416分辨率进行训练的-fileOut of memory
发生错误,.cfg
则应在-file文件中增加subdivisions=16
,32或64:链接在这里,您可以找到带有GUI软件的存储库,用于标记对象的有界框并为Yolo v2-v4生成注释文件:https://github.com/AlexeyAB/Yolo_mark
与示例的:train.txt
,obj.names
,obj.data
,yolo-obj.cfg
,air
1-6 .txt
,bird
1-4 .txt
为2类的对象(空气,鸟)和train_obj.cmd
与实施例如何培养这个图像组具有YOLO V2 - V4
在图像中标记对象的不同工具:
同时检测和分类9000个对象: darknet.exe detector test cfg/combine9k.data cfg/yolo9000.cfg yolo9000.weights data/dog.jpg
yolo9000.weights
-(186 MB Yolo9000型号)需要4 GB GPU-RAM:http://github.com/AlexeyAB/darknet/blob/master/include/darknet.h
C ++ API:https://github.com/AlexeyAB/darknet/blob/master/include/yolo_v2_class.hpp
要将Yolo编译为C ++ DLL文件yolo_cpp_dll.dll
-打开解决方案build\darknet\yolo_cpp_dll.sln
,设置x64和Release,然后执行以下操作:Build-> Build yolo_cpp_dll
CUDNN;
要将Yolo用作C ++控制台应用程序中的DLL文件,请打开解决方案build\darknet\yolo_console_dll.sln
,设置x64和Release,然后执行以下操作:构建->构建yolo_console_dll
您可以build\darknet\x64\yolo_console_dll.exe
使用以下命令从Windows资源管理器运行控制台应用程序:yolo_console_dll.exe data/coco.names yolov4.cfg yolov4.weights test.mp4
启动控制台应用程序并输入图像文件名后,您将看到每个对象的信息:
要使用简单的OpenCV-GUI,您应该//#define OPENCV
在yolo_console_dll.cpp
-file:链接中取消注释行
您可以在视频文件上看到用于检测的简单示例的源代码:链接
yolo_cpp_dll.dll
-API:链接
struct bbox_t {
unsigned int x, y, w, h; // (x,y) - top-left corner, (w, h) - width & height of bounded box
float prob; // confidence - probability that the object was found correctly
unsigned int obj_id; // class of object - from range [0, classes-1]
unsigned int track_id; // tracking id for video (0 - untracked, 1 - inf - tracked object)
unsigned int frames_counter;// counter of frames on which the object was detected
};
class Detector {
public:
Detector(std::string cfg_filename, std::string weight_filename, int gpu_id = 0);
~Detector();
std::vector detect(std::string image_filename, float thresh = 0.2, bool use_mean = false);
std::vector detect(image_t img, float thresh = 0.2, bool use_mean = false);
static image_t load_image(std::string image_filename);
static void free_image(image_t m);
#ifdef OPENCV
std::vector detect(cv::Mat mat, float thresh = 0.2, bool use_mean = false);
std::shared_ptr mat_to_image_resize(cv::Mat mat) const;
#endif
};