YOLO训练指南(以V3为例)

YOLO训练指南(以V3为例)

  • 前言

了解yolo3 https://cloud.tencent.com/developer/news/76803
https://www.bilibili.com/video/av77670746/
1. 总教程
★★★https://blog.csdn.net/USTCsunyue/article/details/93648307★★★
★https://blog.csdn.net/m0_52571715/article/details/109713440★
★https://blog.csdn.net/lumingha/article/details/89038863#_373★
https://blog.csdn.net/lumingha/article/details/89038863
https://blog.csdn.net/weixin_42747301/article/details/96636614
https://blog.csdn.net/medusa_zj/article/details/105695102
https://mp.weixin.qq.com/s/YFl0S3WHyV0FCs7jkDepEg
https://www.jianshu.com/p/2206db894b28
https://blog.csdn.net/HuanglnQuan/article/details/103602118
map计算
https://www.zhihu.com/question/53405779
2. YOLO3训练自己的数据
Yolo官网https://pjreddie.com/darknet/yolo/
https://zhuanlan.zhihu.com/p/45852709
制作数据集:为目标检测制作PASCAL VOC2007格式的数据集
https://blog.csdn.net/hitzijiyingcai/article/details/81636455
总纲https://www.jianshu.com/p/f4518fe04da1
https://mp.weixin.qq.com/s/YFl0S3WHyV0FCs7jkDepEg
https://blog.csdn.net/liushangkun/article/details/89518995
★https://blog.csdn.net/lumingha/article/details/89038863#commentBox
可视化https://blog.csdn.net/qq_33614902/article/details/83418441
3. 打标签
在 Ubuntu下安装 labelImg
https://blog.csdn.net/weixin_42711071/article/details/103242921

安装时使用国内源 :https://mirrors.aliyun.com/pypi/simple/
sudo pip3 install -r requirements/requirements-linux-python3.txt -i
打开:
python3 labelImg.py
问题:打不开
https://www.cnblogs.com/MarsMercury/p/11237984.html

4. 训练
yolov3什么时候停止训练 https://www.cnblogs.com/tango1221/p/10088835.html

• Region Avg IOU:0.798363,Class:0.893232,Obj:0.700808,No Obj:0.004567,Avg Recall:1.000000,count:8 Region Avg IOU:0.800677,Class:0.892181,Obj:0.701590,No Obj:0.004574,Avg Recall:1.000000 ,数:8
• 9002:0.211667,0.060730 avg,0.001000 rate,3.868000秒,576128图像已加载:0.000000秒
• 9002 - 迭代次数(批次数)
• 0.060730 avg - 平均损失(误差) - 越低越好

当看到平均损失0.xxxxxx avg在多次迭代时不再减少时,您应该停止训练,一旦训练停止,从最后一个文件中darknet\build\darknet\x64\backup选择最好的.weights文件.
您在9000次迭代后停止了训练,但最佳结果可以给出之前的权重之一(7000,8000,9000)。它可能由于过度拟合而发生。过度拟合 - 例如,您可以从training-dataset检测图像上的对象,但无法检测任何其他图像上的对象。你应该从早期停止点获得权重:
5.评价模型
训练参数详解
https://blog.csdn.net/lixiaoyu101/article/details/86537128
https://blog.csdn.net/la_fe_/article/details/81623869?utm_term=yolov3%E7%9A%84%E5%AD%A6%E4%B9%A0%E7%8E%87&utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2allsobaiduweb~default-1-81623869&spm=3001.4430

YOLO-V3可视化训练过程中的参数,绘制loss、IOU、avg Recall等的曲线图
https://blog.csdn.net/qq_34806812/article/details/81459982?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&dist_request_id=&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.control

YOLOv3 性能指标
https://blog.csdn.net/weixin_44533869/article/details/107673502?utm_term=yolov3%E7%9A%84%E5%AD%A6%E4%B9%A0%E7%8E%87&utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2allsobaiduweb~default-3-107673502&spm=3001.4430

