pytorch dataset读取数据流程_Pytorch实现yolov3(train)训练代码详解(一)

yolo系列是目标识别的重头戏,为了更好的理解掌握它,我们必须从源码出发深刻理解代码。下面我们来讲解pytorch实现的yolov3源码。在讲解之前,大家应该具备相应的原理知识yolov1,yolov2,yolov3。

大部分同学在看论文时并不能把所有的知识全部掌握。我们必须结合代码(代码将理论变成实践),它是百分百还原理论的,也只有在掌握代码以及理论后,我们才能推陈出新有所收获,所以大家平时一定多接触代码,这里我们会结合yolov3的理论知识让大家真正在代码中理解思想。

下面我就train过程的代码进行讲解。在理解train过程之前,建议大家先了解inference的代码讲解。
PyTorch实现yolov3代码详细解密

数据读取:
Pytorch读取图片,主要通过Dataset类,Dataset类作为所有的datasets的基类存在,所有的datasets都需要继承它。

class 

这里重点看getitem函数,getitem接收一个index,返回图片数据和labels。我们看yolov3的dataset。

dataset 

dataset = LoadImagesAndLabels(train_path, img_size=img_size, augment=True),可以看到其中LoadImagesAndLabels类是Dataset的子类,init函数是正常的读取数据,我们主要看getitem,getitem接收一个index,就是img_files的索引,通过letterbox函数进行数据预处理将每幅图resize成418*418,labels里面存放的是ground truth的类别和坐标信息,因为图像resize了,所以labels中的坐标信息也要相对变化。最后返回处理后的img,labels,地址和宽高。

那么读取自己数据的基本流程就是:1:制作存储了图像的路径和标签信息的txt2:将这些信息转化为list,该list每一个元素对应一个样本3:通过getitem函数,读取数据标签,并返回。

在训练代码里是感觉不到这些操作的,只会看到通过DataLoader就可以获取一个batch的数据,其实触发去读取图片这些操作的是DataLoader里的__iter__(self),流程详细描述如下:

1.从dataset类中初始化txt,txt中有图片路径和标签

2.初始化DataLoder时,将dataset传入,从而使DataLoader拥有图片路径

3.在for i, (imgs, targets, _, _) in enumerate(dataloader):中,一个iteration进行时,读取一个batch的数据,enumerate将数据返回到imgs,targets中,imgs就是数据增强后的图像,labels就是处理后的标签。

4.读取过程中需要在class DataLoader()类中调用_DataLoderIter()

5.在 _DataLoderiter()类中跳到 next(self)函数,在该函数中通过indices = next(self.sample_iter)获取一个batch的indices,再通过batch=self.collate_fn()获取一个batch数据。

6.self.collate_fn中调用LoadImagesAndLabels类中的 getitem()函数,再函数中获取图片。

如此,我们第一步数据预处理就完成了,后面我们就可以把数据imgs放到模型里跑了。大家不要忽视这些代码,想真正弄懂,我们就要一步一步刨根问底。

下面一章,我们会根据程序复现训练过程的算法原理,讲解yolov3的loss是如何计算的。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值