[DAMO-YOLO] AIで物体検出する

2023年2月4日土曜日

Artificial Intelligence

本記事では、DAMO-YOLOと呼ばれる機械学習手法を用いて、任意の画像と動画の物体を検出する方法をご紹介します。

アイキャッチ
出典: tinyvision/damo-yolo

DAMO-YOLO

概要

DAMO-YOLOは、Alibabaの開発チームによって開発された物体検出手法です。

DAMO-YOLO は YOLO から拡張され、Neural Architecture Search(NAS)、効率的なReparameterized Generalized-FPN(RepGFPN)、AlignedOTAラベル割り当てを備えた軽量ヘッドなどのいくつかの新しいテクノロジーが追加されています。

特に、最大エントロピーの原理に基づいた方法であるMAE-NASを使用して、spatial pyramid poolingとフォーカスモジュールを備えた ResNet、CSPのような構造を生成します。
このような構造で実現されたDAMO-YOLOは、最新のYOLOシリーズよりも高い性能を実現しています。

compare performance

詳細はこちらの論文をご参照ください。

本記事では上記手法を用いて、任意の画像や動画の物体検出を行います。

デモ(Colaboratory)

それでは、実際に動かしながら物体検出を行います。
ソースコードは本記事にも記載していますが、下記のGitHubでも取得可能です。
GitHub - Colaboratory demo

また、下記から直接Google Colaboratoryで開くこともできます。
Open In Colab

なお、このデモはPythonで実装しています。
Pythonの実装に不安がある方、Pythonを使った機械学習について詳しく勉強したい方は、以下の書籍やオンライン講座などがおすすめです。

環境セットアップ

それではセットアップしていきます。 Colaboratoryを開いたら下記を設定しGPUを使用するようにしてください。

「ランタイムのタイプを変更」→「ハードウェアアクセラレータ」をGPUに変更

初めにGithubからソースコードを取得します。

%cd /content

!git clone https://github.com/tinyvision/damo-yolo.git

%cd /content/damo-yolo
# Commits on Jan 19, 2023
!git checkout 9dc625e54edf3c07474630efdbbd397dd857e168

次にライブラリをインストールします。

%cd /content/damo-yolo

!pip install --upgrade gdown
!pip install -r requirements.txt
!pip install cython
!pip install 'git+https://github.com/cocodataset/cocoapi.git#subdirectory=PythonAPI'
!pip install moviepy==0.2.3.5 imageio==2.4.1

最後にライブラリをインポートします。

from IPython.display import Image

from moviepy.video.fx.resize import resize
from moviepy.editor import VideoFileClip

以上で環境セットアップは完了です。

テスト画像・動画のセットアップ

続いてモデルに入力する画像と動画をWebからダウンロードします。

%cd /content/damo-yolo

!wget -c https://www.pakutaso.com/shared/img/thumb/goriueseii-_28A5611-8954_TP_V4.jpg \
      -O ./assets/test_01.jpg
      
!wget -c https://raw.githubusercontent.com/timmeinhardt/trackformer/main/data/snakeboard/snakeboard.mp4 \
      -O ./assets/snakeboard.mp4

学習済みモデルのセットアップ

続いて、学習済みモデルをダウンロードします。

%cd /content/damo-yolo

!mkdir pretrained_models

!gdown https://drive.google.com/uc?id=1-O-ObHN970GRVKkL1TiAxfoMCpYGJS6B \
  -O ./pretrained_models/damoyolo_tinynasL25_S.pth

Object Detection

まず、画像の物体検出を行います。

%cd /content/damo-yolo

!cp ./tools/demo.py ./demo.py

!python demo.py \
  -f ./configs/damoyolo_tinynasL25_S.py \
  --engine ./pretrained_models/damoyolo_tinynasL25_S.pth \
  --engine_type torch \
  --conf 0.6 \
  --infer_size 640 640 \
  --device cuda \
  --path ./assets/test_01.jpg

検出結果は以下の通りです。

Image('./demo/test_01.jpg')
result

続いて動画の物体検出を行います。

%cd /content/damo-yolo

!python demo.py \
  -f ./configs/damoyolo_tinynasL25_S.py \
  --engine ./pretrained_models/damoyolo_tinynasL25_S.pth \
  --engine_type torch \
  --conf 0.6 \
  --infer_size 640 640 \
  --device cuda \
  --path ./assets/snakeboard.mp4

検出結果は以下の通りです。
やや検出漏れが見受けられます。

clip = VideoFileClip("./demo/snakeboard.mp4")
clip = resize(clip, height=420)
clip.ipython_display()
result

まとめ

本記事では、DAMO-YOLOを用いて物体検出を行う方法をご紹介しました。

また本記事では、機械学習を動かすことにフォーカスしてご紹介しました。
もう少し学術的に体系立てて学びたいという方には以下の書籍などがお勧めです。ぜひご一読下さい。


また動かせるだけから理解して応用できるエンジニアの足掛かりに下記のUdemyなどもお勧めです。

参考文献

1. 論文 - DAMO-YOLO : A Report on Real-Time Object Detection Design

2. GitHub - tinyvision/damo-yolo

AIで副業ならココから!

まずは無料会員登録

プロフィール

メーカーで研究開発を行う現役エンジニア
組み込み機器開発や機会学習モデル開発に従事しています

本ブログでは最新AI技術を中心にソースコード付きでご紹介します


Twitter

カテゴリ

このブログを検索

ブログ アーカイブ

TeDokology