File size: 1,934 Bytes
5fa1a76
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import json
format annotations the same as for training, no need for data augmentation
def val_formatted_anns(image_id, objects):
     annotations = []
     for i in range(0, len(objects["id"])):
         new_ann = {
             "id": objects["id"][i],
             "category_id": objects["category"][i],
             "iscrowd": 0,
             "image_id": image_id,
             "area": objects["area"][i],
             "bbox": objects["bbox"][i],
         }
         annotations.append(new_ann)

     return annotations

Save images and annotations into the files torchvision.datasets.CocoDetection expects
def save_cppe5_annotation_file_images(cppe5):
     output_json = {}
     path_output_cppe5 = f"{os.getcwd()}/cppe5/"

     if not os.path.exists(path_output_cppe5):
         os.makedirs(path_output_cppe5)
     path_anno = os.path.join(path_output_cppe5, "cppe5_ann.json")
     categories_json = [{"supercategory": "none", "id": id, "name": id2label[id]} for id in id2label]
     output_json["images"] = []
     output_json["annotations"] = []
     for example in cppe5:
         ann = val_formatted_anns(example["image_id"], example["objects"])
         output_json["images"].append(
             {
                 "id": example["image_id"],
                 "width": example["image"].width,
                 "height": example["image"].height,
                 "file_name": f"{example['image_id']}.png",
             }
         )
         output_json["annotations"].extend(ann)
     output_json["categories"] = categories_json
     with open(path_anno, "w") as file:
         json.dump(output_json, file, ensure_ascii=False, indent=4)
     for im, img_id in zip(cppe5["image"], cppe5["image_id"]):
         path_img = os.path.join(path_output_cppe5, f"{img_id}.png")
         im.save(path_img)
     return path_output_cppe5, path_anno

Next, prepare an instance of a CocoDetection class that can be used with cocoevaluator.