faster用python版本的 https://github.com/rbgirshick/py-faster-rcnn
imdb.py源码地址: https://github.com/rbgirshick/py-faster-rcnn/blob/master/lib/datasets/imdb.py
imdb源码
1 | # -------------------------------------------------------- |
代码讲解
get_imdb->factory->pascal_voc->(继承)imdb
factory
year = [‘2007’, ‘2012’]
split = [‘train’, ‘val’, ‘trainval’, ‘test’]
imdb
image_set: split
devkit_path: config.DATA_DIR(root/data/) + VOCdevkit + year
data_path: devkit_path + ‘/‘ + ‘VOC’ + year
image_index: a list read image name from 如,root/data + /VOCdevkit2007/VOC2007/ImageSets/Main/{image_set}.txt
roidb: gt_roidb得到(cfg.TRAIN.PROPOSAL_METHOD=gt导致了此操作)
classes: 类别定义
num_classes: 类别的长度
class_to_ind: {类别名:类别索引}字典
num_images(): image_index’length,数据库中图片个数
image_path_at(index): 得到第index图片的地址, data_path + ‘/‘ +’JPEGImages’ + image_index[index] + image_ext(.jpg)
在train_faster_rcnn_alt_opt.py的imdb.set_proposal_method之后一旦用imdb.roidb都会用gt_roidb读取xml中的内容中得到部分信息
xml的地址: data_path + ‘/‘ + ‘Annotations’ + ‘/‘ + index + ‘.xml’
(root/data/) + VOCdevkit + year + ‘/‘ + ‘VOC’ + year + ‘/‘ + ‘Annotations’ +’/‘ + index + ‘.xml’
roidb
get_training_roidb: 对得到的roi做是否反转(参见roidb的flipped,为了扩充数据库)和到roidb.py的prepare_roidb中计算得到roidb的其他数据
一张图有一个roidb ,每个roidb是一个字典
boxes: four rows. the proposal. left-up, right-down
gt_overlaps: len(box)× 类别数(即,每个box对应的类别。初始化时,从xml读出来的类别对应类别值是1.0,被压缩保存)
gt_classes: 每个box的类别索引
flipped: true,代表图片被水平反转,改变了boxes里第一、三列的值(所有原图都这样的操作,imdb.image_index × 2)(cfg.TRAIN.USE_FLIPPED会导致此操作的发生,见train.py 116行)
seg_areas: box的面积
prepare_roidb中得到
(下面的值在roidb.py的prepare_roidb中得到)
image: image_path_at(index),此roi的图片地址
width:此图片的宽
height:高
max_classes: box的类别=labels(gt_overlaps行最大值索引)
max_overlaps: (gt_overlaps行最大值)(max_overlaps=0,max_classes=0,即都是背景,否则不正确)
output_dir: ROOT_DIR + ‘output’ + EXP_DIR(‘faster_rcnn_alt_opt’) + imdb.name(“voc_2007_trainval” or “voc_2007_test”)