YOLOv5水印检测实战:从原理到代码实现
创作时间:
作者:
@小白创作中心
YOLOv5水印检测实战:从原理到代码实现
引用
CSDN
1.
https://blog.csdn.net/yangzheng_520/article/details/122448070
YOLOv5是基于YOLOv4算法的改进版本,其在COCO数据集上的测试效果表现良好。本文将详细介绍YOLOv5的网络结构、参数配置以及训练过程,并提供具体的代码实现和报错解决方案。
简介
YOLOv5在YOLOv4算法的基础上做了进一步的改进,检测性能得到进一步的提升。虽然YOLOv5算法并没有与YOLOv4算法进行性能比较与分析,但是YOLOv5在COCO数据集上面的测试效果还是挺不错的。
YOLOv5是一种单阶段目标检测算法,该算法在YOLOv4的基础上添加了一些新的改进思路,使其速度与精度都得到了极大的性能提升。主要的改进思路如下所示:
- 输入端:在模型训练阶段,提出了一些改进思路,主要包括Mosaic数据增强、自适应锚框计算、自适应图片缩放;
- 基准网络:融合其它检测算法中的一些新思路,主要包括:Focus结构与CSP结构;
- Neck网络:目标检测网络在BackBone与最后的Head输出层之间往往会插入一些层,Yolov5中添加了FPN+PAN结构;
- Head输出层:输出层的锚框机制与YOLOv4相同,主要改进的是训练时的损失函数GIOU_Loss,以及预测框筛选的DIOU_nms。
网络结构
改编自知乎大佬的一张图:
Yolov5s网络是Yolov5系列中深度最小,特征图的宽度最小的网络。后面的3种(Yolov5m、Yolov5l、Yolov5x)都是在此基础上不断加深,不断加宽。
参数
train.py(训练)
- weights:权重文件(官方给了很多,看情况下载)
- cfg:网络结构参数配置文件(锚点、骨干网络、头网络)
- data:数据位置的配置文件
- hyp:超参数配置文件(学习率、损失增益等)
- epochs:训练轮数
- batch-size:图片输入数量
- img-size:输入图片大小,放缩图片
- rect:矩形训练,减去一些不必要的信息
- resume:是否接着上次打断的训练,TRUE的话需要指定上次中断的训练模型路径
- nosave:不保存模型,仅保存最后的模型
- notest:不进行test测试,仅测试最后一轮
- noautoanchor:不调整anchor,禁止自动定位检查,设置目标检测的锚点框
- evolve:对超参数进行净化
- bucket:谷歌云盘,不使用
- cache-images:将图片缓存到内存中,加快模型训练
- image-weights:使用加权图像进行训练(测试过程),对训练不好的图片下一轮增加权重
- device:GPU还是CPU的使用
- multi-scale:改变图像尺寸
- single-cls:用于设定训练集是多类数据、单类数据
- adam:优化器
- sync-bn: 分布式训练
- local_rank:不能修改,单机多卡训练
- workers:最大工作训练核心、线程 网上建议设置0
- project:模型保存位置,没有会自动生成
- entity:wandb库,可以看训练过程,一般不用(需要自己注册账号)
- name:模型保存的文件夹,多次运行:exp1,exp2…
- exist-ok:预测结果保存位置,覆盖上次结果不新建结果文件
- quad:用于训练集图像大于–img-size设置的640图片,训练效果更好,小于的效果差一些
- linear-lr:学习速率调整,默认FALSE 通过余弦函数降低学习率
- label-smoothing:防止过拟合,对标签进行平滑处理,防止分类算法中产生过拟合
- upload_dataset:wandb库的
- bbox_interval:wandb库的
- save_period:用于记录训练日志
yolov5s.yaml(进行和你选择的结构参数配置文件)
- nc:分类的类别
- depth_multiple和width_multiple:根据选择的配置文件不同而不一样
voc.yaml(数据配置文件)
- train和val指定训练数据的位置,还可以设置test
- nc:分类的类别
- names:每个类别的名字
detect.py(预测)
- source:预测数据路径
- weights:训练好的best.pt文件路径
- conf-thres:置信度阈值
- iou-thres:交并比阈值
- conf-thres和iou-thres确定返回的预测框
test.py(测试)
- save-txt:返回检测框TXT文件
- save-hybrid:标签和预测结果保存TXT文件
- save-conf:检测到的坐标返回TXT文件
- 其余参数大致和train相同
数据标注
使用标注精灵:新建一个项目,选择位置标注和自定义标注类别,导入数据,选择矩形框标注,导出数据为XML文件。
格式转化
voc2yolov5.py
- classes:类别名称
- TRAIN_RATIO:按比例划分train和val
- convert_annotation函数:读取xml文件,写入TXT文件,确定标注好的XML文件和查找位置相同
- os.getcwd() 绝对路径
- 创建放图片、labe、train、val等文件夹
过程
先进行数据的格式转化,然后train的参数修改,最后修改对应的配置文件,运行train进行模型训练。预测、测试同理
结果
配置文件指定路径下生成结果,模型权重文件防在weights下面,存在best和last(最好的和最好的),参数文件
检测结果
开始运行:
报错
wandb:报错说没有账号等,可以直接关闭
找到utils下的wandb_loggig下面的wandb_utils添加:
利用tensorboard可视化训练过程,训练开始会在yolov5目录生成一个runs文件夹,利用tensorboard打开即可查看训练日志
tensorboard --logdir=runs
注意:数据转化的时候一定要把数据类别名称加上。
环境
符合CUDA11.1的pytroch:
pip install torch==1.8.1 torchvision==0.9.1 torchaudio==0.8.1 -f https://download.pytorch.org/whl/torch_stable.html
热门推荐
揭秘狗狗夜视能力:黑暗中真的能“看”得清吗?
《哪吒重生》在日本爆红:国漫出海的新高度
《哪吒2》在日本爆红:文化输出的新里程碑
揭秘阿房宫:秦始皇的未完成梦想
杜牧《阿房宫赋》中的铺陈艺术
从《阿房宫赋》看秦朝建筑艺术:你了解多少?
杜牧笔下的秦始皇:阿房宫里的奢靡人生
掌握凹底淘金技巧,轻松抓涨停股!
五根手指各连一个“养生穴”,你知道几个?
自我按摩好处多,不过可别瞎按!
未来几年最清醒的生存之道:物质低配、家庭高配、心态顶配
双十一教你用六爻预测财运!
新生儿奶粉喂养奶量正常标准表,1-30天多久喂一次合适
先导智能近五年资产变迁解读:锂电设备行业的竞争、创新与财务优化路径
宇宙天体距离动辄数亿光年,科学家是如何测量如此遥远距离的?
光年是什麼意思?深入探討光年的定義及其應用
叶酸的功效与食物来源:不仅孕产妇需要,这4种食物必吃!
孕期饮食安全要注意什么
左手抱拳与右手抱拳,到底有什么区别?搞不清楚很容易闹笑话的
抱拳礼到底是左手抱右手,还是右手抱左手?千万别搞反了!
职场内卷严重,如何找到属于自己的“反内卷”生存之道?
职场内卷的破局之道:策略与心态并重,拥抱积极竞争环境
性侵受害者精神损害赔偿:从“不可能”到“新突破”
职场内卷严重,如何找到属于自己的“反内卷”生存之道?
参加这些社交活动,快速脱单不是梦!
抱柱子情感课程:3个月脱单的科学指南
舌诊新发现:警惕IgG4相关性疾病
中医舌诊:从传统到现代的健康诊断智慧
智能中医舌诊:揭秘舌色健康密码
AI驱动的多组学技术:个性化医疗新纪元