Spaces:
Sleeping
Sleeping
Commit ·
7740f74
0
Parent(s):
first demo
Browse filesThis view is limited to 50 files because it contains too many changes. See raw diff
- .gitattributes +35 -0
- .gitignore +30 -0
- README.md +99 -0
- app.py +260 -0
- configs/base/dataloader.yml +39 -0
- configs/base/deim.yml +48 -0
- configs/base/deimv2.yml +144 -0
- configs/base/dfine_hgnetv2.yml +90 -0
- configs/base/optimizer.yml +35 -0
- configs/base/rt_deim.yml +49 -0
- configs/base/rt_optimizer.yml +37 -0
- configs/base/rtdetrv2_r50vd.yml +90 -0
- configs/dataset/coco_detection.yml +40 -0
- configs/dataset/crowdhuman_detection.yml +41 -0
- configs/dataset/custom_detection.yml +41 -0
- configs/dataset/obj365_detection.yml +41 -0
- configs/dataset/voc_detection.yml +40 -0
- configs/deim_dfine/deim_hgnetv2_l_coco.yml +37 -0
- configs/deim_dfine/deim_hgnetv2_m_coco.yml +39 -0
- configs/deim_dfine/deim_hgnetv2_n_coco.yml +44 -0
- configs/deim_dfine/deim_hgnetv2_s_coco.yml +39 -0
- configs/deim_dfine/deim_hgnetv2_x_coco.yml +37 -0
- configs/deim_dfine/dfine_hgnetv2_l_coco.yml +44 -0
- configs/deim_dfine/dfine_hgnetv2_m_coco.yml +60 -0
- configs/deim_dfine/dfine_hgnetv2_n_coco.yml +82 -0
- configs/deim_dfine/dfine_hgnetv2_s_coco.yml +61 -0
- configs/deim_dfine/dfine_hgnetv2_x_coco.yml +56 -0
- configs/deim_dfine/object365/deim_hgnetv2_x_obj2coco_24e.yml +50 -0
- configs/deim_dfine/object365/dfine_hgnetv2_x_obj2coco.yml +57 -0
- configs/deim_rtdetrv2/deim_r101vd_60e_coco.yml +36 -0
- configs/deim_rtdetrv2/deim_r18vd_120e_coco.yml +32 -0
- configs/deim_rtdetrv2/deim_r34vd_120e_coco.yml +36 -0
- configs/deim_rtdetrv2/deim_r50vd_60e_coco.yml +35 -0
- configs/deim_rtdetrv2/deim_r50vd_m_60e_coco.yml +39 -0
- configs/deim_rtdetrv2/rtdetrv2_r101vd_6x_coco.yml +40 -0
- configs/deim_rtdetrv2/rtdetrv2_r18vd_120e_coco.yml +44 -0
- configs/deim_rtdetrv2/rtdetrv2_r34vd_120e_coco.yml +57 -0
- configs/deim_rtdetrv2/rtdetrv2_r50vd_6x_coco.yml +25 -0
- configs/deim_rtdetrv2/rtdetrv2_r50vd_m_7x_coco.yml +43 -0
- configs/deimv2/deimv2_dinov3_l_coco.yml +104 -0
- configs/deimv2/deimv2_dinov3_m_coco.yml +107 -0
- configs/deimv2/deimv2_dinov3_s_coco.yml +108 -0
- configs/deimv2/deimv2_dinov3_x_coco.yml +94 -0
- configs/deimv2/deimv2_hgnetv2_atto_coco.yml +123 -0
- configs/deimv2/deimv2_hgnetv2_femto_coco.yml +128 -0
- configs/deimv2/deimv2_hgnetv2_l_coco.yml +24 -0
- configs/deimv2/deimv2_hgnetv2_m_coco.yml +72 -0
- configs/deimv2/deimv2_hgnetv2_n_coco.yml +96 -0
- configs/deimv2/deimv2_hgnetv2_pico_coco.yml +128 -0
- configs/deimv2/deimv2_hgnetv2_s_coco.yml +76 -0
.gitattributes
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
*.7z filter=lfs diff=lfs merge=lfs -text
|
| 2 |
+
*.arrow filter=lfs diff=lfs merge=lfs -text
|
| 3 |
+
*.bin filter=lfs diff=lfs merge=lfs -text
|
| 4 |
+
*.bz2 filter=lfs diff=lfs merge=lfs -text
|
| 5 |
+
*.ckpt filter=lfs diff=lfs merge=lfs -text
|
| 6 |
+
*.ftz filter=lfs diff=lfs merge=lfs -text
|
| 7 |
+
*.gz filter=lfs diff=lfs merge=lfs -text
|
| 8 |
+
*.h5 filter=lfs diff=lfs merge=lfs -text
|
| 9 |
+
*.joblib filter=lfs diff=lfs merge=lfs -text
|
| 10 |
+
*.lfs.* filter=lfs diff=lfs merge=lfs -text
|
| 11 |
+
*.mlmodel filter=lfs diff=lfs merge=lfs -text
|
| 12 |
+
*.model filter=lfs diff=lfs merge=lfs -text
|
| 13 |
+
*.msgpack filter=lfs diff=lfs merge=lfs -text
|
| 14 |
+
*.npy filter=lfs diff=lfs merge=lfs -text
|
| 15 |
+
*.npz filter=lfs diff=lfs merge=lfs -text
|
| 16 |
+
*.onnx filter=lfs diff=lfs merge=lfs -text
|
| 17 |
+
*.ot filter=lfs diff=lfs merge=lfs -text
|
| 18 |
+
*.parquet filter=lfs diff=lfs merge=lfs -text
|
| 19 |
+
*.pb filter=lfs diff=lfs merge=lfs -text
|
| 20 |
+
*.pickle filter=lfs diff=lfs merge=lfs -text
|
| 21 |
+
*.pkl filter=lfs diff=lfs merge=lfs -text
|
| 22 |
+
*.pt filter=lfs diff=lfs merge=lfs -text
|
| 23 |
+
*.pth filter=lfs diff=lfs merge=lfs -text
|
| 24 |
+
*.rar filter=lfs diff=lfs merge=lfs -text
|
| 25 |
+
*.safetensors filter=lfs diff=lfs merge=lfs -text
|
| 26 |
+
saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
| 27 |
+
*.tar.* filter=lfs diff=lfs merge=lfs -text
|
| 28 |
+
*.tar filter=lfs diff=lfs merge=lfs -text
|
| 29 |
+
*.tflite filter=lfs diff=lfs merge=lfs -text
|
| 30 |
+
*.tgz filter=lfs diff=lfs merge=lfs -text
|
| 31 |
+
*.wasm filter=lfs diff=lfs merge=lfs -text
|
| 32 |
+
*.xz filter=lfs diff=lfs merge=lfs -text
|
| 33 |
+
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
+
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
+
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
.gitignore
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Python
|
| 2 |
+
__pycache__/
|
| 3 |
+
*.py[cod]
|
| 4 |
+
*$py.class
|
| 5 |
+
*.so
|
| 6 |
+
.Python
|
| 7 |
+
env/
|
| 8 |
+
venv/
|
| 9 |
+
ENV/
|
| 10 |
+
.venv
|
| 11 |
+
|
| 12 |
+
# IDE
|
| 13 |
+
.vscode/
|
| 14 |
+
.idea/
|
| 15 |
+
*.swp
|
| 16 |
+
*.swo
|
| 17 |
+
*~
|
| 18 |
+
|
| 19 |
+
# OS
|
| 20 |
+
.DS_Store
|
| 21 |
+
Thumbs.db
|
| 22 |
+
|
| 23 |
+
# Development documentation (not needed for Spaces)
|
| 24 |
+
INFERENCE_REQUIRED.md
|
| 25 |
+
REQUIRED_FILES.md
|
| 26 |
+
FILES_TO_COPY.md
|
| 27 |
+
|
| 28 |
+
# Old config files (if not needed)
|
| 29 |
+
# 10deimv2_dinov3_s_coco.yml
|
| 30 |
+
|
README.md
ADDED
|
@@ -0,0 +1,99 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
title: DEIMv2 Floorplan Symbol Detection
|
| 3 |
+
emoji: 🏗️
|
| 4 |
+
colorFrom: blue
|
| 5 |
+
colorTo: green
|
| 6 |
+
sdk: gradio
|
| 7 |
+
sdk_version: 5.0.0
|
| 8 |
+
app_file: app.py
|
| 9 |
+
pinned: false
|
| 10 |
+
license: AItech
|
| 11 |
+
---
|
| 12 |
+
|
| 13 |
+
# DEIMv2 図面記号検出デモ
|
| 14 |
+
|
| 15 |
+
DEIMv2 (Detection Enhanced by Interaction Module v2) を使用した図面記号検出デモアプリケーションです。
|
| 16 |
+
|
| 17 |
+
## 機能
|
| 18 |
+
|
| 19 |
+
- PNG形式の図面画像からの記号検出(16クラス対応)
|
| 20 |
+
- タイル推論による大サイズ画像の処理(640×640タイル、128pxオーバーラップ)
|
| 21 |
+
- 検出結果の可視化(バウンディングボックス + ラベル + スコア)
|
| 22 |
+
- 記号ごとの個数集計表示
|
| 23 |
+
- スコア閾値の調整(デフォルト: 0.9)
|
| 24 |
+
- クラスフィルタリング機能(検出するクラスを選択可能)
|
| 25 |
+
- NMS(Non-Maximum Suppression)による重複検出の自動マージ
|
| 26 |
+
|
| 27 |
+
## 使用方法
|
| 28 |
+
|
| 29 |
+
1. 左側に **PNG形式の図面** をアップロード
|
| 30 |
+
2. **詳細設定**を開いて以下を調整(必要に応じて):
|
| 31 |
+
- **スコア閾値**: 検出の信頼度閾値(デフォルト: 0.9)
|
| 32 |
+
- **検出するクラス**: チェックボックスで検出したいクラスを選択(デフォルト: door1のみ)
|
| 33 |
+
3. 「検出を実行」ボタンをクリック
|
| 34 |
+
4. 中央に **検出結果付き図面**、右側に **記号名称と個数** が表示されます
|
| 35 |
+
|
| 36 |
+
## モデル
|
| 37 |
+
|
| 38 |
+
- **DEIMv2**: DINOv3STAsバックボーン(ViT-Tiny)を使用した物体検出モデル
|
| 39 |
+
- **検出対象**: 16クラスの図面記号
|
| 40 |
+
- `kanki`, `kanki_shikaku`, `kanki_regisuta`
|
| 41 |
+
- `window1`, `window2`
|
| 42 |
+
- `door1`, `door2`
|
| 43 |
+
- `bathtub1`, `konro1`, `sink1`, `toilet1`
|
| 44 |
+
- `kasaikeihou1`, `kasaikeihou2`
|
| 45 |
+
- `houi1`, `houi2`, `houi3`
|
| 46 |
+
|
| 47 |
+
## ハードウェア要件
|
| 48 |
+
|
| 49 |
+
- **本番環境**: Hugging Face Spaces ZeroGPUを使用
|
| 50 |
+
- **ローカル開発**: CPU Basic(2 vCPU、16GBメモリ)以上
|
| 51 |
+
- **GPU**: 推論速度向上のため、NVIDIA T4以上のGPUを推奨(オプション)
|
| 52 |
+
- **ディスク**: モデルファイル(.pt)はGit LFSで管理されます
|
| 53 |
+
|
| 54 |
+
## ファイル構成
|
| 55 |
+
|
| 56 |
+
- `app.py`: Gradio UI + 推論パイプライン
|
| 57 |
+
- `detection.py`: DEIMv2推論ラッパー(タイル推論、NMS統合)
|
| 58 |
+
- `configs/deimv2_floorplan.yaml`: モデル設定ファイル
|
| 59 |
+
- `models/best_stg2.pth`: モデル重みファイル(Git LFS)
|
| 60 |
+
- `engine/`: DEIMv2エンジンモジュール
|
| 61 |
+
- `core/`: YAMLConfig関連モジュール
|
| 62 |
+
- `yaml_config.py`: YAMLConfigクラス
|
| 63 |
+
- `_config.py`: BaseConfigクラス
|
| 64 |
+
- `workspace.py`: オブジェクト作成ユーティリティ
|
| 65 |
+
- `yaml_utils.py`: YAML読み込みユーティリティ
|
| 66 |
+
- `backbone/`: バックボーンモジュール(DINOv3STAs等)
|
| 67 |
+
- `deim/`: DEIMv2検出モジュール
|
| 68 |
+
- `data/`: データローダー・データセット
|
| 69 |
+
- `optim/`: オプティマイザー・学習率スケジューラー
|
| 70 |
+
- `solver/`: 学習・推論エンジン
|
| 71 |
+
- `requirements.txt`: Python依存関係
|
| 72 |
+
|
| 73 |
+
## 技術詳細
|
| 74 |
+
|
| 75 |
+
### タイル推論
|
| 76 |
+
大きな画像を640×640ピクセルのタイルに分割して推論します。タイル間は128ピクセルのオーバーラップを持ち、境界付近の記号も確実に検出できます。
|
| 77 |
+
|
| 78 |
+
### NMS(Non-Maximum Suppression)
|
| 79 |
+
タイル推論により生じる重複検出を、クラスごとにIoU閾値0.4でNMSを適用して統合します。
|
| 80 |
+
|
| 81 |
+
### ZeroGPU対応
|
| 82 |
+
本番環境ではHugging Face SpacesのZeroGPUを使用しています。`@spaces.GPU`デコレータにより、GPUが利用可能な場合に自動的にGPUを使用し、利用できない場合はCPUにフォールバックします。デバイスの決定は推論実行時に動的に行われます(`detection.py`の`_get_device()`関数)。
|
| 83 |
+
|
| 84 |
+
## セットアップ注意事項
|
| 85 |
+
|
| 86 |
+
⚠️ **重要**: `engine/`ディレクトリ内のモジュールはDEIMv2リポジトリから必要な実装をコピーしています。
|
| 87 |
+
本番環境で動作させるには、すべての依存モジュールが正しくインポート可能であることを確認してください。
|
| 88 |
+
|
| 89 |
+
## トラブルシューティング
|
| 90 |
+
|
| 91 |
+
- **モデルファイルが見つからない**: Git LFSが正しく設定されているか確認してください
|
| 92 |
+
- **メモリ不足**: CPU UpgradeまたはGPUオプションの使用を検討してください
|
| 93 |
+
- **推論エラー**: 画像形式がPNG形式であることを確認してください
|
| 94 |
+
- **検出結果が表示されない**: スコア閾値を下げる(例: 0.5)か、検出するクラスをすべて選択してください
|
| 95 |
+
- **デバッグモード**: 環境変数 `DEBUG_DEIMV2=1` を設定すると、詳細なデバッグ情報が出力されます
|
| 96 |
+
|
| 97 |
+
## ライセンス
|
| 98 |
+
|
| 99 |
+
MIT
|
app.py
ADDED
|
@@ -0,0 +1,260 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# app.py
|
| 2 |
+
from collections import Counter
|
| 3 |
+
from functools import lru_cache
|
| 4 |
+
from typing import Tuple, Dict, Any, List
|
| 5 |
+
import os
|
| 6 |
+
import yaml
|
| 7 |
+
|
| 8 |
+
import gradio as gr
|
| 9 |
+
import numpy as np
|
| 10 |
+
import spaces
|
| 11 |
+
from PIL import Image, ImageDraw, ImageFont
|
| 12 |
+
|
| 13 |
+
from detection import run_inference, Detection
|
| 14 |
+
|
| 15 |
+
# Gradio 5.0.x と JSON コンポーネントの組み合わせで
|
| 16 |
+
# /info 生成時に json_schema_to_python_type が bool を dict とみなして落ちる
|
| 17 |
+
# 既知バグがあるため、bool を安全に処理するようにパッチを当てる。
|
| 18 |
+
try:
|
| 19 |
+
from gradio_client import utils as grc_utils
|
| 20 |
+
|
| 21 |
+
_orig_json_schema_to_python_type = grc_utils._json_schema_to_python_type # type: ignore[attr-defined]
|
| 22 |
+
_orig_json_schema_to_python_type_public = grc_utils.json_schema_to_python_type
|
| 23 |
+
|
| 24 |
+
def _json_schema_to_python_type_safe(schema, defs=None): # type: ignore[override]
|
| 25 |
+
if isinstance(schema, bool):
|
| 26 |
+
return "Any"
|
| 27 |
+
return _orig_json_schema_to_python_type(schema, defs)
|
| 28 |
+
|
| 29 |
+
grc_utils._json_schema_to_python_type = _json_schema_to_python_type_safe # type: ignore[attr-defined]
|
| 30 |
+
|
| 31 |
+
def _json_schema_to_python_type_safe_public(schema):
|
| 32 |
+
if isinstance(schema, bool):
|
| 33 |
+
return "Any"
|
| 34 |
+
return _orig_json_schema_to_python_type_public(schema)
|
| 35 |
+
|
| 36 |
+
grc_utils.json_schema_to_python_type = _json_schema_to_python_type_safe_public
|
| 37 |
+
except Exception:
|
| 38 |
+
# パッチが失敗してもアプリ起動は継続する
|
| 39 |
+
pass
|
| 40 |
+
|
| 41 |
+
|
| 42 |
+
@lru_cache(maxsize=1)
|
| 43 |
+
def load_class_names() -> List[str]:
|
| 44 |
+
"""
|
| 45 |
+
設定ファイルからクラスリストを読み込む
|
| 46 |
+
"""
|
| 47 |
+
config_path = "configs/deimv2_floorplan.yaml"
|
| 48 |
+
try:
|
| 49 |
+
with open(config_path, 'r', encoding='utf-8') as f:
|
| 50 |
+
config = yaml.safe_load(f)
|
| 51 |
+
# Modelセクションからclass_namesを取得
|
| 52 |
+
if 'Model' in config and 'class_names' in config['Model']:
|
| 53 |
+
return config['Model']['class_names']
|
| 54 |
+
else:
|
| 55 |
+
# フォールバック: デフォルトのクラスリスト
|
| 56 |
+
return ["kanki", "kanki_shikaku", "kanki_regisuta", "window1", "window2",
|
| 57 |
+
"door1", "door2", "bathtub1", "konro1", "sink1", "toilet1",
|
| 58 |
+
"kasaikeihou1", "kasaikeihou2", "houi1", "houi2", "houi3"]
|
| 59 |
+
except Exception as e:
|
| 60 |
+
# エラー時はデフォルトのクラスリストを返す
|
| 61 |
+
print(f"Warning: Failed to load class names from config: {e}")
|
| 62 |
+
return ["kanki", "kanki_shikaku", "kanki_regisuta", "window1", "window2",
|
| 63 |
+
"door1", "door2", "bathtub1", "konro1", "sink1", "toilet1",
|
| 64 |
+
"kasaikeihou1", "kasaikeihou2", "houi1", "houi2", "houi3"]
|
| 65 |
+
|
| 66 |
+
|
| 67 |
+
def pil_to_np(img: Image.Image) -> np.ndarray:
|
| 68 |
+
return np.array(img.convert("RGB"))
|
| 69 |
+
|
| 70 |
+
|
| 71 |
+
def draw_detections(
|
| 72 |
+
image_pil: Image.Image,
|
| 73 |
+
detections: List[Detection],
|
| 74 |
+
) -> Image.Image:
|
| 75 |
+
"""検出結果を図面に重ねて描画"""
|
| 76 |
+
draw = ImageDraw.Draw(image_pil)
|
| 77 |
+
|
| 78 |
+
# クラスごとの色マッピング
|
| 79 |
+
color_map = {
|
| 80 |
+
"kanki": (255, 0, 0), # 赤
|
| 81 |
+
"door1": (0, 0, 255), # 青
|
| 82 |
+
"door2": (255, 255, 0), # 黄
|
| 83 |
+
}
|
| 84 |
+
default_color = (0, 255, 0) # デフォルト色(緑)
|
| 85 |
+
|
| 86 |
+
try:
|
| 87 |
+
font = ImageFont.truetype("DejaVuSans.ttf", 24)
|
| 88 |
+
except Exception:
|
| 89 |
+
font = ImageFont.load_default()
|
| 90 |
+
|
| 91 |
+
for (x1, y1, x2, y2, label, score) in detections:
|
| 92 |
+
# ラベルに応じた色を取得
|
| 93 |
+
color = color_map.get(label, default_color)
|
| 94 |
+
|
| 95 |
+
# bbox
|
| 96 |
+
draw.rectangle([(x1, y1), (x2, y2)], outline=color, width=3)
|
| 97 |
+
|
| 98 |
+
# ラベル+スコア
|
| 99 |
+
text = f"{label} {score:.2f}"
|
| 100 |
+
# textsizeは非推奨のため、textbboxを使用(互換性のためフォールバックあり)
|
| 101 |
+
try:
|
| 102 |
+
bbox = draw.textbbox((0, 0), text, font=font)
|
| 103 |
+
tw = bbox[2] - bbox[0]
|
| 104 |
+
th = bbox[3] - bbox[1]
|
| 105 |
+
except AttributeError:
|
| 106 |
+
# 古いPillowバージョン用のフォールバック
|
| 107 |
+
tw, th = draw.textsize(text, font=font)
|
| 108 |
+
draw.rectangle(
|
| 109 |
+
[(x1, y1 - th - 2), (x1 + tw + 2, y1)],
|
| 110 |
+
fill=color,
|
| 111 |
+
)
|
| 112 |
+
draw.text((x1 + 1, y1 - th - 2), text, fill=(0, 0, 0), font=font)
|
| 113 |
+
|
| 114 |
+
return image_pil
|
| 115 |
+
|
| 116 |
+
|
| 117 |
+
def summarize_detections(detections: List[Detection]) -> List[List[Any]]:
|
| 118 |
+
"""ラベルごとの個数を集計してDataframe用のデータ形式にする"""
|
| 119 |
+
labels = [d[4] for d in detections]
|
| 120 |
+
counter = Counter(labels)
|
| 121 |
+
|
| 122 |
+
# ヘッダー行
|
| 123 |
+
data = [["記号名称", "個数"]]
|
| 124 |
+
|
| 125 |
+
# データ行(個数の降順、ラベル名の昇順でソート)
|
| 126 |
+
for label, count in sorted(counter.items(), key=lambda x: (-x[1], x[0])):
|
| 127 |
+
data.append([label, count])
|
| 128 |
+
|
| 129 |
+
return data
|
| 130 |
+
|
| 131 |
+
|
| 132 |
+
def inference_pipeline(
|
| 133 |
+
image: Image.Image,
|
| 134 |
+
score_thresh: float = 0.8,
|
| 135 |
+
selected_classes: List[str] = None,
|
| 136 |
+
) -> Tuple[Image.Image, List[List[Any]]]:
|
| 137 |
+
"""Gradio から呼ばれるメイン処理"""
|
| 138 |
+
if image is None:
|
| 139 |
+
raise gr.Error("PNG形式の図面をアップロードしてください。")
|
| 140 |
+
|
| 141 |
+
try:
|
| 142 |
+
# 画像が文字列(ファイルパス)の場合はPIL Imageに変換
|
| 143 |
+
if isinstance(image, str):
|
| 144 |
+
try:
|
| 145 |
+
img_pil = Image.open(image).convert("RGB")
|
| 146 |
+
except Exception as e:
|
| 147 |
+
raise gr.Error(f"画像ファイルの読み込みに失敗しました: {str(e)}")
|
| 148 |
+
else:
|
| 149 |
+
# 既にPIL Imageオブジェクトの場合
|
| 150 |
+
img_pil = image.convert("RGB")
|
| 151 |
+
|
| 152 |
+
img_np = pil_to_np(img_pil)
|
| 153 |
+
|
| 154 |
+
# DEIMv2 推論
|
| 155 |
+
detections = run_inference(img_np, score_thresh=score_thresh)
|
| 156 |
+
|
| 157 |
+
# クラスフィルタリング: 選択されたクラスのみを残す
|
| 158 |
+
if selected_classes is not None and len(selected_classes) > 0:
|
| 159 |
+
# 選択されたクラスリストに含まれる検出結果のみをフィルタリング
|
| 160 |
+
filtered_detections = [
|
| 161 |
+
det for det in detections
|
| 162 |
+
if det[4] in selected_classes # det[4]はlabel_name
|
| 163 |
+
]
|
| 164 |
+
detections = filtered_detections
|
| 165 |
+
|
| 166 |
+
# 描画
|
| 167 |
+
vis_pil = draw_detections(img_pil.copy(), detections)
|
| 168 |
+
|
| 169 |
+
# 集計
|
| 170 |
+
summary = summarize_detections(detections)
|
| 171 |
+
|
| 172 |
+
return vis_pil, summary
|
| 173 |
+
except Exception as e:
|
| 174 |
+
error_msg = f"エラーが発生しました: {str(e)}"
|
| 175 |
+
raise gr.Error(error_msg)
|
| 176 |
+
|
| 177 |
+
|
| 178 |
+
@spaces.GPU
|
| 179 |
+
def gpu_inference(
|
| 180 |
+
image: Image.Image,
|
| 181 |
+
score_thresh: float = 0.9, # UIのデフォルト値と統一
|
| 182 |
+
selected_classes: List[str] = None,
|
| 183 |
+
):
|
| 184 |
+
"""Spaces ZeroGPU が検出できるようにデコレータ付きの推論関数を用意"""
|
| 185 |
+
return inference_pipeline(image, score_thresh, selected_classes)
|
| 186 |
+
|
| 187 |
+
|
| 188 |
+
# =========================
|
| 189 |
+
# Gradio UI
|
| 190 |
+
# =========================
|
| 191 |
+
with gr.Blocks(title="DEIMv2 Floorplan Symbol Detection") as demo:
|
| 192 |
+
gr.Markdown(
|
| 193 |
+
"""
|
| 194 |
+
# 図面記号検出デモ(by AItech)
|
| 195 |
+
|
| 196 |
+
1. 左側に **PNG図面** をアップロード
|
| 197 |
+
2. 「検出を実行」を押す
|
| 198 |
+
3. 中央に **検出結果付き図面**、右側に **記号名称+個数** が表示されます。
|
| 199 |
+
"""
|
| 200 |
+
)
|
| 201 |
+
|
| 202 |
+
# クラスリストを読み込む
|
| 203 |
+
class_names = load_class_names()
|
| 204 |
+
|
| 205 |
+
with gr.Row():
|
| 206 |
+
# 左: 入力
|
| 207 |
+
with gr.Column(scale=1):
|
| 208 |
+
input_image = gr.Image(
|
| 209 |
+
label="入力図面 (PNG)",
|
| 210 |
+
type="pil",
|
| 211 |
+
image_mode="RGB",
|
| 212 |
+
)
|
| 213 |
+
|
| 214 |
+
# 詳細設定タブ(デフォルトは閉じた状態)
|
| 215 |
+
with gr.Accordion("詳細設定", open=False):
|
| 216 |
+
score_thresh = gr.Slider(
|
| 217 |
+
minimum=0.0,
|
| 218 |
+
maximum=1.0,
|
| 219 |
+
value=0.9,
|
| 220 |
+
step=0.05,
|
| 221 |
+
label="スコア閾値",
|
| 222 |
+
)
|
| 223 |
+
selected_classes = gr.CheckboxGroup(
|
| 224 |
+
choices=class_names,
|
| 225 |
+
value=["door1"], # デフォルトでdoor1のみ選択
|
| 226 |
+
label="検出するクラス",
|
| 227 |
+
info="選択したクラスの検出結果のみが表示されます",
|
| 228 |
+
)
|
| 229 |
+
|
| 230 |
+
run_button = gr.Button("検出を実行", variant="primary")
|
| 231 |
+
|
| 232 |
+
# 中央: 出力画像
|
| 233 |
+
with gr.Column(scale=2):
|
| 234 |
+
output_image = gr.Image(
|
| 235 |
+
label="検出結果付き図面",
|
| 236 |
+
type="pil",
|
| 237 |
+
)
|
| 238 |
+
|
| 239 |
+
# 右: サイドバー(記号名称+個数)
|
| 240 |
+
with gr.Column(scale=1):
|
| 241 |
+
summary_dataframe = gr.Dataframe(
|
| 242 |
+
label="検出サマリ (記号名称と個数)",
|
| 243 |
+
headers=["記号名称", "個数"],
|
| 244 |
+
interactive=False,
|
| 245 |
+
)
|
| 246 |
+
|
| 247 |
+
# ボタンの動作
|
| 248 |
+
run_button.click(
|
| 249 |
+
fn=gpu_inference,
|
| 250 |
+
inputs=[input_image, score_thresh, selected_classes],
|
| 251 |
+
outputs=[output_image, summary_dataframe],
|
| 252 |
+
)
|
| 253 |
+
|
| 254 |
+
# Gradio 5では、Spaces上ではdemoオブジェクトを直接エクスポートするだけで動作します
|
| 255 |
+
# ローカルテスト時のみdemo.launch()を呼び出します
|
| 256 |
+
if __name__ == "__main__":
|
| 257 |
+
demo.launch(server_name="0.0.0.0", server_port=7860)
|
| 258 |
+
|
| 259 |
+
# Spaces上では、demoオブジェクトを直接エクスポートします
|
| 260 |
+
# Gradio 5は自動的にdemoオブジェクトを検出して起動します
|
configs/base/dataloader.yml
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
|
| 2 |
+
train_dataloader:
|
| 3 |
+
dataset:
|
| 4 |
+
transforms:
|
| 5 |
+
ops:
|
| 6 |
+
- {type: RandomPhotometricDistort, p: 0.5}
|
| 7 |
+
- {type: RandomZoomOut, fill: 0}
|
| 8 |
+
- {type: RandomIoUCrop, p: 0.8}
|
| 9 |
+
- {type: SanitizeBoundingBoxes, min_size: 1}
|
| 10 |
+
- {type: RandomHorizontalFlip}
|
| 11 |
+
- {type: Resize, size: [640, 640], }
|
| 12 |
+
- {type: SanitizeBoundingBoxes, min_size: 1}
|
| 13 |
+
- {type: ConvertPILImage, dtype: 'float32', scale: True}
|
| 14 |
+
- {type: ConvertBoxes, fmt: 'cxcywh', normalize: True}
|
| 15 |
+
policy:
|
| 16 |
+
name: stop_epoch
|
| 17 |
+
epoch: 72 # epoch in [71, ~) stop `ops`
|
| 18 |
+
ops: ['RandomPhotometricDistort', 'RandomZoomOut', 'RandomIoUCrop'] # Mosaicを除外
|
| 19 |
+
|
| 20 |
+
collate_fn:
|
| 21 |
+
type: BatchImageCollateFunction
|
| 22 |
+
base_size: 640
|
| 23 |
+
base_size_repeat: 3
|
| 24 |
+
stop_epoch: 72 # epoch in [72, ~) stop `multiscales`
|
| 25 |
+
|
| 26 |
+
shuffle: True
|
| 27 |
+
total_batch_size: 32 # total batch size equals to 32 (4 * 8)
|
| 28 |
+
num_workers: 4
|
| 29 |
+
|
| 30 |
+
|
| 31 |
+
val_dataloader:
|
| 32 |
+
dataset:
|
| 33 |
+
transforms:
|
| 34 |
+
ops:
|
| 35 |
+
- {type: Resize, size: [640, 640], }
|
| 36 |
+
- {type: ConvertPILImage, dtype: 'float32', scale: True}
|
| 37 |
+
shuffle: False
|
| 38 |
+
total_batch_size: 64
|
| 39 |
+
num_workers: 4
|
configs/base/deim.yml
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Dense O2O
|
| 2 |
+
train_dataloader:
|
| 3 |
+
dataset:
|
| 4 |
+
transforms:
|
| 5 |
+
ops:
|
| 6 |
+
- {type: Mosaic, output_size: 320, rotation_range: 10, translation_range: [0.1, 0.1], scaling_range: [0.5, 1.5],
|
| 7 |
+
probability: 1.0, fill_value: 0, use_cache: True, max_cached_images: 50, random_pop: True}
|
| 8 |
+
- {type: RandomPhotometricDistort, p: 0.5}
|
| 9 |
+
- {type: RandomZoomOut, fill: 0}
|
| 10 |
+
- {type: RandomIoUCrop, p: 0.8}
|
| 11 |
+
- {type: SanitizeBoundingBoxes, min_size: 1}
|
| 12 |
+
- {type: RandomHorizontalFlip}
|
| 13 |
+
- {type: Resize, size: [640, 640], }
|
| 14 |
+
- {type: SanitizeBoundingBoxes, min_size: 1}
|
| 15 |
+
- {type: ConvertPILImage, dtype: 'float32', scale: True}
|
| 16 |
+
- {type: ConvertBoxes, fmt: 'cxcywh', normalize: True}
|
| 17 |
+
policy:
|
| 18 |
+
epoch: [4, 29, 50] # list
|
| 19 |
+
ops: ['Mosaic', 'RandomPhotometricDistort', 'RandomZoomOut', 'RandomIoUCrop']
|
| 20 |
+
mosaic_prob: 0.5
|
| 21 |
+
|
| 22 |
+
collate_fn:
|
| 23 |
+
mixup_prob: 0.5
|
| 24 |
+
mixup_epochs: [4, 29]
|
| 25 |
+
stop_epoch: 50 # epoch in [72, ~) stop `multiscales`
|
| 26 |
+
|
| 27 |
+
# Unfreezing BN
|
| 28 |
+
HGNetv2:
|
| 29 |
+
freeze_at: -1 # 0 default
|
| 30 |
+
freeze_norm: False # True default
|
| 31 |
+
|
| 32 |
+
# Activation
|
| 33 |
+
DFINETransformer:
|
| 34 |
+
activation: silu
|
| 35 |
+
mlp_act: silu
|
| 36 |
+
|
| 37 |
+
## Our LR-Scheduler
|
| 38 |
+
lrsheduler: flatcosine
|
| 39 |
+
lr_gamma: 0.5
|
| 40 |
+
warmup_iter: 2000
|
| 41 |
+
flat_epoch: 29 # 4 + epoch // 2, e.g., 40 = 4 + 72 / 2
|
| 42 |
+
no_aug_epoch: 8
|
| 43 |
+
|
| 44 |
+
## Our Loss
|
| 45 |
+
DEIMCriterion:
|
| 46 |
+
weight_dict: {loss_mal: 1, loss_bbox: 5, loss_giou: 2, loss_fgl: 0.15, loss_ddf: 1.5}
|
| 47 |
+
losses: ['mal', 'boxes', 'local']
|
| 48 |
+
gamma: 1.5
|
configs/base/deimv2.yml
ADDED
|
@@ -0,0 +1,144 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
task: detection
|
| 2 |
+
|
| 3 |
+
model: DEIM
|
| 4 |
+
criterion: DEIMCriterion
|
| 5 |
+
postprocessor: PostProcessor
|
| 6 |
+
|
| 7 |
+
use_focal_loss: True
|
| 8 |
+
eval_spatial_size: [640, 640] # h w
|
| 9 |
+
checkpoint_freq: 5 # save freq
|
| 10 |
+
|
| 11 |
+
DEIM:
|
| 12 |
+
backbone: HGNetv2
|
| 13 |
+
encoder: HybridEncoder
|
| 14 |
+
decoder: DEIMTransformer
|
| 15 |
+
|
| 16 |
+
HGNetv2:
|
| 17 |
+
name: 'B4'
|
| 18 |
+
return_idx: [1, 2, 3]
|
| 19 |
+
freeze_at: -1 # 0 default
|
| 20 |
+
freeze_stem_only: True
|
| 21 |
+
freeze_norm: False # True default
|
| 22 |
+
pretrained: True
|
| 23 |
+
local_model_dir: ./weight/hgnetv2/
|
| 24 |
+
|
| 25 |
+
HybridEncoder:
|
| 26 |
+
in_channels: [512, 1024, 2048]
|
| 27 |
+
feat_strides: [8, 16, 32]
|
| 28 |
+
|
| 29 |
+
# intra
|
| 30 |
+
hidden_dim: 256
|
| 31 |
+
use_encoder_idx: [2]
|
| 32 |
+
num_encoder_layers: 1
|
| 33 |
+
nhead: 8
|
| 34 |
+
dim_feedforward: 1024
|
| 35 |
+
dropout: 0.
|
| 36 |
+
enc_act: 'gelu'
|
| 37 |
+
|
| 38 |
+
# cross
|
| 39 |
+
expansion: 1.0
|
| 40 |
+
depth_mult: 1
|
| 41 |
+
act: 'silu'
|
| 42 |
+
|
| 43 |
+
# New
|
| 44 |
+
version: deim
|
| 45 |
+
csp_type: csp2
|
| 46 |
+
fuse_op: sum
|
| 47 |
+
|
| 48 |
+
DEIMTransformer:
|
| 49 |
+
feat_channels: [256, 256, 256]
|
| 50 |
+
feat_strides: [8, 16, 32]
|
| 51 |
+
hidden_dim: 256
|
| 52 |
+
num_levels: 3
|
| 53 |
+
|
| 54 |
+
num_layers: 6
|
| 55 |
+
eval_idx: -1
|
| 56 |
+
num_queries: 300
|
| 57 |
+
|
| 58 |
+
num_denoising: 100
|
| 59 |
+
label_noise_ratio: 0.5
|
| 60 |
+
box_noise_scale: 1.0
|
| 61 |
+
|
| 62 |
+
reg_max: 32
|
| 63 |
+
reg_scale: 4
|
| 64 |
+
layer_scale: 1 # 2
|
| 65 |
+
|
| 66 |
+
num_points: [3, 6, 3] # [4, 4, 4] [3, 6, 3]
|
| 67 |
+
cross_attn_method: default # default, discrete
|
| 68 |
+
query_select_method: default # default, agnostic
|
| 69 |
+
|
| 70 |
+
# Act
|
| 71 |
+
activation: silu
|
| 72 |
+
mlp_act: silu
|
| 73 |
+
|
| 74 |
+
# FFN
|
| 75 |
+
dim_feedforward: 2048
|
| 76 |
+
|
| 77 |
+
PostProcessor:
|
| 78 |
+
num_top_queries: 300
|
| 79 |
+
|
| 80 |
+
|
| 81 |
+
## DEIM LR-Scheduler
|
| 82 |
+
epoches: 58 # 72 + 2n # Increase to search for the optimal ema
|
| 83 |
+
|
| 84 |
+
lrsheduler: flatcosine
|
| 85 |
+
lr_gamma: 0.5
|
| 86 |
+
warmup_iter: 2000
|
| 87 |
+
flat_epoch: 29 # 4 + epoch // 2, e.g., 40 = 4 + 72 / 2
|
| 88 |
+
no_aug_epoch: 8
|
| 89 |
+
|
| 90 |
+
## Dense O2O: Mosaic + Mixup + CopyBlend
|
| 91 |
+
train_dataloader:
|
| 92 |
+
dataset:
|
| 93 |
+
transforms:
|
| 94 |
+
ops:
|
| 95 |
+
- {type: Mosaic, output_size: 320, rotation_range: 10, translation_range: [0.1, 0.1], scaling_range: [0.5, 1.5],
|
| 96 |
+
probability: 1.0, fill_value: 0, use_cache: True, max_cached_images: 50, random_pop: True}
|
| 97 |
+
- {type: RandomPhotometricDistort, p: 0.5}
|
| 98 |
+
- {type: RandomZoomOut, fill: 0}
|
| 99 |
+
- {type: RandomIoUCrop, p: 0.8}
|
| 100 |
+
- {type: SanitizeBoundingBoxes, min_size: 1}
|
| 101 |
+
- {type: RandomHorizontalFlip}
|
| 102 |
+
- {type: Resize, size: [640, 640], }
|
| 103 |
+
- {type: SanitizeBoundingBoxes, min_size: 1}
|
| 104 |
+
- {type: ConvertPILImage, dtype: 'float32', scale: True}
|
| 105 |
+
- {type: ConvertBoxes, fmt: 'cxcywh', normalize: True}
|
| 106 |
+
# Mosaic options
|
| 107 |
+
policy:
|
| 108 |
+
epoch: [4, 29, 50] # list
|
| 109 |
+
ops: ['Mosaic', 'RandomPhotometricDistort', 'RandomZoomOut', 'RandomIoUCrop']
|
| 110 |
+
mosaic_prob: 0.5
|
| 111 |
+
|
| 112 |
+
collate_fn:
|
| 113 |
+
# Mixup options
|
| 114 |
+
mixup_prob: 0.5
|
| 115 |
+
mixup_epochs: [4, 29]
|
| 116 |
+
stop_epoch: 50 # epoch in [72, ~) stop `multiscales`
|
| 117 |
+
# CopyBlend options
|
| 118 |
+
copyblend_prob: 0.5
|
| 119 |
+
copyblend_epochs: [4, 50]
|
| 120 |
+
area_threshold: 100
|
| 121 |
+
num_objects: 3
|
| 122 |
+
with_expand: True
|
| 123 |
+
expand_ratios: [0.1, 0.25]
|
| 124 |
+
|
| 125 |
+
ema_restart_decay: 0.9999
|
| 126 |
+
base_size_repeat: 4
|
| 127 |
+
|
| 128 |
+
## DEIM Loss
|
| 129 |
+
DEIMCriterion:
|
| 130 |
+
weight_dict: {loss_mal: 1, loss_bbox: 5, loss_giou: 2, loss_fgl: 0.15, loss_ddf: 1.5}
|
| 131 |
+
losses: ['mal', 'boxes', 'local']
|
| 132 |
+
gamma: 1.5
|
| 133 |
+
alpha: 0.75
|
| 134 |
+
reg_max: 32
|
| 135 |
+
|
| 136 |
+
matcher:
|
| 137 |
+
type: HungarianMatcher
|
| 138 |
+
weight_dict: {cost_class: 2, cost_bbox: 5, cost_giou: 2}
|
| 139 |
+
alpha: 0.25
|
| 140 |
+
gamma: 2.0
|
| 141 |
+
# change matcher
|
| 142 |
+
change_matcher: True
|
| 143 |
+
iou_order_alpha: 4.0
|
| 144 |
+
matcher_change_epoch: 45
|
configs/base/dfine_hgnetv2.yml
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
task: detection
|
| 2 |
+
|
| 3 |
+
model: DEIM
|
| 4 |
+
criterion: DEIMCriterion
|
| 5 |
+
postprocessor: PostProcessor
|
| 6 |
+
|
| 7 |
+
use_focal_loss: True
|
| 8 |
+
eval_spatial_size: [640, 640] # h w
|
| 9 |
+
checkpoint_freq: 4 # save freq
|
| 10 |
+
|
| 11 |
+
DEIM:
|
| 12 |
+
backbone: HGNetv2
|
| 13 |
+
encoder: HybridEncoder
|
| 14 |
+
decoder: DFINETransformer
|
| 15 |
+
|
| 16 |
+
# Add, default for step lr scheduler
|
| 17 |
+
lrsheduler: flatcosine
|
| 18 |
+
lr_gamma: 1
|
| 19 |
+
warmup_iter: 500
|
| 20 |
+
flat_epoch: 4000000
|
| 21 |
+
no_aug_epoch: 0
|
| 22 |
+
|
| 23 |
+
HGNetv2:
|
| 24 |
+
pretrained: True
|
| 25 |
+
local_model_dir: ../RT-DETR-main/D-FINE/weight/hgnetv2/
|
| 26 |
+
|
| 27 |
+
HybridEncoder:
|
| 28 |
+
in_channels: [512, 1024, 2048]
|
| 29 |
+
feat_strides: [8, 16, 32]
|
| 30 |
+
|
| 31 |
+
# intra
|
| 32 |
+
hidden_dim: 256
|
| 33 |
+
use_encoder_idx: [2]
|
| 34 |
+
num_encoder_layers: 1
|
| 35 |
+
nhead: 8
|
| 36 |
+
dim_feedforward: 1024
|
| 37 |
+
dropout: 0.
|
| 38 |
+
enc_act: 'gelu'
|
| 39 |
+
|
| 40 |
+
# cross
|
| 41 |
+
expansion: 1.0
|
| 42 |
+
depth_mult: 1
|
| 43 |
+
act: 'silu'
|
| 44 |
+
|
| 45 |
+
|
| 46 |
+
DFINETransformer:
|
| 47 |
+
feat_channels: [256, 256, 256]
|
| 48 |
+
feat_strides: [8, 16, 32]
|
| 49 |
+
hidden_dim: 256
|
| 50 |
+
num_levels: 3
|
| 51 |
+
|
| 52 |
+
num_layers: 6
|
| 53 |
+
eval_idx: -1
|
| 54 |
+
num_queries: 300
|
| 55 |
+
|
| 56 |
+
num_denoising: 100
|
| 57 |
+
label_noise_ratio: 0.5
|
| 58 |
+
box_noise_scale: 1.0
|
| 59 |
+
|
| 60 |
+
# NEW
|
| 61 |
+
reg_max: 32
|
| 62 |
+
reg_scale: 4
|
| 63 |
+
|
| 64 |
+
# Auxiliary decoder layers dimension scaling
|
| 65 |
+
# "eg. If num_layers: 6 eval_idx: -4,
|
| 66 |
+
# then layer 3, 4, 5 are auxiliary decoder layers."
|
| 67 |
+
layer_scale: 1 # 2
|
| 68 |
+
|
| 69 |
+
|
| 70 |
+
num_points: [3, 6, 3] # [4, 4, 4] [3, 6, 3]
|
| 71 |
+
cross_attn_method: default # default, discrete
|
| 72 |
+
query_select_method: default # default, agnostic
|
| 73 |
+
|
| 74 |
+
|
| 75 |
+
PostProcessor:
|
| 76 |
+
num_top_queries: 300
|
| 77 |
+
|
| 78 |
+
|
| 79 |
+
DEIMCriterion:
|
| 80 |
+
weight_dict: {loss_vfl: 1, loss_bbox: 5, loss_giou: 2, loss_fgl: 0.15, loss_ddf: 1.5}
|
| 81 |
+
losses: ['vfl', 'boxes', 'local']
|
| 82 |
+
alpha: 0.75
|
| 83 |
+
gamma: 2.0
|
| 84 |
+
reg_max: 32
|
| 85 |
+
|
| 86 |
+
matcher:
|
| 87 |
+
type: HungarianMatcher
|
| 88 |
+
weight_dict: {cost_class: 2, cost_bbox: 5, cost_giou: 2}
|
| 89 |
+
alpha: 0.25
|
| 90 |
+
gamma: 2.0
|
configs/base/optimizer.yml
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
use_amp: True
|
| 2 |
+
use_ema: True
|
| 3 |
+
ema:
|
| 4 |
+
type: ModelEMA
|
| 5 |
+
decay: 0.9999
|
| 6 |
+
warmups: 1000
|
| 7 |
+
start: 0
|
| 8 |
+
|
| 9 |
+
epoches: 72
|
| 10 |
+
clip_max_norm: 0.1
|
| 11 |
+
|
| 12 |
+
|
| 13 |
+
optimizer:
|
| 14 |
+
type: AdamW
|
| 15 |
+
params:
|
| 16 |
+
-
|
| 17 |
+
params: '^(?=.*backbone)(?!.*norm).*$'
|
| 18 |
+
lr: 0.0000125
|
| 19 |
+
-
|
| 20 |
+
params: '^(?=.*(?:encoder|decoder))(?=.*(?:norm|bn)).*$'
|
| 21 |
+
weight_decay: 0.
|
| 22 |
+
|
| 23 |
+
lr: 0.00025
|
| 24 |
+
betas: [0.9, 0.999]
|
| 25 |
+
weight_decay: 0.000125
|
| 26 |
+
|
| 27 |
+
|
| 28 |
+
lr_scheduler:
|
| 29 |
+
type: MultiStepLR
|
| 30 |
+
milestones: [500]
|
| 31 |
+
gamma: 0.1
|
| 32 |
+
|
| 33 |
+
lr_warmup_scheduler:
|
| 34 |
+
type: LinearWarmup
|
| 35 |
+
warmup_duration: 500
|
configs/base/rt_deim.yml
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Dense O2O
|
| 2 |
+
train_dataloader:
|
| 3 |
+
dataset:
|
| 4 |
+
transforms:
|
| 5 |
+
ops:
|
| 6 |
+
- {type: Mosaic, output_size: 320, rotation_range: 10, translation_range: [0.1, 0.1], scaling_range: [0.5, 1.5],
|
| 7 |
+
probability: 1.0, fill_value: 0, use_cache: False, max_cached_images: 50, random_pop: True}
|
| 8 |
+
- {type: RandomPhotometricDistort, p: 0.5}
|
| 9 |
+
- {type: RandomZoomOut, fill: 0}
|
| 10 |
+
- {type: RandomIoUCrop, p: 0.8}
|
| 11 |
+
- {type: SanitizeBoundingBoxes, min_size: 1}
|
| 12 |
+
- {type: RandomHorizontalFlip}
|
| 13 |
+
- {type: Resize, size: [640, 640], }
|
| 14 |
+
- {type: SanitizeBoundingBoxes, min_size: 1}
|
| 15 |
+
- {type: ConvertPILImage, dtype: 'float32', scale: True}
|
| 16 |
+
- {type: ConvertBoxes, fmt: 'cxcywh', normalize: True}
|
| 17 |
+
policy:
|
| 18 |
+
epoch: [4, 29, 50] # list
|
| 19 |
+
ops: ['Mosaic', 'RandomPhotometricDistort', 'RandomZoomOut', 'RandomIoUCrop']
|
| 20 |
+
mosaic_prob: 0.5
|
| 21 |
+
|
| 22 |
+
collate_fn:
|
| 23 |
+
mixup_prob: 0.5
|
| 24 |
+
mixup_epochs: [4, 29]
|
| 25 |
+
stop_epoch: 50 # epoch in [72, ~) stop `multiscales`
|
| 26 |
+
|
| 27 |
+
# Unfreezing BN
|
| 28 |
+
PResNet:
|
| 29 |
+
freeze_at: -1 # default 0
|
| 30 |
+
freeze_norm: False # default True
|
| 31 |
+
|
| 32 |
+
# Activation
|
| 33 |
+
RTDETRTransformerv2:
|
| 34 |
+
query_pos_method: as_reg
|
| 35 |
+
activation: silu
|
| 36 |
+
mlp_act: silu
|
| 37 |
+
|
| 38 |
+
## Our LR-Scheduler
|
| 39 |
+
lrsheduler: flatcosine
|
| 40 |
+
lr_gamma: 0.5
|
| 41 |
+
warmup_iter: 2000
|
| 42 |
+
flat_epoch: 29 # 4 + epoch // 2, e.g., 40 = 4 + 72 / 2
|
| 43 |
+
no_aug_epoch: 8
|
| 44 |
+
|
| 45 |
+
## Our Loss
|
| 46 |
+
DEIMCriterion:
|
| 47 |
+
weight_dict: {loss_mal: 1, loss_bbox: 5, loss_giou: 2}
|
| 48 |
+
losses: ['mal', 'boxes', ]
|
| 49 |
+
gamma: 1.5
|
configs/base/rt_optimizer.yml
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
use_amp: True
|
| 2 |
+
use_ema: True
|
| 3 |
+
ema:
|
| 4 |
+
type: ModelEMA
|
| 5 |
+
decay: 0.9999
|
| 6 |
+
warmups: 2000
|
| 7 |
+
start: 0
|
| 8 |
+
|
| 9 |
+
epoches: 72
|
| 10 |
+
clip_max_norm: 0.1
|
| 11 |
+
|
| 12 |
+
train_dataloader:
|
| 13 |
+
total_batch_size: 16
|
| 14 |
+
|
| 15 |
+
optimizer:
|
| 16 |
+
type: AdamW
|
| 17 |
+
params:
|
| 18 |
+
-
|
| 19 |
+
params: '^(?=.*backbone)(?!.*norm).*$'
|
| 20 |
+
lr: 0.00001
|
| 21 |
+
-
|
| 22 |
+
params: '^(?=.*(?:encoder|decoder))(?=.*(?:norm|bn)).*$'
|
| 23 |
+
weight_decay: 0.
|
| 24 |
+
|
| 25 |
+
lr: 0.0001
|
| 26 |
+
betas: [0.9, 0.999]
|
| 27 |
+
weight_decay: 0.0001
|
| 28 |
+
|
| 29 |
+
lr_scheduler:
|
| 30 |
+
type: MultiStepLR
|
| 31 |
+
milestones: [1000]
|
| 32 |
+
gamma: 0.1
|
| 33 |
+
|
| 34 |
+
|
| 35 |
+
lr_warmup_scheduler:
|
| 36 |
+
type: LinearWarmup
|
| 37 |
+
warmup_duration: 2000
|
configs/base/rtdetrv2_r50vd.yml
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
task: detection
|
| 2 |
+
|
| 3 |
+
model: DEIM
|
| 4 |
+
criterion: DEIMCriterion
|
| 5 |
+
postprocessor: PostProcessor
|
| 6 |
+
|
| 7 |
+
use_focal_loss: True
|
| 8 |
+
eval_spatial_size: [640, 640] # h w
|
| 9 |
+
checkpoint_freq: 4 # save freq
|
| 10 |
+
|
| 11 |
+
DEIM:
|
| 12 |
+
backbone: PResNet
|
| 13 |
+
encoder: HybridEncoder
|
| 14 |
+
decoder: RTDETRTransformerv2
|
| 15 |
+
|
| 16 |
+
|
| 17 |
+
# Add, default for step lr scheduler
|
| 18 |
+
lrsheduler: flatcosine
|
| 19 |
+
lr_gamma: 1
|
| 20 |
+
warmup_iter: 2000
|
| 21 |
+
flat_epoch: 4000000
|
| 22 |
+
no_aug_epoch: 0
|
| 23 |
+
|
| 24 |
+
PResNet:
|
| 25 |
+
depth: 50
|
| 26 |
+
variant: d
|
| 27 |
+
freeze_at: 0
|
| 28 |
+
return_idx: [1, 2, 3]
|
| 29 |
+
num_stages: 4
|
| 30 |
+
freeze_norm: True
|
| 31 |
+
pretrained: True
|
| 32 |
+
local_model_dir: ../RT-DETR-main/rtdetrv2_pytorch/INK1k/
|
| 33 |
+
|
| 34 |
+
|
| 35 |
+
HybridEncoder:
|
| 36 |
+
in_channels: [512, 1024, 2048]
|
| 37 |
+
feat_strides: [8, 16, 32]
|
| 38 |
+
|
| 39 |
+
# intra
|
| 40 |
+
hidden_dim: 256
|
| 41 |
+
use_encoder_idx: [2]
|
| 42 |
+
num_encoder_layers: 1
|
| 43 |
+
nhead: 8
|
| 44 |
+
dim_feedforward: 1024
|
| 45 |
+
dropout: 0.
|
| 46 |
+
enc_act: 'gelu'
|
| 47 |
+
|
| 48 |
+
# cross
|
| 49 |
+
expansion: 1.0
|
| 50 |
+
depth_mult: 1
|
| 51 |
+
act: 'silu'
|
| 52 |
+
version: rt_detrv2 # pay attention to this
|
| 53 |
+
|
| 54 |
+
|
| 55 |
+
RTDETRTransformerv2:
|
| 56 |
+
feat_channels: [256, 256, 256]
|
| 57 |
+
feat_strides: [8, 16, 32]
|
| 58 |
+
hidden_dim: 256
|
| 59 |
+
num_levels: 3
|
| 60 |
+
|
| 61 |
+
num_layers: 6
|
| 62 |
+
num_queries: 300
|
| 63 |
+
|
| 64 |
+
num_denoising: 100
|
| 65 |
+
label_noise_ratio: 0.5
|
| 66 |
+
box_noise_scale: 1.0 # 1.0 0.4
|
| 67 |
+
|
| 68 |
+
eval_idx: -1
|
| 69 |
+
|
| 70 |
+
# NEW, can be chosen
|
| 71 |
+
num_points: [4, 4, 4] # [3,3,3] [2,2,2]
|
| 72 |
+
cross_attn_method: default # default, discrete
|
| 73 |
+
query_select_method: default # default, agnostic
|
| 74 |
+
|
| 75 |
+
|
| 76 |
+
PostProcessor:
|
| 77 |
+
num_top_queries: 300
|
| 78 |
+
|
| 79 |
+
DEIMCriterion:
|
| 80 |
+
weight_dict: {loss_vfl: 1, loss_bbox: 5, loss_giou: 2,}
|
| 81 |
+
losses: ['vfl', 'boxes', ]
|
| 82 |
+
alpha: 0.75
|
| 83 |
+
gamma: 2.0
|
| 84 |
+
use_uni_set: False
|
| 85 |
+
|
| 86 |
+
matcher:
|
| 87 |
+
type: HungarianMatcher
|
| 88 |
+
weight_dict: {cost_class: 2, cost_bbox: 5, cost_giou: 2}
|
| 89 |
+
alpha: 0.25
|
| 90 |
+
gamma: 2.0
|
configs/dataset/coco_detection.yml
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
task: detection
|
| 2 |
+
|
| 3 |
+
evaluator:
|
| 4 |
+
type: CocoEvaluator
|
| 5 |
+
iou_types: ['bbox']
|
| 6 |
+
|
| 7 |
+
num_classes: 16
|
| 8 |
+
remap_mscoco_category: False # カテゴリIDが0-15に変更済みのためFalse
|
| 9 |
+
|
| 10 |
+
train_dataloader:
|
| 11 |
+
type: DataLoader
|
| 12 |
+
dataset:
|
| 13 |
+
type: CocoDetection
|
| 14 |
+
img_folder: /content/DEIMv2/dataset/train/images
|
| 15 |
+
ann_file: /content/DEIMv2/dataset/train/annotations/train_annotations.json
|
| 16 |
+
return_masks: False
|
| 17 |
+
transforms:
|
| 18 |
+
type: Compose
|
| 19 |
+
ops: ~
|
| 20 |
+
shuffle: True
|
| 21 |
+
num_workers: 2
|
| 22 |
+
drop_last: True
|
| 23 |
+
collate_fn:
|
| 24 |
+
type: BatchImageCollateFunction
|
| 25 |
+
|
| 26 |
+
val_dataloader:
|
| 27 |
+
type: DataLoader
|
| 28 |
+
dataset:
|
| 29 |
+
type: CocoDetection
|
| 30 |
+
img_folder: /content/DEIMv2/dataset/validation/images
|
| 31 |
+
ann_file: /content/DEIMv2/dataset/validation/annotations/validation_annotations.json
|
| 32 |
+
return_masks: False
|
| 33 |
+
transforms:
|
| 34 |
+
type: Compose
|
| 35 |
+
ops: ~
|
| 36 |
+
shuffle: False
|
| 37 |
+
num_workers: 2
|
| 38 |
+
drop_last: False
|
| 39 |
+
collate_fn:
|
| 40 |
+
type: BatchImageCollateFunction
|
configs/dataset/crowdhuman_detection.yml
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
task: detection
|
| 2 |
+
|
| 3 |
+
evaluator:
|
| 4 |
+
type: CocoEvaluator
|
| 5 |
+
iou_types: ['bbox', ]
|
| 6 |
+
|
| 7 |
+
num_classes: 2 # your dataset classes
|
| 8 |
+
remap_mscoco_category: False
|
| 9 |
+
|
| 10 |
+
train_dataloader:
|
| 11 |
+
type: DataLoader
|
| 12 |
+
dataset:
|
| 13 |
+
type: CocoDetection
|
| 14 |
+
img_folder: /datassd/coco/crowd_human_coco/CrowdHuman_train
|
| 15 |
+
ann_file: /datassd/coco/crowd_human_coco/Chuman-train.json
|
| 16 |
+
return_masks: False
|
| 17 |
+
transforms:
|
| 18 |
+
type: Compose
|
| 19 |
+
ops: ~
|
| 20 |
+
shuffle: True
|
| 21 |
+
num_workers: 4
|
| 22 |
+
drop_last: True
|
| 23 |
+
collate_fn:
|
| 24 |
+
type: BatchImageCollateFunction
|
| 25 |
+
|
| 26 |
+
|
| 27 |
+
val_dataloader:
|
| 28 |
+
type: DataLoader
|
| 29 |
+
dataset:
|
| 30 |
+
type: CocoDetection
|
| 31 |
+
img_folder: /datassd/coco/crowd_human_coco/CrowdHuman_val
|
| 32 |
+
ann_file: /datassd/coco/crowd_human_coco/Chuman-val.json
|
| 33 |
+
return_masks: False
|
| 34 |
+
transforms:
|
| 35 |
+
type: Compose
|
| 36 |
+
ops: ~
|
| 37 |
+
shuffle: False
|
| 38 |
+
num_workers: 4
|
| 39 |
+
drop_last: False
|
| 40 |
+
collate_fn:
|
| 41 |
+
type: BatchImageCollateFunction
|
configs/dataset/custom_detection.yml
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
task: detection
|
| 2 |
+
|
| 3 |
+
evaluator:
|
| 4 |
+
type: CocoEvaluator
|
| 5 |
+
iou_types: ['bbox', ]
|
| 6 |
+
|
| 7 |
+
num_classes: 777 # your dataset classes
|
| 8 |
+
remap_mscoco_category: False
|
| 9 |
+
|
| 10 |
+
train_dataloader:
|
| 11 |
+
type: DataLoader
|
| 12 |
+
dataset:
|
| 13 |
+
type: CocoDetection
|
| 14 |
+
img_folder: /data/yourdataset/train
|
| 15 |
+
ann_file: /data/yourdataset/train/train.json
|
| 16 |
+
return_masks: False
|
| 17 |
+
transforms:
|
| 18 |
+
type: Compose
|
| 19 |
+
ops: ~
|
| 20 |
+
shuffle: True
|
| 21 |
+
num_workers: 4
|
| 22 |
+
drop_last: True
|
| 23 |
+
collate_fn:
|
| 24 |
+
type: BatchImageCollateFunction
|
| 25 |
+
|
| 26 |
+
|
| 27 |
+
val_dataloader:
|
| 28 |
+
type: DataLoader
|
| 29 |
+
dataset:
|
| 30 |
+
type: CocoDetection
|
| 31 |
+
img_folder: /data/yourdataset/val
|
| 32 |
+
ann_file: /data/yourdataset/val/val.json
|
| 33 |
+
return_masks: False
|
| 34 |
+
transforms:
|
| 35 |
+
type: Compose
|
| 36 |
+
ops: ~
|
| 37 |
+
shuffle: False
|
| 38 |
+
num_workers: 4
|
| 39 |
+
drop_last: False
|
| 40 |
+
collate_fn:
|
| 41 |
+
type: BatchImageCollateFunction
|
configs/dataset/obj365_detection.yml
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
task: detection
|
| 2 |
+
|
| 3 |
+
evaluator:
|
| 4 |
+
type: CocoEvaluator
|
| 5 |
+
iou_types: ['bbox', ]
|
| 6 |
+
|
| 7 |
+
num_classes: 366
|
| 8 |
+
remap_mscoco_category: False
|
| 9 |
+
|
| 10 |
+
train_dataloader:
|
| 11 |
+
type: DataLoader
|
| 12 |
+
dataset:
|
| 13 |
+
type: CocoDetection
|
| 14 |
+
img_folder: /home/Dataset/objects365/train
|
| 15 |
+
ann_file: /home/Dataset/objects365/train/new_zhiyuan_objv2_train_resized640.json
|
| 16 |
+
return_masks: False
|
| 17 |
+
transforms:
|
| 18 |
+
type: Compose
|
| 19 |
+
ops: ~
|
| 20 |
+
shuffle: True
|
| 21 |
+
num_workers: 4
|
| 22 |
+
drop_last: True
|
| 23 |
+
collate_fn:
|
| 24 |
+
type: BatchImageCollateFunction
|
| 25 |
+
|
| 26 |
+
|
| 27 |
+
val_dataloader:
|
| 28 |
+
type: DataLoader
|
| 29 |
+
dataset:
|
| 30 |
+
type: CocoDetection
|
| 31 |
+
img_folder: /home/Dataset/objects365/val
|
| 32 |
+
ann_file: /home/Dataset/objects365/val/new_zhiyuan_objv2_val_resized640.json
|
| 33 |
+
return_masks: False
|
| 34 |
+
transforms:
|
| 35 |
+
type: Compose
|
| 36 |
+
ops: ~
|
| 37 |
+
shuffle: False
|
| 38 |
+
num_workers: 4
|
| 39 |
+
drop_last: False
|
| 40 |
+
collate_fn:
|
| 41 |
+
type: BatchImageCollateFunction
|
configs/dataset/voc_detection.yml
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
task: detection
|
| 2 |
+
|
| 3 |
+
evaluator:
|
| 4 |
+
type: CocoEvaluator
|
| 5 |
+
iou_types: ['bbox', ]
|
| 6 |
+
|
| 7 |
+
num_classes: 20
|
| 8 |
+
|
| 9 |
+
train_dataloader:
|
| 10 |
+
type: DataLoader
|
| 11 |
+
dataset:
|
| 12 |
+
type: VOCDetection
|
| 13 |
+
root: ./dataset/voc/
|
| 14 |
+
ann_file: trainval.txt
|
| 15 |
+
label_file: label_list.txt
|
| 16 |
+
transforms:
|
| 17 |
+
type: Compose
|
| 18 |
+
ops: ~
|
| 19 |
+
shuffle: True
|
| 20 |
+
num_workers: 4
|
| 21 |
+
drop_last: True
|
| 22 |
+
collate_fn:
|
| 23 |
+
type: BatchImageCollateFunction
|
| 24 |
+
|
| 25 |
+
|
| 26 |
+
val_dataloader:
|
| 27 |
+
type: DataLoader
|
| 28 |
+
dataset:
|
| 29 |
+
type: VOCDetection
|
| 30 |
+
root: ./dataset/voc/
|
| 31 |
+
ann_file: test.txt
|
| 32 |
+
label_file: label_list.txt
|
| 33 |
+
transforms:
|
| 34 |
+
type: Compose
|
| 35 |
+
ops: ~
|
| 36 |
+
shuffle: False
|
| 37 |
+
num_workers: 4
|
| 38 |
+
drop_last: False
|
| 39 |
+
collate_fn:
|
| 40 |
+
type: BatchImageCollateFunction
|
configs/deim_dfine/deim_hgnetv2_l_coco.yml
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
__include__: [
|
| 2 |
+
'./dfine_hgnetv2_l_coco.yml',
|
| 3 |
+
'../base/deim.yml'
|
| 4 |
+
]
|
| 5 |
+
|
| 6 |
+
output_dir: ./outputs/deim_hgnetv2_l_coco
|
| 7 |
+
|
| 8 |
+
optimizer:
|
| 9 |
+
type: AdamW
|
| 10 |
+
params:
|
| 11 |
+
-
|
| 12 |
+
params: '^(?=.*backbone)(?!.*norm|bn).*$'
|
| 13 |
+
lr: 0.000025
|
| 14 |
+
-
|
| 15 |
+
params: '^(?=.*(?:encoder|decoder))(?=.*(?:norm|bn)).*$'
|
| 16 |
+
weight_decay: 0.
|
| 17 |
+
|
| 18 |
+
lr: 0.0005
|
| 19 |
+
betas: [0.9, 0.999]
|
| 20 |
+
weight_decay: 0.000125
|
| 21 |
+
|
| 22 |
+
# Increase to search for the optimal ema
|
| 23 |
+
epoches: 58 # 72 + 2n
|
| 24 |
+
|
| 25 |
+
## Our LR-Scheduler
|
| 26 |
+
flat_epoch: 29 # 4 + epoch // 2, e.g., 40 = 4 + 72 / 2
|
| 27 |
+
no_aug_epoch: 8
|
| 28 |
+
|
| 29 |
+
train_dataloader:
|
| 30 |
+
dataset:
|
| 31 |
+
transforms:
|
| 32 |
+
policy:
|
| 33 |
+
epoch: [4, 29, 50] # list
|
| 34 |
+
|
| 35 |
+
collate_fn:
|
| 36 |
+
mixup_epochs: [4, 29]
|
| 37 |
+
stop_epoch: 50
|
configs/deim_dfine/deim_hgnetv2_m_coco.yml
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
__include__: [
|
| 2 |
+
'./dfine_hgnetv2_m_coco.yml',
|
| 3 |
+
'../base/deim.yml'
|
| 4 |
+
]
|
| 5 |
+
|
| 6 |
+
output_dir: ./outputs/deim_hgnetv2_m_coco
|
| 7 |
+
|
| 8 |
+
optimizer:
|
| 9 |
+
type: AdamW
|
| 10 |
+
params:
|
| 11 |
+
-
|
| 12 |
+
params: '^(?=.*backbone)(?!.*bn).*$'
|
| 13 |
+
lr: 0.00004
|
| 14 |
+
-
|
| 15 |
+
params: '^(?=.*(?:norm|bn)).*$'
|
| 16 |
+
weight_decay: 0.
|
| 17 |
+
|
| 18 |
+
lr: 0.0004
|
| 19 |
+
betas: [0.9, 0.999]
|
| 20 |
+
weight_decay: 0.0001
|
| 21 |
+
|
| 22 |
+
|
| 23 |
+
# Increase to search for the optimal ema
|
| 24 |
+
epoches: 102 # 120 + 4n
|
| 25 |
+
|
| 26 |
+
## Our LR-Scheduler
|
| 27 |
+
flat_epoch: 49 # 4 + epoch // 2, e.g., 40 = 4 + 72 / 2
|
| 28 |
+
no_aug_epoch: 12
|
| 29 |
+
|
| 30 |
+
## Our DataAug
|
| 31 |
+
train_dataloader:
|
| 32 |
+
dataset:
|
| 33 |
+
transforms:
|
| 34 |
+
policy:
|
| 35 |
+
epoch: [4, 49, 90] # list
|
| 36 |
+
|
| 37 |
+
collate_fn:
|
| 38 |
+
mixup_epochs: [4, 49]
|
| 39 |
+
stop_epoch: 90
|
configs/deim_dfine/deim_hgnetv2_n_coco.yml
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
__include__: [
|
| 2 |
+
'./dfine_hgnetv2_n_coco.yml',
|
| 3 |
+
'../base/deim.yml'
|
| 4 |
+
]
|
| 5 |
+
|
| 6 |
+
output_dir: ./deim_outputs/deim_hgnetv2_n_coco
|
| 7 |
+
|
| 8 |
+
optimizer:
|
| 9 |
+
type: AdamW
|
| 10 |
+
params:
|
| 11 |
+
-
|
| 12 |
+
params: '^(?=.*backbone)(?!.*norm|bn).*$'
|
| 13 |
+
lr: 0.0004
|
| 14 |
+
-
|
| 15 |
+
params: '^(?=.*backbone)(?=.*norm|bn).*$'
|
| 16 |
+
lr: 0.0004
|
| 17 |
+
weight_decay: 0.
|
| 18 |
+
-
|
| 19 |
+
params: '^(?=.*(?:encoder|decoder))(?=.*(?:norm|bn|bias)).*$'
|
| 20 |
+
weight_decay: 0.
|
| 21 |
+
|
| 22 |
+
lr: 0.0008
|
| 23 |
+
betas: [0.9, 0.999]
|
| 24 |
+
weight_decay: 0.0001
|
| 25 |
+
|
| 26 |
+
# Increase to search for the optimal ema
|
| 27 |
+
epoches: 160 # 148 + 12
|
| 28 |
+
|
| 29 |
+
## Our LR-Scheduler
|
| 30 |
+
flat_epoch: 7800 # 4 + epoch // 2, e.g., 40 = 4 + 72 / 2
|
| 31 |
+
no_aug_epoch: 12
|
| 32 |
+
lr_gamma: 1.0
|
| 33 |
+
|
| 34 |
+
## Our DataAug
|
| 35 |
+
train_dataloader:
|
| 36 |
+
dataset:
|
| 37 |
+
transforms:
|
| 38 |
+
policy:
|
| 39 |
+
epoch: [4, 78, 148] # list
|
| 40 |
+
|
| 41 |
+
collate_fn:
|
| 42 |
+
mixup_epochs: [4, 78]
|
| 43 |
+
stop_epoch: 148
|
| 44 |
+
base_size_repeat: ~
|
configs/deim_dfine/deim_hgnetv2_s_coco.yml
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
__include__: [
|
| 2 |
+
'./dfine_hgnetv2_s_coco.yml',
|
| 3 |
+
'../base/deim.yml'
|
| 4 |
+
]
|
| 5 |
+
|
| 6 |
+
output_dir: ./outputs/deim_hgnetv2_s_coco
|
| 7 |
+
|
| 8 |
+
optimizer:
|
| 9 |
+
type: AdamW
|
| 10 |
+
params:
|
| 11 |
+
-
|
| 12 |
+
params: '^(?=.*backbone)(?!.*bn).*$'
|
| 13 |
+
lr: 0.0002
|
| 14 |
+
-
|
| 15 |
+
params: '^(?=.*(?:norm|bn)).*$' # except bias
|
| 16 |
+
weight_decay: 0.
|
| 17 |
+
|
| 18 |
+
lr: 0.0004
|
| 19 |
+
betas: [0.9, 0.999]
|
| 20 |
+
weight_decay: 0.0001
|
| 21 |
+
|
| 22 |
+
|
| 23 |
+
# Increase to search for the optimal ema
|
| 24 |
+
epoches: 132 # 120 + 4n
|
| 25 |
+
|
| 26 |
+
## Our LR-Scheduler
|
| 27 |
+
flat_epoch: 64 # 4 + epoch // 2, e.g., 40 = 4 + 72 / 2
|
| 28 |
+
no_aug_epoch: 12
|
| 29 |
+
|
| 30 |
+
## Our DataAug
|
| 31 |
+
train_dataloader:
|
| 32 |
+
dataset:
|
| 33 |
+
transforms:
|
| 34 |
+
policy:
|
| 35 |
+
epoch: [4, 64, 120] # list
|
| 36 |
+
|
| 37 |
+
collate_fn:
|
| 38 |
+
mixup_epochs: [4, 64]
|
| 39 |
+
stop_epoch: 120
|
configs/deim_dfine/deim_hgnetv2_x_coco.yml
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
__include__: [
|
| 2 |
+
'./dfine_hgnetv2_x_coco.yml',
|
| 3 |
+
'../base/deim.yml'
|
| 4 |
+
]
|
| 5 |
+
|
| 6 |
+
output_dir: ./outputs/deim_hgnetv2_x_coco
|
| 7 |
+
|
| 8 |
+
optimizer:
|
| 9 |
+
type: AdamW
|
| 10 |
+
params:
|
| 11 |
+
-
|
| 12 |
+
params: '^(?=.*backbone)(?!.*norm|bn).*$'
|
| 13 |
+
lr: 0.000005
|
| 14 |
+
-
|
| 15 |
+
params: '^(?=.*(?:encoder|decoder))(?=.*(?:norm|bn)).*$'
|
| 16 |
+
weight_decay: 0.
|
| 17 |
+
|
| 18 |
+
lr: 0.0005
|
| 19 |
+
betas: [0.9, 0.999]
|
| 20 |
+
weight_decay: 0.000125
|
| 21 |
+
|
| 22 |
+
# Increase to search for the optimal ema
|
| 23 |
+
epoches: 58 # 72 + 2n
|
| 24 |
+
|
| 25 |
+
## Our LR-Scheduler
|
| 26 |
+
flat_epoch: 29 # 4 + epoch // 2, e.g., 40 = 4 + 72 / 2
|
| 27 |
+
no_aug_epoch: 8
|
| 28 |
+
|
| 29 |
+
train_dataloader:
|
| 30 |
+
dataset:
|
| 31 |
+
transforms:
|
| 32 |
+
policy:
|
| 33 |
+
epoch: [4, 29, 50] # list
|
| 34 |
+
|
| 35 |
+
collate_fn:
|
| 36 |
+
mixup_epochs: [4, 29]
|
| 37 |
+
stop_epoch: 50
|
configs/deim_dfine/dfine_hgnetv2_l_coco.yml
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
__include__: [
|
| 2 |
+
'../dataset/coco_detection.yml',
|
| 3 |
+
'../runtime.yml',
|
| 4 |
+
'../base/dataloader.yml',
|
| 5 |
+
'../base/optimizer.yml',
|
| 6 |
+
'../base/dfine_hgnetv2.yml',
|
| 7 |
+
]
|
| 8 |
+
|
| 9 |
+
output_dir: ./outputs/dfine_hgnetv2_l_coco
|
| 10 |
+
|
| 11 |
+
|
| 12 |
+
HGNetv2:
|
| 13 |
+
name: 'B4'
|
| 14 |
+
return_idx: [1, 2, 3]
|
| 15 |
+
freeze_stem_only: True
|
| 16 |
+
freeze_at: 0
|
| 17 |
+
freeze_norm: True
|
| 18 |
+
|
| 19 |
+
optimizer:
|
| 20 |
+
type: AdamW
|
| 21 |
+
params:
|
| 22 |
+
-
|
| 23 |
+
params: '^(?=.*backbone)(?!.*norm|bn).*$'
|
| 24 |
+
lr: 0.0000125
|
| 25 |
+
-
|
| 26 |
+
params: '^(?=.*(?:encoder|decoder))(?=.*(?:norm|bn)).*$'
|
| 27 |
+
weight_decay: 0.
|
| 28 |
+
|
| 29 |
+
lr: 0.00025
|
| 30 |
+
betas: [0.9, 0.999]
|
| 31 |
+
weight_decay: 0.000125
|
| 32 |
+
|
| 33 |
+
|
| 34 |
+
# Increase to search for the optimal ema
|
| 35 |
+
epoches: 80 # 72 + 2n
|
| 36 |
+
train_dataloader:
|
| 37 |
+
dataset:
|
| 38 |
+
transforms:
|
| 39 |
+
policy:
|
| 40 |
+
epoch: 72
|
| 41 |
+
collate_fn:
|
| 42 |
+
stop_epoch: 72
|
| 43 |
+
ema_restart_decay: 0.9999
|
| 44 |
+
base_size_repeat: 4
|
configs/deim_dfine/dfine_hgnetv2_m_coco.yml
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
__include__: [
|
| 2 |
+
'../dataset/coco_detection.yml',
|
| 3 |
+
'../runtime.yml',
|
| 4 |
+
'../base/dataloader.yml',
|
| 5 |
+
'../base/optimizer.yml',
|
| 6 |
+
'../base/dfine_hgnetv2.yml',
|
| 7 |
+
]
|
| 8 |
+
|
| 9 |
+
output_dir: ./output/dfine_hgnetv2_m_coco
|
| 10 |
+
|
| 11 |
+
|
| 12 |
+
DEIM:
|
| 13 |
+
backbone: HGNetv2
|
| 14 |
+
|
| 15 |
+
HGNetv2:
|
| 16 |
+
name: 'B2'
|
| 17 |
+
return_idx: [1, 2, 3]
|
| 18 |
+
freeze_at: -1
|
| 19 |
+
freeze_norm: False
|
| 20 |
+
use_lab: True
|
| 21 |
+
|
| 22 |
+
DFINETransformer:
|
| 23 |
+
num_layers: 4 # 5 6
|
| 24 |
+
eval_idx: -1 # -2 -3
|
| 25 |
+
|
| 26 |
+
HybridEncoder:
|
| 27 |
+
in_channels: [384, 768, 1536]
|
| 28 |
+
hidden_dim: 256
|
| 29 |
+
depth_mult: 0.67
|
| 30 |
+
|
| 31 |
+
optimizer:
|
| 32 |
+
type: AdamW
|
| 33 |
+
params:
|
| 34 |
+
-
|
| 35 |
+
params: '^(?=.*backbone)(?!.*norm|bn).*$'
|
| 36 |
+
lr: 0.00002
|
| 37 |
+
-
|
| 38 |
+
params: '^(?=.*backbone)(?=.*norm|bn).*$'
|
| 39 |
+
lr: 0.00002
|
| 40 |
+
weight_decay: 0.
|
| 41 |
+
-
|
| 42 |
+
params: '^(?=.*(?:encoder|decoder))(?=.*(?:norm|bn|bias)).*$'
|
| 43 |
+
weight_decay: 0.
|
| 44 |
+
|
| 45 |
+
lr: 0.0002
|
| 46 |
+
betas: [0.9, 0.999]
|
| 47 |
+
weight_decay: 0.0001
|
| 48 |
+
|
| 49 |
+
|
| 50 |
+
# Increase to search for the optimal ema
|
| 51 |
+
epoches: 132 # 120 + 4n
|
| 52 |
+
train_dataloader:
|
| 53 |
+
dataset:
|
| 54 |
+
transforms:
|
| 55 |
+
policy:
|
| 56 |
+
epoch: 120
|
| 57 |
+
collate_fn:
|
| 58 |
+
stop_epoch: 120
|
| 59 |
+
ema_restart_decay: 0.9999
|
| 60 |
+
base_size_repeat: 6
|
configs/deim_dfine/dfine_hgnetv2_n_coco.yml
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
__include__: [
|
| 2 |
+
'../dataset/coco_detection.yml',
|
| 3 |
+
'../runtime.yml',
|
| 4 |
+
'../base/dataloader.yml',
|
| 5 |
+
'../base/optimizer.yml',
|
| 6 |
+
'../base/dfine_hgnetv2.yml',
|
| 7 |
+
]
|
| 8 |
+
|
| 9 |
+
output_dir: ./output/dfine_hgnetv2_n_coco
|
| 10 |
+
|
| 11 |
+
|
| 12 |
+
DEIM:
|
| 13 |
+
backbone: HGNetv2
|
| 14 |
+
|
| 15 |
+
HGNetv2:
|
| 16 |
+
name: 'B0'
|
| 17 |
+
return_idx: [2, 3]
|
| 18 |
+
freeze_at: -1
|
| 19 |
+
freeze_norm: False
|
| 20 |
+
use_lab: True
|
| 21 |
+
|
| 22 |
+
|
| 23 |
+
HybridEncoder:
|
| 24 |
+
in_channels: [512, 1024]
|
| 25 |
+
feat_strides: [16, 32]
|
| 26 |
+
|
| 27 |
+
# intra
|
| 28 |
+
hidden_dim: 128
|
| 29 |
+
use_encoder_idx: [1]
|
| 30 |
+
dim_feedforward: 512
|
| 31 |
+
|
| 32 |
+
# cross
|
| 33 |
+
expansion: 0.34
|
| 34 |
+
depth_mult: 0.5
|
| 35 |
+
|
| 36 |
+
|
| 37 |
+
DFINETransformer:
|
| 38 |
+
feat_channels: [128, 128]
|
| 39 |
+
feat_strides: [16, 32]
|
| 40 |
+
hidden_dim: 128
|
| 41 |
+
dim_feedforward: 512
|
| 42 |
+
num_levels: 2
|
| 43 |
+
|
| 44 |
+
num_layers: 3
|
| 45 |
+
eval_idx: -1
|
| 46 |
+
|
| 47 |
+
num_points: [6, 6]
|
| 48 |
+
|
| 49 |
+
optimizer:
|
| 50 |
+
type: AdamW
|
| 51 |
+
params:
|
| 52 |
+
-
|
| 53 |
+
params: '^(?=.*backbone)(?!.*norm|bn).*$'
|
| 54 |
+
lr: 0.0004
|
| 55 |
+
-
|
| 56 |
+
params: '^(?=.*backbone)(?=.*norm|bn).*$'
|
| 57 |
+
lr: 0.0004
|
| 58 |
+
weight_decay: 0.
|
| 59 |
+
-
|
| 60 |
+
params: '^(?=.*(?:encoder|decoder))(?=.*(?:norm|bn|bias)).*$'
|
| 61 |
+
weight_decay: 0.
|
| 62 |
+
|
| 63 |
+
lr: 0.0008
|
| 64 |
+
betas: [0.9, 0.999]
|
| 65 |
+
weight_decay: 0.0001
|
| 66 |
+
|
| 67 |
+
|
| 68 |
+
# Increase to search for the optimal ema
|
| 69 |
+
epoches: 160 # 148 + 4n
|
| 70 |
+
train_dataloader:
|
| 71 |
+
total_batch_size: 128
|
| 72 |
+
dataset:
|
| 73 |
+
transforms:
|
| 74 |
+
policy:
|
| 75 |
+
epoch: 148
|
| 76 |
+
collate_fn:
|
| 77 |
+
stop_epoch: 148
|
| 78 |
+
ema_restart_decay: 0.9999
|
| 79 |
+
base_size_repeat: ~
|
| 80 |
+
|
| 81 |
+
val_dataloader:
|
| 82 |
+
total_batch_size: 256
|
configs/deim_dfine/dfine_hgnetv2_s_coco.yml
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
__include__: [
|
| 2 |
+
'../dataset/coco_detection.yml',
|
| 3 |
+
'../runtime.yml',
|
| 4 |
+
'../base/dataloader.yml',
|
| 5 |
+
'../base/optimizer.yml',
|
| 6 |
+
'../base/dfine_hgnetv2.yml',
|
| 7 |
+
]
|
| 8 |
+
|
| 9 |
+
output_dir: ./output/dfine_hgnetv2_s_coco
|
| 10 |
+
|
| 11 |
+
|
| 12 |
+
DEIM:
|
| 13 |
+
backbone: HGNetv2
|
| 14 |
+
|
| 15 |
+
HGNetv2:
|
| 16 |
+
name: 'B0'
|
| 17 |
+
return_idx: [1, 2, 3]
|
| 18 |
+
freeze_at: -1
|
| 19 |
+
freeze_norm: False
|
| 20 |
+
use_lab: True
|
| 21 |
+
|
| 22 |
+
DFINETransformer:
|
| 23 |
+
num_layers: 3 # 4 5 6
|
| 24 |
+
eval_idx: -1 # -2 -3 -4
|
| 25 |
+
|
| 26 |
+
HybridEncoder:
|
| 27 |
+
in_channels: [256, 512, 1024]
|
| 28 |
+
hidden_dim: 256
|
| 29 |
+
depth_mult: 0.34
|
| 30 |
+
expansion: 0.5
|
| 31 |
+
|
| 32 |
+
optimizer:
|
| 33 |
+
type: AdamW
|
| 34 |
+
params:
|
| 35 |
+
-
|
| 36 |
+
params: '^(?=.*backbone)(?!.*norm|bn).*$'
|
| 37 |
+
lr: 0.0001
|
| 38 |
+
-
|
| 39 |
+
params: '^(?=.*backbone)(?=.*norm|bn).*$'
|
| 40 |
+
lr: 0.0001
|
| 41 |
+
weight_decay: 0.
|
| 42 |
+
-
|
| 43 |
+
params: '^(?=.*(?:encoder|decoder))(?=.*(?:norm|bn|bias)).*$'
|
| 44 |
+
weight_decay: 0.
|
| 45 |
+
|
| 46 |
+
lr: 0.0002
|
| 47 |
+
betas: [0.9, 0.999]
|
| 48 |
+
weight_decay: 0.0001
|
| 49 |
+
|
| 50 |
+
|
| 51 |
+
# Increase to search for the optimal ema
|
| 52 |
+
epoches: 132 # 120 + 4n
|
| 53 |
+
train_dataloader:
|
| 54 |
+
dataset:
|
| 55 |
+
transforms:
|
| 56 |
+
policy:
|
| 57 |
+
epoch: 120
|
| 58 |
+
collate_fn:
|
| 59 |
+
stop_epoch: 120
|
| 60 |
+
ema_restart_decay: 0.9999
|
| 61 |
+
base_size_repeat: 20
|
configs/deim_dfine/dfine_hgnetv2_x_coco.yml
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
__include__: [
|
| 2 |
+
'../dataset/coco_detection.yml',
|
| 3 |
+
'../runtime.yml',
|
| 4 |
+
'../base/dataloader.yml',
|
| 5 |
+
'../base/optimizer.yml',
|
| 6 |
+
'../base/dfine_hgnetv2.yml',
|
| 7 |
+
]
|
| 8 |
+
|
| 9 |
+
output_dir: ./output/dfine_hgnetv2_x_coco
|
| 10 |
+
|
| 11 |
+
|
| 12 |
+
DEIM:
|
| 13 |
+
backbone: HGNetv2
|
| 14 |
+
|
| 15 |
+
HGNetv2:
|
| 16 |
+
name: 'B5'
|
| 17 |
+
return_idx: [1, 2, 3]
|
| 18 |
+
freeze_stem_only: True
|
| 19 |
+
freeze_at: 0
|
| 20 |
+
freeze_norm: True
|
| 21 |
+
|
| 22 |
+
HybridEncoder:
|
| 23 |
+
# intra
|
| 24 |
+
hidden_dim: 384
|
| 25 |
+
dim_feedforward: 2048
|
| 26 |
+
|
| 27 |
+
DFINETransformer:
|
| 28 |
+
feat_channels: [384, 384, 384]
|
| 29 |
+
reg_scale: 8
|
| 30 |
+
|
| 31 |
+
optimizer:
|
| 32 |
+
type: AdamW
|
| 33 |
+
params:
|
| 34 |
+
-
|
| 35 |
+
params: '^(?=.*backbone)(?!.*norm|bn).*$'
|
| 36 |
+
lr: 0.0000025
|
| 37 |
+
-
|
| 38 |
+
params: '^(?=.*(?:encoder|decoder))(?=.*(?:norm|bn)).*$'
|
| 39 |
+
weight_decay: 0.
|
| 40 |
+
|
| 41 |
+
lr: 0.00025
|
| 42 |
+
betas: [0.9, 0.999]
|
| 43 |
+
weight_decay: 0.000125
|
| 44 |
+
|
| 45 |
+
|
| 46 |
+
# Increase to search for the optimal ema
|
| 47 |
+
epoches: 80 # 72 + 2n
|
| 48 |
+
train_dataloader:
|
| 49 |
+
dataset:
|
| 50 |
+
transforms:
|
| 51 |
+
policy:
|
| 52 |
+
epoch: 72
|
| 53 |
+
collate_fn:
|
| 54 |
+
stop_epoch: 72
|
| 55 |
+
ema_restart_decay: 0.9998
|
| 56 |
+
base_size_repeat: 3
|
configs/deim_dfine/object365/deim_hgnetv2_x_obj2coco_24e.yml
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
__include__: [
|
| 2 |
+
'./dfine_hgnetv2_x_obj2coco.yml',
|
| 3 |
+
'../../base/deim.yml'
|
| 4 |
+
]
|
| 5 |
+
|
| 6 |
+
output_dir: ./deim_outputs/deim_hgnetv2_x_obj2coco_24e
|
| 7 |
+
|
| 8 |
+
HGNetv2:
|
| 9 |
+
freeze_at: 0 # 0 default
|
| 10 |
+
freeze_norm: True # True default
|
| 11 |
+
|
| 12 |
+
# Activation
|
| 13 |
+
DFINETransformer:
|
| 14 |
+
activation: relu
|
| 15 |
+
mlp_act: relu
|
| 16 |
+
|
| 17 |
+
optimizer:
|
| 18 |
+
type: AdamW
|
| 19 |
+
params:
|
| 20 |
+
-
|
| 21 |
+
params: '^(?=.*backbone)(?!.*norm|bn).*$'
|
| 22 |
+
lr: 0.0000025
|
| 23 |
+
-
|
| 24 |
+
params: '^(?=.*(?:encoder|decoder))(?=.*(?:norm|bn)).*$'
|
| 25 |
+
weight_decay: 0.
|
| 26 |
+
|
| 27 |
+
lr: 0.00025
|
| 28 |
+
betas: [0.9, 0.999]
|
| 29 |
+
weight_decay: 0.000125
|
| 30 |
+
|
| 31 |
+
# Increase to search for the optimal ema
|
| 32 |
+
epoches: 24 # 72 + 2n
|
| 33 |
+
|
| 34 |
+
## Our LR-Scheduler
|
| 35 |
+
lrsheduler: flatcosine
|
| 36 |
+
lr_gamma: 1
|
| 37 |
+
warmup_iter: 0 # 0
|
| 38 |
+
flat_epoch: 12000 # 4 + epoch // 2, e.g., 40 = 4 + 72 / 2
|
| 39 |
+
no_aug_epoch: 4
|
| 40 |
+
|
| 41 |
+
## Our DataAug
|
| 42 |
+
train_dataloader:
|
| 43 |
+
dataset:
|
| 44 |
+
transforms:
|
| 45 |
+
policy:
|
| 46 |
+
epoch: [2, 12, 20] # list
|
| 47 |
+
|
| 48 |
+
collate_fn:
|
| 49 |
+
mixup_epochs: [2, 12]
|
| 50 |
+
stop_epoch: 20
|
configs/deim_dfine/object365/dfine_hgnetv2_x_obj2coco.yml
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
__include__: [
|
| 2 |
+
'../../dataset/coco_detection.yml',
|
| 3 |
+
'../../runtime.yml',
|
| 4 |
+
'../../base/dataloader.yml',
|
| 5 |
+
'../../base/optimizer.yml',
|
| 6 |
+
'../../base/dfine_hgnetv2.yml',
|
| 7 |
+
]
|
| 8 |
+
|
| 9 |
+
output_dir: ./outputs/dfine_hgnetv2_x_obj2coco
|
| 10 |
+
|
| 11 |
+
HGNetv2:
|
| 12 |
+
name: 'B5'
|
| 13 |
+
return_idx: [1, 2, 3]
|
| 14 |
+
freeze_stem_only: True
|
| 15 |
+
freeze_at: 0
|
| 16 |
+
freeze_norm: True
|
| 17 |
+
|
| 18 |
+
HybridEncoder:
|
| 19 |
+
# intra
|
| 20 |
+
hidden_dim: 384
|
| 21 |
+
dim_feedforward: 2048
|
| 22 |
+
|
| 23 |
+
DFINETransformer:
|
| 24 |
+
feat_channels: [384, 384, 384]
|
| 25 |
+
reg_scale: 8
|
| 26 |
+
|
| 27 |
+
optimizer:
|
| 28 |
+
type: AdamW
|
| 29 |
+
params:
|
| 30 |
+
-
|
| 31 |
+
params: '^(?=.*backbone)(?!.*norm|bn).*$'
|
| 32 |
+
lr: 0.0000025
|
| 33 |
+
-
|
| 34 |
+
params: '^(?=.*(?:encoder|decoder))(?=.*(?:norm|bn)).*$'
|
| 35 |
+
weight_decay: 0.
|
| 36 |
+
|
| 37 |
+
lr: 0.00025
|
| 38 |
+
betas: [0.9, 0.999]
|
| 39 |
+
weight_decay: 0.000125
|
| 40 |
+
|
| 41 |
+
|
| 42 |
+
epoches: 36 # Early stop
|
| 43 |
+
train_dataloader:
|
| 44 |
+
dataset:
|
| 45 |
+
transforms:
|
| 46 |
+
policy:
|
| 47 |
+
epoch: 30
|
| 48 |
+
collate_fn:
|
| 49 |
+
stop_epoch: 30
|
| 50 |
+
ema_restart_decay: 0.9999
|
| 51 |
+
base_size_repeat: 3
|
| 52 |
+
|
| 53 |
+
ema:
|
| 54 |
+
warmups: 0
|
| 55 |
+
|
| 56 |
+
lr_warmup_scheduler:
|
| 57 |
+
warmup_duration: 0
|
configs/deim_rtdetrv2/deim_r101vd_60e_coco.yml
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
__include__: [
|
| 2 |
+
'./rtdetrv2_r101vd_6x_coco.yml',
|
| 3 |
+
'../base/rt_deim.yml',
|
| 4 |
+
]
|
| 5 |
+
|
| 6 |
+
output_dir: ./outputs/deim_rtdetrv2_r101vd_60e_coco
|
| 7 |
+
|
| 8 |
+
optimizer:
|
| 9 |
+
type: AdamW
|
| 10 |
+
params:
|
| 11 |
+
-
|
| 12 |
+
params: '^(?=.*backbone)(?!.*norm).*$'
|
| 13 |
+
lr: 0.000002
|
| 14 |
+
-
|
| 15 |
+
params: '^(?=.*(?:norm|bn)).*$'
|
| 16 |
+
weight_decay: 0.
|
| 17 |
+
|
| 18 |
+
lr: 0.0002
|
| 19 |
+
betas: [0.9, 0.999]
|
| 20 |
+
weight_decay: 0.0001
|
| 21 |
+
|
| 22 |
+
|
| 23 |
+
# change part
|
| 24 |
+
epoches: 60
|
| 25 |
+
flat_epoch: 34 # 4 + 60 / 2
|
| 26 |
+
no_aug_epoch: 2
|
| 27 |
+
|
| 28 |
+
train_dataloader:
|
| 29 |
+
dataset:
|
| 30 |
+
transforms:
|
| 31 |
+
policy:
|
| 32 |
+
epoch: [4, 34, 58] # list
|
| 33 |
+
|
| 34 |
+
collate_fn:
|
| 35 |
+
mixup_epochs: [4, 34]
|
| 36 |
+
stop_epoch: 58
|
configs/deim_rtdetrv2/deim_r18vd_120e_coco.yml
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
__include__: [
|
| 2 |
+
'./rtdetrv2_r18vd_120e_coco.yml',
|
| 3 |
+
'../base/rt_deim.yml',
|
| 4 |
+
]
|
| 5 |
+
|
| 6 |
+
output_dir: ./output/deim_rtdetrv2_r18vd_120e_coco
|
| 7 |
+
|
| 8 |
+
optimizer:
|
| 9 |
+
type: AdamW
|
| 10 |
+
params:
|
| 11 |
+
-
|
| 12 |
+
params: '^(?=.*(?:norm|bn)).*$'
|
| 13 |
+
weight_decay: 0.
|
| 14 |
+
|
| 15 |
+
lr: 0.0002
|
| 16 |
+
betas: [0.9, 0.999]
|
| 17 |
+
weight_decay: 0.0001
|
| 18 |
+
|
| 19 |
+
# change part
|
| 20 |
+
epoches: 120
|
| 21 |
+
flat_epoch: 64 # 4 + 120 / 2
|
| 22 |
+
no_aug_epoch: 3
|
| 23 |
+
|
| 24 |
+
train_dataloader:
|
| 25 |
+
dataset:
|
| 26 |
+
transforms:
|
| 27 |
+
policy:
|
| 28 |
+
epoch: [4, 64, 117] # list
|
| 29 |
+
|
| 30 |
+
collate_fn:
|
| 31 |
+
mixup_epochs: [4, 64]
|
| 32 |
+
stop_epoch: 117
|
configs/deim_rtdetrv2/deim_r34vd_120e_coco.yml
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
__include__: [
|
| 2 |
+
'./rtdetrv2_r34vd_120e_coco.yml',
|
| 3 |
+
'../base/rt_deim.yml',
|
| 4 |
+
]
|
| 5 |
+
|
| 6 |
+
output_dir: ./outputs/deim_rtdetrv2_r34vd_120e_coco
|
| 7 |
+
|
| 8 |
+
optimizer:
|
| 9 |
+
type: AdamW
|
| 10 |
+
params:
|
| 11 |
+
-
|
| 12 |
+
params: '^(?=.*backbone)(?!.*norm).*$'
|
| 13 |
+
lr: 0.0001
|
| 14 |
+
-
|
| 15 |
+
params: '^(?=.*(?:norm|bn)).*$'
|
| 16 |
+
weight_decay: 0.
|
| 17 |
+
|
| 18 |
+
lr: 0.0002
|
| 19 |
+
betas: [0.9, 0.999]
|
| 20 |
+
weight_decay: 0.0001
|
| 21 |
+
|
| 22 |
+
|
| 23 |
+
# change part
|
| 24 |
+
epoches: 120
|
| 25 |
+
flat_epoch: 64
|
| 26 |
+
no_aug_epoch: 3
|
| 27 |
+
|
| 28 |
+
train_dataloader:
|
| 29 |
+
dataset:
|
| 30 |
+
transforms:
|
| 31 |
+
policy:
|
| 32 |
+
epoch: [4, 64, 117] # list
|
| 33 |
+
|
| 34 |
+
collate_fn:
|
| 35 |
+
mixup_epochs: [4, 64]
|
| 36 |
+
stop_epoch: 117
|
configs/deim_rtdetrv2/deim_r50vd_60e_coco.yml
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
__include__: [
|
| 2 |
+
'./rtdetrv2_r50vd_6x_coco.yml',
|
| 3 |
+
'../base/rt_deim.yml',
|
| 4 |
+
]
|
| 5 |
+
|
| 6 |
+
output_dir: ./outputs/deim_rtdetrv2_r50vd_60e_coco
|
| 7 |
+
|
| 8 |
+
optimizer:
|
| 9 |
+
type: AdamW
|
| 10 |
+
params:
|
| 11 |
+
-
|
| 12 |
+
params: '^(?=.*backbone)(?!.*norm).*$'
|
| 13 |
+
lr: 0.00002
|
| 14 |
+
-
|
| 15 |
+
params: '^(?=.*(?:norm|bn)).*$'
|
| 16 |
+
weight_decay: 0.
|
| 17 |
+
|
| 18 |
+
lr: 0.0002
|
| 19 |
+
betas: [0.9, 0.999]
|
| 20 |
+
weight_decay: 0.0001
|
| 21 |
+
|
| 22 |
+
# change part
|
| 23 |
+
epoches: 60
|
| 24 |
+
flat_epoch: 34 # 4 + 60 / 2
|
| 25 |
+
no_aug_epoch: 2
|
| 26 |
+
|
| 27 |
+
train_dataloader:
|
| 28 |
+
dataset:
|
| 29 |
+
transforms:
|
| 30 |
+
policy:
|
| 31 |
+
epoch: [4, 34, 58] # list
|
| 32 |
+
|
| 33 |
+
collate_fn:
|
| 34 |
+
mixup_epochs: [4, 34]
|
| 35 |
+
stop_epoch: 58
|
configs/deim_rtdetrv2/deim_r50vd_m_60e_coco.yml
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
__include__: [
|
| 2 |
+
'./rtdetrv2_r50vd_m_7x_coco.yml',
|
| 3 |
+
'../base/rt_deim.yml',
|
| 4 |
+
]
|
| 5 |
+
|
| 6 |
+
output_dir: ./outputs/deim_rtdetrv2_r50vd_m_60e_coco
|
| 7 |
+
|
| 8 |
+
RTDETRTransformerv2:
|
| 9 |
+
eval_idx: 2 # use 3th decoder layer to eval
|
| 10 |
+
num_layers: 3
|
| 11 |
+
|
| 12 |
+
optimizer:
|
| 13 |
+
type: AdamW
|
| 14 |
+
params:
|
| 15 |
+
-
|
| 16 |
+
params: '^(?=.*backbone)(?!.*norm).*$'
|
| 17 |
+
lr: 0.00002
|
| 18 |
+
-
|
| 19 |
+
params: '^(?=.*(?:norm|bn)).*$'
|
| 20 |
+
weight_decay: 0.
|
| 21 |
+
|
| 22 |
+
lr: 0.0002
|
| 23 |
+
betas: [0.9, 0.999]
|
| 24 |
+
weight_decay: 0.0001
|
| 25 |
+
|
| 26 |
+
# change part
|
| 27 |
+
epoches: 60
|
| 28 |
+
flat_epoch: 34 # 4 + 60 / 2
|
| 29 |
+
no_aug_epoch: 2
|
| 30 |
+
|
| 31 |
+
train_dataloader:
|
| 32 |
+
dataset:
|
| 33 |
+
transforms:
|
| 34 |
+
policy:
|
| 35 |
+
epoch: [4, 34, 58] # list
|
| 36 |
+
|
| 37 |
+
collate_fn:
|
| 38 |
+
mixup_epochs: [4, 34]
|
| 39 |
+
stop_epoch: 58
|
configs/deim_rtdetrv2/rtdetrv2_r101vd_6x_coco.yml
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
__include__: [
|
| 2 |
+
'../dataset/coco_detection.yml',
|
| 3 |
+
'../runtime.yml',
|
| 4 |
+
'../base/dataloader.yml',
|
| 5 |
+
'../base/rt_optimizer.yml',
|
| 6 |
+
'../base/rtdetrv2_r50vd.yml',
|
| 7 |
+
]
|
| 8 |
+
|
| 9 |
+
|
| 10 |
+
output_dir: ./outputs/rtdetrv2_r101vd_6x_coco
|
| 11 |
+
|
| 12 |
+
|
| 13 |
+
PResNet:
|
| 14 |
+
depth: 101
|
| 15 |
+
|
| 16 |
+
|
| 17 |
+
HybridEncoder:
|
| 18 |
+
# intra
|
| 19 |
+
hidden_dim: 384
|
| 20 |
+
dim_feedforward: 2048
|
| 21 |
+
|
| 22 |
+
|
| 23 |
+
RTDETRTransformerv2:
|
| 24 |
+
feat_channels: [384, 384, 384]
|
| 25 |
+
|
| 26 |
+
|
| 27 |
+
optimizer:
|
| 28 |
+
type: AdamW
|
| 29 |
+
params:
|
| 30 |
+
-
|
| 31 |
+
params: '^(?=.*backbone)(?!.*norm|bn).*$'
|
| 32 |
+
lr: 0.000001
|
| 33 |
+
-
|
| 34 |
+
params: '^(?=.*(?:encoder|decoder))(?=.*(?:norm|bn)).*$' # only encoder + decoder norm
|
| 35 |
+
weight_decay: 0.
|
| 36 |
+
|
| 37 |
+
lr: 0.0001
|
| 38 |
+
betas: [0.9, 0.999]
|
| 39 |
+
weight_decay: 0.0001
|
| 40 |
+
|
configs/deim_rtdetrv2/rtdetrv2_r18vd_120e_coco.yml
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
__include__: [
|
| 2 |
+
'../dataset/coco_detection.yml',
|
| 3 |
+
'../runtime.yml',
|
| 4 |
+
'../base/dataloader.yml',
|
| 5 |
+
'../base/rt_optimizer.yml',
|
| 6 |
+
'../base/rtdetrv2_r50vd.yml',
|
| 7 |
+
]
|
| 8 |
+
|
| 9 |
+
|
| 10 |
+
output_dir: ./output/rtdetrv2_r18vd_120e_coco
|
| 11 |
+
|
| 12 |
+
|
| 13 |
+
PResNet:
|
| 14 |
+
depth: 18
|
| 15 |
+
freeze_at: -1
|
| 16 |
+
freeze_norm: False
|
| 17 |
+
pretrained: True
|
| 18 |
+
|
| 19 |
+
HybridEncoder:
|
| 20 |
+
in_channels: [128, 256, 512]
|
| 21 |
+
hidden_dim: 256
|
| 22 |
+
expansion: 0.5
|
| 23 |
+
|
| 24 |
+
RTDETRTransformerv2:
|
| 25 |
+
num_layers: 3
|
| 26 |
+
|
| 27 |
+
|
| 28 |
+
epoches: 120
|
| 29 |
+
|
| 30 |
+
optimizer:
|
| 31 |
+
type: AdamW
|
| 32 |
+
params:
|
| 33 |
+
-
|
| 34 |
+
params: '^(?=.*(?:norm|bn)).*$'
|
| 35 |
+
weight_decay: 0.
|
| 36 |
+
|
| 37 |
+
|
| 38 |
+
train_dataloader:
|
| 39 |
+
dataset:
|
| 40 |
+
transforms:
|
| 41 |
+
policy:
|
| 42 |
+
epoch: 117
|
| 43 |
+
collate_fn:
|
| 44 |
+
scales: ~
|
configs/deim_rtdetrv2/rtdetrv2_r34vd_120e_coco.yml
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
__include__: [
|
| 2 |
+
'../dataset/coco_detection.yml',
|
| 3 |
+
'../runtime.yml',
|
| 4 |
+
'../base/dataloader.yml',
|
| 5 |
+
'../base/rt_optimizer.yml',
|
| 6 |
+
'../base/rtdetrv2_r50vd.yml',
|
| 7 |
+
]
|
| 8 |
+
|
| 9 |
+
|
| 10 |
+
output_dir: ./outputs/rtdetrv2_r34vd_120e_coco
|
| 11 |
+
|
| 12 |
+
|
| 13 |
+
PResNet:
|
| 14 |
+
depth: 34
|
| 15 |
+
freeze_at: -1
|
| 16 |
+
freeze_norm: False
|
| 17 |
+
pretrained: True
|
| 18 |
+
|
| 19 |
+
|
| 20 |
+
HybridEncoder:
|
| 21 |
+
in_channels: [128, 256, 512]
|
| 22 |
+
hidden_dim: 256
|
| 23 |
+
expansion: 0.5
|
| 24 |
+
|
| 25 |
+
|
| 26 |
+
RTDETRTransformerv2:
|
| 27 |
+
num_layers: 4
|
| 28 |
+
|
| 29 |
+
|
| 30 |
+
epoches: 120
|
| 31 |
+
|
| 32 |
+
optimizer:
|
| 33 |
+
type: AdamW
|
| 34 |
+
params:
|
| 35 |
+
-
|
| 36 |
+
params: '^(?=.*backbone)(?!.*norm|bn).*$'
|
| 37 |
+
lr: 0.00005
|
| 38 |
+
-
|
| 39 |
+
params: '^(?=.*backbone)(?=.*norm|bn).*$'
|
| 40 |
+
lr: 0.00005
|
| 41 |
+
weight_decay: 0.
|
| 42 |
+
-
|
| 43 |
+
params: '^(?=.*(?:encoder|decoder))(?=.*(?:norm|bn|bias)).*$'
|
| 44 |
+
weight_decay: 0.
|
| 45 |
+
|
| 46 |
+
lr: 0.0001
|
| 47 |
+
betas: [0.9, 0.999]
|
| 48 |
+
weight_decay: 0.0001
|
| 49 |
+
|
| 50 |
+
|
| 51 |
+
train_dataloader:
|
| 52 |
+
dataset:
|
| 53 |
+
transforms:
|
| 54 |
+
policy:
|
| 55 |
+
epoch: 117
|
| 56 |
+
collate_fn:
|
| 57 |
+
stop_epoch: 117
|
configs/deim_rtdetrv2/rtdetrv2_r50vd_6x_coco.yml
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
__include__: [
|
| 2 |
+
'../dataset/coco_detection.yml',
|
| 3 |
+
'../runtime.yml',
|
| 4 |
+
'../base/dataloader.yml',
|
| 5 |
+
'../base/rt_optimizer.yml',
|
| 6 |
+
'../base/rtdetrv2_r50vd.yml',
|
| 7 |
+
]
|
| 8 |
+
|
| 9 |
+
|
| 10 |
+
output_dir: ./outputs/rtdetrv2_r50vd_6x_coco
|
| 11 |
+
|
| 12 |
+
|
| 13 |
+
optimizer:
|
| 14 |
+
type: AdamW
|
| 15 |
+
params:
|
| 16 |
+
-
|
| 17 |
+
params: '^(?=.*backbone)(?!.*norm).*$'
|
| 18 |
+
lr: 0.00001
|
| 19 |
+
-
|
| 20 |
+
params: '^(?=.*(?:encoder|decoder))(?=.*(?:norm|bn)).*$'
|
| 21 |
+
weight_decay: 0.
|
| 22 |
+
|
| 23 |
+
lr: 0.0001
|
| 24 |
+
betas: [0.9, 0.999]
|
| 25 |
+
weight_decay: 0.0001
|
configs/deim_rtdetrv2/rtdetrv2_r50vd_m_7x_coco.yml
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
__include__: [
|
| 2 |
+
'../dataset/coco_detection.yml',
|
| 3 |
+
'../runtime.yml',
|
| 4 |
+
'../base/dataloader.yml',
|
| 5 |
+
'../base/rt_optimizer.yml',
|
| 6 |
+
'../base/rtdetrv2_r50vd.yml',
|
| 7 |
+
]
|
| 8 |
+
|
| 9 |
+
output_dir: ./outputs/rtdetrv2_r50vd_m_6x_coco
|
| 10 |
+
|
| 11 |
+
|
| 12 |
+
HybridEncoder:
|
| 13 |
+
expansion: 0.5
|
| 14 |
+
|
| 15 |
+
|
| 16 |
+
RTDETRTransformerv2:
|
| 17 |
+
eval_idx: 2 # use 3th decoder layer to eval
|
| 18 |
+
|
| 19 |
+
|
| 20 |
+
epoches: 84
|
| 21 |
+
|
| 22 |
+
optimizer:
|
| 23 |
+
type: AdamW
|
| 24 |
+
params:
|
| 25 |
+
-
|
| 26 |
+
params: '^(?=.*backbone)(?!.*norm).*$'
|
| 27 |
+
lr: 0.00001
|
| 28 |
+
-
|
| 29 |
+
params: '^(?=.*(?:encoder|decoder))(?=.*(?:norm|bn)).*$'
|
| 30 |
+
weight_decay: 0.
|
| 31 |
+
|
| 32 |
+
lr: 0.0001
|
| 33 |
+
betas: [0.9, 0.999]
|
| 34 |
+
weight_decay: 0.0001
|
| 35 |
+
|
| 36 |
+
|
| 37 |
+
train_dataloader:
|
| 38 |
+
dataset:
|
| 39 |
+
transforms:
|
| 40 |
+
policy:
|
| 41 |
+
epoch: 81
|
| 42 |
+
collate_fn:
|
| 43 |
+
stop_epoch: 81
|
configs/deimv2/deimv2_dinov3_l_coco.yml
ADDED
|
@@ -0,0 +1,104 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
__include__: [
|
| 2 |
+
'../dataset/coco_detection.yml',
|
| 3 |
+
'../runtime.yml',
|
| 4 |
+
'../base/dataloader.yml',
|
| 5 |
+
'../base/optimizer.yml',
|
| 6 |
+
'../base/deimv2.yml',
|
| 7 |
+
]
|
| 8 |
+
|
| 9 |
+
|
| 10 |
+
output_dir: ./outputs/deimv2_dinov3_l_coco
|
| 11 |
+
|
| 12 |
+
DEIM:
|
| 13 |
+
backbone: DINOv3STAs
|
| 14 |
+
|
| 15 |
+
DINOv3STAs:
|
| 16 |
+
name: dinov3_vits16
|
| 17 |
+
weights_path: ./ckpts/dinov3_vits16_pretrain_lvd1689m-08c60483.pth
|
| 18 |
+
interaction_indexes: [5,8,11] # only need the [1/8, 1/16, 1/32]
|
| 19 |
+
finetune: True
|
| 20 |
+
conv_inplane: 32
|
| 21 |
+
hidden_dim: 224
|
| 22 |
+
|
| 23 |
+
HybridEncoder:
|
| 24 |
+
in_channels: [224, 224, 224]
|
| 25 |
+
hidden_dim: 224
|
| 26 |
+
dim_feedforward: 896
|
| 27 |
+
|
| 28 |
+
DEIMTransformer:
|
| 29 |
+
feat_channels: [224, 224, 224]
|
| 30 |
+
hidden_dim: 224
|
| 31 |
+
num_layers: 4
|
| 32 |
+
eval_idx: -1
|
| 33 |
+
dim_feedforward: 1792
|
| 34 |
+
|
| 35 |
+
## DEIM LR-Scheduler
|
| 36 |
+
epoches: 68 # 72 + 2n # Increase to search for the optimal ema
|
| 37 |
+
|
| 38 |
+
lrsheduler: flatcosine
|
| 39 |
+
lr_gamma: 0.5
|
| 40 |
+
warmup_iter: 2000
|
| 41 |
+
flat_epoch: 34 # 4 + epoch // 2, e.g., 40 = 4 + 72 / 2
|
| 42 |
+
no_aug_epoch: 8
|
| 43 |
+
|
| 44 |
+
## Optimizer
|
| 45 |
+
optimizer:
|
| 46 |
+
type: AdamW
|
| 47 |
+
params:
|
| 48 |
+
-
|
| 49 |
+
# except norm/bn/bias in self.dinov3
|
| 50 |
+
params: '^(?=.*.dinov3)(?!.*(?:norm|bn|bias)).*$'
|
| 51 |
+
lr: 0.0000125
|
| 52 |
+
-
|
| 53 |
+
# including norm/bn/bias in self.dinov3
|
| 54 |
+
params: '^(?=.*.dinov3)(?=.*(?:norm|bn|bias)).*$'
|
| 55 |
+
lr: 0.0000125
|
| 56 |
+
weight_decay: 0.
|
| 57 |
+
-
|
| 58 |
+
# including norm/bn/bias except for the self.dinov3
|
| 59 |
+
params: '^(?=.*(?:sta|encoder|decoder))(?=.*(?:norm|bn|bias)).*$'
|
| 60 |
+
weight_decay: 0.
|
| 61 |
+
|
| 62 |
+
lr: 0.0005
|
| 63 |
+
betas: [0.9, 0.999]
|
| 64 |
+
weight_decay: 0.000125
|
| 65 |
+
|
| 66 |
+
|
| 67 |
+
## Dense O2O: Mosaic + Mixup + CopyBlend
|
| 68 |
+
train_dataloader:
|
| 69 |
+
dataset:
|
| 70 |
+
transforms:
|
| 71 |
+
ops:
|
| 72 |
+
- {type: Mosaic, output_size: 320, rotation_range: 10, translation_range: [0.1, 0.1], scaling_range: [0.5, 1.5],
|
| 73 |
+
probability: 1.0, fill_value: 0, use_cache: True, max_cached_images: 50, random_pop: True}
|
| 74 |
+
- {type: RandomPhotometricDistort, p: 0.5}
|
| 75 |
+
- {type: RandomZoomOut, fill: 0}
|
| 76 |
+
- {type: RandomIoUCrop, p: 0.8}
|
| 77 |
+
- {type: SanitizeBoundingBoxes, min_size: 1}
|
| 78 |
+
- {type: RandomHorizontalFlip}
|
| 79 |
+
- {type: Resize, size: [640, 640], }
|
| 80 |
+
- {type: SanitizeBoundingBoxes, min_size: 1}
|
| 81 |
+
- {type: ConvertPILImage, dtype: 'float32', scale: True}
|
| 82 |
+
- {type: Normalize, mean: [0.485, 0.456, 0.406], std: [0.229, 0.224, 0.225]}
|
| 83 |
+
- {type: ConvertBoxes, fmt: 'cxcywh', normalize: True}
|
| 84 |
+
policy:
|
| 85 |
+
epoch: [4, 34, 60] # list
|
| 86 |
+
|
| 87 |
+
collate_fn:
|
| 88 |
+
mixup_epochs: [4, 34]
|
| 89 |
+
stop_epoch: 60
|
| 90 |
+
copyblend_epochs: [4, 60]
|
| 91 |
+
base_size_repeat: 3
|
| 92 |
+
|
| 93 |
+
val_dataloader:
|
| 94 |
+
dataset:
|
| 95 |
+
transforms:
|
| 96 |
+
ops:
|
| 97 |
+
- {type: Resize, size: [640, 640], }
|
| 98 |
+
- {type: ConvertPILImage, dtype: 'float32', scale: True}
|
| 99 |
+
- {type: Normalize, mean: [0.485, 0.456, 0.406], std: [0.229, 0.224, 0.225]}
|
| 100 |
+
|
| 101 |
+
## DEIM Loss
|
| 102 |
+
DEIMCriterion:
|
| 103 |
+
matcher:
|
| 104 |
+
matcher_change_epoch: 50
|
configs/deimv2/deimv2_dinov3_m_coco.yml
ADDED
|
@@ -0,0 +1,107 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
__include__: [
|
| 2 |
+
'../dataset/coco_detection.yml',
|
| 3 |
+
'../runtime.yml',
|
| 4 |
+
'../base/dataloader.yml',
|
| 5 |
+
'../base/optimizer.yml',
|
| 6 |
+
'../base/deimv2.yml',
|
| 7 |
+
]
|
| 8 |
+
|
| 9 |
+
output_dir: ./outputs/deimv2_dinov3_m_coco
|
| 10 |
+
|
| 11 |
+
DEIM:
|
| 12 |
+
backbone: DINOv3STAs
|
| 13 |
+
|
| 14 |
+
DINOv3STAs:
|
| 15 |
+
name: vit_tinyplus
|
| 16 |
+
embed_dim: 256
|
| 17 |
+
weights_path: ./ckpts/vittplus_distill.pt
|
| 18 |
+
interaction_indexes: [3, 7, 11] # only need the [1/8, 1/16, 1/32]
|
| 19 |
+
num_heads: 4
|
| 20 |
+
|
| 21 |
+
HybridEncoder:
|
| 22 |
+
in_channels: [256, 256, 256]
|
| 23 |
+
depth_mult: 1
|
| 24 |
+
expansion: 0.67
|
| 25 |
+
hidden_dim: 256
|
| 26 |
+
dim_feedforward: 512
|
| 27 |
+
|
| 28 |
+
|
| 29 |
+
DEIMTransformer:
|
| 30 |
+
feat_channels: [256, 256, 256]
|
| 31 |
+
hidden_dim: 256
|
| 32 |
+
dim_feedforward: 512
|
| 33 |
+
num_layers: 4 # 4 5 6
|
| 34 |
+
eval_idx: -1 # -2 -3 -4
|
| 35 |
+
|
| 36 |
+
optimizer:
|
| 37 |
+
type: AdamW
|
| 38 |
+
|
| 39 |
+
params:
|
| 40 |
+
-
|
| 41 |
+
# except norm/bn/bias in self.dinov3
|
| 42 |
+
params: '^(?=.*.dinov3)(?!.*(?:norm|bn|bias)).*$'
|
| 43 |
+
lr: 0.000025
|
| 44 |
+
-
|
| 45 |
+
# including norm/bn/bias in self.dinov3
|
| 46 |
+
params: '^(?=.*.dinov3)(?=.*(?:norm|bn|bias)).*$'
|
| 47 |
+
lr: 0.000025
|
| 48 |
+
weight_decay: 0.
|
| 49 |
+
-
|
| 50 |
+
# including norm/bn/bias except for the self.dinov3
|
| 51 |
+
params: '^(?=.*(?:sta|encoder|decoder))(?=.*(?:norm|bn|bias)).*$'
|
| 52 |
+
weight_decay: 0.
|
| 53 |
+
|
| 54 |
+
lr: 0.0005
|
| 55 |
+
betas: [0.9, 0.999]
|
| 56 |
+
weight_decay: 0.0001
|
| 57 |
+
|
| 58 |
+
epoches: 102 # 120 + 4n
|
| 59 |
+
|
| 60 |
+
## Our LR-Scheduler
|
| 61 |
+
flat_epoch: 49 # 4 + epoch // 2, e.g., 40 = 4 + 72 / 2
|
| 62 |
+
no_aug_epoch: 12
|
| 63 |
+
|
| 64 |
+
|
| 65 |
+
## Our DataAug
|
| 66 |
+
train_dataloader:
|
| 67 |
+
dataset:
|
| 68 |
+
transforms:
|
| 69 |
+
ops:
|
| 70 |
+
- {type: Mosaic, output_size: 320, rotation_range: 10, translation_range: [0.1, 0.1], scaling_range: [0.5, 1.5],
|
| 71 |
+
probability: 1.0, fill_value: 0, use_cache: True, max_cached_images: 50, random_pop: True}
|
| 72 |
+
- {type: RandomPhotometricDistort, p: 0.5}
|
| 73 |
+
- {type: RandomZoomOut, fill: 0}
|
| 74 |
+
- {type: RandomIoUCrop, p: 0.8}
|
| 75 |
+
- {type: SanitizeBoundingBoxes, min_size: 1}
|
| 76 |
+
- {type: RandomHorizontalFlip}
|
| 77 |
+
- {type: Resize, size: [640, 640], }
|
| 78 |
+
- {type: SanitizeBoundingBoxes, min_size: 1}
|
| 79 |
+
- {type: ConvertPILImage, dtype: 'float32', scale: True}
|
| 80 |
+
- {type: Normalize, mean: [0.485, 0.456, 0.406], std: [0.229, 0.224, 0.225]}
|
| 81 |
+
- {type: ConvertBoxes, fmt: 'cxcywh', normalize: True}
|
| 82 |
+
policy:
|
| 83 |
+
epoch: [4, 49, 90] # list
|
| 84 |
+
|
| 85 |
+
collate_fn:
|
| 86 |
+
mixup_prob: 0.5
|
| 87 |
+
ema_restart_decay: 0.9999
|
| 88 |
+
base_size_repeat: 6
|
| 89 |
+
mixup_epochs: [4, 49]
|
| 90 |
+
stop_epoch: 90
|
| 91 |
+
copyblend_epochs: [4, 90]
|
| 92 |
+
|
| 93 |
+
|
| 94 |
+
val_dataloader:
|
| 95 |
+
dataset:
|
| 96 |
+
transforms:
|
| 97 |
+
ops:
|
| 98 |
+
- {type: Resize, size: [640, 640], }
|
| 99 |
+
- {type: ConvertPILImage, dtype: 'float32', scale: True}
|
| 100 |
+
- {type: Normalize, mean: [0.485, 0.456, 0.406], std: [0.229, 0.224, 0.225]}
|
| 101 |
+
|
| 102 |
+
DEIMCriterion:
|
| 103 |
+
matcher:
|
| 104 |
+
# new matcher
|
| 105 |
+
change_matcher: True
|
| 106 |
+
iou_order_alpha: 4.0
|
| 107 |
+
matcher_change_epoch: 80
|
configs/deimv2/deimv2_dinov3_s_coco.yml
ADDED
|
@@ -0,0 +1,108 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
__include__: [
|
| 2 |
+
'../dataset/coco_detection.yml',
|
| 3 |
+
'../runtime.yml',
|
| 4 |
+
'../base/dataloader.yml',
|
| 5 |
+
'../base/optimizer.yml',
|
| 6 |
+
'../base/deimv2.yml',
|
| 7 |
+
]
|
| 8 |
+
|
| 9 |
+
output_dir: ./outputs/deimv2_dinov3_s_coco
|
| 10 |
+
|
| 11 |
+
DEIM:
|
| 12 |
+
backbone: DINOv3STAs
|
| 13 |
+
|
| 14 |
+
DINOv3STAs:
|
| 15 |
+
name: vit_tiny
|
| 16 |
+
embed_dim: 192
|
| 17 |
+
weights_path: ./ckpts/vitt_distill.pt
|
| 18 |
+
interaction_indexes: [3, 7, 11] # only need the [1/8, 1/16, 1/32]
|
| 19 |
+
num_heads: 3
|
| 20 |
+
|
| 21 |
+
HybridEncoder:
|
| 22 |
+
in_channels: [192, 192, 192]
|
| 23 |
+
depth_mult: 0.67
|
| 24 |
+
expansion: 0.34
|
| 25 |
+
hidden_dim: 192
|
| 26 |
+
dim_feedforward: 512
|
| 27 |
+
|
| 28 |
+
DEIMTransformer:
|
| 29 |
+
feat_channels: [192, 192, 192]
|
| 30 |
+
hidden_dim: 192
|
| 31 |
+
dim_feedforward: 512
|
| 32 |
+
num_layers: 4 # 4 5 6
|
| 33 |
+
eval_idx: -1 # -2 -3 -4
|
| 34 |
+
|
| 35 |
+
|
| 36 |
+
## Optimizer
|
| 37 |
+
optimizer:
|
| 38 |
+
type: AdamW
|
| 39 |
+
|
| 40 |
+
params:
|
| 41 |
+
-
|
| 42 |
+
# except norm/bn/bias in self.dinov3
|
| 43 |
+
params: '^(?=.*.dinov3)(?!.*(?:norm|bn|bias)).*$'
|
| 44 |
+
lr: 0.000025
|
| 45 |
+
-
|
| 46 |
+
# including all norm/bn/bias in self.dinov3
|
| 47 |
+
params: '^(?=.*.dinov3)(?=.*(?:norm|bn|bias)).*$'
|
| 48 |
+
lr: 0.000025
|
| 49 |
+
weight_decay: 0.
|
| 50 |
+
-
|
| 51 |
+
# including all norm/bn/bias except for the self.dinov3
|
| 52 |
+
params: '^(?=.*(?:sta|encoder|decoder))(?=.*(?:norm|bn|bias)).*$'
|
| 53 |
+
weight_decay: 0.
|
| 54 |
+
|
| 55 |
+
lr: 0.0005
|
| 56 |
+
betas: [0.9, 0.999]
|
| 57 |
+
weight_decay: 0.0001
|
| 58 |
+
|
| 59 |
+
# Increase to search for the optimal ema
|
| 60 |
+
epoches: 132 # 120 + 4n
|
| 61 |
+
|
| 62 |
+
## Our LR-Scheduler
|
| 63 |
+
flat_epoch: 64 # 4 + epoch // 2, e.g., 40 = 4 + 72 / 2
|
| 64 |
+
no_aug_epoch: 12
|
| 65 |
+
|
| 66 |
+
## Our DataAug
|
| 67 |
+
train_dataloader:
|
| 68 |
+
dataset:
|
| 69 |
+
transforms:
|
| 70 |
+
ops:
|
| 71 |
+
- {type: Mosaic, output_size: 320, rotation_range: 10, translation_range: [0.1, 0.1], scaling_range: [0.5, 1.5],
|
| 72 |
+
probability: 1.0, fill_value: 0, use_cache: True, max_cached_images: 50, random_pop: True}
|
| 73 |
+
- {type: RandomPhotometricDistort, p: 0.5}
|
| 74 |
+
- {type: RandomZoomOut, fill: 0}
|
| 75 |
+
- {type: RandomIoUCrop, p: 0.8}
|
| 76 |
+
- {type: SanitizeBoundingBoxes, min_size: 1}
|
| 77 |
+
- {type: RandomHorizontalFlip}
|
| 78 |
+
- {type: Resize, size: [640, 640], }
|
| 79 |
+
- {type: SanitizeBoundingBoxes, min_size: 1}
|
| 80 |
+
- {type: ConvertPILImage, dtype: 'float32', scale: True}
|
| 81 |
+
- {type: Normalize, mean: [0.485, 0.456, 0.406], std: [0.229, 0.224, 0.225]}
|
| 82 |
+
- {type: ConvertBoxes, fmt: 'cxcywh', normalize: True}
|
| 83 |
+
policy:
|
| 84 |
+
epoch: [4, 64, 120] # list
|
| 85 |
+
|
| 86 |
+
collate_fn:
|
| 87 |
+
base_size: 640
|
| 88 |
+
mixup_prob: 0.5
|
| 89 |
+
ema_restart_decay: 0.9999
|
| 90 |
+
base_size_repeat: 20
|
| 91 |
+
mixup_epochs: [4, 64]
|
| 92 |
+
stop_epoch: 120
|
| 93 |
+
copyblend_epochs: [4, 120]
|
| 94 |
+
|
| 95 |
+
val_dataloader:
|
| 96 |
+
dataset:
|
| 97 |
+
transforms:
|
| 98 |
+
ops:
|
| 99 |
+
- {type: Resize, size: [640, 640], }
|
| 100 |
+
- {type: ConvertPILImage, dtype: 'float32', scale: True}
|
| 101 |
+
- {type: Normalize, mean: [0.485, 0.456, 0.406], std: [0.229, 0.224, 0.225]}
|
| 102 |
+
|
| 103 |
+
DEIMCriterion:
|
| 104 |
+
matcher:
|
| 105 |
+
# change matcher
|
| 106 |
+
change_matcher: True
|
| 107 |
+
iou_order_alpha: 4.0
|
| 108 |
+
matcher_change_epoch: 100
|
configs/deimv2/deimv2_dinov3_x_coco.yml
ADDED
|
@@ -0,0 +1,94 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
__include__: [
|
| 2 |
+
'../dataset/coco_detection.yml',
|
| 3 |
+
'../runtime.yml',
|
| 4 |
+
'../base/dataloader.yml',
|
| 5 |
+
'../base/optimizer.yml',
|
| 6 |
+
'../base/deimv2.yml',
|
| 7 |
+
]
|
| 8 |
+
|
| 9 |
+
|
| 10 |
+
output_dir: ./outputs/deimv2_dinov3_x_coco
|
| 11 |
+
|
| 12 |
+
DEIM:
|
| 13 |
+
backbone: DINOv3STAs
|
| 14 |
+
|
| 15 |
+
DINOv3STAs:
|
| 16 |
+
name: dinov3_vits16plus
|
| 17 |
+
weights_path: ./ckpts/dinov3_vits16plus_pretrain_lvd1689m-4057cbaa.pth
|
| 18 |
+
interaction_indexes: [5,8,11] # only need the [1/8, 1/16, 1/32]
|
| 19 |
+
finetune: True
|
| 20 |
+
conv_inplane: 64
|
| 21 |
+
hidden_dim: 256
|
| 22 |
+
|
| 23 |
+
HybridEncoder:
|
| 24 |
+
in_channels: [256, 256, 256]
|
| 25 |
+
# intra
|
| 26 |
+
hidden_dim: 256
|
| 27 |
+
dim_feedforward: 1024
|
| 28 |
+
|
| 29 |
+
# cross
|
| 30 |
+
expansion: 1.25
|
| 31 |
+
depth_mult: 1.37
|
| 32 |
+
|
| 33 |
+
DEIMTransformer:
|
| 34 |
+
num_layers: 6
|
| 35 |
+
eval_idx: -1
|
| 36 |
+
feat_channels: [256, 256, 256]
|
| 37 |
+
# reg_scale: 8
|
| 38 |
+
hidden_dim: 256
|
| 39 |
+
dim_feedforward: 2048
|
| 40 |
+
|
| 41 |
+
optimizer:
|
| 42 |
+
type: AdamW
|
| 43 |
+
params:
|
| 44 |
+
-
|
| 45 |
+
# except norm/bn/bias in self.dinov3
|
| 46 |
+
params: '^(?=.*.dinov3)(?!.*(?:norm|bn|bias)).*$'
|
| 47 |
+
lr: 0.00001
|
| 48 |
+
-
|
| 49 |
+
# including norm/bn/bias in self.dinov3
|
| 50 |
+
params: '^(?=.*.dinov3)(?=.*(?:norm|bn|bias)).*$'
|
| 51 |
+
lr: 0.00001
|
| 52 |
+
weight_decay: 0.
|
| 53 |
+
-
|
| 54 |
+
# including norm/bn/bias except for the self.dinov3
|
| 55 |
+
params: '^(?=.*(?:sta|encoder|decoder))(?=.*(?:norm|bn|bias)).*$'
|
| 56 |
+
weight_decay: 0.
|
| 57 |
+
|
| 58 |
+
lr: 0.0005
|
| 59 |
+
betas: [0.9, 0.999]
|
| 60 |
+
weight_decay: 0.000125
|
| 61 |
+
|
| 62 |
+
## Dense O2O: Mosaic + Mixup + CopyBlend
|
| 63 |
+
train_dataloader:
|
| 64 |
+
dataset:
|
| 65 |
+
transforms:
|
| 66 |
+
ops:
|
| 67 |
+
- {type: Mosaic, output_size: 320, rotation_range: 10, translation_range: [0.1, 0.1], scaling_range: [0.5, 1.5],
|
| 68 |
+
probability: 1.0, fill_value: 0, use_cache: True, max_cached_images: 50, random_pop: True}
|
| 69 |
+
- {type: RandomPhotometricDistort, p: 0.5}
|
| 70 |
+
- {type: RandomZoomOut, fill: 0}
|
| 71 |
+
- {type: RandomIoUCrop, p: 0.8}
|
| 72 |
+
- {type: SanitizeBoundingBoxes, min_size: 1}
|
| 73 |
+
- {type: RandomHorizontalFlip}
|
| 74 |
+
- {type: Resize, size: [640, 640], }
|
| 75 |
+
- {type: SanitizeBoundingBoxes, min_size: 1}
|
| 76 |
+
- {type: ConvertPILImage, dtype: 'float32', scale: True}
|
| 77 |
+
- {type: Normalize, mean: [0.485, 0.456, 0.406], std: [0.229, 0.224, 0.225]}
|
| 78 |
+
- {type: ConvertBoxes, fmt: 'cxcywh', normalize: True}
|
| 79 |
+
policy:
|
| 80 |
+
epoch: [4, 29, 50] # list
|
| 81 |
+
|
| 82 |
+
collate_fn:
|
| 83 |
+
mixup_epochs: [4, 29]
|
| 84 |
+
stop_epoch: 50
|
| 85 |
+
copyblend_epochs: [4, 50]
|
| 86 |
+
base_size_repeat: 3
|
| 87 |
+
|
| 88 |
+
val_dataloader:
|
| 89 |
+
dataset:
|
| 90 |
+
transforms:
|
| 91 |
+
ops:
|
| 92 |
+
- {type: Resize, size: [640, 640], }
|
| 93 |
+
- {type: ConvertPILImage, dtype: 'float32', scale: True}
|
| 94 |
+
- {type: Normalize, mean: [0.485, 0.456, 0.406], std: [0.229, 0.224, 0.225]}
|
configs/deimv2/deimv2_hgnetv2_atto_coco.yml
ADDED
|
@@ -0,0 +1,123 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
__include__: [
|
| 2 |
+
'../dataset/coco_detection.yml',
|
| 3 |
+
'../runtime.yml',
|
| 4 |
+
'../base/dataloader.yml',
|
| 5 |
+
'../base/optimizer.yml',
|
| 6 |
+
'../base/deimv2.yml',
|
| 7 |
+
]
|
| 8 |
+
|
| 9 |
+
output_dir: ./outputs/deimv2_hgnetv2_atto_coco
|
| 10 |
+
|
| 11 |
+
DEIM:
|
| 12 |
+
encoder: LiteEncoder
|
| 13 |
+
|
| 14 |
+
HGNetv2:
|
| 15 |
+
name: 'Atto'
|
| 16 |
+
return_idx: [2]
|
| 17 |
+
freeze_at: -1
|
| 18 |
+
freeze_norm: False
|
| 19 |
+
use_lab: True
|
| 20 |
+
|
| 21 |
+
LiteEncoder:
|
| 22 |
+
in_channels: [256]
|
| 23 |
+
feat_strides: [16]
|
| 24 |
+
# intra
|
| 25 |
+
hidden_dim: 64
|
| 26 |
+
|
| 27 |
+
# cross
|
| 28 |
+
expansion: 0.34
|
| 29 |
+
depth_mult: 0.5
|
| 30 |
+
act: 'silu'
|
| 31 |
+
|
| 32 |
+
|
| 33 |
+
DEIMTransformer:
|
| 34 |
+
feat_channels: [64, 64]
|
| 35 |
+
feat_strides: [16, 32]
|
| 36 |
+
hidden_dim: 64
|
| 37 |
+
num_levels: 2
|
| 38 |
+
num_points: [4, 2]
|
| 39 |
+
|
| 40 |
+
num_layers: 3
|
| 41 |
+
eval_idx: -1
|
| 42 |
+
num_queries: 100
|
| 43 |
+
|
| 44 |
+
# FFN
|
| 45 |
+
dim_feedforward: 160
|
| 46 |
+
|
| 47 |
+
# New options for DEIMv2
|
| 48 |
+
share_bbox_head: True
|
| 49 |
+
use_gateway: False
|
| 50 |
+
|
| 51 |
+
# Increase to search for the optimal ema
|
| 52 |
+
epoches: 500 # 468 + 32
|
| 53 |
+
|
| 54 |
+
## Our LR-Scheduler
|
| 55 |
+
warmup_iter: 4000
|
| 56 |
+
flat_epoch: 250 # 4 + epoch // 2, e.g., 40 = 4 + 72 / 2
|
| 57 |
+
no_aug_epoch: 32
|
| 58 |
+
lr_gamma: 0.5
|
| 59 |
+
|
| 60 |
+
optimizer:
|
| 61 |
+
type: AdamW
|
| 62 |
+
params:
|
| 63 |
+
- params: '^(?=.*backbone)(?!.*norm|bn).*$'
|
| 64 |
+
lr: 0.001
|
| 65 |
+
- params: '^(?=.*backbone)(?=.*norm|bn).*$'
|
| 66 |
+
lr: 0.001
|
| 67 |
+
weight_decay: 0.
|
| 68 |
+
- params: '^(?=.*(?:encoder|decoder))(?=.*(?:norm|bn)).*$' # except bias
|
| 69 |
+
weight_decay: 0.
|
| 70 |
+
|
| 71 |
+
lr: 0.002
|
| 72 |
+
betas: [0.9, 0.999]
|
| 73 |
+
weight_decay: 0.0001
|
| 74 |
+
|
| 75 |
+
eval_spatial_size: [320, 320]
|
| 76 |
+
train_dataloader:
|
| 77 |
+
total_batch_size: 128
|
| 78 |
+
dataset:
|
| 79 |
+
transforms:
|
| 80 |
+
ops:
|
| 81 |
+
- {type: Mosaic, output_size: 160, rotation_range: 10, translation_range: [0.1, 0.1], scaling_range: [0.5, 1.5],
|
| 82 |
+
probability: 1.0, fill_value: 0, use_cache: True, max_cached_images: 50, random_pop: True}
|
| 83 |
+
- {type: RandomPhotometricDistort, p: 0.5}
|
| 84 |
+
- {type: RandomZoomOut, fill: 0}
|
| 85 |
+
- {type: RandomIoUCrop, p: 0.8}
|
| 86 |
+
- {type: SanitizeBoundingBoxes, min_size: 12}
|
| 87 |
+
- {type: RandomHorizontalFlip}
|
| 88 |
+
- {type: Resize, size: [320, 320], }
|
| 89 |
+
- {type: SanitizeBoundingBoxes, min_size: 12}
|
| 90 |
+
- {type: ConvertPILImage, dtype: 'float32', scale: True}
|
| 91 |
+
- {type: ConvertBoxes, fmt: 'cxcywh', normalize: True}
|
| 92 |
+
policy:
|
| 93 |
+
epoch: [4, 250, 400] # list
|
| 94 |
+
mosaic_prob: 0.3
|
| 95 |
+
|
| 96 |
+
collate_fn:
|
| 97 |
+
mixup_prob: 0.0
|
| 98 |
+
mixup_epochs: [40000, 15000]
|
| 99 |
+
copyblend_prob: 0.0
|
| 100 |
+
copyblend_epochs: [40000, 15000]
|
| 101 |
+
|
| 102 |
+
stop_epoch: 468 # 468 + 32
|
| 103 |
+
ema_restart_decay: 0.9999
|
| 104 |
+
base_size: 320
|
| 105 |
+
base_size_repeat: ~
|
| 106 |
+
|
| 107 |
+
val_dataloader:
|
| 108 |
+
total_batch_size: 256
|
| 109 |
+
dataset:
|
| 110 |
+
transforms:
|
| 111 |
+
ops:
|
| 112 |
+
- {type: Resize, size: [320, 320], }
|
| 113 |
+
- {type: ConvertPILImage, dtype: 'float32', scale: True}
|
| 114 |
+
shuffle: False
|
| 115 |
+
num_workers: 16
|
| 116 |
+
|
| 117 |
+
|
| 118 |
+
DEIMCriterion:
|
| 119 |
+
losses: ['mal', 'boxes'] # , 'local'
|
| 120 |
+
use_uni_set: False
|
| 121 |
+
|
| 122 |
+
matcher:
|
| 123 |
+
matcher_change_epoch: 450 # FIX This
|
configs/deimv2/deimv2_hgnetv2_femto_coco.yml
ADDED
|
@@ -0,0 +1,128 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
__include__: [
|
| 2 |
+
'../dataset/coco_detection.yml',
|
| 3 |
+
'../runtime.yml',
|
| 4 |
+
'../base/dataloader.yml',
|
| 5 |
+
'../base/optimizer.yml',
|
| 6 |
+
'../base/deimv2.yml',
|
| 7 |
+
]
|
| 8 |
+
|
| 9 |
+
output_dir: ./outputs/deimv2_hgnetv2_femto_coco
|
| 10 |
+
|
| 11 |
+
DEIM:
|
| 12 |
+
encoder: LiteEncoder
|
| 13 |
+
|
| 14 |
+
HGNetv2:
|
| 15 |
+
name: 'Femto'
|
| 16 |
+
return_idx: [2]
|
| 17 |
+
freeze_at: -1
|
| 18 |
+
freeze_norm: False
|
| 19 |
+
use_lab: True
|
| 20 |
+
|
| 21 |
+
LiteEncoder:
|
| 22 |
+
in_channels: [512]
|
| 23 |
+
feat_strides: [16]
|
| 24 |
+
|
| 25 |
+
# intra
|
| 26 |
+
hidden_dim: 96
|
| 27 |
+
|
| 28 |
+
# cross
|
| 29 |
+
expansion: 0.34
|
| 30 |
+
depth_mult: 0.5
|
| 31 |
+
act: 'silu'
|
| 32 |
+
|
| 33 |
+
|
| 34 |
+
DEIMTransformer:
|
| 35 |
+
feat_channels: [96, 96]
|
| 36 |
+
feat_strides: [16, 32]
|
| 37 |
+
hidden_dim: 96
|
| 38 |
+
num_levels: 2
|
| 39 |
+
num_points: [4, 2]
|
| 40 |
+
|
| 41 |
+
num_layers: 3
|
| 42 |
+
eval_idx: -1
|
| 43 |
+
num_queries: 150
|
| 44 |
+
|
| 45 |
+
# FFN
|
| 46 |
+
dim_feedforward: 256
|
| 47 |
+
|
| 48 |
+
# New options for DEIMv2
|
| 49 |
+
share_bbox_head: True
|
| 50 |
+
use_gateway: False
|
| 51 |
+
|
| 52 |
+
# Increase to search for the optimal ema
|
| 53 |
+
epoches: 500 # 468 + 32
|
| 54 |
+
|
| 55 |
+
## Our LR-Scheduler
|
| 56 |
+
warmup_iter: 4000
|
| 57 |
+
flat_epoch: 250 # 4 + epoch // 2, e.g., 40 = 4 + 72 / 2
|
| 58 |
+
no_aug_epoch: 32
|
| 59 |
+
lr_gamma: 0.5
|
| 60 |
+
|
| 61 |
+
optimizer:
|
| 62 |
+
type: AdamW
|
| 63 |
+
params:
|
| 64 |
+
-
|
| 65 |
+
params: '^(?=.*backbone)(?!.*norm|bn).*$'
|
| 66 |
+
lr: 0.0008
|
| 67 |
+
-
|
| 68 |
+
params: '^(?=.*backbone)(?=.*norm|bn).*$'
|
| 69 |
+
lr: 0.0008
|
| 70 |
+
weight_decay: 0.
|
| 71 |
+
- # not opt
|
| 72 |
+
params: '^(?=.*(?:encoder|decoder))(?=.*(?:norm|bn|bias)).*$'
|
| 73 |
+
weight_decay: 0.
|
| 74 |
+
|
| 75 |
+
lr: 0.0016
|
| 76 |
+
betas: [0.9, 0.999]
|
| 77 |
+
weight_decay: 0.0001
|
| 78 |
+
|
| 79 |
+
eval_spatial_size: [416, 416]
|
| 80 |
+
train_dataloader:
|
| 81 |
+
total_batch_size: 128
|
| 82 |
+
dataset:
|
| 83 |
+
transforms:
|
| 84 |
+
ops:
|
| 85 |
+
- {type: Mosaic, output_size: 208, rotation_range: 10, translation_range: [0.1, 0.1], scaling_range: [0.5, 1.5],
|
| 86 |
+
probability: 1.0, fill_value: 0, use_cache: True, max_cached_images: 50, random_pop: True}
|
| 87 |
+
- {type: RandomPhotometricDistort, p: 0.5}
|
| 88 |
+
- {type: RandomZoomOut, fill: 0}
|
| 89 |
+
- {type: RandomIoUCrop, p: 0.8}
|
| 90 |
+
- {type: SanitizeBoundingBoxes, min_size: 10}
|
| 91 |
+
- {type: RandomHorizontalFlip}
|
| 92 |
+
- {type: Resize, size: [416, 416], }
|
| 93 |
+
- {type: SanitizeBoundingBoxes, min_size: 10}
|
| 94 |
+
- {type: ConvertPILImage, dtype: 'float32', scale: True}
|
| 95 |
+
- {type: ConvertBoxes, fmt: 'cxcywh', normalize: True}
|
| 96 |
+
policy:
|
| 97 |
+
epoch: [4, 250, 400] # list
|
| 98 |
+
ops: ['Mosaic', 'RandomPhotometricDistort', 'RandomZoomOut', 'RandomIoUCrop']
|
| 99 |
+
mosaic_prob: 0.5
|
| 100 |
+
|
| 101 |
+
collate_fn:
|
| 102 |
+
mixup_prob: 0.0
|
| 103 |
+
mixup_epochs: [40000, 15000]
|
| 104 |
+
copyblend_prob: 0.0
|
| 105 |
+
copyblend_epochs: [40000, 15000]
|
| 106 |
+
|
| 107 |
+
stop_epoch: 468 # 468 + 32
|
| 108 |
+
ema_restart_decay: 0.9999
|
| 109 |
+
base_size: 416
|
| 110 |
+
base_size_repeat: ~
|
| 111 |
+
|
| 112 |
+
val_dataloader:
|
| 113 |
+
total_batch_size: 256
|
| 114 |
+
dataset:
|
| 115 |
+
transforms:
|
| 116 |
+
ops:
|
| 117 |
+
- {type: Resize, size: [416, 416], }
|
| 118 |
+
- {type: ConvertPILImage, dtype: 'float32', scale: True}
|
| 119 |
+
shuffle: False
|
| 120 |
+
num_workers: 16
|
| 121 |
+
|
| 122 |
+
|
| 123 |
+
DEIMCriterion:
|
| 124 |
+
losses: ['mal', 'boxes'] # , 'local'
|
| 125 |
+
use_uni_set: False
|
| 126 |
+
|
| 127 |
+
matcher:
|
| 128 |
+
matcher_change_epoch: 450 # FIX This
|
configs/deimv2/deimv2_hgnetv2_l_coco.yml
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
__include__: [
|
| 2 |
+
'../dataset/coco_detection.yml',
|
| 3 |
+
'../runtime.yml',
|
| 4 |
+
'../base/dataloader.yml',
|
| 5 |
+
'../base/optimizer.yml',
|
| 6 |
+
'../base/deimv2.yml'
|
| 7 |
+
]
|
| 8 |
+
|
| 9 |
+
output_dir: ./outputs/deimv2_hgnetv2_l_coco
|
| 10 |
+
|
| 11 |
+
|
| 12 |
+
optimizer:
|
| 13 |
+
type: AdamW
|
| 14 |
+
params:
|
| 15 |
+
-
|
| 16 |
+
params: '^(?=.*backbone)(?!.*norm|bn).*$'
|
| 17 |
+
lr: 0.000025
|
| 18 |
+
-
|
| 19 |
+
params: '^(?=.*(?:encoder|decoder))(?=.*(?:norm|bn)).*$'
|
| 20 |
+
weight_decay: 0.
|
| 21 |
+
|
| 22 |
+
lr: 0.0005
|
| 23 |
+
betas: [0.9, 0.999]
|
| 24 |
+
weight_decay: 0.000125
|
configs/deimv2/deimv2_hgnetv2_m_coco.yml
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
__include__: [
|
| 2 |
+
'../dataset/coco_detection.yml',
|
| 3 |
+
'../runtime.yml',
|
| 4 |
+
'../base/dataloader.yml',
|
| 5 |
+
'../base/optimizer.yml',
|
| 6 |
+
'../base/deimv2.yml'
|
| 7 |
+
]
|
| 8 |
+
|
| 9 |
+
output_dir: ./outputs/deimv2_hgnetv2_m_coco
|
| 10 |
+
|
| 11 |
+
HGNetv2:
|
| 12 |
+
name: 'B2'
|
| 13 |
+
return_idx: [1, 2, 3]
|
| 14 |
+
freeze_at: -1
|
| 15 |
+
freeze_norm: False
|
| 16 |
+
use_lab: True
|
| 17 |
+
|
| 18 |
+
HybridEncoder:
|
| 19 |
+
in_channels: [384, 768, 1536]
|
| 20 |
+
hidden_dim: 256
|
| 21 |
+
depth_mult: 0.67
|
| 22 |
+
|
| 23 |
+
DEIMTransformer:
|
| 24 |
+
num_layers: 4 # 5 6
|
| 25 |
+
eval_idx: -1 # -2 -3
|
| 26 |
+
|
| 27 |
+
optimizer:
|
| 28 |
+
type: AdamW
|
| 29 |
+
params:
|
| 30 |
+
-
|
| 31 |
+
params: '^(?=.*backbone)(?!.*bn).*$'
|
| 32 |
+
lr: 0.00004
|
| 33 |
+
-
|
| 34 |
+
params: '^(?=.*(?:norm|bn)).*$'
|
| 35 |
+
weight_decay: 0.
|
| 36 |
+
|
| 37 |
+
lr: 0.0004
|
| 38 |
+
betas: [0.9, 0.999]
|
| 39 |
+
weight_decay: 0.0001
|
| 40 |
+
|
| 41 |
+
# Increase to search for the optimal ema
|
| 42 |
+
epoches: 102 # 120 + 4n
|
| 43 |
+
|
| 44 |
+
## Our LR-Scheduler
|
| 45 |
+
flat_epoch: 49 # 4 + epoch // 2, e.g., 40 = 4 + 72 / 2
|
| 46 |
+
no_aug_epoch: 12
|
| 47 |
+
|
| 48 |
+
## Our DataAug
|
| 49 |
+
train_dataloader:
|
| 50 |
+
dataset:
|
| 51 |
+
transforms:
|
| 52 |
+
policy:
|
| 53 |
+
epoch: [4, 49, 90] # list
|
| 54 |
+
|
| 55 |
+
collate_fn:
|
| 56 |
+
ema_restart_decay: 0.9999
|
| 57 |
+
base_size_repeat: 6
|
| 58 |
+
mixup_epochs: [4, 49]
|
| 59 |
+
stop_epoch: 90
|
| 60 |
+
copyblend_prob: 0.5
|
| 61 |
+
copyblend_epochs: [4, 90]
|
| 62 |
+
area_threshold: 100
|
| 63 |
+
num_objects: 3
|
| 64 |
+
with_expand: True
|
| 65 |
+
expand_ratios: [0.1, 0.25]
|
| 66 |
+
|
| 67 |
+
DEIMCriterion:
|
| 68 |
+
matcher:
|
| 69 |
+
# new matcher
|
| 70 |
+
change_matcher: True
|
| 71 |
+
iou_order_alpha: 4.0
|
| 72 |
+
matcher_change_epoch: 80
|
configs/deimv2/deimv2_hgnetv2_n_coco.yml
ADDED
|
@@ -0,0 +1,96 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
__include__: [
|
| 2 |
+
'../dataset/coco_detection.yml',
|
| 3 |
+
'../runtime.yml',
|
| 4 |
+
'../base/dataloader.yml',
|
| 5 |
+
'../base/optimizer.yml',
|
| 6 |
+
'../base/deimv2.yml'
|
| 7 |
+
]
|
| 8 |
+
|
| 9 |
+
output_dir: ./outputs/deimv2_hgnetv2_n_coco
|
| 10 |
+
|
| 11 |
+
HGNetv2:
|
| 12 |
+
name: 'B0'
|
| 13 |
+
return_idx: [2, 3]
|
| 14 |
+
freeze_at: -1
|
| 15 |
+
freeze_norm: False
|
| 16 |
+
use_lab: True
|
| 17 |
+
|
| 18 |
+
HybridEncoder:
|
| 19 |
+
in_channels: [512, 1024]
|
| 20 |
+
feat_strides: [16, 32]
|
| 21 |
+
|
| 22 |
+
# intra
|
| 23 |
+
hidden_dim: 128
|
| 24 |
+
use_encoder_idx: [1]
|
| 25 |
+
dim_feedforward: 512
|
| 26 |
+
|
| 27 |
+
# cross
|
| 28 |
+
expansion: 0.34
|
| 29 |
+
depth_mult: 0.5
|
| 30 |
+
|
| 31 |
+
version: 'dfine'
|
| 32 |
+
|
| 33 |
+
DEIMTransformer:
|
| 34 |
+
feat_channels: [128, 128]
|
| 35 |
+
feat_strides: [16, 32]
|
| 36 |
+
hidden_dim: 128
|
| 37 |
+
num_levels: 2
|
| 38 |
+
num_points: [6, 6]
|
| 39 |
+
|
| 40 |
+
num_layers: 3
|
| 41 |
+
eval_idx: -1
|
| 42 |
+
|
| 43 |
+
# FFN
|
| 44 |
+
dim_feedforward: 512
|
| 45 |
+
|
| 46 |
+
optimizer:
|
| 47 |
+
type: AdamW
|
| 48 |
+
params:
|
| 49 |
+
-
|
| 50 |
+
params: '^(?=.*backbone)(?!.*norm|bn).*$'
|
| 51 |
+
lr: 0.0004
|
| 52 |
+
-
|
| 53 |
+
params: '^(?=.*backbone)(?=.*norm|bn).*$'
|
| 54 |
+
lr: 0.0004
|
| 55 |
+
weight_decay: 0.
|
| 56 |
+
-
|
| 57 |
+
params: '^(?=.*(?:encoder|decoder))(?=.*(?:norm|bn|bias)).*$'
|
| 58 |
+
weight_decay: 0.
|
| 59 |
+
|
| 60 |
+
lr: 0.0008
|
| 61 |
+
betas: [0.9, 0.999]
|
| 62 |
+
weight_decay: 0.0001
|
| 63 |
+
|
| 64 |
+
# Increase to search for the optimal ema
|
| 65 |
+
epoches: 160 # 148 + 12
|
| 66 |
+
|
| 67 |
+
## Our LR-Scheduler
|
| 68 |
+
flat_epoch: 7800 # 4 + epoch // 2, e.g., 40 = 4 + 72 / 2
|
| 69 |
+
no_aug_epoch: 12
|
| 70 |
+
lr_gamma: 1.0
|
| 71 |
+
|
| 72 |
+
## Our DataAug
|
| 73 |
+
train_dataloader:
|
| 74 |
+
dataset:
|
| 75 |
+
transforms:
|
| 76 |
+
policy:
|
| 77 |
+
epoch: [4, 78, 148] # list
|
| 78 |
+
|
| 79 |
+
collate_fn:
|
| 80 |
+
ema_restart_decay: 0.9999
|
| 81 |
+
base_size_repeat: ~
|
| 82 |
+
mixup_epochs: [4, 78]
|
| 83 |
+
stop_epoch: 148
|
| 84 |
+
copyblend_prob: 0.4
|
| 85 |
+
copyblend_epochs: [4, 78] # CP half
|
| 86 |
+
area_threshold: 100
|
| 87 |
+
num_objects: 3
|
| 88 |
+
with_expand: True
|
| 89 |
+
expand_ratios: [0.1, 0.25]
|
| 90 |
+
|
| 91 |
+
DEIMCriterion:
|
| 92 |
+
matcher:
|
| 93 |
+
# new matcher
|
| 94 |
+
change_matcher: True
|
| 95 |
+
iou_order_alpha: 4.0
|
| 96 |
+
matcher_change_epoch: 136
|
configs/deimv2/deimv2_hgnetv2_pico_coco.yml
ADDED
|
@@ -0,0 +1,128 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
__include__: [
|
| 2 |
+
'../dataset/coco_detection.yml',
|
| 3 |
+
'../runtime.yml',
|
| 4 |
+
'../base/dataloader.yml',
|
| 5 |
+
'../base/optimizer.yml',
|
| 6 |
+
'../base/deimv2.yml',
|
| 7 |
+
]
|
| 8 |
+
|
| 9 |
+
output_dir: ./outputs/deimv2_hgnetv2_pico_coco
|
| 10 |
+
|
| 11 |
+
DEIM:
|
| 12 |
+
encoder: LiteEncoder
|
| 13 |
+
decoder: DEIMTransformer
|
| 14 |
+
|
| 15 |
+
HGNetv2:
|
| 16 |
+
name: 'Pico'
|
| 17 |
+
return_idx: [2]
|
| 18 |
+
freeze_at: -1
|
| 19 |
+
freeze_norm: False
|
| 20 |
+
use_lab: True
|
| 21 |
+
|
| 22 |
+
LiteEncoder:
|
| 23 |
+
in_channels: [512]
|
| 24 |
+
feat_strides: [16]
|
| 25 |
+
|
| 26 |
+
# intra
|
| 27 |
+
hidden_dim: 112
|
| 28 |
+
|
| 29 |
+
# cross
|
| 30 |
+
expansion: 0.34
|
| 31 |
+
depth_mult: 0.5
|
| 32 |
+
act: 'silu'
|
| 33 |
+
|
| 34 |
+
|
| 35 |
+
DEIMTransformer:
|
| 36 |
+
feat_channels: [112, 112]
|
| 37 |
+
feat_strides: [16, 32]
|
| 38 |
+
hidden_dim: 112
|
| 39 |
+
num_levels: 2
|
| 40 |
+
num_points: [4, 2]
|
| 41 |
+
|
| 42 |
+
num_layers: 3
|
| 43 |
+
eval_idx: -1
|
| 44 |
+
num_queries: 200
|
| 45 |
+
|
| 46 |
+
# FFN
|
| 47 |
+
dim_feedforward: 320
|
| 48 |
+
|
| 49 |
+
# New options for DEIMv2
|
| 50 |
+
share_bbox_head: True
|
| 51 |
+
use_gateway: False
|
| 52 |
+
|
| 53 |
+
# Increase to search for the optimal ema
|
| 54 |
+
epoches: 500 # 468 + 32
|
| 55 |
+
|
| 56 |
+
## Our LR-Scheduler
|
| 57 |
+
warmup_iter: 4000
|
| 58 |
+
flat_epoch: 250 # 4 + epoch // 2, e.g., 40 = 4 + 72 / 2
|
| 59 |
+
no_aug_epoch: 32
|
| 60 |
+
lr_gamma: 0.5
|
| 61 |
+
|
| 62 |
+
optimizer:
|
| 63 |
+
type: AdamW
|
| 64 |
+
params:
|
| 65 |
+
-
|
| 66 |
+
params: '^(?=.*backbone)(?!.*norm|bn).*$'
|
| 67 |
+
lr: 0.0008
|
| 68 |
+
-
|
| 69 |
+
params: '^(?=.*backbone)(?=.*norm|bn).*$'
|
| 70 |
+
lr: 0.0008
|
| 71 |
+
weight_decay: 0.
|
| 72 |
+
- # not opt
|
| 73 |
+
params: '^(?=.*(?:encoder|decoder))(?=.*(?:norm|bn|bias)).*$'
|
| 74 |
+
weight_decay: 0.
|
| 75 |
+
|
| 76 |
+
lr: 0.0016
|
| 77 |
+
betas: [0.9, 0.999]
|
| 78 |
+
weight_decay: 0.0001
|
| 79 |
+
|
| 80 |
+
eval_spatial_size: [640, 640]
|
| 81 |
+
train_dataloader:
|
| 82 |
+
total_batch_size: 128
|
| 83 |
+
dataset:
|
| 84 |
+
transforms:
|
| 85 |
+
ops:
|
| 86 |
+
- {type: Mosaic, output_size: 320, rotation_range: 10, translation_range: [0.1, 0.1], scaling_range: [0.5, 1.5],
|
| 87 |
+
probability: 1.0, fill_value: 0, use_cache: True, max_cached_images: 50, random_pop: True}
|
| 88 |
+
- {type: RandomPhotometricDistort, p: 0.5}
|
| 89 |
+
- {type: RandomZoomOut, fill: 0}
|
| 90 |
+
- {type: RandomIoUCrop, p: 0.8}
|
| 91 |
+
- {type: SanitizeBoundingBoxes, min_size: 8}
|
| 92 |
+
- {type: RandomHorizontalFlip}
|
| 93 |
+
- {type: Resize, size: [640, 640], }
|
| 94 |
+
- {type: SanitizeBoundingBoxes, min_size: 8}
|
| 95 |
+
- {type: ConvertPILImage, dtype: 'float32', scale: True}
|
| 96 |
+
- {type: ConvertBoxes, fmt: 'cxcywh', normalize: True}
|
| 97 |
+
policy:
|
| 98 |
+
epoch: [4, 250, 400] # list
|
| 99 |
+
ops: ['Mosaic', 'RandomPhotometricDistort', 'RandomZoomOut', 'RandomIoUCrop']
|
| 100 |
+
mosaic_prob: 0.5
|
| 101 |
+
|
| 102 |
+
collate_fn:
|
| 103 |
+
mixup_prob: 0.0
|
| 104 |
+
mixup_epochs: [40000, 15000]
|
| 105 |
+
copyblend_prob: 0.0
|
| 106 |
+
copyblend_epochs: [40000, 15000]
|
| 107 |
+
stop_epoch: 468 # 468 + 32
|
| 108 |
+
ema_restart_decay: 0.9999
|
| 109 |
+
base_size: 640
|
| 110 |
+
base_size_repeat: ~
|
| 111 |
+
|
| 112 |
+
val_dataloader:
|
| 113 |
+
total_batch_size: 256
|
| 114 |
+
dataset:
|
| 115 |
+
transforms:
|
| 116 |
+
ops:
|
| 117 |
+
- {type: Resize, size: [640, 640], }
|
| 118 |
+
- {type: ConvertPILImage, dtype: 'float32', scale: True}
|
| 119 |
+
shuffle: False
|
| 120 |
+
num_workers: 16
|
| 121 |
+
|
| 122 |
+
|
| 123 |
+
DEIMCriterion:
|
| 124 |
+
losses: ['mal', 'boxes'] # , 'local'
|
| 125 |
+
use_uni_set: False
|
| 126 |
+
|
| 127 |
+
matcher:
|
| 128 |
+
matcher_change_epoch: 450 # FIX This
|
configs/deimv2/deimv2_hgnetv2_s_coco.yml
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
__include__: [
|
| 2 |
+
'../dataset/coco_detection.yml',
|
| 3 |
+
'../runtime.yml',
|
| 4 |
+
'../base/dataloader.yml',
|
| 5 |
+
'../base/optimizer.yml',
|
| 6 |
+
'../base/deimv2.yml'
|
| 7 |
+
]
|
| 8 |
+
|
| 9 |
+
output_dir: ./outputs/deimv2_hgnetv2_s_coco
|
| 10 |
+
|
| 11 |
+
HGNetv2:
|
| 12 |
+
name: 'B0'
|
| 13 |
+
return_idx: [1, 2, 3]
|
| 14 |
+
freeze_at: -1
|
| 15 |
+
freeze_norm: False
|
| 16 |
+
use_lab: True
|
| 17 |
+
|
| 18 |
+
HybridEncoder:
|
| 19 |
+
in_channels: [256, 512, 1024]
|
| 20 |
+
hidden_dim: 256
|
| 21 |
+
depth_mult: 0.34
|
| 22 |
+
expansion: 0.5
|
| 23 |
+
|
| 24 |
+
version: 'dfine'
|
| 25 |
+
|
| 26 |
+
DEIMTransformer:
|
| 27 |
+
num_layers: 3 # 4 5 6
|
| 28 |
+
eval_idx: -1 # -2 -3 -4
|
| 29 |
+
|
| 30 |
+
optimizer:
|
| 31 |
+
type: AdamW
|
| 32 |
+
params:
|
| 33 |
+
-
|
| 34 |
+
params: '^(?=.*backbone)(?!.*bn).*$'
|
| 35 |
+
lr: 0.0002
|
| 36 |
+
-
|
| 37 |
+
params: '^(?=.*(?:norm|bn)).*$' # except bias
|
| 38 |
+
weight_decay: 0.
|
| 39 |
+
|
| 40 |
+
lr: 0.0004
|
| 41 |
+
betas: [0.9, 0.999]
|
| 42 |
+
weight_decay: 0.0001
|
| 43 |
+
|
| 44 |
+
# Increase to search for the optimal ema
|
| 45 |
+
epoches: 132 # 120 + 4n
|
| 46 |
+
|
| 47 |
+
## Our LR-Scheduler
|
| 48 |
+
flat_epoch: 64 # 4 + epoch // 2, e.g., 40 = 4 + 72 / 2
|
| 49 |
+
no_aug_epoch: 12
|
| 50 |
+
|
| 51 |
+
## Our DataAug
|
| 52 |
+
train_dataloader:
|
| 53 |
+
dataset:
|
| 54 |
+
transforms:
|
| 55 |
+
policy:
|
| 56 |
+
epoch: [4, 64, 120] # list
|
| 57 |
+
|
| 58 |
+
collate_fn:
|
| 59 |
+
ema_restart_decay: 0.9999
|
| 60 |
+
base_size_repeat: 20
|
| 61 |
+
mixup_epochs: [4, 64]
|
| 62 |
+
stop_epoch: 120
|
| 63 |
+
copyblend_prob: 0.5
|
| 64 |
+
# copyblend_epochs: [4, 64] # from v11 to v12: copy-paste continues only half epochs
|
| 65 |
+
copyblend_epochs: [4, 120]
|
| 66 |
+
area_threshold: 100
|
| 67 |
+
num_objects: 3
|
| 68 |
+
with_expand: True
|
| 69 |
+
expand_ratios: [0.1, 0.25]
|
| 70 |
+
|
| 71 |
+
DEIMCriterion:
|
| 72 |
+
matcher:
|
| 73 |
+
# new matcher
|
| 74 |
+
change_matcher: True
|
| 75 |
+
iou_order_alpha: 4.0
|
| 76 |
+
matcher_change_epoch: 100
|