适用于Windows和Linux的Yolo-v3和Yolo-v2(上)
https://github.com/eric-erki/darknetAB
(用于对象检测的神经网络)-Tensor Cores可以在Linux和Windows上使用
更多详细信息:http : //pjreddie.com/darknet/yolo/
1. 此存储库中的改进
2. 如何使用
3. 如何在Linux上编译
o 使用cmake
o 使用make
4. 如何在Windows上编译
o 使用vcpkg
o 传统方式
9. 什么时候应该停止训练
11. 如何改善物体检测
13. 如何将Yolo用作DLL和SO库
mAP@0.5(AP50)-FPS(GeForce 1080 Ti)https://arxiv.org/abs/1911.11929https://github.com/WongKinYiu/CrossStagePartialNetworks-更多型号
预训练模型
不同的cfg文件有权重文件(针对MS COCO数据集进行了训练):
GeForce 1080Ti上的FPS:
单击 -Yolo v3型号
单击 -Yolo v2型号
放到附近编译:darknet.exe
可以通过以下路径获取cfg文件: darknet/cfg/
要求
在其框架中的Yolo v3
数据集
结果示例
Others: https://www.youtube.com/user/pjreddie/videos
此存储库中的改进
并添加了手册- 如何训练Yolo v3 / v2(以检测自定义对象)
另外,可能对使用简化的存储库感兴趣,该存储库中已实现INT8量化(+ 30%的加速和-1%的mAP降低): https://github.com/AlexeyAB/yolo2_light
如何在命令行上使用
在Linux上,请使用./darknet代替darknet.exe,例如:./darknet detector test ./cfg/coco.data ./cfg/yolov3.cfg ./yolov3.weights
在Linux上./darknet,在根目录中找到可执行文件,而在Windows上,在目录中找到可执行文件。\build\darknet\x64
Yolo v3 COCO- 图片:darknet.exe detector test cfg/coco.data cfg/yolov3.cfg yolov3.weights -thresh 0.25
输出对象的坐标:darknet.exe detector test cfg/coco.data yolov3.cfg yolov3.weights -ext_output dog.jpg
Yolo v3 COCO- 视频:darknet.exe detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights -ext_output test.mp4
Yolo v3 COCO- WebCam 0:darknet.exe detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights -c 0
用于网络摄像机的 Yolo v3 COCO-智能网络摄像头:darknet.exe detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights http://192.168.0.80:8080/video?dummy=param.mjpg
Yolo v3-保存结果视频文件res.avi:darknet.exe detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights test.mp4 -out_filename res.avi
Yolo v3 Tiny COCO-视频:darknet.exe detector demo cfg/coco.data cfg/yolov3-tiny.cfg yolov3-tiny.weights test.mp4
允许来自软件浏览器或Web浏览器ip-address:8070和8090的多个连接的JSON和MJPEG服务器:./darknet detector demo ./cfg/coco.data ./cfg/yolov3.cfg ./yolov3.weights test50.mp4 -json_port 8070 -mjpeg_port 8090 -ext_output
GPU#1上的 Yolo v3 Tiny :darknet.exe detector demo cfg/coco.data cfg/yolov3-tiny.cfg yolov3-tiny.weights -i 1 test.mp4
替代方法Yolo v3 COCO-图片: darknet.exe detect cfg/yolov3.cfg yolov3.weights -i 0 -thresh 0.25
在Amazon EC2上进行训练,以使用URL来查看mAP和损失图,例如:http://ec2-35-160-228-91.us-west-2.compute.amazonaws.com:8090在Chrome / Firefox中(Darknet应该使用OpenCV进行编译): ./darknet detector train cfg/coco.data yolov3.cfg darknet53.conv.74 -dont_show -mjpeg_port 8090 -map
186 MB Yolo9000-图片: darknet.exe detector test cfg/combine9k.data cfg/yolo9000.cfg yolo9000.weights
如果使用cpp api构建应用程序,请记住将data / 9k.tree和data / coco9k.map放在应用程序的同一文件夹下
要处理图像列表data/train.txt并将检测结果保存到result.json文件中,请使用: darknet.exe detector test cfg/coco.data cfg/yolov3.cfg yolov3.weights -ext_output -dont_show -out result.json < data/train.txt
处理图像列表data/train.txt并保存检测结果以result.txt供使用:
darknet.exe detector test cfg/coco.data
cfg/yolov3.cfg yolov3.weights -dont_show -ext_output < data/train.txt
> result.txt
伪标记-处理图像列表data/new_train.txt并将检测结果以Yolo训练格式保存为每个图像作为标签
-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
要检查准确性mAP @ IoU = 50: darknet.exe detector map data/obj.data
yolo-obj.cfg backup\yolo-obj_7000.weights
要检查准确性mAP @ IoU = 75: darknet.exe detector map data/obj.data
yolo-obj.cfg backup\yolo-obj_7000.weights -iou_thresh 0.75
用于在任何Android智能手机上使用网络摄像机mjpeg-stream
1. 下载Android手机mjpeg-stream
soft:IP网络摄像头/ Smart WebCam
o
智能网络摄像头-最好:https : //play.google.com/store/apps/details? id =com.acontech.android.SmartWebCam2
o
IP网络摄像头:https : //play.google.com/store/apps/details?id=com.pas.webcam
2. 通过WiFi(通过WiFi路由器)或USB将Android手机连接到计算机
3. 在手机上启动Smart WebCam
4. 替换下面的地址,在电话应用程序(Smart WebCam)中显示并启动:
如何在Linux上编译(使用cmake)
该CMakeLists.txt将尝试查找已安装的可选依赖像CUDA,cudnn,ZED与编译构建。还将创建一个共享对象库文件以darknet用于代码开发。
在克隆的存储库中执行以下操作:
mkdir build-release
cd build-release
cmake ..
make
make install
如何在Linux上编译(使用make)
只需make在darknet目录中进行即可。在制作之前,可以在Makefile:链接中设置此类选项
要在Linux上运行Darknet,请使用本文提供的示例,只需使用./darknet代替darknet.exe,即使用以下命令:./darknet detector
test ./cfg/coco.data ./cfg/yolov3.cfg ./yolov3.weights
如何在Windows上编译(使用CMake-GUI)
如果已经安装了Visual Studio
2015/2017/2019,CUDA> 10.0,cuDNN> 7.0和OpenCV> 2.4,则这是在Windows上构建Darknet的推荐方法。
使用CMake-GUI如下所示这个IMAGE:
1.
配置
2.
发电机的可选平台(设置:x64)
3.
完成
4.
生成
5.
打开工程
6.
设置:x64和发行版
7.
建立
8.
建立解决方案
如何在Windows上编译(使用vcpkg)
如果已经安装了Visual Studio
2015/2017/2019,CUDA> 10.0,cuDNN> 7.0,OpenCV> 2.4,则要编译Darknet,建议使用 CMake-GUI。
否则,请按照下列步骤操作:
1. 将Visual Studio安装或更新到至少2017版,并确保已对其进行完全修补(如果不确定是否自动更新到最新版本,请再次运行安装程序)。如果需要从头开始安装,请从此处下载VS:Visual Studio社区
2. 安装CUDA和cuDNN
3. 安装git和cmake。确保至少在当前帐户的路径上
4. 安装vcpkg并尝试安装测试库以确保一切正常,例如vcpkg install opengl
5. 定义环境变量,VCPKG_ROOT指向的安装路径vcpkg
6. 用名称VCPKG_DEFAULT_TRIPLET和值定义另一个环境变量x64-windows
7. 打开Powershell并键入以下命令:
8. PS \> cd $env:VCPKG_ROOT
9. PS Code\vcpkg> .\vcpkg install pthreads opencv[ffmpeg] #replace with opencv[cuda,ffmpeg] in case you want to use cuda-accelerated openCV
8. 打开Powershell,转到darknet文件夹并使用命令进行构建.\build.ps1。如果要使用Visual Studio,将在构建后找到CMake为创建的两个自定义解决方案,一个在中build_win_debug,另一个在中build_win_release,其中包含适用于系统的所有配置标志。
如何在Windows上编译(旧版方式)
1. 如果具有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 ://user-images.githubusercontent.com/4096485/53249764-019ef880-36ca-11e9-8ffe-d9cf47e7e462.jpg
1.1. 查找文件opencv_world320.dll和opencv_ffmpeg320_64.dll(或opencv_world340.dll和opencv_ffmpeg340_64.dll)C:\opencv_3.0\opencv\build\x64\vc14\bin并放在附近darknet.exe
1.2. 检查是否存在bin和include文件夹C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0,然后从安装CUDA的路径将复制到此文件夹
1.3. 要安装CUDNN(加速神经网络),请执行以下操作:
o 下载并安装CUD 10.0的cuDNN v7.4.1:https://developer.nvidia.com/rdp/cudnn-archive
o 添加CUDNN具有CUDNN路径的Windows系统变量:https ://user-images.githubusercontent.com/4096485/53249764-019ef880-36ca-11e9-8ffe-d9cf47e7e462.jpg
o 将文件复制cudnn64_7.dll到\build\darknet\x64附近的文件夹darknet.exe
1.4. 如果要在没有CUDNN的情况下进行构建,请:打开\darknet.sln->(右键单击项目)->属性-> C / C ++->预处理程序->预处理程序定义,然后删除:CUDNN;
2. 如果有其版本的CUDA(不是10.0)build\darknet\darknet.vcxproj,请使用记事本打开,用“ CUDA 10.0”找到2个位置,并将其更改为CUDA版本。然后打开\darknet.sln->(右键单击项目)->属性-> CUDA C / C ++->设备,然后将其删除;compute_75,sm_75。然后执行步骤1
3. 如果没有GPU,但是拥有OpenCV 3.0(路径:C:\opencv_3.0\opencv\build\include&C:\opencv_3.0\opencv\build\x64\vc14\lib),则打开build\darknet\darknet_no_gpu.sln,设置x64和Release,然后执行以下操作:Build-> Build darknet_no_gpu
4. 如果使用的是OpenCV 2.4.13而不是3.0,则应在\darknet.sln打开后更改路径
4.1(右键单击项目)->属性-> C / C ++->常规->其包含目录: C:\opencv_2.4.13\opencv\build\include
4.2(右键单击项目)->属性->链接器->常规->其库目录: C:\opencv_2.4.13\opencv\build\x64\vc14\lib
5. 如果带有Tensor内核的GPU(nVidia Titan V / Tesla V100 / DGX-2及更高版本)加速检测3倍,训练2倍:\darknet.sln->(右键单击项目)->属性-> C / C ++->预处理程序->预处理程序定义,并在此处添加:CUDNN_HALF;
注意:仅在安装Visual Studio之后,才必须安装CUDA。
如何编译(自定义):
另外,可以为CUDA 9.1和OpenCV 3.0 创建自己的darknet.sln&darknet.vcxproj例子
然后添加到创建的项目中:
C:\opencv_3.0\opencv\build\include;..\..\3rdparty\include;
%(AdditionalIncludeDirectories);
$(CudaToolkitIncludeDir);$(CUDNN)\include
(右键单击项目)->构建依赖关系->构建自定义->设置CUDA 9.1或拥有的版本的设置-例如,如下所示:http : //devblogs.nvidia.com/parallelforall/wp-content/uploads/ 2015/01 / VS2013-R-5.jpg
添加到项目:
所有.c文件
所有.cu文件
文件http_stream.cpp从\src目录
文件darknet.h从\include目录
(右键单击项目)->属性->链接器->常规->其库目录,放在这里:
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)
编译为.exe(X64和Release)并使用.exe将.dll-s放在附近: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
训练方法(Pascal VOC资料):
1. 下载卷积层的预训练权重(154 MB):http : //pjreddie.com/media/files/darknet53.conv.74并放入目录build\darknet\x64
2. 下载Pascal VOC数据并将其解压缩到目录中,build\darknet\x64\data\voc将创建dir build\darknet\x64\data\voc\VOCdevkit\:
o
http://pjreddie.com/media/files/VOCtrainval_11-May-2012.tar
o
http://pjreddie.com/media/files/VOCtrainval_06-Nov-2007.tar
o
http://pjreddie.com/media/files/VOCtest_06-Nov-2007.tar
2.1将文件下载voc_label.py到dir build\darknet\x64\data\voc:http : //pjreddie.com/media/files/voc_label.py
3. 下载并安装适用于Windows的Python:https://www.python.org/ftp/python/3.5.2/python-3.5.2-amd64.exe
4. 运行命令:(python
build\darknet\x64\data\voc\voc_label.py生成文件:2007_test.txt,2007_train.txt,2007_val.txt,2012_train.txt,2012_val.txt)
5. 运行命令: type 2007_train.txt
2007_val.txt 2012_*.txt > train.txt
6. 设置batch=64并subdivisions=8在文件中yolov3-voc.cfg:链接
7. 使用train_voc.cmd或使用命令行开始训练:
darknet.exe detector train cfg/voc.data cfg/yolov3-voc.cfg
darknet53.conv.74
(注意:要禁用Loss-Window use标志-dont_show。如果使用的是CPU,请尝试使用darknet_no_gpu.exe代替darknet.exe。)
如果需要,请更改文件中的路径 build\darknet\cfg\voc.data
有关链接的训练的更多信息:http : //pjreddie.com/darknet/yolo/#train-voc
注意:如果在训练过程中看到(损失)字段的nan值avg-则训练有误,但如果出现nan在其行中-则训练进行得很好。
如何使用多GPU进行训练:
1. 首先在1个GPU上进行1000次迭代训练: darknet.exe
detector train cfg/voc.data cfg/yolov3-voc.cfg darknet53.conv.74
2. 然后停止并通过使用部分训练的模型/backup/yolov3-voc_1000.weights运行训练来进行multigpu(最多4个GPU):darknet.exe detector train cfg/voc.data cfg/yolov3-voc.cfg /backup/yolov3-voc_1000.weights
-gpus 0,1,2,3
仅对于小型数据集,有时对于4个GPU集learning_rate =
0.00025(例如,learning_rate = 0.001 / GPU)而言,降低学习率会更好。在这种情况下burn_in =
and max_batches
=
在cfg文件中增加4倍的时间。即使用burn_in = 4000代替1000。 Same
goes for steps=
if policy=steps
is set.。
https://groups.google.com/d/msg/darknet/NbJqonJBTSY/Te5PfIpuCAAJ
手机扫一扫
移动阅读更方便
你可能感兴趣的文章