kaleido_annotation 操作手順書
Flask 製の COCO 1.0 互換 矩形アノテーションツールです。CVAT バックアップとの相互運用、水増し画像の出力、EXIF 回転の自動修正に対応しています。
templates/ をご確認ください。
1. インストールと起動
必要環境
- Python 3.10 以上
- OpenCV が動作する OS(Ubuntu 22.04 / Windows 11 で確認)
- ONNX 自動アノテーションを使う場合は CPU で動作する
onnxruntime(または GPU 版)
セットアップ
git clone https://github.com/takashide/kaleido_annotation.git
cd kaleido_annotation
python -m venv .venv
# Linux / macOS
source .venv/bin/activate
# Windows PowerShell
.venv\Scripts\Activate.ps1
pip install -r requirements.txt
起動
# 同梱の起動スクリプト
./run_ubuntu.sh # Linux/macOS
run_windows.bat # Windows
# または直接
python app.py
ブラウザで http://127.0.0.1:5000 を開きます。
instance/ 配下はランタイムデータ(DB・アップロード画像・エクスポート ZIP)です。GB 規模になるため Git には含まれません。共有スナップショットは README に記載の ownCloud から取得してください。
2. ログイン
環境変数 REQUIRE_LOGIN=1 でログインを要求できます。未設定なら匿名アクセスです。
| 項目 | 初期値 |
|---|---|
| 管理者ユーザー | 初回起動時に admin アカウントが自動作成(パスワードはコンソール出力) |
| 一般ユーザー追加 | 管理者ログイン後、/admin/users から |
3. プロジェクト管理
プロジェクトはデータ集合の単位です。クラス(カテゴリ)はプロジェクトごとに独立します。
新規プロジェクトの作成
- トップ
/または「プロジェクト一覧」を開く - + 新規作成 をクリック
- プロジェクト名・説明を入力 → 作成
ZIP / バックアップから作成
同じ画面から、既存の COCO ZIP や CVAT タスクバックアップを取り込んで新規プロジェクトを起こせます。詳細は 第10章。
4. データ登録
4.1 画像のアップロード
- プロジェクト画面の「画像アップロード」セクション
- 複数ファイル選択可(
.jpg .jpeg .png .bmp .webp) - 登録ボタン → サムネイル付きで一覧に表示
4.2 動画からフレーム抽出
- 「動画 → フレーム分割」セクションに動画ファイルを選択
- 抽出間隔(秒)を入力(例:
1.0で1秒ごと) - 「キューに追加」→ バックグラウンドで JPEG 化されアノテーション対象になる
対応形式: .mp4 .mov .avi .mkv .webm
5. クラス管理
「クラス管理」セクションで追加・削除します。クラスは プロジェクトごとに独立。
追加
- クラス名を入力
- カラーピッカーで bbox 描画色を選択
- 追加ボタン
削除
クラス右の ✕ をクリック。そのクラスのアノテーションが1件でも存在する場合は削除できません。先にアノテーションを別クラスに変えるか削除してください。
eesp32 など)や表記揺れ(Insta360X5)が混入することがあります。学習側設定の class_list と完全一致させる必要があるため、取り込み後に名前を確認してください。
6. アノテーション作成
6.1 基本操作
- サムネイル一覧から画像をクリック → アノテーション画面へ
- 左のクラスパレットから描きたいクラスを選択
- 画像上で左クリックドラッグ → 矩形を描画
- マウスを離すと矩形確定 → サーバ保存
編集
| 動作 | 操作 |
|---|---|
| 選択 | 矩形内をクリック |
| 移動 | 矩形内をドラッグ |
| サイズ変更 | 四隅・四辺のハンドルをドラッグ |
| クラス変更 | 矩形選択中に左パレットの別クラスをクリック |
| 削除 | 矩形選択中に Delete または右クリック→削除 |
6.2 ショートカット
| キー | 動作 |
|---|---|
| ← / → | 前の画像 / 次の画像 |
| Ctrl+C / Ctrl+V | 選択 bbox のコピー / ペースト |
| Delete | 選択 bbox を削除 |
| Esc | 選択解除 / 描画キャンセル |
6.3 ONNX 自動アノテーション
事前学習済み ONNX モデルを使って bbox 候補を自動生成できます。auto_annotate.py が YOLOv5/YOLOv8 系の典型的な出力をデコードします。
モデル登録
/models画面で ONNX モデルファイル(.onnx)と クラス名(カンマ区切り)を登録- 登録モデルはプロジェクト共通で使える
1画像で実行
アノテーション画面の「ONNX自動」ボタン → モデル選択 → 信頼度しきい値を指定して実行。
全画像に一括実行
プロジェクト画面の「全画像に自動注釈」セクションで、モデルと信頼度を指定して開始。バックグラウンドジョブで進行します。
auto_annotate.py の preprocess() と postprocess() を調整してください。
7. Train/Val 分割
各画像に train / val / test のラベルを付けて、エクスポート時に分割出力できます。
個別指定
アノテーション画面右の split セレクトボックスで切り替え。
一括指定
- 「登録データ」セクションでサムネイル左上のチェックボックスを選択
- 「全選択」も可
- 「一括 split」セレクトで対象(train/val/test/未割当)を選び「適用」
8. EXIF 回転を修正(重要)
スマホやデジカメで縦撮影した画像は、ファイル実体は横向きのまま EXIF タグで「90度回転して表示せよ」と指示しているものがあります。古い経路で取り込んだデータがこの状態だと bbox が左下にズレて見える 問題が起きます。
仕組み
| 項目 | 正常 | EXIF 回転あり(壊れた状態) |
|---|---|---|
| ファイル実体 | 3000×4000 portrait | 4000×3000 landscape + EXIF=6 |
| ブラウザ表示 | 3000×4000 | 3000×4000(EXIF 適用) |
| DB 記録 dim | 3000×4000 | 4000×3000 ← 不整合 |
| bbox 座標系 | portrait | portrait(CVAT 由来) vs landscape DB |
修正手順
- プロジェクト画面の CVAT バックアップ欄にある EXIF回転を修正 ボタンを押す
- 確認ダイアログで「OK」
- 対象画像が pixel レベルで portrait に焼き込まれ、DB の width/height も更新
- アノテーション画面で bbox が正しい位置に表示されるようになる
事前ブロック機能
EXIF 回転が残っている状態で COCO JSON / COCO ZIP / CVAT バックアップ のいずれかをエクスポートしようとすると、警告画面が表示されてブロックされます。画面の EXIF回転を修正する から1クリックで修正できます。
9. エクスポート
すべてプロジェクト画面の「エクスポート」セクションにあります。
9.1 COCO JSON / ZIP
| ボタン | 内容 | 用途 |
|---|---|---|
| 全件 COCO JSON | JSON のみ(画像なし)。全画像 | 確認用 |
| 注釈済み JSON | JSON のみ。注釈のある画像のみ | 確認用 |
| train JSON / val JSON | JSON のみ。split で絞り込み | 確認用 |
| 学習用 ZIP (全画像 train扱い) | 画像 + JSON。全画像を train として | 学習投入(split 未使用時) |
| train ZIP / val ZIP | 画像 + JSON。split で絞り込み | 学習投入 |
ZIP の中身は以下の構造(YOLO / MMDetection 等の COCO ローダーが直接読める):
coco_pN_xxx_YYYYMMDD_HHMMSS.zip
├── annotations/
│ └── instances_train.json (または instances_val.json)
└── images/
├── img_001.jpg
└── ...
9.2 水増し画像(オフライン augmentation)
ZIP エクスポートに対してのみ適用されます。チェックボックスで切り替え:
| 項目 | 初期値 | 動作 |
|---|---|---|
| 左右反転(hflip) | ON | bbox の x をミラー |
| 明暗 (×0.7 / ×1.3) | ON | 明・暗の2枚を生成、bbox 変化なし |
| 上下反転(vflip) | OFF | bbox の y をミラー |
使い方:
- 「エクスポート」セクション上の水増しチェックボックスを設定
- 「train ZIP」等の ZIP ボタンを押す
- output は
coco_pN_train_aug_TS.zipとして保存
val ZIP では水増しは 強制的に無効化 されます(val を膨らませると AP が不当に上がるため)。
出力量の目安(39枚に対して)
| 有効化 | 出力枚数 |
|---|---|
| 何もなし | 39 |
| 左右反転のみ | 78 |
| 左右 + 明暗 | 195 |
| 全部 ON | 234 |
9.3 CVAT バックアップ
CVAT 公式の「Task Backup」ZIP 形式で出力します。CVAT に直接インポート可能。
cvat_backup_pN_YYYYMMDD_HHMMSS.zip
├── task.json (ラベル定義 + フレーム範囲)
├── annotations.json (shapes, xyxy points, frame=整数)
└── data/
├── original_filename_1.jpg
└── ...
用途:
- CVAT に編集を戻したい
- 当ツール間のプロジェクト丸ごとコピー
- バックアップ保管
10. インポート / 復元
10.1 COCO ZIP インポート
既存プロジェクトに追記する場合: プロジェクト画面の「COCO ZIP インポート」セクション。新規プロジェクトとして取り込む場合: プロジェクト一覧画面の「ZIP からインポート」ボタン。
受け付け構造:
any_name.zip
├── annotations/
│ ├── instances_default.json (または instances_train.json / instances_val.json)
└── images/
└── *.jpg
- JSON のファイル名に
train/val/testが含まれていれば自動で split が振られます - カテゴリは名前で既存に自動マッチ、未登録なら自動追加
- 画像は EXIF 自動正規化
10.2 CVAT バックアップ復元
既存プロジェクトに復元: 「CVAT バックアップ」セクションの このプロジェクトに復元。新規プロジェクトとして作成: プロジェクト一覧の CVATバックアップから復元。
- frame 順は
data/内のファイル名 lexicographical 順で解決(CVAT 既定挙動と一致) - クラスは task.json の名前と色を採用、既存と同名なら統合
- xyxy → xywh 変換は自動
- 画像は EXIF 自動正規化
11. 削除
画像の削除
サムネイル右上の「✕」または、まとめて選択して「一括削除」。該当画像のアノテーションも DB から消えます。
動画の削除
動画リストから削除。元動画 + 抽出フレーム + 該当アノテーション をすべて物理削除。
プロジェクトの削除
プロジェクト一覧画面の 削除。復元不能。事前に CVAT バックアップを取得しておくと安全です。
12. 学習データとして使う
当ツールから出力した ZIP は YOLO / MMDetection / Detectron2 など標準的な COCO ローダーで読めます。MultimediaTechLab/YOLO(YOLOv9)への投入手順例:
データセット配置
dataset_root/
├── images/
│ ├── train/ ← train ZIP の images/ 中身
│ └── val/ ← val ZIP の images/ 中身
└── annotations/
├── instances_train.json
└── instances_validation.json
dataset YAML
path: /path/to/dataset_root
train: train
validation: validation
class_num: 3
class_list: ["metron", "esp32", "insta360x5"]
auto_download:
class_num と class_list はエクスポート時のクラス数・名前と完全一致が必要です。1個でもズレると学習ヘッドが空になり AP=0 のままになります。
train.yaml の落とし穴
| 項目 | 注意 |
|---|---|
weight | 未指定はスクラッチ学習。少データなら必ず pretrained 指定 (weight: v9-t.pt 等) |
batch_size / equivalent_batch_size | 勾配累積に注意。学習画像が少ない時に equivalent_batch_size を大きくすると 1epoch あたりの optimizer.step が極端に減り loss が動かない |
image_size | 4000×3000 → 640 は小物体が消える。小物体が含まれるなら 1280 推奨 |
lr | nano モデルの head 再初期化時は 0.001 程度が安全 |
13. トラブルシューティング
Q. アノテーションした bbox が左下にズレて表示される
A. EXIF 回転が残っています。第8章 の「EXIF回転を修正」ボタンを押してください。
Q. エクスポートを押したらオレンジの警告ページが出た
A. EXIF 不整合の事前ブロックです。ページ内のボタンから修正してそのまま再エクスポートしてください。
Q. ONNX 自動アノテーションでエラーが出る
A. ONNX_MODEL_PATH が未設定か、モデルの出力形状が auto_annotate.py の前提と異なります。コンソール出力を確認し、必要なら auto_annotate.py を調整してください。
Q. 学習させても AP/AR が 0 のまま
以下を順に確認:
- val セットがあるか(5枚以上推奨)
class_numと DB のクラス数が一致- EXIF 回転を修正済みか
- pretrained weight 指定済みか
equivalent_batch_sizeが画像数に対して妥当か(少データならbatch_sizeと同値推奨)- warmup epoch 比率が高すぎないか
Q. 動画フレーム抽出が終わらない
A. バックグラウンドジョブで進行します。「動画」セクションに進捗が表示されます。長尺動画は時間がかかります。
Q. CVAT バックアップを CVAT に取り込むと向きが違う
A. 当ツールが EXIF 焼き込みを終えた画像は EXIF タグなしです。CVAT 側で正しく portrait/landscape として扱われるはず。もしずれている場合は、当ツールでアノテーション後に CVAT に渡したものではなく、別経路(手元のスマホ画像を CVAT に直接アップ等)でズレが起きている可能性があります。
© kaleido_annotation. ドキュメントの修正提案は Issues へお願いします。