in evaluation/tiny_benchmark/maskrcnn_benchmark/data/transforms/scale_match.py [0:0]
def match_distribute(src_annotations, dst_distri_cumsum, use_size_in_image=True):
def get_json_sizes(annos):
annos = [anno for anno in annos if not anno['iscrowd']]
if len(annos) > 0 and 'ignore' in annos[0]:
annos = [anno for anno in annos if not anno['ignore']]
sizes = np.sqrt(np.array([anno['bbox'][2] * anno['bbox'][3] for anno in annos]))
sizes = sizes[sizes > 0]
return sizes
def get_im2annos(annotations):
im2annos = {}
for anno in annotations:
iid = anno['image_id']
if iid in im2annos:
im2annos[iid].append(anno)
else:
im2annos[iid] = [anno]
return im2annos
def get_json_sizes_in_image(annotations):
im2annos = get_im2annos(annotations)
_sizes = []
for iid, annos in im2annos.items():
annos = [anno for anno in annos if not anno['iscrowd']]
if len(annos) > 0 and 'ignore' in annos[0]:
annos = [anno for anno in annos if not anno['ignore']]
sizes = np.sqrt(np.array([anno['bbox'][2] * anno['bbox'][3] for anno in annos]))
sizes = sizes[sizes > 0]
size = np.exp(np.log(sizes).mean())
_sizes.append(size)
return _sizes
if use_size_in_image:
sizes = get_json_sizes_in_image(src_annotations)
else:
sizes = get_json_sizes(src_annotations)
sizes = np.sort(sizes)
N = len(sizes)
src_sizes = [sizes[0]]
for p_sum in dst_distri_cumsum:
src_sizes.append(sizes[min(int(p_sum * N), N-1)])
if src_sizes[-1] < sizes[-1]:
src_sizes[-1] = sizes[-1]
return np.array(src_sizes)