一个imdb就是一个txt文件
imdb的初始化->imdb.append_flipped_images()->prepare_roidb(imdb)->获得imdb.roidb
每张图的roi:
{'boxes': boxes, #都是np数据 #k * 4
'gt_classes': #k
'gt_ishard': #difficult #k
'gt_overlaps': #k *21
'flipped': False,
'seg_areas': seg_areas} #k
append_flipped添加的roi后半部分:
{'boxes': boxes,
'gt_overlaps': self.roidb[i]['gt_overlaps'],
'gt_classes': self.roidb[i]['gt_classes'],
'flipped': True}
prepare_roidb为全部每个roi添加了:
{'img_id':int, #没用,是在txt中的顺序,重复两遍
'image':图像路径str
'width':图像宽
'height':图像高
'max_overlaps':(num_objects, )的全1np向量
'max_classes':(num_objects, )的class向量和'gt_classes'属性一样啊}
---------------------------------------------------------------------------------------------------------------------
图像的w/h大于2或者小于0.5说明图像需要裁剪到2/0.5,为每个roi添加{'need_crop':1/0}
将裁剪后的ration(float)组合成ratio_list'''
从小带大排列的index是ratio_index(np int数据), 重排后得到ratio_list(np float, 0.5--2.0之间)
--------------------------------------------------------------------------------------------------------------------
ratio_list_batch: 将ratio_list按照batchsize切分并让batch内ratio对齐(<1左对齐,>1右对齐,穿过1对齐到1)
按照现在ratio_list_batch的顺序作为dataset的索引
dataset索引:获取这个roi的图像减均值(并flipped),变成bgr格式,最短边放缩到600.
im_scales为[scalefactor]
im_blob是1*h*w*3
blobs = {'data': 放缩后的图像##1* h * w *3图像np
'gt_boxes': #numobject * 5 将bbox放缩了 npfloat 最后一列是'gt_classes'
'im_info': #1*3 npfloat 图像新h,图像新w,图像放缩因子
'img_id':继承}
拿到最终目标ratio,第一步先?感觉合成一步了。
第一步检查需要crop的图片:直接一步ratio到位?暴力硬裁图像和gtbox到要求的ratio,宽高哪个大裁剪哪个
不用crop的图片也是一样的逻辑,暴力裁剪图像和gtbox,哪个长剪哪条边
修改im_info[0],[1]为batchaspectalign最新图大小,将裁剪后的图像作为padding_data(3*h*w)返回
imdb.classes:
['__background__']+['aeroplane', 'bicycle', 'boat', 'bottle', 'car', 'cat', 'chair', 'diningtable', 'dog',
'horse', 'person', 'pottedplant', 'sheep', 'train', 'tvmonitor', 'bird', 'bus', 'cow',
'motorbike', 'sofa']