お疲れ様です。
HuggingFace(transformersライブラリ)から利用できる物体検出のDeepLearningモデルを試してみたのでその紹介です。
物体検出についてはざっくりというと画像内の物体を矩形(Bounding Box)で囲って検出するものになります。
下図の例では人間の顔を検出しています。

作成したソースコードはテンプレート化して公開しているので気になる方はこちらもご参照ください。
さて、HuggingFaceといえば自然言語処理のモデルが多いイメージかなと思いますが、VisionTransformerなどtransfomerアーキテクチャが使用された画像処理のモデルも多くあります。
transfomerを使った物体検出モデルでもおそらく一番有名であろうDETRを実装しました。
以下はHuggingFaceのDETRの紹介ページですがかなり参考になりました。DETRについての詳細な説明もこちらを見ていただければと思います。
一応こちらにも説明を…(生成AIに書かせたやつです笑)
DETR (DEtection TRansformer) は、Facebook AI Research が開発した物体検出モデルで、Transformer アーキテクチャを使用する点が特徴です。従来の物体検出モデルは、複数の手法(アンカーボックス生成やNMSなど)を組み合わせる必要がありましたが、DETR はこれらを不要にし、シンプルなエンドツーエンドの学習を実現しています。
DETRは主に以下の2つのパートから構成されます:
- CNNバックボーン:ResNet などのCNNを用いて画像特徴量を抽出します。
- Transformer エンコーダ・デコーダ:エンコーダで画像の特徴をエンコードし、デコーダがクエリベースで物体の位置とカテゴリを予測します。
このアプローチにより、アンカーボックスや後処理の必要がなく、訓練が単純化され、様々な検出タスクで高い精度が得られるようになっています。
実装に関してはHuggingFaceモデルを使用した解説はほぼないのでライブラリのソースコードを解読することが多かったです。
以前作成したAlbumentationsのDataAugmentationを使いたかったのですが、これをうまく利用しようとするとめちゃくちゃ大変でした…。
参考になったサイトは以下の2サイト。とはいっても公式のチュートリアルとtorch.hubから読み込めるpretrainedモデルを使用した実装なので基本的には参考程度でした。
紆余曲折あって実装したのが最初に公開したGitHubリポジトリにあります。
とりあえず完成したので実際に学習を回してみようということで、VOC2012の物体検出データセットを使ってお試しの学習をしてみました。

ベンチマーク用のデータセットなのでepoch数が少ないとあまり学習が進まないのでしょうか…。それ以前にあまり安定していないのも気になりますね。 パラメータチューニングはやっていないのでそれも影響はありそうです。
検出結果をいくつか載せておきます。ここには物体を検出できた結果のみを載せていますが、そもそも未検出の画像も結構ありました。

ちなみにDETRの改良版としてDeformable-DETRというモデルもあり、そちらも使えるように実装はしています。
ただVOC2012データセットで学習するとめちゃくちゃ時間がかかるため、学習は断念しました…。1epoch学習を完了するのに2時間はさすがに…笑
モデルの比較もしたいということで現在簡単なデータセットを作成中です。
またそちらも結果がでたら記事にしたいなと思っています。