アノテーションのインポート

アノテーションデータの取り込み方法について説明します。

🚧

インポート条件について

アノテーションをインポートするには、予めタスクアノテーションクラスが作成されている必要があります。

アノテーションをインポートする

プロジェクトの左サイドメニューで[インポート]をクリックして、アノテーションのインポート画面を開きます。

アノテーション情報が記載されたファイル(入力形式参照)をアップロードします。インポート処理の進行状況は[インポート履歴]で確認できます。[更新]アイコンをクリックすることで最新の処理状況が確認できます。

入力形式

インポート可能なファイル形式は以下になります(プロジェクトによってサポート対象は異なります)。

  • JSON
  • CSV
  • COCO
  • YOLO
  • Labelme
  • PascalVOC
  • TFRecord
  • マスク - セマンティック

入力形式サンプル

JSON

[
    {
        "name": "cat.jpg", // タスクの名前と一致させる
        "annotations": [
            {
                "type": "bbox", // polygon, keypoint, line, segmentation, cuboid
                "value": "body", // アノテーションクラスの値と一致させる
                "attributes": [
                    {
                        "key": "size", // 属性のキーと一致させる
                        "value": "medium"
                    }
                ],
                "points": [
                    49.5,
                    84.38,
                    174.65,
                    216
                ]
            }
        ]
    },
    {
        "name": "dog.jpg",
        "annotations": [
            {
                "type": "bbox",
                "value": "body",
                "attributes": [
                    {
                        "key": "size",
                        "value": "large"
                    }
                ],
                "points": [
                    24.3,
                    129.03,
                    134.92,
                    168.91
                ]
            },
            {
                "type": "bbox",
                "value": "head",
                "color": "#2e3df2",
                "points": [
                    132.28,
                    11.8,
                    244.44,
                    142.03
                ]
            }
        ]
    }
]

CSV

  • Name: タスクの名前と一致させる必要があります
  • Value: アノテーションクラスの値と一致させる必要があります
  • Attributeskey: 属性のキーと一致させる必要があります
"Name","Value","x1","y1","x2","y2","Attributes"
"cat.jpg","body","49.5","84.38","174.65","216","[{""key"":""size"",""value"":""medium""}]"
"dog.jpg","head","132.28","11.8","244.44","142.03",
"dog.jpg","body","24.3","129.03","134.92","168.91","[{""key"":""size"",""value"":""large""}]"

COCO

{
    "images": [
        {
            "file_name": "cat.jpg", // タスクの名前と一致させる
            "id": 1
        },
        {
            "file_name": "dog.jpg",
            "id": 2
        }
    ],
    "categories": [
        {
            "id": 1,
            "supercategory": "body" // アノテーションクラスの値と一致させる
        },
        {
            "id": 2,
            "supercategory": "head"
        }
    ],
    "annotations": [
        {
            "segmentation": [
                [
                    49.5,
                    84.38,
                    174.65,
                    216
                ]
            ],
            "image_id": 1,
            "category_id": 1,
            "id": 1
        },
        {
            "segmentation": [
                [
                    24.3,
                    129.03,
                    134.92,
                    168.91
                ]
            ],
            "image_id": 2,
            "category_id": 1,
            "id": 2
        },
        {
            "segmentation": [
                [
                    132.28,
                    11.8,
                    244.44,
                    142.03
                ]
            ],
            "image_id": 2,
            "category_id": 2,
            "id": 3
        }
    ]
}

YOLO

classes.txt 及び 各タスクに対応するファイル(cat.txtdog.txt)をZIP化したものを入力とします。例えば、以下のような構造のファイルをZIP化してアップロードします。

.
├── classes.txt
├── cat.txt
└── dog.txt
  • classes.txt の値: アノテーションクラスの値と一致させる必要があります
  • 各タスクに対応するファイル名: タスクの名前と一致させる必要があります
body
head
1 0.6472852 0.4445953 0.3854295 0.7527745
0 0.2735738 0.8610982 0.3801374 0.2305202
0 0.4981111 0.6675111 0.5562222 0.5849777

Labelme

{
    "shapes": [
        {
            "label": "body", // アノテーションクラスの値と一致させる
            "points": [
                [
                    49.5,
                    84.38
                ],
                [
                    174.65,
                    216
                ]
            ]
        }
    ],
    "imagePath": "cat.jpg", // タスクの名前と一致させる
}
{
    "shapes": [
        {
            "label": "head",
            "points": [
                [
                    132.28,
                    11.8
                ],
                [
                    244.44,
                    142.03
                ]
            ]
        },
        {
            "label": "body",
            "points": [
                [
                    24.3,
                    129.03
                ],
                [
                    134.92,
                    168.91
                ]
            ]
        }
    ],
    "imagePath": "dog.jpg"
}

