数据加载
Pascal VOC 2007+2012
数据集划分
在20个类别当中选择5个类别作为新类别novel classes,剩下的15个类别作为基础类别base classes,根据三种不同的novel classes对数据有三种划分,split1, split2, split3。三种类别划分分别如下所示,划分文件保存在lib/model/utils/config.py
,类别索引从1开始,背景为0。
__C.TRAIN.ALLCLASSES_FIRST = ['aeroplane', 'bicycle', 'boat', 'bottle', 'car',
'cat', 'chair', 'diningtable', 'dog', 'horse',
'person', 'pottedplant', 'sheep', 'train', 'tvmonitor',
'bird', 'bus', 'cow', 'motorbike', 'sofa']
__C.TRAIN.BASECLASSES_FIRST = ['aeroplane', 'bicycle', 'boat', 'bottle', 'car',
'cat', 'chair', 'diningtable', 'dog', 'horse',
'person', 'pottedplant', 'sheep', 'train', 'tvmonitor']
数据读取
基础类别训练
事先根据类别划分在数据集中找到相应类别的图片,将图片名保存在如下形式的路径中data/VOCdevkit/VOC2007/ImageSets/Main/voc_2007_train_first_split.txt
。在基础阶段训练时(base training),程序会根据数据集"voc_2007_train_first_split+voc_2012_train_first_split"
在对应文件夹中读取相应的读片组成训练集。
如果只是正常训练的话这种读取方式就足够了,但是在元学习(meta learning)的训练中还需要读取支持集(support set)。程序会在Pascal Voc 2007+2012 trainval
数据中每个类别选择200(shots)张图片组成支持集,程序文件保存在lib/datasets/metadata.py
。
新类别微调
与基础训练阶段不同的是,微调阶段必须保证每个novel class对应的图片数量就是指定的***shot***, 因此我们不能在不同的数据集中选择支持集和训练集,这必然导致novel classes对应的图片会选择多张。
微调阶段指定的数据集名称为voc_2007_shots
,程序metadata.py
首先会在Pascal Voc 2007 trainval
中每个类别都找到shot*3
张图片,将图片名保存在data/VOCdevkit/VOC2007/ImageSets/Main/shots.txt
,接下来每个新类别只保留shots张图片组成支持集。
读取上一步保存的shots.txt
中的图片,并且滤除novel classes对应多余的图片组成训练集。