BEVDet

概要説明

マルチカメラの3D

既存技術より優れ

キー技術

  • Image-view Encoder

  • View Transformer

CaDDN

概要説明

Categorical Depth Distribution Network for Monocular 3D Object Detection
Cody Reading Ali Harakeh Julia Chae Steven L. Waslander
University of Toronto Robotics Institute

https://arxiv.org/pdf/2103.01100

DETR

概要説明

DETR (DEtection TRansformer) は、物体検出(object detection)タスクにおける新しいアプローチとして、2020年に Facebook AI(現 Meta AI)によって発表されたアルゴリズムです。
DETR は、従来の物体検出モデルとは異なり、トランスフォーマーベースのアーキテクチャを使用することで、検出と分類のプロセスを大幅に簡素化しています。
論文:https://arxiv.org/pdf/2005.12872

DETR の特徴

Transformer Architecture

自然言語処理で成果を挙げたTransformerを画像処理に応用しています。
入力画像をエンコーダーで特徴量に変換し、トランスフォーマーデコーダーが物体の位置(bbox)とClass labelを予測できます。

End-to-endのアプローチ

従来の物体検出では、アンカー生成や後処理(NMS: Non-Maximum Suppression)などの手作業のステップが必要でしたが、DETR ではこれらが不要となります。
これにより、シンプルで効率的な学習が可能になっています。

マルチタスク(物体検出と分類を同時に実行)

DETR は、画像中の物体の位置を検出し、それらを分類するプロセスを統一されたフレームワーク内で行います。

環境の準備

DETR を動かすには、Python と PyTorch の環境が必要です。以下の手順で準備を進めます。

Python 環境の作成

1
2
3
4
5
# 仮想環境の作成(例: conda)
conda create -n detr_env python=3.9 -y
conda activate detr_env
PyTorch のインストール
PyTorch を CUDA 対応でインストールします(GPU 使用の場合)。
1
2
3
4
5
6
コードをコピーする
# GPU 用 PyTorch (CUDA 11.7) のインストール
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu117

# CPU 用 PyTorch のインストール(GPU がない場合)
pip install torch torchvision torchaudio

DETRインストール

早速、Git clone を実行して、確認しましょう。

1
2
3
4
5
git clone https://github.com/facebookresearch/detr.git
cd detr

# 必要なライブラリをインストール
pip install -r requirements.txt

DETR を使用した推論

それでは、COCO データセットを使用した事前学習済みモデルで物体検出を行います。

detr_inference.py ファイルを作成して推論コードを準備します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

import torch
from transformers import DetrForObjectDetection, DetrImageProcessor
from PIL import Image
import requests

# 事前学習済みモデルとプロセッサのロード
processor = DetrImageProcessor.from_pretrained("facebook/detr-resnet-50")
model = DetrForObjectDetection.from_pretrained("facebook/detr-resnet-50")

# 入力画像を用意
url = "https://images.unsplash.com/photo-1593642532973-d31b6557fa68"
image = Image.open(requests.get(url, stream=True).raw)

# 推論
inputs = processor(images=image, return_tensors="pt")
outputs = model(**inputs)

# 物体検出結果を取得
results = processor.post_process_object_detection(outputs, threshold=0.9, target_sizes=[image.size])

# 検出結果を出力
for result in results:
for score, label, box in zip(result["scores"], result["labels"], result["boxes"]):
print(f"Label: {model.config.id2label[label.item()]}, Score: {score.item():.3f}, Box: {box.tolist()}")

保存して実行します。

1
python detr_inference.py

DETRのTraining

1
python -m torch.distributed.launch --nproc_per_node=1 --use_env main.py --coco_path /workspaces/bev-playground/dataset/coco