M2Detとは
2019年4月現在、最強の物体検出器と呼ばれているモデルです。2017〜2018年頃にSOTAだったYOLOやSSDを引き離し高い精度を叩き出しています。 多段階特徴ピラミッドネットワーク(MLFPN)と呼ばれる方法を提案し、異なるスケールの物体を検出するためのより効果的な仕組みを取り入れています。
元論文はこちらです。 arxiv.org
ソースコードや学習済モデルも公開されているので、今回はこれをGoogle Colaboratory上で動かして遊んでみます。
動かしてみた
今回、私がやった手順は以下で公開しています。
まず、M2Detをインストールします。
!pip install torch torchvision !pip install opencv-python tqdm addict !git clone https://github.com/qijiezhao/M2Det.git %cd M2Det/ !sh make.sh
次に、学習済みモデルをダウンロードします。Google Driveからサイズの大きいファイルをダウンロードするには、すこし工夫が必要です。詳しくは以下の記事をご覧ください。
モデルがダウンロードできたら、Mw2Detを動かしてみます。
!python demo.py -c=configs/m2det512_vgg.py -m=m2det512_vgg.pth
結果を表示します。まずは、デフォルトで用意されているトラックの画像を表示してみます。
import cv2 import matplotlib.pyplot as plt plt.figure(figsize=(5,5),dpi=200) img=cv2.imread('imgs/ss2_m2det.jpg') show_img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) plt.imshow(show_img)
車が全て検出できておらず「ん?」って感じはしますが、まぁ、とりあえず動かすことには成功しました。精度については、大規模なデータで再学習して向上させるなど、もうひと工夫必要そうです。
手持ちの画像でもやってみた
次に、手持ちの画像でも試してみました。試したのは以下の画像です。


それぞれ、以下のサイトから入手しました。
画像が格納されている自身のGoogle DriveをColaboratoryにマウントし、カレントディレクトリに画像をコピーします。そして、M2Detを再度実行します。
from google.colab import drive drive.mount('/content/drive') !cp /content/drive/My\ Drive/work/M2Det/*.jpg ./imgs !python demo.py -c=configs/m2det512_vgg.py -m=m2det512_vgg.pth
表示してみましょう。
plt.figure(figsize=(5,5),dpi=200) img=cv2.imread('imgs/fruits_m2det.jpg') show_img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) plt.imshow(show_img)
plt.figure(figsize=(5,5),dpi=200) img=cv2.imread('imgs/goose_m2det.jpg') show_img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) plt.imshow(show_img)
まぁまぁの出来ですね。やはり、精度面で、まだまだ完璧とは言えないので再学習したいところです。
以上、今回はM2Detを動かしてみました。使うだけなら簡単なので皆さんもやってみては?
良い記事だと思っていただいた方は、SNSでのシェア、ブログからのリンク、「読者になる」ボタンのクリック、「★」ボタンのクリック、よろしくお願いします! ではまた次の記事でお会いしましょう!