yolov5源码解读--数据处理模块

加载数据

create_dataloader
在这里插入图片描述
跳转到datasets.py文件中,可以看到支持输入的文件类型非常丰富。。
在这里插入图片描述
回归正题
在这里插入图片描述
跳转LoadImagesAndLabels
加载图片和标签的函数

读取图片

在这里插入图片描述

f = []存储所有图片的路径
在这里插入图片描述
bi给当前数组做batch索引
nb就是所有的batch数目
在这里插入图片描述

加载标签

label_files所有标签的路径
cache_path、cache是缓存路径和缓存
在这里插入图片描述
cache
在这里插入图片描述
labels是按照文件名从cache中取出对应图片的标签,
在这里插入图片描述
在这里插入图片描述

extract_bounding_boxes 是否把框截取出来
create_datasubset、labels_loaded、extract_bounding_boxes和目标检测后续任务有关
在这里插入图片描述
nm, nf, ne, ns, nd = 0, 0, 0, 0, 0 # number missing, found, empty, datasubset, duplicate
这些和读取数据进度条打印的数据有关

在这里插入图片描述
一张张读取标签数据,做异常处理。。

在这里插入图片描述
进度条打印数据
在这里插入图片描述
在一次循环遍历读取标签

马赛克数据增强

完成的数据和标签的初始化操作后,
当训练网络时,执行__getitem__函数向网络传递数据
在这里插入图片描述

图片

使用了马赛克数据增强
在这里插入图片描述
在这里插入图片描述
四合一的拼接
在这里插入图片描述

yc, xc = [int(random.uniform(-x, 2 * s + x)) for x in self.mosaic_border]  

随机中心点

img4 = np.full((s * 2, s * 2, img.shape[2]), 114, dtype=np.uint8) 

1.初始化大图

x1a, y1a, x2a, y2a = max(xc - w, 0), max(yc - h, 0), xc, yc

2.计算当前图片放在大图中什么位置
在这里插入图片描述
max是为了防止小图在大图中越界。。
左上角,右上角为(0,0)坐标系原点。。。

x1b, y1b, x2b, y2b = w - (x2a - x1a), h - (y2a - y1a), w, h

3.计算在小图中取哪一部分放到大图中


开始截图

在这里插入图片描述
a大图的区域
b小图的部分

padw,padh是当前小图左上角点距离原点的距离
(左上角那俩青色的线条长度)
在这里插入图片描述

标签

应为截图拼接了,所以标签位置也需要变化
在这里插入图片描述
标签加上padw,padh的原因显而易见。。。
(偏移量)

其他的数据增强

源码是在马赛克数据增强后直接来random_perspective
整合的大图再进行随机旋转、平移、缩放、裁剪

在这里插入图片描述

变图像

在这里插入图片描述
在这里插入图片描述
img是输入图像
M就是图像变换矩阵

M = T @ S @ R @ P @ C

将旋转 平移 缩放等操作 都需要系数矩阵组合到一起。。

cv2.warpPerspective()完成数据增强

变标签

在这里插入图片描述

__getitem__构建Batch

做完数据增强,返回到__getitem__
如果batch是16,就调用16次__getitem__,得到一个batch的最终数据。。
在这里插入图片描述
1.调整标签格式 2.归一化标签取值范围
在这里插入图片描述

在就是最后,
按照一定比例做不做数据增强。。。
数据和标签都得做。。。
在这里插入图片描述

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值