YOLOv5-水印检测

YOLOv5-水印检测简介 YOLOv5 在 YOLOv4 算法的基础上做了进一步的改进 检测性能得到进一步的提升

大家好,欢迎来到IT知识分享网。

简介:
YOLOv5在YOLOv4算法的基础上做了进一步的改进,检测性能得到进一步的提升。虽然YOLOv5算法并没有与YOLOv4算法进行性能比较与分析,但是YOLOv5在COCO数据集上面的测试效果还是挺不错的。
YOLOv5是一种单阶段目标检测算法,该算法在YOLOv4的基础上添加了一些新的改进思路,使其速度与精度都得到了极大的性能提升。主要的改进思路如下所示:

1>输入端:在模型训练阶段,提出了一些改进思路,主要包括Mosaic数据增强、自适应锚框计算、自适应图片缩放;

2> 基准网络:融合其它检测算法中的一些新思路,主要包括:Focus结构与CSP结构;

3> Neck网络:目标检测网络在BackBone与最后的Head输出层之间往往会插入一些层,Yolov5中添加了FPN+PAN结构;

4> Head输出层:输出层的锚框机制与YOLOv4相同,主要改进的是训练时的损失函数GIOU_Loss,以及预测框筛选的DIOU_nms。

网络结构:
改编自知乎大佬的一张图:
Yolov5s网络是Yolov5系列中深度最小,特征图的宽度最小的网络。后面的3种(Yolov5m、Yolov5l、Yolov5x)都是在此基础上不断加深,不断加宽。
在这里插入图片描述
在这里插入图片描述



参数:

在这里插入图片描述

train.py

yolov5s.yaml

voc.yaml

在这里插入图片描述

detect.py

(预测文件)

source:预测数据路径
weights:训练好的best.pt文件路径
conf-thres:置信度阈值
iou-thres:交并比阈值
conf-thres和iou-thres确定返回的预测框



test.py

数据标注

在这里插入图片描述

使用标注精灵:新建一个项目,选择位置标注和自定义标注类别,导入数据,选择矩形框标注,导出数据为XML文件。

格式转化

voc2yolov5.py

![在这里插入图片描述](https://img-blog.csdnimg.cn/ff49440b9407ac5ca08ed56a.png在这里插入图片描述

过程:

先进性格式转换voc2yolov5.py
修改以下对应位置:

classes = ["XMH"] #类别名称,对应需要的类别 TRAIN_RATIO = 80 #训练验证集按80%20%分 
def convert_annotation(image_id): in_file = open('../%s.xml' % image_id,encoding="utf-8") #对应XML文件路径 out_file = open('../%s.txt' % image_id, 'w',encoding="utf-8") #对应保存转换后txt文件路径 

train.py文件

weights: 修改下载的权重文件路径
cfg: 修改网络结构参数配置文件路径
data: 修改数据配置文件路径(修改对应配置文件信息)
hyp: 修改超参数配置文件路径(可以学习率、损失增益等,看情况)
epochs: 修改训练轮数(根据自己需求)
batch-size: 修改图片输入数量(按自己电脑内存大小修改输入批次大小)
img-size:修改输入图片大小,放缩图片(一般640)
resume: 修改路径(上一次没有训练完的权重文件路径)
project,name:保存文件路径
workers:建议为0
device:选用CPU或者GPU(0,1,2…)









detect.py文件
weights、img-size、device、project、name同上
source:修改数据路径(测试、预测数据)
conf-thres:置信度(建议0.6)
iou-thres:交并比(建议0.5)
save-txt:保存坐标信息,增加路径
找到utils下面的plots.py文件中的plot_one_box函数:
打印坐标信息:






def plot_one_box(x, img, color=None, label=None, line_thickness=3): # Plots one bounding box on image img tl = line_thickness or round(0.002 * (img.shape[0] + img.shape[1]) / 2) + 1 # line/font thickness color = color or [random.randint(0, 255) for _ in range(3)] c1, c2 = (int(x[0]), int(x[1])), (int(x[2]), int(x[3])) cv2.rectangle(img, c1, c2, color, thickness=tl, lineType=cv2.LINE_AA) print("左上点的坐标为:(" + str(c1[0]) + "," + str(c1[1]) + "),右下点的坐标为(" + str(c2[0]) + "," + str(c2[1]) + ")") 

或者修改detect.py:

 for *xyxy, conf, cls in reversed(det): if save_txt: # Write to file xywh = (xyxy2xywh(torch.tensor(xyxy).view(1, 4)) / gn).view(-1).tolist() # normalized xywh line = (cls, *xywh, conf) if opt.save_conf else (cls, *xywh) # label format label = f'{ 
     names[int(cls)]}{ 
     conf:.2f}' x1 = int(xyxy[0].item()) y1 = int(xyxy[1].item()) x2 = int(xyxy[2].item()) y2 = int(xyxy[3].item()) lab.append(label) loc.append([x1, y1, x2, y2]) print('bounding box is:', x1, y1, x2, y2) # 打印坐标 print(lab) print(loc) a = (x1, y1, x2, y2) with open(txt_path + '.txt', 'a') as f: # f.write(('%g ' * len(line)).rstrip() % line + '\n') f.write(str(a) + '\n') f.write(str(label)) 

test.py大致和train.py相同

结果:

在这里插入图片描述
配置文件指定路径下生成结果,模型权重文件防在weights下面,存在best和last(最好的和最好的),参数文件
检测结果:
在这里插入图片描述


开始运行:在这里插入图片描述

报错:

wandb:报错说没有账号等,可以直接关闭

利用tensorboard可视化训练过程,训练开始会在yolov5目录生成一个runs文件夹,利用tensorboard打开即可查看训练日志

tensorboard --logdir=runs 

在这里插入图片描述
注意:数据转化的时候一定要把数据类别名称加上。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/135063.html

(0)
上一篇 2025-07-07 15:45
下一篇 2025-07-07 16:10

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信