YOLOv3使用笔记——计算mAP、recall
https://blog.csdn.net/cgt19910923/article/details/80524173

解决YOLOv3recall低的问题 https://www.pianshen.com/article/6507148851/
Recall: 召回率 意思是检测出物体的个数 除以 标注的所有物体个数。通过代码我们也能看出来就是Correct除以Total的值。
classes是类别数,这里只有两类,所以设置为2,文件里一共有3处需要修改classes,一般是文件的第610、689、776行
• filters=21
filters的计算公式为(classes + 5)x3,我们这里有两类,所以是(2+5)*3=21,文件里一共有3处需要修改,这里需要注意,文件里有多处filter,但我们只需要修改[yolo]层之前的[convolutional]层下面的filters,位置一般是文件的第603、696、783行
6. 训练常见问题
https://blog.csdn.net/qq_41082953/article/details/90145828
1 Makefile文件报错
https://www.cnblogs.com/ranjiewen/p/8067719.html
报错
/usr/bin/ld: 找不到 –lcublas
collect2: error: ld returned 1 exit status
Makefile:83: recipe for target ‘libdarknet.so’ failed

Makefile文件中
COMMON+= -DGPU -I/usr/local/cuda-10.1/include/
CFLAGS+= -DGPU
LDFLAGS+= -L/usr/local/cuda-10.1/lib64 -lcuda -lcudart -lcublas -lcurand

原因:缺少文件 lcublas在cuda安装文件中,在cuda文件中lib64将lcublas×所有文件复制到根目录库中(根目录无法复制粘贴(终端sudo nautilus ))

2 Couldn't open file: data/train_labels/1.txt

可以新建一个data/train_labels文件夹,把data/train_images中的所有txt文件放到该文件夹中
3 couldn’t open file: data/train.txt
可能是在window环境下处理文件出现编码格式的问题(但是没有解决)
https://blog.csdn.net/shuiyixin/article/details/99291352
4 yolov3训练 Couldn’t open file: /darknet/scripts/2018_train.txt
https://blog.csdn.net/hunterhe/article/details/89916111
5 完美解决:couldn’t open file: data/coco.names
https://blog.csdn.net/qq_42406643/article/details/103075751
6 Couldn’t open file: cfg/coco.data
https://blog.paperspace.com/how-to-implement-a-yolo-object-detector-in-pytorch/
7
在这里插入图片描述

前面步骤都不能错,我的问题是MAIN文件测试的时候改动了,没有改回去
8 根目录下~/darknet/scripts等于/home/yjl/darknet/scripts
9 CUDA error: invalid device ordinal
https://blog.csdn.net/baidu_39629638/article/details/106247050
10 Avg IOU: -nan
如果训练过程中nan出现的比较多,需可能是因为训练集中小目标比较多,这种情况不需要担心,只要不全是nan就可以,主要评价标准还是要看模型的测试结果,先训练一万batches再拿出来检测一下效果。
11
在这里插入图片描述
darknet-master总文件夹有问题去掉横线即可
12 Main文件夹下生成的文件没有内容(KD数据集)
看程序,文件中必须有xml文件,直接用标注成的txt文件没法用
将xmlfilepath = ,Annotations,改成xmlfilepath = ‘JPEGImages’
voc_lable.py文件同样要改(未完成)
生成训练图片的路径文件(可直接用如下命令)

image_path 为训练图片文件夹路径

find <image_path>-name *.jpg > trainlist.txt
13 训练voc数据集没有框(没有出现bbox)
原因:如果GPU = 1或CUDNN = 1,darknet将为每个层预先分配GPU虚拟内存,这取决于cfg文件中的批量大小和子分区设置。
对于训练,批量大小表示将在迭代中对GPU执行多少图片,更大的值可以减少训练时间,并且如果GPU在迭代中没有足够的内存,则子划分可以将它们分组以防止存储器大小限制问题。保持1检测,因为这些设置主要用于训练网络。
解决方法:
(1)检测的时候令cudnn=0,
(2)修改cfg文件成batch=1,sub=1
14 问题:各种out of memory
可能的原因:电脑显存不够,batch比较大,或者开了random = 1的时候带不动.解决方法:darknet/cfg/yolov3-voc.cfg 文件最后面random = 0;,如果还不行
问题:CUDA status Error: file: ./src/dark_cuda.c : () : line: 39 : build time: Jul 4 2021 - 22:05:38

