Commit 8a472383 authored by Ashwin Bharambe's avatar Ashwin Bharambe Committed by Facebook Github Bot

Filter proposals not present in roidb

Summary:
It is convenient to run with a set of precomputed proposals for a
larger set (e.g., coco_trainval2014) and then do experiments using annotations
for a smaller subset of the data.

It is possible to do this filtering only if a config flag is set, but it seems
harmless enough to do it always.

Reviewed By: rbgirshick

Differential Revision: D14106953

fbshipit-source-id: f726425ee5b6b22fcb711e3ec479b302ea09e837
parent 7c0ad88f
...@@ -254,6 +254,8 @@ class JsonDataset(object): ...@@ -254,6 +254,8 @@ class JsonDataset(object):
proposals = load_object(proposal_file) proposals = load_object(proposal_file)
id_field = 'indexes' if 'indexes' in proposals else 'ids' # compat fix id_field = 'indexes' if 'indexes' in proposals else 'ids' # compat fix
_remove_proposals_not_in_roidb(proposals, roidb, id_field)
_sort_proposals(proposals, id_field) _sort_proposals(proposals, id_field)
box_list = [] box_list = []
for i, entry in enumerate(roidb): for i, entry in enumerate(roidb):
...@@ -453,3 +455,11 @@ def _sort_proposals(proposals, id_field): ...@@ -453,3 +455,11 @@ def _sort_proposals(proposals, id_field):
fields_to_sort = ['boxes', id_field, 'scores'] fields_to_sort = ['boxes', id_field, 'scores']
for k in fields_to_sort: for k in fields_to_sort:
proposals[k] = [proposals[k][i] for i in order] proposals[k] = [proposals[k][i] for i in order]
def _remove_proposals_not_in_roidb(proposals, roidb, id_field):
# fix proposals so they don't contain entries for images not in the roidb
roidb_ids = set({entry["id"] for entry in roidb})
keep = [i for i, id in enumerate(proposals[id_field]) if id in roidb_ids]
for f in ['boxes', id_field, 'scores']:
proposals[f] = [proposals[f][i] for i in keep]
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment