これは、LW-DETR の PyTorch 実装を含む公式リポジトリです。リアルタイム検出のための YOLO のトランスフォーマーの代替です。
☀️ この研究があなたの研究に役立つと思われる場合は、私たちのリポジトリにスターを付けて、論文を引用してください。 ☀️
LW-DETR の一連のリアルタイム検出モデル (LW-DETR-tiny、LW-DETR-small、LW-DETR-medium、LW-DETR-large、LW-DETR-xlarge など) を
LW-DETR で一連の事前トレーニング済みモデルをリリースします。ダウンロードするには「Hugging Face」を参照してください。
[2024/7/15] LW-DETR をベースに構築された、優れたパフォーマンスと低遅延を備えた効率的なオープン語彙検出器 OVLW-DETR を紹介します。標準の Zero-Shot LVIS ベンチマークでは、既存のリアルタイムのオープン語彙検出器を上回ります。ソース コードと事前トレーニングされたモデルは近日公開予定ですので、楽しみにお待ちください。
1. はじめに
2. インストール
3. 準備
4. 電車
5.評価
6.展開
7. 主な結果
8. 参考文献
9. 引用
LW-DETR は軽量の検出トランスであり、リアルタイムの物体検出において YOLO よりも優れた性能を発揮します。このアーキテクチャは、ViT エンコーダー、プロジェクター、および浅い DETR デコーダーの単純なスタックです。 LW-DETR は、損失と事前トレーニングの改善、インターリーブ ウィンドウや ViT エンコーダの複雑さを軽減するためのグローバル アテンションなど、トレーニングに効果的な技術などの最近の高度な技術を活用しています。 LW-DETR は、マルチレベルの特徴マップと ViT エンコーダー内の中間および最終の特徴マップを集約して、より豊富な特徴マップを形成することで ViT エンコーダーを改善し、インターリーブ アテンション計算の効率を向上させるためにウィンドウ メジャーの特徴マップ構成を導入します。 LW-DETR は、COCO やその他のベンチマーク データセット上で、既存のリアルタイム検出器 (YOLO やそのバリアントなど) よりも優れたパフォーマンスを実現します。
コードはpython=3.8.19, pytorch=1.13.0, cuda=11.6,TensorRT-8.6.1.6
で開発および検証されています。より上位のバージョンも利用できる可能性があります。
Anaconda を使用して独自の Python 環境を作成します。
conda create -n lwdetr python=3.8.19 conda は lwdetr をアクティブ化します
このリポジトリのクローンを作成します。
git clone https://github.com/Atten4Vis/LW-DETR.gitcd LW-DETR
PyTorch と torchvision をインストールします。
https://pytorch.org/get-started/locally/ の指示に従ってください。
# 例:conda install pytorch==1.13.0 torchvision==0.14.0 pytorch-cuda=11.6 -c pytorch -c nvidia
必要なパッケージをインストールします。
トレーニングと評価の場合:
pip install -r 要件.txt
導入の場合:
TensorRT のインストール手順については、NVIDIA を参照してください。
pip install -r デプロイ/requirements.txt
CUDA 演算子のコンパイル
CD モデル/OP python setup.py build install# 単体テスト (すべてのチェックが True であることを確認する必要があります) python test.pycd ../..
MS COCOデータセットの場合は、http://cocodataset.org から注釈付きの COCO 2017 train および val イメージをダウンロードして抽出してください。ディレクトリ構造は次のようになると予想されます。
COCODIR/ ├── train2017/ ├── val2017/ └── annotations/ ├── instances_train2017.json └── instances_val2017.json
事前トレーニング用のObjects365データセットについては、注釈付きの Objects365 画像を https://www.objects365.org/overview.html からダウンロードしてください。
すべてのチェックポイントは「ハグフェイス」にあります。
Objects365 での事前トレーニング。
ViT を事前トレーニングしました。
事前トレーニングされたモデルに基づいて、MIM メソッド CAE v2 を使用して、データセット Objects365 で ViT を事前トレーニングします。次のリンクを参照して事前学習済みモデルをダウンロードし、 pretrain_weights/
に配置してください。
モデル | コメント |
---|---|
caev2_tiny_300e_objects365 | CAE v2 を使用した LW-DETR-tiny/small の object365 上の事前トレーニングされた ViT モデル |
caev2_tiny_300e_objects365 | CAE v2 を使用した LW-DETR-中/大規模向けの object365 上の事前トレーニングされた ViT モデル |
caev2_tiny_300e_objects365 | CAE v2 を使用した LW-DETR-xlarge の object365 上の事前トレーニングされた ViT モデル |
事前トレーニング済みの LW-DETR。
エンコーダーを再トレーニングし、監視方式で Objects365 上でプロジェクターとデコーダーをトレーニングします。次のリンクを参照して事前学習済みモデルをダウンロードし、 pretrain_weights/
に配置してください。
モデル | コメント |
---|---|
LWDETR_tiny_30e_objects365 | オブジェクト上の事前トレーニングされた LW-DETR-tiny モデル365 |
LWDETR_small_30e_objects365 | オブジェクト上の事前トレーニング済み LW-DETR 小型モデル365 |
LWDETR_medium_30e_objects365 | オブジェクト上の事前トレーニングされた LW-DETR-medium モデル365 |
LWDETR_large_30e_objects365 | オブジェクト上の事前トレーニングされた LW-DETR-大規模モデル365 |
LWDETR_xlarge_30e_objects365 | オブジェクト上の事前トレーニング済み LW-DETR-xlarge モデル365 |
COCOで微調整。 COCO 上の事前トレーニング済みモデルを微調整します。リポジトリを再実装する場合は、この手順をスキップしてください。トレーニングされたモデルを直接評価したい場合は、次のリンクを参照して微調整されたモデルをダウンロードし、 output/
に配置してください。
モデル | コメント |
---|---|
LWDETR_tiny_60e_coco | COCO の LW-DETR-tiny モデルを微調整 |
LWDETR_small_60e_coco | COCO の微調整された LW-DETR-小型モデル |
LWDETR_medium_60e_coco | COCO の微調整された LW-DETR-中型モデル |
LWDETR_large_60e_coco | COCO のファインチューン LW-DETR-ラージ モデル |
LWDETR_xlarge_60e_coco | COCO の微調整された LW-DETR-xlarge モデル |
coco データセットのトレーニング プロセスのためにscripts/lwdetr_
ファイルを直接実行できます。
sh scripts/lwdetr_tiny_coco_train.sh /path/to/your/COCODIR
sh scripts/lwdetr_small_coco_train.sh /path/to/your/COCODIR
sh scripts/lwdetr_medium_coco_train.sh /path/to/your/COCODIR
sh scripts/lwdetr_large_coco_train.sh /path/to/your/COCODIR
sh scripts/lwdetr_xlarge_coco_train.sh /path/to/your/COCODIR
coco データセットの評価プロセスのためにscripts/lwdetr_
ファイルを直接実行できます。 「3. LW-DETR シリーズのダウンロードの準備」を参照してください。
sh scripts/lwdetr_tiny_coco_eval.sh /path/to/your/COCODIR /path/to/your/checkpoint
sh scripts/lwdetr_small_coco_eval.sh /path/to/your/COCODIR /path/to/your/checkpoint
sh scripts/lwdetr_medium_coco_eval.sh /path/to/your/COCODIR /path/to/your/checkpoint
sh scripts/lwdetr_large_coco_eval.sh /path/to/your/COCODIR /path/to/your/checkpoint
sh scripts/lwdetr_xlarge_coco_eval.sh /path/to/your/COCODIR /path/to/your/checkpoint
scripts/lwdetr_
ファイルを実行して、開発用のモデルをエクスポートできます。実行前に、TensorRT および cuDNN 環境変数が正しく設定されていることを確認してください。
# ONNX モデルをエクスポートしますsh scripts/lwdetr_tiny_coco_export.sh /path/to/your/COCODIR /path/to/your/checkpoint# モデルを ONNX から TensorRT エンジンに変換しますsh scripts/lwdetr_tiny_coco_export.sh /path/to/your/COCODIR /path /to/your/checkpoint --trt
# ONNX モデルをエクスポートしますsh scripts/lwdetr_small_coco_export.sh /path/to/your/COCODIR /path/to/your/checkpoint# モデルを ONNX から TensorRT エンジンに変換しますsh scripts/lwdetr_small_coco_export.sh /path/to/your/COCODIR /path /to/your/checkpoint --trt
# ONNX モデルをエクスポートしますsh scripts/lwdetr_medium_coco_export.sh /path/to/your/COCODIR /path/to/your/checkpoint# モデルを ONNX から TensorRT エンジンに変換しますsh scripts/lwdetr_medium_coco_export.sh /path/to/your/COCODIR /path /to/your/checkpoint --trt
# ONNX モデルをエクスポートしますsh scripts/lwdetr_large_coco_export.sh /path/to/your/COCODIR /path/to/your/checkpoint# モデルを ONNX から TensorRT エンジンに変換しますsh scripts/lwdetr_large_coco_export.sh /path/to/your/COCODIR /path /to/your/checkpoint --trt
# ONNX モデルをエクスポートしますsh scripts/lwdetr_xlarge_coco_export.sh /path/to/your/COCODIR /path/to/your/checkpoint# モデルを ONNX から TensorRT エンジンに変換しますsh scripts/lwdetr_xlarge_coco_export.sh /path/to/your/COCODIR /path /to/your/checkpoint --trt
deploy/benchmark.py
ツールを使用して、推論レイテンシーのベンチマークを実行できます。
# onnx モデルのレイテンシを評価してベンチマークするpythondeploy/benchmark.py --path=/path/to/your/onnxmodel --coco_path=/path/to/your/COCODIR --run_benchmark # TensorRT エンジンのレイテンシを評価してベンチマークするpythondeploy/benchmark.py --path=/path/to/your/trtengine --coco_path=/path/to/your/COCODIR --run_benchmark
coco データセットに関する主な結果。元の論文で報告されている mAP と、再実装から得られた mAP を報告します。
方法 | 事前トレーニング | パラムス(男) | フロップス (G) | モデルの遅延 (ミリ秒) | 合計レイテンシ (ミリ秒) | 地図 | ダウンロード |
---|---|---|---|---|---|---|---|
LW-DETR-tiny | ✔ | 12.1 | 11.2 | 2.0 | 2.0 | 42.6 (42.9) | リンク |
LW-DETR-small | ✔ | 14.6 | 16.6 | 2.9 | 2.9 | 48.0 (48.1) | リンク |
LW-DETR-medium | ✔ | 28.2 | 42.8 | 5.6 | 5.6 | 52.5 (52.6) | リンク |
LW-DETR-large | ✔ | 46.8 | 71.6 | 8.8 | 8.8 | 56.1 (56.1) | リンク |
LW-DETR-xlarge | ✔ | 118.0 | 174.2 | 19.1 | 19.1 | 58.3 (58.3) | リンク |
私たちのプロジェクトは、コードを含む次の公開文書に基づいて実行されます。
グループDETR
ViTDet
変形可能なDETR
条件付き DETR
YOLOv8
整列DETR
CAE v2
CAE
このコードが研究に役立つと思われる場合は、論文の引用をご検討ください。
@article{chen2024lw,title={LW-DETR: リアルタイム検出のための YOLO への変圧器の置き換え},author={Chen、Qiang と Su、Xiangbo と Zhang、Xinyu と Wang、Jian と Chen、Jiahui と Shen、Yunpengハン、チューチューとチェン、ズーリャンとシュー、ウェイシアンとリー、ファンロンなど},journal={arXiv preprint arXiv:2406.03459},year={2024}}