CUDA Error: forward compatibility was attempted on non supported HW
CUDA Error: forward compatibility was attempted on non supported HW: Permission denied
darknet: ./src/utils.c:331: error: Assertion `0’ failed.
已放弃 (核心已转储)
换驱动
问题:https://blog.csdn.net/qq_40200387/article/details/90341107#commentBox
经验:
各个类别数量要差不多,不然会过拟合

  1. yolov3在图像上添加置信度
    修改src/image.c文件draw_detections()函数
    int i,j;
    for(i = 0; i < num; ++i){
    char labelstr[4096] = {0};
    char s1[]={" “};//为了name与置信度之间加空格
    int class = -1;
    char possible[5];//存放检测的置信值
    for(j = 0; j < classes; ++j){
    sprintf(possible,”%.2f",dets[i].prob[j]);//置信值截取小数点后两位赋给possible
    if (dets[i].prob[j] > thresh){
    if (class < 0) {
    strcat(labelstr, names[j]);
    strcat(labelstr,s1); //加空格
    strcat(labelstr, possible);//标签中加入置信值
    class = j;
    } else {
    strcat(labelstr, “, “);
    strcat(labelstr, names[j]);
    strcat(labelstr,s1);//加空格
    strcat(labelstr, possible);//标签中加入置信值
    }
    printf(”%s: %.0f%%\n”, names[j], dets[i].prob[j]*100);
    }
    }

  2. 批量检测
    https://blog.csdn.net/lumingha/article/details/89038863#_373

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
YOLO系列是基于深度学习的端到端实时目标检测方法。 PyTorch版的YOLOv5轻量而性能高,更加灵活和易用,当前非常流行。 本课程将手把手地教大家使用labelImg标注和使用YOLOv5训练自己的数据集。课程实战分为两个项目:单目标检测(足球目标检测)和多目标检测(足球和梅西同时检测)。 本课程的YOLOv5使用ultralytics/yolov5,在Windows系统上做项目演示。包括:安装YOLOv5、标注自己的数据集、准备自己的数据集、修改配置文件、使用wandb训练可视化工具、训练自己的数据集、测试训练出的网络模型和性能统计。 希望学习Ubuntu上演示的同学,请前往 《YOLOv5(PyTorch)实战:训练自己的数据集(Ubuntu)》课程链接:https://edu.csdn.net/course/detail/30793  本人推出了有关YOLOv5目标检测的系列课程。请持续关注该系列的其它视频课程,包括:《YOLOv5(PyTorch)目标检测实战:训练自己的数据集》Ubuntu系统 https://edu.csdn.net/course/detail/30793Windows系统 https://edu.csdn.net/course/detail/30923《YOLOv5(PyTorch)目标检测:原理与源码解析》课程链接:https://edu.csdn.net/course/detail/31428《YOLOv5目标检测实战:Flask Web部署》课程链接:https://edu.csdn.net/course/detail/31087《YOLOv5(PyTorch)目标检测实战:TensorRT加速部署》课程链接:https://edu.csdn.net/course/detail/32303《YOLOv5目标检测实战:Jetson Nano部署》课程链接:https://edu.csdn.net/course/detail/32451《YOLOv5+DeepSORT多目标跟踪与计数精讲》课程链接:https://edu.csdn.net/course/detail/32669《YOLOv5实战口罩佩戴检测》课程链接:https://edu.csdn.net/course/detail/32744《YOLOv5实战中国交通标志识别》课程链接:https://edu.csdn.net/course/detail/35209《YOLOv5实战垃圾分类目标检测》课程链接:https://edu.csdn.net/course/detail/35284       

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值