mmdetection中dataloader和dataset——决定如何读取数据并输入网络中

mmdetection中dataloader和dataset——决定如何读取数据并输入网络中

1、dataset和dataloader的区别

dataset是决定如何读入训练数据,如何通过训练图片的路径来找到并读取这种图片,读取图片后要进行什么操作,这都是dataset控制的,每个训练的数据集,都会写一个自己的dataset,如coco.py ,voc.py等,用来展示如何读数取这个数据集的数据。dataloader:主要是把dataset读到的图片,按照一定顺序排起来,就像一条管道,一次输入一个batchsize的数据进入网络。
dataset的 输出是dataloader的输入。

2、dataset-voc.py

2.1 PASCALVOCDATASET类

继承了 CustomDataset类,CustomDataset类是每个数据集类都必须继承的,因为CustomDataset类里面包含了数据集类都一定要用到的操作,所以我们无论是初始化CocoDataset还是VocDataset等等,都一定会包含CustomData类中的所有方法。

2.2 getitem(idx) 的作用:

该函数控制dataset这个类怎么输出要训练的数据,dataset的输出其实就是__getitem__(idx) 的输出(类似nn.moudle类中forward函数)。
idx表示训练数据的索引,dataloader就按照这个自动生成的索引顺序来输出图片到网络中训练。getitem(idx)返回的图片数据输入到dataloader。
在__getitem__(idx)中就完成读入图片、读入标注、resize、归一化、padding等等

3、初始化dataset——build_dataset()

根据传入build_dataset()类中的数据集名字来初始化数据集对应,构建全局变量DATASETS。dataset主要由build_from_cfg()产生,根据传入的cfg里的数据集信息从dataset里面找到对应的数据集类别,然后初始化。
(比如cfg里面有pascalvoc就初始化pascalvoc,在小样本目标检测里面,如果是meta训练的话,判断cfg里是base数据集还是novel数据集,再初始化对应的数据集类别等)

4、创建data_loader

dataloader主要通让训练集按照一定顺序来读取,在训练过程中通过run方法来利用dataloader参与到训练中。这一部分在训练过程中再学习。

参考链接:https://blog.csdn.net/u014453898/article/details/107701094
参考链接:https://blog.csdn.net/u014453898/article/details/106714325

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值