reldb->blob
图像增强
水平翻转
step 1:修改reldb
具体来说,reldb本身是由5个属性组成的,所以生成的新reldb还是要按照这个格式,区别在最后
1. def get_training_roidb(imdb)
2. imdb.append_flipped_images_rel() 因为这个函数是imdb特有的,所以函数属于imdb.py
imdb.py:
3. widths = self._get_widths_rel() 获得按照顺序的图片宽度
vg.py (因为该方法子类vg也有,因此跳转到vg)
4. return self.image_path_from_index(self._image_index[i]) #返回按照self._image_index顺序的照片绝对路径
5. entry = {'boxes': boxes,
'gt_overlaps': self.roidb[i]['gt_overlaps'],
'gt_classes': self.roidb[i]['gt_classes'],
'flipped': True}
self.reldb.append(entry)
6. self._image_index = self._image_index * 2 #作用是image编号重复了一遍,类似[1,2,1,2]
step2
relbatchLoader.py
1. relbatchLoader -> def __getitem__(self, index):
2. blobs = get_minibatch_rel(minibatch_db, self._num_classes, self.random_scale_inds)#min代表只有一个rel
minibatch.py
3. im_blob, im_scales = _get_image_blob(reldb, random_scale_inds)#(1, 601, 400, 3)
4. if roidb[i]['flipped']:
im = im[:, ::-1, :] #反向就好了,
processed_ims.append(im)
5. blob = im_list_to_blob(processed_ims) #[1,height,weight,,3)
之所以反转之后的图片编号与原始编号重复,但读取reldb的方式是[i],因此不会重复,同时,reldb[i]的内容记录了是否flip,所以根据reldb生成的单个blob都能对应
blob
minibatch.py
blobs = {'data': im_blob} #(1, 601, 400, 3) 存的是图片。第一维值始终为0?
blobs['rel_gt_classes'] = rel_gt_classes
blobs['rel_cluster_classes'] = rel_cluster_classes
blobs['sub_gt_boxes'] = sub_gt_boxes
blobs['obj_gt_boxes'] = obj_gt_boxes
blobs['im_info'] = np.array(
[[im_blob.shape[1], im_blob.shape[2], im_scales[0]]],
dtype=np.float32)
blobs['img_id'] = reldb[0]['img_id']
imdb (是个vg类的object)
imdb, reldb_train,reldb_val, ratio_list_train,ratio_list_val, ratio_index_train, ratio_index_val= combined_reldb(
args.imdb_name)
1. def get_reldb(imdb_name):
2. imdb = get_imdb(imdb_name)#调用 vg->VG 类 此时imdb.reldb只有5个属性
3. reldb = get_training_reldb(imdb)#此时有9个属性了,而且将flip的也加入了
reldb(是个List,每个元素代表一个照片)
获取以上imdb和其包含的reldb后,对reldb进行下一步操作
reldb.py
1. ratio_list_train, ratio_index_train =rank_reldb_ratio(reldb): #规定图片的宽高比,不符合要求的,添加属性“need_crop” ,返回排序后的结果和索引
sampler
作用是对组织好的数据格式,设定合适的采样方法
Dataset
建立Dataset类的子类class relbatchLoader(data.Dataset):
初始化的时候,做的事情是根据每个图片宽高比,确定每一批所取