Deticによる物体検出とセグメンテーション
以下のリポジトリを参考に物体検出モデルDeticをローカル環境で動作確認したのでまとめます.公式実装は以下です.リポジトリにはセマンティックセグメンテーションも実装されており,結果を合わせて確認できます.
Deticとは
Meta researchがECCV2022で報告した物体検出を行うモデルです.出典は以下です.
we propose Detector with image classes (Detic) that uses image-level supervision in addition to detection supervision. We observe that the localization and classification sub-problems can be decoupled.
[Detecting Twenty-thousand Classes using Image-level Supervision, arXiv, 2022]
物体検出タスクは,位置特定とクラス予測から定義されると解釈して,それらを分解して学習する手法と認識しています.具体的には,COCOなど矩形情報を持つデータセットからは位置特定機能を学習し,ImageNet-21kなどクラス情報のみ持つデータセットからは,獲得した位置特定部で予測した物体矩形を入力として,クラス予測機能を学習する,という手法です.
従来は位置特定とクラス予測を同じデータセットから学習していたため検出できるクラス数に制限がありました.提案手法によりクラス予測に画像認識のデータセットを組み込めるように改良したため,検出クラスが2万クラス以上に拡張されています.
Open-vocabulary object detection, or also named zero-shot object de-
tection, aims to detect objects outside of the training vocabulary.
Detecting Twenty-thousand Classes using Image-level Supervision, arXiv, 2022
また,訓練データに含まれないクラスの物体検出タスク(ゼロショット物体検出)にも取り組んでいます.出力のクラス予測部を,画像特徴と言語特徴を対応付けて学習する分類モデルのCLIPに差し替えて同時に学習させることで,任意のクラスに対しての分類が可能です.
ゼロショット物体検出については本筋から外れるのに加えて,自身の勉強不足でもあるため説明は割愛します.参考欄にゼロショット物体検出について調査されている記事を記載していますのでご参照いただけますと幸いです.
動作環境
- Ubuntu 20.04
- Python3.8.10
- NVIDIA GeForce RTX 3080 laptop GPU
- torch==1.12.1+cu113
環境構築
mkdir ./detic
git clone git@github.com:facebookresearch/detectron2.git
cd detectron2
pip install -e .
cd ..
git clone https://github.com/facebookresearch/Detic.git --recurse-submodules
cd Detic
pip install -r requirements.txt
実行
demo.pyと同じディレクトリ内に検出したい画像image.pngを配置します.
リポジトリに記載のREADME.mdのDemo項目のコマンドを実行します.
mkdir models
wget https://dl.fbaipublicfiles.com/detic/Detic_LCOCOI21k_CLIP_SwinB_896b32_4x_ft4x_max-size.pth -O models/Detic_LCOCOI21k_CLIP_SwinB_896b32_4x_ft4x_max-size.pth
python3 demo.py --config-file configs/Detic_LCOCOI21k_CLIP_SwinB_896b32_4x_ft4x_max-size.yaml --input image.png --output out.png --vocabulary lvis --opts MODEL.WEIGHTS models/Detic_LCOCOI21k_CLIP_SwinB_896b32_4x_ft4x_max-size.pth
動作確認
カーシミュレータのCarlaを使って運転シーンを再現しました.今回はこの画像を使って物体検出してみます.実世界の物体で学習したモデルですがシミュレータ画像でも正しく検出ができるのか試してみます.
Carlaによる運転シーンを再現した画像
こちらが物体検出とセグメンテーションの結果です.
Deticによる物体検出+セグメンテーション結果
道路と建物はおそらく検出クラスに入っていないため検出されていないようですが,その他のオブジェクトは漏れなく検出されています.セグメンテーションの精度は低いですが今回の使用例では検出抜けがなければ良いとします.物体検出器としてはシミュレータ画像でも十分に機能することが確認できました.
まとめ
Meta researchがECCV2022で報告したDeticのモデルの推論をローカル環境で動作確認しました.物体検出器としては非常に高い性能だと感じました.また,物体検出といった典型的な画像処理タスクにも,未知クラスへの対応を考えるとCLIPのような画像と言語を紐づけて学習するモデルも対策の一つになり得る,ということはとても勉強になりました.
参考
Deticについて,以下の記事で紹介されています.記事を作成するきっかけや参考にしましたので,こちらもぜひご覧ください.
Deticの論文内でゼロショット物体検出の実装で参考にしたと言及のある手法ViDLについて以下の記事で紹介されています.こちらもぜひご覧ください. 上記の記事と同じ作者様が公開されているゼロショット物体検出の研究動向が紹介されています.こちらもぜひご覧ください.
Discussion