文章目录
- 数据预处理
数据预处理
dataset.py文件下的方法关系如下
dataset.py
class Dataset
class Testdataset
voc_dataset.VOCBboxDataset
class Transform
voc_dataset.VOCBboxDataset
class Transform
read_label
read_image
progress
util.resize_bbox
util.random_flip
util.flip_bbox
caffe_pretrain
pytorch_pretrain
caffe_normalize
pytorch_normalze
1. data/dataset.py文件
- 函数inverse_normalize实现对caffe与torchvision版本的去正则化。因为可以利用caffe版本的vgg预训练权重,也可利用torchvision版本的预训练权重。只不过后者结果略微逊色于前者。
- 函数pytorch_normalze实现对pytorch模型输入图像的标准化:由【0,255】的RGB转为【0,1】的RGB再正则化为【-1,1】的RGB。
- 函数caffe_normalze实现对caffe模型输入图像的标准化:由【0,255】的RGB转为【0,1】的RGB再正则化为【-125,125】的BGR。
- 函数preprocess实现对图像的预处理:由read_image函数读入的图像为CHW的【0,255】格式,这里首先除以255, 再按照论文长边不超1000,短边不超600。按此比例缩放。然后调用pytorch_normalze或者caffe_normalze对图像进行正则化。
- 类Transform实现了预处理,定义了__call__方法,在__call__方法中利用函数preprocess对图像预处理,并将bbox按照图像缩放的尺度等比例缩放。然后随机对图像与bbox同时进行水平翻转。
- 类Dataset实现对训练集样本的生成, 即trainval。__getitem__方法利用VOCBboxDataset类来生成一张训练图片,并调用Trandform类处理。返回处理后的图像,bbox,label,scale。
- 类TestDataset实现对测试机样本的生成,即test。__getitem__方法利用VOCBboxDataset类来生成一张测试图片,不同于训练的是调用preprocess函数处理。也即没有对bbox进行相应resize,而是返回处理前的图像尺寸。
2. data/util.py文件
- 函数read_image首先用PIL将图像读入为RGB格式或单通道格式彩图,然后分别转为C*H*W与1*H*W格式。图像范围【0,255】。
- 函数resize_bbox将形状为(R,4)的bbox按照输入与输出的height、weight进行resize。
- 函数flip_bbox将根据是否翻转实现对输入bbox的横向与纵向翻转。
- 函数crop_bbox将bbox适应于图像的裁剪区域。
- 函数translate_bbox根据输入的偏移量,进行水平或竖直偏移。
- 函数random_flip将图片(CHW格式)随机水平或竖直反转:
3. data/voc_dataset.py
- VOC2007包含{‘train’, ‘val’, ‘trainval’, ‘test’},共20类,加背景21类。四个集合图片数分别为2501, 2510,5011,4952(trainval=train+val)。VOC2012无test集。
训练时使用trainval数据集,测试时使用test数据集。 - 类 VOCBboxDataset继承自Object基类,实例化该类时只需提供VOC数据集路径即可。
类 VOCBboxDataset的方法只有一个,即返回第i张图片的信息(图像、bbox、label、difficult)