yoloV4
依赖环境
opencv | 4.5.4 |
---|---|
CUDA | 11.2 |
cuDNN | 11.2(v8.1.1.33) 要求和CUDA的版本一致 |
VS | 2019 |
训练
-
编译。
主要编译
darknet.sln
、yolo_console_dll.sln
和yolo_cpp_dll.sln
。在
\build\darknet\x64
下主要生成darknet.exe
、yolo_console_dll.exe
和动态静态库yolo_cpp_dll.lib
,yolo_cpp_dll.dll
。 -
简单体验
-
用作者训练好的权重文件进行简单体验。下载权重文件
yolov4.weights
-
cmd运行:
darknet.exe detector test ./cfg/coco.data ./cfg/yolov4.cfg ./yolov4.weights
-
-
训练自己的数据
-
数据标注。工具
labelimg
,将标注文件.txt和图像数据.jpg放在同一个目录下,并且名字要相同 -
下载预训练权重文件:
yolov4.conv.137
-
创造一份
.cfg
文件,可以从yolov4-custom.cfg
拷贝一份出来。根据自己的数据集情况修改cfg。具体修改内容见官方readme- 查找
[yolo]
,[yolo]子项里的classes
改成实际类别的数目;紧挨着[yolo]子项的上一个[convolutional]子项里的filters
改成:(实际类别数+5)*3
- 查找
-
创建一个
train.txt
文件,用于存放训练的数据集路径。当然,也需要创建一个test.txt
文件,用于验证,同样用于存放验证的数据集路径。两个文件的路径存放在obj.data中。 -
创造
obj.names
和obj.data
.格式固定。 -
cmd运行:
darknet.exe detector train dataHat/hat.data cfg/yolo-hat.cfg cfg/yolov4.conv.137
darknet.exe detector train dataHat/hat.data cfg/yolo-hat.cfg cfg/yolov4.conv.137 -map
-
预测
-
单张验证
darknet.exe detector test dataHat\hat.data cfg\yolo-hat.cfg backup\yolo-hat_last.weights
-
验证集验证
-
-test 预测验证集,结果保存在result.txt中,打印关注的主要内容为:
Enter Image Path: Detection layer: 139 - type = 28 Detection layer: 150 - type = 28 Detection layer: 161 - type = 28 dataHat/image/test/000304.jpg: Predicted in 17.006000 milli-seconds. hat: 100% (left_x: 47 top_y: 121 width: 101 height: 109) hat: 100% (left_x: 156 top_y: 81 width: 100 height: 117) hat: 100% (left_x: 300 top_y: 47 width: 116 height: .........
darknet.exe detector test dataHat\hat.data cfg\yolo-hat.cfg backup\yolo-hat_last.weights -dont_show -ext_output <dataHat/test.txt> dataHat\result.txt
-
-vaild 预测验证集,结果保存在results\文件夹中。注意需要创建一个result\文件夹。里面的文件按照names进行分类为单独的.txt,打印关注的主要内容为:
与上面👆预测的数据集是一样的,都是<dataHat/test.txt>里保存的数据集合,但是预测结果的打印不同,上面的是置信度、左上点横坐标、左上点纵坐标、宽度、高度。而下面的是置信度左上点横坐标、左上点纵坐标、右下点横坐标、右下点纵坐标
000304 0.996757 300.785461 47.688496 416.700073 172.940399 000304 0.998327 48.145359 121.596817 149.044846 230.569717 000304 0.997714 157.131287 82.440903 256.731842 199.660233 000304 0.001116 87.656288 39.449989 330.453796 245.229797 000304 0.001022 1.000000 80.614876 216.206879 262.445404 .........
darknet.exe detector valid dataHat\hat.data cfg\yolo-hat.cfg backup\yolo-hat_last.weights -out "prefix_"
-
-recall
darknet.exe detector recall dataHat\hat.data cfg\yolo-hat.cfg backup\yolo-hat_last.weights
-
yoloV7
依赖环境
opencv | 4.5.4 |
---|---|
CUDA | 11.2 |
cuDNN | 11.2(v8.1.1.33) 要求和CUDA的版本一致 |
VS | 2019 |
Cmake | 3.21.5 |
python | 3.7.0 |
Anaconda | 匹配python3.7.0的版本 |
Pytorch | 与cuda匹配的版本 |
环境搭建、训练、预测和部署
照着步骤做就行
参考指令:
- 训练
python train.py --weights weights/yolov7_training.pt --cfg cfg/training/yolov7_dicom.yaml --data data/dicom.yaml --device 0 --batch-size 8 --epoch 10 --workers 2
- 验证/预测
python detect.py --weights runs/train/exp/weights/best.pt --source datasets/test --device 0
- 导出onnx模型
python export.py --weights runs/train/exp/weights/best.pt --device 0
可能会遇到的问题
-
BrokenPipeError: [Errno 32] Broken pipe
【YOLOv5】yolov5训练中遇到的问题解决:BrokenPipeError: [Errno 32] Broken pipe
-
RuntimeError: CUDA out of memory
cuda内存溢出。,依据不同的显卡配置,自行调整
--batch-size
和--epoch
,往小了调
其他
脚本工具
-
批量提取Dicom中的定位片dicom的脚本
见项目中Tool文件夹下的
FindLocalizerDicom
-
批量jpg格式的图像锐化处理的脚本
见项目中Tool文件夹下的
ImageSharpen
-
统计各个标签的样本集总数
见项目中Tool文件夹下的
LabelCounter
dicom转jpg
将所有定位片dicom导入MicroDicom工具,然后照如下导出jpg
批量修改文件名
- cmd 运行
dir /b>rename.xls
- A列原名,B列重命名,C列输入公式
="ren "&""""&A1&""""&" "&B1
- 将C列copy到新的txt文件夹中,并修改后缀名.bat
获取文件路径
- 获取当前目录及子目录下的所有文件
dir /s /b > list.txt
- 只获取当前目录的所有文件
dir /b > list.txt
- 只获取当前目录与子目录下的jpg文件
dir *.jpg /s /b > list.txt
- 只获取当前目录下的jpg文件
dir *.jpg /b > list.txt
标注
- 使用labelimg,用
pip install labelimg
安装 - 标注前先建一个
predefined_classes.txt
的文件,里面写自己要训练的识别类型 - cmd运行
labelimg D:\yolo-test\image\.BodyPart\HEAD\picture D:\yolo-test\image\.BodyPart\predefined_classes.txt
,这样就把要标注的文件夹和预设置的识别类型文件导入进去了 - 点击Change Save Dir选择标注文件保存的路径,一般与图片集放在同一个目录下。该操作每次启动labelimg都需要做,否则已经标注的txt及其标注框不会在labelimg中显示出来
- 点
w
打开标注尺,点d
保存当前的标注并跳到下一张
opencv配置
vs2017及以下选择vc14,vs2019及以上选择vc15
-
环境变量
- 新建变量名:
OpenCV_DIR
,变量值:D:\SoftTool\opencv-4.5.4\opencv\build
- 在path变量中,添加变量值:
D:\SoftTool\opencv-4.5.4\opencv\build\x64\vc15\bin
和D:\SoftTool\opencv-4.5.4\opencv\build\x64\vc14\bin
- 新建变量名:
-
文件拷贝
- 拷贝
.\opencv\build\x64\vc15\bin
的opencv_world454.dll
、opencv_world454d.dll
到C:\Windows\SysWOW64
- 拷贝
.\opencv\build\x64\vc15\bin
的opencv_videoio_ffmpeg454_64.dll
、opencv_world454.dll
到C:\Windows\System32
- 拷贝
-
项目
-
C/C++ > 常规 > 附加包含目录
$(OPENCV_DIR)\include
和OpenCV_DIR\include\opencv2
-
链接器 > 常规 > 附加库目录
$(OPENCV_DIR)\x64\vc15\lib
-
链接器 > 输入 > 附加依赖项
opencv_world454.lib
或opencv_world454d.lib
也可以在代码中写:
#pragma comment(lib, "opencv_world454d.lib")
-
一般使用
C/C++
和链接器
下面的设置,而一般不建议使用VC++目录
下面的设置 -
包含目录:修改了系统的include宏的值,是全局的;
附加包含目录:用于当前项目,对其他项目没有影响。 (库目录和附加库目录的区别同上) -
库文件:编译的时候只需要静态库(即链接阶段),动态库是在运行的时候才需要;静态库在
附加库目录
和附加依赖项
配置
-