TensorFlowで使用する MS COCOスタイル データセットを作成する方法は?誰かがこれを経験したことがありますか?私は画像、注釈、そしてグラウンドトゥルースマスクを持っています。 MS COCOと互換性があるように変換する必要があり、助けていただければ幸いです。 COCOスタイルのJSONアノテーションを作成するためのオープンソースツールが見つかりません。
TensorFlow MS COCOは、私があまり経験していないJSONファイルを読み取ります。
0と1のマスク配列をCOCOスタイルのデータセットと同様のポリゴンに変換するには、 waleedka によるコードのおかげで、 skimage.measure.find_contours を使用します。
import numpy
from skimage.measure import find_contours
mask = numpy.zeros(width, height) # Mask
mask_polygons = [] # Mask Polygons
# Pad to ensure proper polygons for masks that touch image edges.
padded_mask = np.zeros(
(mask.shape[0] + 2, mask.shape[1] + 2), dtype=np.uint8)
padded_mask[1:-1, 1:-1] = mask
contours = find_contours(padded_mask, 0.5)
for verts in contours:
# Subtract the padding and flip (y, x) to (x, y)
verts = np.fliplr(verts) - 1
pat = PatchCollection([Polygon(verts, closed=True)], facecolor='green', linewidths=0, alpha=0.6)
mask_polygons.append(pat)
COCOスタイルのデータセットのJSONファイルを生成するには、 PythonのJSON API を調べる必要があります。それを超えて、それは単にCOCOデータセットのJSONファイルによって使用されるフォーマットと一致することについてです。
私の COCOスタイルのデータセットジェネレータGUIリポジトリ を見てください。 COCOスタイルのデータセットを作成するための非常にシンプルなツールを作成しました。
関心のある特定のファイルは create_json_file.py です。これは、すべてのポリゴンアノテーションのmatplotlibポリゴン座標を(x1、y1、x2、y2 ...)の形式で取得し、JSONに変換します。 COCOのデフォルト形式と非常によく似た注釈ファイル。
Pycococreatorの使用を試みることができます。これには、バイナリマスクをCOCOが使用するポリゴンおよびRLE形式に変換するための一連のツールが含まれています。
https://github.com/waspinator/pycococreator/
これを使用して、バイナリマスクから注釈情報を作成する方法の例を次に示します。
annotation_info = pycococreatortools.create_annotation_info(
segmentation_id, image_id, category_info, binary_mask,
image.size, tolerance=2)
Pycococreatorの使用方法の詳細については、こちらをご覧ください: https://patrickwasp.com/create-your-own-coco-style-dataset/
私はpythonライブラリに取り組んでいます。このライブラリには、これを行うための多くの便利なクラスと関数があります。これは Image Semantics と呼ばれます。
マスクを追加してCOCO形式でエクスポートする例を次に示します。
from imantics import Mask, Image, Category
image = Image.from_path('path/to/image.png')
mask = Mask(mask_array)
image.add(mask, category=Category("Category Name"))
# dict of coco
coco_json = image.export(style='coco')
# Saves to file
image.save('coco/annotation.json', style='coco')
COCOスタイルデータセットを作成し、そのAPIを使用してメトリックを評価する
オブジェクト検出タスクの注釈と結果ファイルを作成するとします(したがって、境界ボックスだけに関心があります)。これは、COCOAPIメトリックを使用するために適切にフォーマットされた注釈ファイルと結果ファイルを作成する方法を示す簡単で軽量な例です。
注釈ファイル:ann.json
{"images":[{"id": 73}],"annotations":[{"image_id":73,"category_id":1,"bbox":[10,10,50,100],"id":1,"iscrowd": 0,"area": 10}],"categories": [{"id": 1, "name": "person"}, {"id": 2, "name": "bicycle"}, {"id": 3, "name": "car"}]}
結果ファイル:res.json
[{"image_id":73,"category_id":1,"bbox":[10,10,50,100],"score":0.9}]
これで、次のスクリプトを使用してCOCOメトリックを評価できます。
from pycocotools.coco import COCO
from pycocotools.cocoeval import COCOeval
annFile = './ann.json'
resFile='./res.json'
cocoGt=COCO(annFile)
cocoDt=cocoGt.loadRes(resFile)
annType = 'bbox'
cocoEval = COCOeval(cocoGt,cocoDt,annType)
cocoEval.evaluate()
cocoEval.accumulate()
cocoEval.summarize()