|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
from __future__ import absolute_import |
|
|
from __future__ import division |
|
|
from __future__ import print_function |
|
|
|
|
|
import os |
|
|
|
|
|
from ppdet.data.source.voc import pascalvoc_label |
|
|
from ppdet.data.source.widerface import widerface_label |
|
|
from ppdet.utils.logger import setup_logger |
|
|
logger = setup_logger(__name__) |
|
|
|
|
|
__all__ = ['get_categories'] |
|
|
|
|
|
|
|
|
def get_categories(metric_type, anno_file=None, arch=None): |
|
|
""" |
|
|
Get class id to category id map and category id |
|
|
to category name map from annotation file. |
|
|
|
|
|
Args: |
|
|
metric_type (str): metric type, currently support 'coco', 'voc', 'oid' |
|
|
and 'widerface'. |
|
|
anno_file (str): annotation file path |
|
|
""" |
|
|
if arch == 'keypoint_arch': |
|
|
return (None, {'id': 'keypoint'}) |
|
|
|
|
|
if anno_file == None or (not os.path.isfile(anno_file)): |
|
|
logger.warning( |
|
|
"anno_file '{}' is None or not set or not exist, " |
|
|
"please recheck TrainDataset/EvalDataset/TestDataset.anno_path, " |
|
|
"otherwise the default categories will be used by metric_type.". |
|
|
format(anno_file)) |
|
|
|
|
|
if metric_type.lower() == 'coco' or metric_type.lower( |
|
|
) == 'rbox' or metric_type.lower() == 'snipercoco': |
|
|
if anno_file and os.path.isfile(anno_file): |
|
|
if anno_file.endswith('json'): |
|
|
|
|
|
from pycocotools.coco import COCO |
|
|
coco = COCO(anno_file) |
|
|
cats = coco.loadCats(coco.getCatIds()) |
|
|
|
|
|
clsid2catid = {i: cat['id'] for i, cat in enumerate(cats)} |
|
|
catid2name = {cat['id']: cat['name'] for cat in cats} |
|
|
|
|
|
elif anno_file.endswith('txt'): |
|
|
cats = [] |
|
|
with open(anno_file) as f: |
|
|
for line in f.readlines(): |
|
|
cats.append(line.strip()) |
|
|
if cats[0] == 'background': cats = cats[1:] |
|
|
|
|
|
clsid2catid = {i: i for i in range(len(cats))} |
|
|
catid2name = {i: name for i, name in enumerate(cats)} |
|
|
|
|
|
else: |
|
|
raise ValueError("anno_file {} should be json or txt.".format( |
|
|
anno_file)) |
|
|
return clsid2catid, catid2name |
|
|
|
|
|
|
|
|
else: |
|
|
if metric_type.lower() == 'rbox': |
|
|
logger.warning( |
|
|
"metric_type: {}, load default categories of DOTA.".format( |
|
|
metric_type)) |
|
|
return _dota_category() |
|
|
logger.warning("metric_type: {}, load default categories of COCO.". |
|
|
format(metric_type)) |
|
|
return _coco17_category() |
|
|
|
|
|
elif metric_type.lower() == 'voc': |
|
|
if anno_file and os.path.isfile(anno_file): |
|
|
cats = [] |
|
|
with open(anno_file) as f: |
|
|
for line in f.readlines(): |
|
|
cats.append(line.strip()) |
|
|
|
|
|
if cats[0] == 'background': |
|
|
cats = cats[1:] |
|
|
|
|
|
clsid2catid = {i: i for i in range(len(cats))} |
|
|
catid2name = {i: name for i, name in enumerate(cats)} |
|
|
|
|
|
return clsid2catid, catid2name |
|
|
|
|
|
|
|
|
|
|
|
else: |
|
|
logger.warning("metric_type: {}, load default categories of VOC.". |
|
|
format(metric_type)) |
|
|
return _vocall_category() |
|
|
|
|
|
elif metric_type.lower() == 'oid': |
|
|
if anno_file and os.path.isfile(anno_file): |
|
|
logger.warning("only default categories support for OID19") |
|
|
return _oid19_category() |
|
|
|
|
|
elif metric_type.lower() == 'widerface': |
|
|
return _widerface_category() |
|
|
|
|
|
elif metric_type.lower() == 'keypointtopdowncocoeval' or metric_type.lower( |
|
|
) == 'keypointtopdownmpiieval': |
|
|
return (None, {'id': 'keypoint'}) |
|
|
|
|
|
elif metric_type.lower() == 'pose3deval': |
|
|
return (None, {'id': 'pose3d'}) |
|
|
|
|
|
elif metric_type.lower() in ['mot', 'motdet', 'reid']: |
|
|
if anno_file and os.path.isfile(anno_file): |
|
|
cats = [] |
|
|
with open(anno_file) as f: |
|
|
for line in f.readlines(): |
|
|
cats.append(line.strip()) |
|
|
if cats[0] == 'background': |
|
|
cats = cats[1:] |
|
|
clsid2catid = {i: i for i in range(len(cats))} |
|
|
catid2name = {i: name for i, name in enumerate(cats)} |
|
|
return clsid2catid, catid2name |
|
|
|
|
|
else: |
|
|
logger.warning( |
|
|
"metric_type: {}, load default categories of pedestrian MOT.". |
|
|
format(metric_type)) |
|
|
return _mot_category(category='pedestrian') |
|
|
|
|
|
elif metric_type.lower() in ['kitti', 'bdd100kmot']: |
|
|
return _mot_category(category='vehicle') |
|
|
|
|
|
elif metric_type.lower() in ['mcmot']: |
|
|
if anno_file and os.path.isfile(anno_file): |
|
|
cats = [] |
|
|
with open(anno_file) as f: |
|
|
for line in f.readlines(): |
|
|
cats.append(line.strip()) |
|
|
if cats[0] == 'background': |
|
|
cats = cats[1:] |
|
|
clsid2catid = {i: i for i in range(len(cats))} |
|
|
catid2name = {i: name for i, name in enumerate(cats)} |
|
|
return clsid2catid, catid2name |
|
|
|
|
|
else: |
|
|
logger.warning( |
|
|
"metric_type: {}, load default categories of VisDrone.".format( |
|
|
metric_type)) |
|
|
return _visdrone_category() |
|
|
|
|
|
else: |
|
|
raise ValueError("unknown metric type {}".format(metric_type)) |
|
|
|
|
|
|
|
|
def _mot_category(category='pedestrian'): |
|
|
""" |
|
|
Get class id to category id map and category id |
|
|
to category name map of mot dataset |
|
|
""" |
|
|
label_map = {category: 0} |
|
|
label_map = sorted(label_map.items(), key=lambda x: x[1]) |
|
|
cats = [l[0] for l in label_map] |
|
|
|
|
|
clsid2catid = {i: i for i in range(len(cats))} |
|
|
catid2name = {i: name for i, name in enumerate(cats)} |
|
|
|
|
|
return clsid2catid, catid2name |
|
|
|
|
|
|
|
|
def _coco17_category(): |
|
|
""" |
|
|
Get class id to category id map and category id |
|
|
to category name map of COCO2017 dataset |
|
|
|
|
|
""" |
|
|
clsid2catid = { |
|
|
1: 1, |
|
|
2: 2, |
|
|
3: 3, |
|
|
4: 4, |
|
|
5: 5, |
|
|
6: 6, |
|
|
7: 7, |
|
|
8: 8, |
|
|
9: 9, |
|
|
10: 10, |
|
|
11: 11, |
|
|
12: 13, |
|
|
13: 14, |
|
|
14: 15, |
|
|
15: 16, |
|
|
16: 17, |
|
|
17: 18, |
|
|
18: 19, |
|
|
19: 20, |
|
|
20: 21, |
|
|
21: 22, |
|
|
22: 23, |
|
|
23: 24, |
|
|
24: 25, |
|
|
25: 27, |
|
|
26: 28, |
|
|
27: 31, |
|
|
28: 32, |
|
|
29: 33, |
|
|
30: 34, |
|
|
31: 35, |
|
|
32: 36, |
|
|
33: 37, |
|
|
34: 38, |
|
|
35: 39, |
|
|
36: 40, |
|
|
37: 41, |
|
|
38: 42, |
|
|
39: 43, |
|
|
40: 44, |
|
|
41: 46, |
|
|
42: 47, |
|
|
43: 48, |
|
|
44: 49, |
|
|
45: 50, |
|
|
46: 51, |
|
|
47: 52, |
|
|
48: 53, |
|
|
49: 54, |
|
|
50: 55, |
|
|
51: 56, |
|
|
52: 57, |
|
|
53: 58, |
|
|
54: 59, |
|
|
55: 60, |
|
|
56: 61, |
|
|
57: 62, |
|
|
58: 63, |
|
|
59: 64, |
|
|
60: 65, |
|
|
61: 67, |
|
|
62: 70, |
|
|
63: 72, |
|
|
64: 73, |
|
|
65: 74, |
|
|
66: 75, |
|
|
67: 76, |
|
|
68: 77, |
|
|
69: 78, |
|
|
70: 79, |
|
|
71: 80, |
|
|
72: 81, |
|
|
73: 82, |
|
|
74: 84, |
|
|
75: 85, |
|
|
76: 86, |
|
|
77: 87, |
|
|
78: 88, |
|
|
79: 89, |
|
|
80: 90 |
|
|
} |
|
|
|
|
|
catid2name = { |
|
|
0: 'background', |
|
|
1: 'person', |
|
|
2: 'bicycle', |
|
|
3: 'car', |
|
|
4: 'motorcycle', |
|
|
5: 'airplane', |
|
|
6: 'bus', |
|
|
7: 'train', |
|
|
8: 'truck', |
|
|
9: 'boat', |
|
|
10: 'traffic light', |
|
|
11: 'fire hydrant', |
|
|
13: 'stop sign', |
|
|
14: 'parking meter', |
|
|
15: 'bench', |
|
|
16: 'bird', |
|
|
17: 'cat', |
|
|
18: 'dog', |
|
|
19: 'horse', |
|
|
20: 'sheep', |
|
|
21: 'cow', |
|
|
22: 'elephant', |
|
|
23: 'bear', |
|
|
24: 'zebra', |
|
|
25: 'giraffe', |
|
|
27: 'backpack', |
|
|
28: 'umbrella', |
|
|
31: 'handbag', |
|
|
32: 'tie', |
|
|
33: 'suitcase', |
|
|
34: 'frisbee', |
|
|
35: 'skis', |
|
|
36: 'snowboard', |
|
|
37: 'sports ball', |
|
|
38: 'kite', |
|
|
39: 'baseball bat', |
|
|
40: 'baseball glove', |
|
|
41: 'skateboard', |
|
|
42: 'surfboard', |
|
|
43: 'tennis racket', |
|
|
44: 'bottle', |
|
|
46: 'wine glass', |
|
|
47: 'cup', |
|
|
48: 'fork', |
|
|
49: 'knife', |
|
|
50: 'spoon', |
|
|
51: 'bowl', |
|
|
52: 'banana', |
|
|
53: 'apple', |
|
|
54: 'sandwich', |
|
|
55: 'orange', |
|
|
56: 'broccoli', |
|
|
57: 'carrot', |
|
|
58: 'hot dog', |
|
|
59: 'pizza', |
|
|
60: 'donut', |
|
|
61: 'cake', |
|
|
62: 'chair', |
|
|
63: 'couch', |
|
|
64: 'potted plant', |
|
|
65: 'bed', |
|
|
67: 'dining table', |
|
|
70: 'toilet', |
|
|
72: 'tv', |
|
|
73: 'laptop', |
|
|
74: 'mouse', |
|
|
75: 'remote', |
|
|
76: 'keyboard', |
|
|
77: 'cell phone', |
|
|
78: 'microwave', |
|
|
79: 'oven', |
|
|
80: 'toaster', |
|
|
81: 'sink', |
|
|
82: 'refrigerator', |
|
|
84: 'book', |
|
|
85: 'clock', |
|
|
86: 'vase', |
|
|
87: 'scissors', |
|
|
88: 'teddy bear', |
|
|
89: 'hair drier', |
|
|
90: 'toothbrush' |
|
|
} |
|
|
|
|
|
clsid2catid = {k - 1: v for k, v in clsid2catid.items()} |
|
|
catid2name.pop(0) |
|
|
|
|
|
return clsid2catid, catid2name |
|
|
|
|
|
|
|
|
def _dota_category(): |
|
|
""" |
|
|
Get class id to category id map and category id |
|
|
to category name map of dota dataset |
|
|
""" |
|
|
catid2name = { |
|
|
0: 'background', |
|
|
1: 'plane', |
|
|
2: 'baseball-diamond', |
|
|
3: 'bridge', |
|
|
4: 'ground-track-field', |
|
|
5: 'small-vehicle', |
|
|
6: 'large-vehicle', |
|
|
7: 'ship', |
|
|
8: 'tennis-court', |
|
|
9: 'basketball-court', |
|
|
10: 'storage-tank', |
|
|
11: 'soccer-ball-field', |
|
|
12: 'roundabout', |
|
|
13: 'harbor', |
|
|
14: 'swimming-pool', |
|
|
15: 'helicopter' |
|
|
} |
|
|
catid2name.pop(0) |
|
|
clsid2catid = {i: i + 1 for i in range(len(catid2name))} |
|
|
return clsid2catid, catid2name |
|
|
|
|
|
|
|
|
def _vocall_category(): |
|
|
""" |
|
|
Get class id to category id map and category id |
|
|
to category name map of mixup voc dataset |
|
|
|
|
|
""" |
|
|
label_map = pascalvoc_label() |
|
|
label_map = sorted(label_map.items(), key=lambda x: x[1]) |
|
|
cats = [l[0] for l in label_map] |
|
|
|
|
|
clsid2catid = {i: i for i in range(len(cats))} |
|
|
catid2name = {i: name for i, name in enumerate(cats)} |
|
|
|
|
|
return clsid2catid, catid2name |
|
|
|
|
|
|
|
|
def _widerface_category(): |
|
|
label_map = widerface_label() |
|
|
label_map = sorted(label_map.items(), key=lambda x: x[1]) |
|
|
cats = [l[0] for l in label_map] |
|
|
clsid2catid = {i: i for i in range(len(cats))} |
|
|
catid2name = {i: name for i, name in enumerate(cats)} |
|
|
|
|
|
return clsid2catid, catid2name |
|
|
|
|
|
|
|
|
def _oid19_category(): |
|
|
clsid2catid = {k: k + 1 for k in range(500)} |
|
|
|
|
|
catid2name = { |
|
|
0: "background", |
|
|
1: "Infant bed", |
|
|
2: "Rose", |
|
|
3: "Flag", |
|
|
4: "Flashlight", |
|
|
5: "Sea turtle", |
|
|
6: "Camera", |
|
|
7: "Animal", |
|
|
8: "Glove", |
|
|
9: "Crocodile", |
|
|
10: "Cattle", |
|
|
11: "House", |
|
|
12: "Guacamole", |
|
|
13: "Penguin", |
|
|
14: "Vehicle registration plate", |
|
|
15: "Bench", |
|
|
16: "Ladybug", |
|
|
17: "Human nose", |
|
|
18: "Watermelon", |
|
|
19: "Flute", |
|
|
20: "Butterfly", |
|
|
21: "Washing machine", |
|
|
22: "Raccoon", |
|
|
23: "Segway", |
|
|
24: "Taco", |
|
|
25: "Jellyfish", |
|
|
26: "Cake", |
|
|
27: "Pen", |
|
|
28: "Cannon", |
|
|
29: "Bread", |
|
|
30: "Tree", |
|
|
31: "Shellfish", |
|
|
32: "Bed", |
|
|
33: "Hamster", |
|
|
34: "Hat", |
|
|
35: "Toaster", |
|
|
36: "Sombrero", |
|
|
37: "Tiara", |
|
|
38: "Bowl", |
|
|
39: "Dragonfly", |
|
|
40: "Moths and butterflies", |
|
|
41: "Antelope", |
|
|
42: "Vegetable", |
|
|
43: "Torch", |
|
|
44: "Building", |
|
|
45: "Power plugs and sockets", |
|
|
46: "Blender", |
|
|
47: "Billiard table", |
|
|
48: "Cutting board", |
|
|
49: "Bronze sculpture", |
|
|
50: "Turtle", |
|
|
51: "Broccoli", |
|
|
52: "Tiger", |
|
|
53: "Mirror", |
|
|
54: "Bear", |
|
|
55: "Zucchini", |
|
|
56: "Dress", |
|
|
57: "Volleyball", |
|
|
58: "Guitar", |
|
|
59: "Reptile", |
|
|
60: "Golf cart", |
|
|
61: "Tart", |
|
|
62: "Fedora", |
|
|
63: "Carnivore", |
|
|
64: "Car", |
|
|
65: "Lighthouse", |
|
|
66: "Coffeemaker", |
|
|
67: "Food processor", |
|
|
68: "Truck", |
|
|
69: "Bookcase", |
|
|
70: "Surfboard", |
|
|
71: "Footwear", |
|
|
72: "Bench", |
|
|
73: "Necklace", |
|
|
74: "Flower", |
|
|
75: "Radish", |
|
|
76: "Marine mammal", |
|
|
77: "Frying pan", |
|
|
78: "Tap", |
|
|
79: "Peach", |
|
|
80: "Knife", |
|
|
81: "Handbag", |
|
|
82: "Laptop", |
|
|
83: "Tent", |
|
|
84: "Ambulance", |
|
|
85: "Christmas tree", |
|
|
86: "Eagle", |
|
|
87: "Limousine", |
|
|
88: "Kitchen & dining room table", |
|
|
89: "Polar bear", |
|
|
90: "Tower", |
|
|
91: "Football", |
|
|
92: "Willow", |
|
|
93: "Human head", |
|
|
94: "Stop sign", |
|
|
95: "Banana", |
|
|
96: "Mixer", |
|
|
97: "Binoculars", |
|
|
98: "Dessert", |
|
|
99: "Bee", |
|
|
100: "Chair", |
|
|
101: "Wood-burning stove", |
|
|
102: "Flowerpot", |
|
|
103: "Beaker", |
|
|
104: "Oyster", |
|
|
105: "Woodpecker", |
|
|
106: "Harp", |
|
|
107: "Bathtub", |
|
|
108: "Wall clock", |
|
|
109: "Sports uniform", |
|
|
110: "Rhinoceros", |
|
|
111: "Beehive", |
|
|
112: "Cupboard", |
|
|
113: "Chicken", |
|
|
114: "Man", |
|
|
115: "Blue jay", |
|
|
116: "Cucumber", |
|
|
117: "Balloon", |
|
|
118: "Kite", |
|
|
119: "Fireplace", |
|
|
120: "Lantern", |
|
|
121: "Missile", |
|
|
122: "Book", |
|
|
123: "Spoon", |
|
|
124: "Grapefruit", |
|
|
125: "Squirrel", |
|
|
126: "Orange", |
|
|
127: "Coat", |
|
|
128: "Punching bag", |
|
|
129: "Zebra", |
|
|
130: "Billboard", |
|
|
131: "Bicycle", |
|
|
132: "Door handle", |
|
|
133: "Mechanical fan", |
|
|
134: "Ring binder", |
|
|
135: "Table", |
|
|
136: "Parrot", |
|
|
137: "Sock", |
|
|
138: "Vase", |
|
|
139: "Weapon", |
|
|
140: "Shotgun", |
|
|
141: "Glasses", |
|
|
142: "Seahorse", |
|
|
143: "Belt", |
|
|
144: "Watercraft", |
|
|
145: "Window", |
|
|
146: "Giraffe", |
|
|
147: "Lion", |
|
|
148: "Tire", |
|
|
149: "Vehicle", |
|
|
150: "Canoe", |
|
|
151: "Tie", |
|
|
152: "Shelf", |
|
|
153: "Picture frame", |
|
|
154: "Printer", |
|
|
155: "Human leg", |
|
|
156: "Boat", |
|
|
157: "Slow cooker", |
|
|
158: "Croissant", |
|
|
159: "Candle", |
|
|
160: "Pancake", |
|
|
161: "Pillow", |
|
|
162: "Coin", |
|
|
163: "Stretcher", |
|
|
164: "Sandal", |
|
|
165: "Woman", |
|
|
166: "Stairs", |
|
|
167: "Harpsichord", |
|
|
168: "Stool", |
|
|
169: "Bus", |
|
|
170: "Suitcase", |
|
|
171: "Human mouth", |
|
|
172: "Juice", |
|
|
173: "Skull", |
|
|
174: "Door", |
|
|
175: "Violin", |
|
|
176: "Chopsticks", |
|
|
177: "Digital clock", |
|
|
178: "Sunflower", |
|
|
179: "Leopard", |
|
|
180: "Bell pepper", |
|
|
181: "Harbor seal", |
|
|
182: "Snake", |
|
|
183: "Sewing machine", |
|
|
184: "Goose", |
|
|
185: "Helicopter", |
|
|
186: "Seat belt", |
|
|
187: "Coffee cup", |
|
|
188: "Microwave oven", |
|
|
189: "Hot dog", |
|
|
190: "Countertop", |
|
|
191: "Serving tray", |
|
|
192: "Dog bed", |
|
|
193: "Beer", |
|
|
194: "Sunglasses", |
|
|
195: "Golf ball", |
|
|
196: "Waffle", |
|
|
197: "Palm tree", |
|
|
198: "Trumpet", |
|
|
199: "Ruler", |
|
|
200: "Helmet", |
|
|
201: "Ladder", |
|
|
202: "Office building", |
|
|
203: "Tablet computer", |
|
|
204: "Toilet paper", |
|
|
205: "Pomegranate", |
|
|
206: "Skirt", |
|
|
207: "Gas stove", |
|
|
208: "Cookie", |
|
|
209: "Cart", |
|
|
210: "Raven", |
|
|
211: "Egg", |
|
|
212: "Burrito", |
|
|
213: "Goat", |
|
|
214: "Kitchen knife", |
|
|
215: "Skateboard", |
|
|
216: "Salt and pepper shakers", |
|
|
217: "Lynx", |
|
|
218: "Boot", |
|
|
219: "Platter", |
|
|
220: "Ski", |
|
|
221: "Swimwear", |
|
|
222: "Swimming pool", |
|
|
223: "Drinking straw", |
|
|
224: "Wrench", |
|
|
225: "Drum", |
|
|
226: "Ant", |
|
|
227: "Human ear", |
|
|
228: "Headphones", |
|
|
229: "Fountain", |
|
|
230: "Bird", |
|
|
231: "Jeans", |
|
|
232: "Television", |
|
|
233: "Crab", |
|
|
234: "Microphone", |
|
|
235: "Home appliance", |
|
|
236: "Snowplow", |
|
|
237: "Beetle", |
|
|
238: "Artichoke", |
|
|
239: "Jet ski", |
|
|
240: "Stationary bicycle", |
|
|
241: "Human hair", |
|
|
242: "Brown bear", |
|
|
243: "Starfish", |
|
|
244: "Fork", |
|
|
245: "Lobster", |
|
|
246: "Corded phone", |
|
|
247: "Drink", |
|
|
248: "Saucer", |
|
|
249: "Carrot", |
|
|
250: "Insect", |
|
|
251: "Clock", |
|
|
252: "Castle", |
|
|
253: "Tennis racket", |
|
|
254: "Ceiling fan", |
|
|
255: "Asparagus", |
|
|
256: "Jaguar", |
|
|
257: "Musical instrument", |
|
|
258: "Train", |
|
|
259: "Cat", |
|
|
260: "Rifle", |
|
|
261: "Dumbbell", |
|
|
262: "Mobile phone", |
|
|
263: "Taxi", |
|
|
264: "Shower", |
|
|
265: "Pitcher", |
|
|
266: "Lemon", |
|
|
267: "Invertebrate", |
|
|
268: "Turkey", |
|
|
269: "High heels", |
|
|
270: "Bust", |
|
|
271: "Elephant", |
|
|
272: "Scarf", |
|
|
273: "Barrel", |
|
|
274: "Trombone", |
|
|
275: "Pumpkin", |
|
|
276: "Box", |
|
|
277: "Tomato", |
|
|
278: "Frog", |
|
|
279: "Bidet", |
|
|
280: "Human face", |
|
|
281: "Houseplant", |
|
|
282: "Van", |
|
|
283: "Shark", |
|
|
284: "Ice cream", |
|
|
285: "Swim cap", |
|
|
286: "Falcon", |
|
|
287: "Ostrich", |
|
|
288: "Handgun", |
|
|
289: "Whiteboard", |
|
|
290: "Lizard", |
|
|
291: "Pasta", |
|
|
292: "Snowmobile", |
|
|
293: "Light bulb", |
|
|
294: "Window blind", |
|
|
295: "Muffin", |
|
|
296: "Pretzel", |
|
|
297: "Computer monitor", |
|
|
298: "Horn", |
|
|
299: "Furniture", |
|
|
300: "Sandwich", |
|
|
301: "Fox", |
|
|
302: "Convenience store", |
|
|
303: "Fish", |
|
|
304: "Fruit", |
|
|
305: "Earrings", |
|
|
306: "Curtain", |
|
|
307: "Grape", |
|
|
308: "Sofa bed", |
|
|
309: "Horse", |
|
|
310: "Luggage and bags", |
|
|
311: "Desk", |
|
|
312: "Crutch", |
|
|
313: "Bicycle helmet", |
|
|
314: "Tick", |
|
|
315: "Airplane", |
|
|
316: "Canary", |
|
|
317: "Spatula", |
|
|
318: "Watch", |
|
|
319: "Lily", |
|
|
320: "Kitchen appliance", |
|
|
321: "Filing cabinet", |
|
|
322: "Aircraft", |
|
|
323: "Cake stand", |
|
|
324: "Candy", |
|
|
325: "Sink", |
|
|
326: "Mouse", |
|
|
327: "Wine", |
|
|
328: "Wheelchair", |
|
|
329: "Goldfish", |
|
|
330: "Refrigerator", |
|
|
331: "French fries", |
|
|
332: "Drawer", |
|
|
333: "Treadmill", |
|
|
334: "Picnic basket", |
|
|
335: "Dice", |
|
|
336: "Cabbage", |
|
|
337: "Football helmet", |
|
|
338: "Pig", |
|
|
339: "Person", |
|
|
340: "Shorts", |
|
|
341: "Gondola", |
|
|
342: "Honeycomb", |
|
|
343: "Doughnut", |
|
|
344: "Chest of drawers", |
|
|
345: "Land vehicle", |
|
|
346: "Bat", |
|
|
347: "Monkey", |
|
|
348: "Dagger", |
|
|
349: "Tableware", |
|
|
350: "Human foot", |
|
|
351: "Mug", |
|
|
352: "Alarm clock", |
|
|
353: "Pressure cooker", |
|
|
354: "Human hand", |
|
|
355: "Tortoise", |
|
|
356: "Baseball glove", |
|
|
357: "Sword", |
|
|
358: "Pear", |
|
|
359: "Miniskirt", |
|
|
360: "Traffic sign", |
|
|
361: "Girl", |
|
|
362: "Roller skates", |
|
|
363: "Dinosaur", |
|
|
364: "Porch", |
|
|
365: "Human beard", |
|
|
366: "Submarine sandwich", |
|
|
367: "Screwdriver", |
|
|
368: "Strawberry", |
|
|
369: "Wine glass", |
|
|
370: "Seafood", |
|
|
371: "Racket", |
|
|
372: "Wheel", |
|
|
373: "Sea lion", |
|
|
374: "Toy", |
|
|
375: "Tea", |
|
|
376: "Tennis ball", |
|
|
377: "Waste container", |
|
|
378: "Mule", |
|
|
379: "Cricket ball", |
|
|
380: "Pineapple", |
|
|
381: "Coconut", |
|
|
382: "Doll", |
|
|
383: "Coffee table", |
|
|
384: "Snowman", |
|
|
385: "Lavender", |
|
|
386: "Shrimp", |
|
|
387: "Maple", |
|
|
388: "Cowboy hat", |
|
|
389: "Goggles", |
|
|
390: "Rugby ball", |
|
|
391: "Caterpillar", |
|
|
392: "Poster", |
|
|
393: "Rocket", |
|
|
394: "Organ", |
|
|
395: "Saxophone", |
|
|
396: "Traffic light", |
|
|
397: "Cocktail", |
|
|
398: "Plastic bag", |
|
|
399: "Squash", |
|
|
400: "Mushroom", |
|
|
401: "Hamburger", |
|
|
402: "Light switch", |
|
|
403: "Parachute", |
|
|
404: "Teddy bear", |
|
|
405: "Winter melon", |
|
|
406: "Deer", |
|
|
407: "Musical keyboard", |
|
|
408: "Plumbing fixture", |
|
|
409: "Scoreboard", |
|
|
410: "Baseball bat", |
|
|
411: "Envelope", |
|
|
412: "Adhesive tape", |
|
|
413: "Briefcase", |
|
|
414: "Paddle", |
|
|
415: "Bow and arrow", |
|
|
416: "Telephone", |
|
|
417: "Sheep", |
|
|
418: "Jacket", |
|
|
419: "Boy", |
|
|
420: "Pizza", |
|
|
421: "Otter", |
|
|
422: "Office supplies", |
|
|
423: "Couch", |
|
|
424: "Cello", |
|
|
425: "Bull", |
|
|
426: "Camel", |
|
|
427: "Ball", |
|
|
428: "Duck", |
|
|
429: "Whale", |
|
|
430: "Shirt", |
|
|
431: "Tank", |
|
|
432: "Motorcycle", |
|
|
433: "Accordion", |
|
|
434: "Owl", |
|
|
435: "Porcupine", |
|
|
436: "Sun hat", |
|
|
437: "Nail", |
|
|
438: "Scissors", |
|
|
439: "Swan", |
|
|
440: "Lamp", |
|
|
441: "Crown", |
|
|
442: "Piano", |
|
|
443: "Sculpture", |
|
|
444: "Cheetah", |
|
|
445: "Oboe", |
|
|
446: "Tin can", |
|
|
447: "Mango", |
|
|
448: "Tripod", |
|
|
449: "Oven", |
|
|
450: "Mouse", |
|
|
451: "Barge", |
|
|
452: "Coffee", |
|
|
453: "Snowboard", |
|
|
454: "Common fig", |
|
|
455: "Salad", |
|
|
456: "Marine invertebrates", |
|
|
457: "Umbrella", |
|
|
458: "Kangaroo", |
|
|
459: "Human arm", |
|
|
460: "Measuring cup", |
|
|
461: "Snail", |
|
|
462: "Loveseat", |
|
|
463: "Suit", |
|
|
464: "Teapot", |
|
|
465: "Bottle", |
|
|
466: "Alpaca", |
|
|
467: "Kettle", |
|
|
468: "Trousers", |
|
|
469: "Popcorn", |
|
|
470: "Centipede", |
|
|
471: "Spider", |
|
|
472: "Sparrow", |
|
|
473: "Plate", |
|
|
474: "Bagel", |
|
|
475: "Personal care", |
|
|
476: "Apple", |
|
|
477: "Brassiere", |
|
|
478: "Bathroom cabinet", |
|
|
479: "studio couch", |
|
|
480: "Computer keyboard", |
|
|
481: "Table tennis racket", |
|
|
482: "Sushi", |
|
|
483: "Cabinetry", |
|
|
484: "Street light", |
|
|
485: "Towel", |
|
|
486: "Nightstand", |
|
|
487: "Rabbit", |
|
|
488: "Dolphin", |
|
|
489: "Dog", |
|
|
490: "Jug", |
|
|
491: "Wok", |
|
|
492: "Fire hydrant", |
|
|
493: "Human eye", |
|
|
494: "Skyscraper", |
|
|
495: "Backpack", |
|
|
496: "Potato", |
|
|
497: "Paper towel", |
|
|
498: "Lifejacket", |
|
|
499: "Bicycle wheel", |
|
|
500: "Toilet", |
|
|
} |
|
|
|
|
|
return clsid2catid, catid2name |
|
|
|
|
|
|
|
|
def _visdrone_category(): |
|
|
clsid2catid = {i: i for i in range(10)} |
|
|
|
|
|
catid2name = { |
|
|
0: 'pedestrian', |
|
|
1: 'people', |
|
|
2: 'bicycle', |
|
|
3: 'car', |
|
|
4: 'van', |
|
|
5: 'truck', |
|
|
6: 'tricycle', |
|
|
7: 'awning-tricycle', |
|
|
8: 'bus', |
|
|
9: 'motor' |
|
|
} |
|
|
return clsid2catid, catid2name |
|
|
|