はじめに
RF-DETRはRoboflowチームによって開発されたオープンソースの物体検出モデルです。これは 変圧器 アーキテクチャの中核となる特徴は、リアルタイム効率です。このモデルは、マイクロソフト社のCOCOデータセット上で、初めて60以上のAPのリアルタイム検出を達成したほか、RF100-VLベンチマークテストでも優れており、実世界の幅広いシナリオに適応しています。RF-DETR-base(2900万パラメータ)とRF-DETR-large(1億2800万パラメータ)の2つのバージョンがあります。このモデルは小型で、エッジデバイスの展開に適しています。コードと事前に訓練された重みはApache 2.0ライセンスの下でライセンスされており、コミュニティでの使用に無料で開放されています。ユーザーはGitHubからリソースにアクセスし、簡単にトレーニングやデプロイを行うことができます。
機能一覧
- リアルタイム物体検出:画像やビデオ内の物体を低遅延で高速認識。
- カスタムデータセットのトレーニング:独自のデータによるモデルのチューニングをサポート。
- エッジデバイスでの実行:このモデルは軽量で、リソースが限られたデバイスに適している。
- 調整可能な分解能:ユーザーは検査速度と精度のバランスを取ることができます。
- 事前学習済みモデルのサポート:COCOデータセットに基づく事前学習済みの重みを提供。
- ビデオストリーム処理:リアルタイムでビデオを分析し、結果を出力することができる。
- ONNXエクスポート: ONNXフォーマットへの変換をサポートし、クロスプラットフォーム展開を容易にします。
- マルチGPUトレーニング:複数のグラフィックカードを使用することで、トレーニングプロセスを高速化することができます。
ヘルプの使用
RF-DETRの使用方法は、インストール、推論、トレーニングの3つの部分に分けられます。以下は、すぐに使い始めるための詳細な手順です。
設置プロセス
- 環境準備
Python 3.9以上、PyTorch 1.13.0以上が必要です。GPUを使う場合はnvidia-smi
ドライブをチェックする。- PyTorchをインストールする:
pip install torch>=1.13.0 torchvision>=0.14.0
- ダウンロードコード
git clone https://github.com/roboflow/rf-detr.git cd rf-detr
- 依存関係をインストールします:
pip install rfdetr
これで自動的に
numpy
そしてsupervision
およびその他の必要なライブラリ。
- PyTorchをインストールする:
- インストールの確認
以下のコードを実行する:from rfdetr import RFDETRBase print("安装成功")
エラーが報告されなければ、インストールは完了です。
推論演算
RF-DETRには、画像や動画を直接検出するためのCOCOデータセットの訓練済みモデルが付属しています。
- 画像検出
- サンプルコード:
import io import requests from PIL import Image from rfdetr import RFDETRBase import supervision as sv model = RFDETRBase() url = "https://media.roboflow.com/notebooks/examples/dog-2.jpeg" image = Image.open(io.BytesIO(requests.get(url).content)) detections = model.predict(image, threshold=0.5) labels = [f"{class_id} {confidence:.2f}" for class_id, confidence in zip(detections.class_id, detections.confidence)] annotated_image = image.copy() annotated_image = sv.BoxAnnotator().annotate(annotated_image, detections) annotated_image = sv.LabelAnnotator().annotate(annotated_image, detections, labels) sv.plot_image(annotated_image)
- このコードは、画像内のオブジェクトを検出し、バウンディングボックスと信頼度をラベル付けし、結果を表示する。
- サンプルコード:
- ビデオ検出
- まず
opencv-python
::pip install opencv-python
- サンプルコード:
import cv2 from rfdetr import RFDETRBase import supervision as sv model = RFDETRBase() cap = cv2.VideoCapture("video.mp4") # 替换为你的视频路径 while cap.isOpened(): ret, frame = cap.read() if not ret: break image = Image.fromarray(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)) detections = model.predict(image, threshold=0.5) annotated_frame = sv.BoxAnnotator().annotate(frame, detections) cv2.imshow("RF-DETR Detection", annotated_frame) if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release() cv2.destroyAllWindows()
- これはビデオ内のオブジェクトをフレームごとに検出し、リアルタイムで表示する。
- まず
- 解像度の調整
- 解像度は初期化時に設定できる(56の倍数でなければならない):
model = RFDETRBase(resolution=560)
- 解像度が高いほど精度は上がるが、スピードは遅くなる。
- 解像度は初期化時に設定できる(56の倍数でなければならない):
カスタムモデルのトレーニング
RF-DETRは独自のデータセットによる微調整をサポートしていますが、データセットは以下を含むCOCOフォーマットである必要があります。 train
そしてvalid
歌で応える test
3つのサブディレクトリ。
- データセットの準備
- カタログ構成例:
dataset/ ├── train/ │ ├── _annotations.coco.json │ ├── image1.jpg │ └── image2.jpg ├── valid/ │ ├── _annotations.coco.json │ ├── image1.jpg │ └── image2.jpg └── test/ ├── _annotations.coco.json ├── image1.jpg └── image2.jpg
- COCOフォーマットのデータセットはRoboflowプラットフォームを使って生成できます:
from roboflow import Roboflow rf = Roboflow(api_key="你的API密钥") project = rf.workspace("rf-100-vl").project("mahjong-vtacs-mexax-m4vyu-sjtd") dataset = project.version(2).download("coco")
- カタログ構成例:
- トレーニング開始
- サンプルコード:
from rfdetr import RFDETRBase model = RFDETRBase() model.train(dataset_dir="./mahjong-vtacs-mexax-m4vyu-sjtd-2", epochs=10, batch_size=4, grad_accum_steps=4, lr=1e-4)
- トレーニングでは、推奨される合計バッチサイズ (
batch_size * grad_accum_steps
例えば、A100 GPUはbatch_size=16, grad_accum_steps=1
T4 GPUbatch_size=4, grad_accum_steps=4
.
- サンプルコード:
- マルチGPUトレーニング
- 確立
main.py
ドキュメンテーションfrom rfdetr import RFDETRBase model = RFDETRBase() model.train(dataset_dir="./dataset", epochs=10, batch_size=4, grad_accum_steps=4, lr=1e-4)
- ターミナルで実行:
python -m torch.distributed.launch --nproc_per_node=8 --use_env main.py
- そうしれいかん
8
使用しているGPUの数に置き換えてください。調整batch_size
バッチサイズを安定させるためである。
- 確立
- 負荷トレーニングの結果
- トレーニング後、通常のウェイトとEMAウェイト(より安定)の2つのウェイトファイルが生成される。ロード方法
model = RFDETRBase(pretrain_weights="./output/model_ema.pt") detections = model.predict("image.jpg")
- トレーニング後、通常のウェイトとEMAウェイト(より安定)の2つのウェイトファイルが生成される。ロード方法
ONNXエクスポート
- ONNXフォーマットにエクスポートすることで、他のプラットフォームへの展開が容易になります:
from rfdetr import RFDETRBase model = RFDETRBase() model.export()
- エクスポートされたファイルは
output
エッジデバイスの最適推論のためのカタログ。
アプリケーションシナリオ
- 自動運転
RF-DETRは道路上の車両や歩行者をリアルタイムで検出します。低遅延で高精度のため、組み込みシステムに適しています。 - 工業品質管理
RF-DETRは工場の組立ラインで部品の欠陥を素早く特定します。このモデルは軽量で、装置上で直接稼働させることができます。 - ビデオ監視
RF-DETRは監視カメラの映像を処理し、異常な物体や行動をリアルタイムで検知します。ビデオストリーミングをサポートし、24時間365日のセキュリティに適しています。
品質保証
- サポートされているデータセット形式は?
COCO形式のみ対応。データセットにはtrain
そしてvalid
歌で応えるtest
サブディレクトリに、それぞれ対応する_annotations.coco.json
ドキュメンテーション - RoboflowのAPIキーを取得するには?
https://app.roboflow.com にログインし、アカウント設定からAPIキーを見つけ、コピーして環境変数に設定する。ROBOFLOW_API_KEY
. - トレーニングにはどのくらい時間がかかりますか?
ハードウェアとデータセットサイズによる。T4 GPUでは、10エポックに数時間かかるかもしれない。小さいデータセットはCPUでも実行できるが、遅い。