Faster Rcnn 训练过程1:数据集的加载

本文介绍了Faster R-CNN训练过程中数据加载的步骤,以PASCAL VOC数据集为例,包括数据读取流程、解析XML标注、图像缩放与归一化。同时,讲解了Dataset类和DataLoader类的作用,以及如何在Jupyter Notebook中展示代码。在预处理阶段,数据经过resize、归一化等操作,为模型训练做好准备。
摘要由CSDN通过智能技术生成

以PASCAL VOC为训练数据集

数据读取流程

  1. 指定VOC数据集根目录
  2. 根据VOC目录,获取’ImageSets/Main/trainval.txt,trainval里面是各个图片的文件名称(不带后缀)
001337
001341
001343
001345
001346
001348
001350
001352
001360
001361
001362
001364
001365
001371

  1. __getitem__中,获取每一张图片对应的原图,所有的标注框,每个标注框对应的分类id,和是否为困难样本

主要逻辑是,根据trainval的图片id,也就是图片名称,到图片目录下Annotations和JPEGImages目录下,分别解析xml文件和读取图片文件

bbox: 
[[ 31. 262. 294. 499.]
[ 35.   0. 298. 234.]]

label: 
[18 18]

difficult: 
[0 0]

数据读取对应的代码

源码主要分为两个类,

  1. 一个是Dataset类,负责加载和解析VOC数据
  2. 一个是DataLoader类,负责通过Dataset批量加载数据

Dataset

主要完成以下工作

  • 数据加载,和标注信息解析
  • 图片缩放
  • 图片归一化,mean和std归一化处理
#opt是配置项,配置数据目录,格式为VOC数据格式
dataset = Dataset(opt)
  1. 首先通过调用VOCBboxDataset的get_example方法,解析各个图片的标注信息

class Dataset:
    def __init__(self, opt):
        self.opt = opt
        self.db = VOCBboxDataset(opt.voc_data_dir)
        self.tsf = Transform(opt.min_size, opt.max_size)

    def __getitem__(self, idx):
        #traceback.print_stack()
        ori_img, bbox, label, difficult, id_ = self.db.get_example(idx)

        img, bbox, label, scale = self.tsf((ori_img, bbox, label))

        # TODO: check whose stride is negative to fix this instead copy all
        # some of the strides of a given numpy array are negative.
        return img.copy(), bbox.copy(), label.copy(
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值