PascalVOC

<annotation>
    <filename>cat.jpg</filename> // タスクの名前と一致させる
    <object>
        <name>body</name>  // アノテーションクラスの値と一致させる
        <bndbox>
            <xmin>49</xmin>
            <ymin>84</ymin>
            <xmax>174</xmax>
            <ymax>216</ymax>
        </bndbox>
    </object>
</annotation>
<annotation>
    <filename>dog.jpg</filename>
    <segmented>0</segmented>
    <object>
        <name>head</name>
        <bndbox>
            <xmin>132</xmin>
            <ymin>11</ymin>
            <xmax>244</xmax>
            <ymax>142</ymax>
        </bndbox>
    </object>
    <object>
        <name>body</name>
        <bndbox>
            <xmin>24</xmin>
            <ymin>129</ymin>
            <xmax>134</xmax>
            <ymax>168</ymax>
        </bndbox>
    </object>
</annotation>

TFRecord

各タスクに対応するファイル(cat.tfrecorddog.tfrecord)をZIP化したものを入力とします。例えば、以下のような構造のファイルをZIP化してアップロードします。

.
├── cat.tfrecord
└── dog.tfrecord

下記にTFRecordをデコードした中身をサンプルファイルとして表示しています。

features {
  feature {
    key: "image/filename"
    value {
      bytes_list {
        value: "cat.jpg" // タスクの名前と一致させる
      }
    }
  }
  feature {
    key: "image/height"
    value {
      int64_list {
        value: 225
      }
    }
  }
  feature {
    key: "image/object/bbox/xmax"
    value {
      float_list {
        value: 0.2177777737379074
      }
    }
  }
  feature {
    key: "image/object/bbox/xmin"
    value {
      float_list {
        value: 0.7733333110809326
      }
    }
  }
  feature {
    key: "image/object/bbox/ymax"
    value {
      float_list {
        value: 0.3733333349227905
      }
    }
  }
  feature {
    key: "image/object/bbox/ymin"
    value {
      float_list {
        value: 0.9599999785423279
      }
    }
  }
  feature {
    key: "image/object/class/text"
    value {
      bytes_list {
        value: "body" // アノテーションクラスの値と一致させる
      }
    }
  }
  feature {
    key: "image/width"
    value {
      int64_list {
        value: 225
      }
    }
  }
}
features {
  feature {
    key: "image/filename"
    value {
      bytes_list {
        value: "dog.jpg"
      }
    }
  }
  feature {
    key: "image/height"
    value {
      int64_list {
        value: 173
      }
    }
  }
  feature {
    key: "image/object/bbox/xmax"
    value {
      float_list {
        value: 0.8399999737739563
        value: 0.46364259719848633
      }
    }
  }
  feature {
    key: "image/object/bbox/xmin"
    value {
      float_list {
        value: 0.4545704424381256
        value: 0.08350515365600586
      }
    }
  }
  feature {
    key: "image/object/bbox/ymax"
    value {
      float_list {
        value: 0.8209826350212097
        value: 0.9763583540916443
      }
    }
  }
  feature {
    key: "image/object/bbox/ymin"
    value {
      float_list {
        value: 0.06820809096097946
        value: 0.7458381652832031
      }
    }
  }
  feature {
    key: "image/object/class/text"
    value {
      bytes_list {
        value: "head"
        value: "body"
      }
    }
  }
  feature {
    key: "image/width"
    value {
      int64_list {
        value: 291
      }
    }
  }
}

マスク画像 - セマンティック

各タスクに対応するファイル(bird.pngなど)をZIP化したものを入力とします。アップロードする際に下記の点に注意してください。

  • マスク画像のファイル名は、登録されているタスクの名前(拡張子を除く)と一致させる必要があります。
  • マスク画像がインデックスカラーの場合、マスク画像のインデックス番号(1, 2, 3, ..., n)が、登録されているアノテーションクラスの順番に対応します。
  • マスク画像がダイレクトカラー(各ピクセルでRGB値を持つ)の場合、マスク画像のRGB値が、登録されているアノテーションクラスのカラーコードに対応します。