🐥

Label Studio に既存アノテーションを一括インポートする手順

に公開

概要

学習済みモデルで推論して得られた 画像 + セグメンテーションマスク のペアを Label Studio に読み込み、誤検知箇所だけを効率良く修正する事前準備の方法をメモ程度に紹介します。

公式ドキュメントの内容をベースにしていますので、詳細はこちらをご確認ください。


想定読者

  • すでに画像セグメンテーションモデルを持っておりアノテーション修正をしたい
  • Label Studio をインストール済み (Self-Hosted を筆者は使用)

ゴール

  1. 画像とマスクを入力すると tasks.json を自動生成
  2. 生成した JSON を Label Studio にインポート
  3. Web UI で各マスクをブラシツールで微修正できる状態になる

事前準備

1. ディレクトリ構成

project/
├── images/         # 元画像 (JPG, PNG ... )
├── masks/          # 同名のセグメンテーションマスク (PNG)
└── gen_ls_tasks.py # 後述のスクリプト

2. Python ライブラリ

パッケージ管理に uv を使用しています。

Labeling Interface の設定例

以下は ブラシ の最小構成の例です。
ブラシ用ラベル(BrushLabels)に roadsign を定義していますが、必要に応じて追加 / 変更してください。

<View>
  <Header value="Select label and click the image to start"/>

  <View style="display:flex;align-items:start;gap:8px;flex-direction:column">
    <Image name="image" value="$image" zoom="true" zoomControl="true" rotateControl="true"/>
    <RectangleLabels name="label" toName="image" showInline="true"/>
  </View>

  <TextArea name="transcription" toName="image" editable="true" perRegion="true"
            maxSubmissions="1" rows="5" placeholder="memo" displayMode="region-list"/>

  <BrushLabels name="tag" toName="image">
    <Label value="road" background="rgba(255, 0, 0, 0.7)"/>
    <Label value="sign" background="rgba(0, 0, 255, 0.7)"/>
  </BrushLabels>
</View>

スクリプトのカスタマイズ

GitHub リポジトリ: https://github.com/go6887/label_studio_segmantation_mask_import

コードの多くはgpt o3に生成してもらっています。

最小限触る必要があるのは 2 か所 だけです。

変数 説明
COLOR_LABEL_MAP マスク画像の RGB とラベル名の対応表 {(255,0,0): "road", (0,0,255): "sign"}
image フィールド Label Studio から参照可能な画像パス s3://bucket/path/to/img.png など

使用方法

uv run python gen_ls_tasks.py \
  --images_dir ./images \
  --masks_dir  ./masks \
  --s3_bucket  your-bucket-name \
  --s3_prefix  optional/prefix \
  --output     tasks.json

引数の意味:

  • images_dir : 元画像が入ったローカルディレクトリ
  • masks_dir : 対応するマスク(PNG) を保存したディレクトリ
  • s3_bucket : 画像を S3 管理している場合はバケット名 (ローカルのみで運用する場合は省略可)
  • s3_prefix : バケット内のフォルダパス
  • output : 生成されるタスクリスト(JSON) の保存先

コマンドが成功すると tasks.json が生成されます。


Label Studio へのインポート

  1. プロジェクト画面右上の ImportLocal files を選択
  2. 先ほど生成した tasks.json をアップロード
  3. タスク一覧・アノテーション画面で自動ラベルが反映されていることを確認
  4. ブラシツールで不要部分を消したり追加したりして修正

まとめ

  • 画像 + マスクペアを一括で Label Studio タスク化できる
  • COLOR_LABEL_MAP と画像パスさえ合わせればどのプロジェクトでも再利用可能
  • アノテーション修正作業を短縮でき、学習データの再フィードバックも簡単

自動推論 → Label Studio で修正 → 再学習のループを高速化して、アノテーションコストを削減していきましょう。

Discussion