82
80

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

YOLOやSSDより速いと噂のM2Detを試してみた

Last updated at Posted at 2019-03-09

はじめに

先日、このような投稿を見つけました。→最新最強の物体検出技術M2Det
M2Detの論文の著者の方がソースコードを公開しているようなので実際に動かしてみました。
GitHubのREADME通りにやっても動かなかったので、自分の備忘録として記事に残します。

実行環境

OS:Ubuntu16.04
GPU:GTX 1050Ti (CPUだけでも問題ないと思います)
CUDA:9.2
Python:2.7

必要なものをインストール

pytorch

著者の方はpytorchを使ってM2Detのニューラルネットを記述していました。
なので、pytorchをインストールします。
OSやpythonのバージョンで微妙に変わるので、公式サイトを参考にしてインストールしてください。
pip install torch

torchvision

pip install torchvision

cython

pip install cython

その他

pip install opencv-python
pip install tqdm
(他にあるかも)

リポジトリのダウンロード

適当な場所にクローンしてください。
git clone https://github.com/qijiezhao/M2Det.git

#コンパイル
M2Detの中に移動してください。
cd M2det/

コンパイルしてください
sh make.sh

私の環境ではwarninigが3つほど出ました。
不安なのでもう一度コンパイルすると、

running build_ext
skipping 'nms/cpu_nms.c' Cython extension (up-to-date)
skipping 'nms/gpu_nms.cpp' Cython extension (up-to-date)
skipping 'pycocotools/_mask.c' Cython extension (up-to-date)

と出力されました。
上手くコンパイルできたっぽいので次に進みます。

weightファイルの準備

はじめに、weightファイルを保存するフォルダを作ります。
cd M2Det/ && mkdir weights

著者の方がすでに学習済みのweightファイルを用意してくれています。
ここからダウンロードしてください。

ダウンロードできたweightファイルを先ほど作ったM2Det/weights/の中に保存してください。

Demoの実行...

READMEに従って、demo.pyを実行してみます。
python demo.py -c=configs/m2det512_vgg.py -m=weights/m2det512_vgg.pth --show

しかし、エラーが出てしまいました。

Traceback (most recent call last):
  File "demo.py", line 7, in <module>
    from configs.CC import Config
ImportError: No module named configs.CC

どうやらmoduleのimportが上手く行っていないみたいです。
他にいい方法があるかもしれませんが、次のようなファイルを作成して、M2Det/configs/の中に保存します。

__init__.py
from . import CC
from . import default_settings
from . import m2det320_resnet101
from . import m2det320_vgg
from . import m2det512_vgg
from . import m2det704_vgg
from . import m2det800_vgg

これでimportのエラーは消えましたが、別のエラーが出ました。

~
SyntaxError: Non-ASCII character '\xe2' in file /home/rg26/M2Det/utils/box_utils.py on line 61, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details

M2Det/utils/box_utils.pyM2det/layers/modules/multibox_loss.pyの1行目に、

.py
# coding: utf-8

を追加すれば解決します。

がしかし、またしてもエラーが出てしまいました。

Traceback (most recent call last):
  File "demo.py", line 38, in <module>
    priors = priorbox.forward()
  File "/home/rg26/M2Det/layers/functions/prior_box.py", line 36, in forward
    for i, j in product(range(f), repeat=2):
TypeError: range() integer end argument expected, got float.

M2Det/layers/functions/prior_box.pyの36行目を、

prior_box.py
35 for k, f in enumerate(self.feature_maps):
36     for i, j in product(range(int(f)), repeat=2):
37         f_k = self.image_size / self.steps[k]

上の用に変更してください。

そしてついに!

 ----------------------------------------------------------------------
|                       M2Det Demo Program                             |
 ----------------------------------------------------------------------
The Anchor info: 
{'aspect_ratios': [[2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3]], 'clip': True, 'feature_maps': [64.0, 32.0, 16.0, 8.0, 4.0, 2.0], 'min_dim': 512, 'min_sizes': [30.72, 76.8, 168.96, 261.12, 353.28, 445.44], 'steps': [8, 16, 32, 64, 128, 256], 'max_sizes': [76.8, 168.96, 261.12, 353.28, 445.44, 537.6], 'variance': [0.1, 0.2]}
===> Constructing M2Det model
Loading resume network...
===> Finished constructing and loading model
pos:(2.0,146.5,36.2,273.8), ids:person, score:0.972
pos:(41.9,124.6,118.1,344.2), ids:person, score:0.913
pos:(123.3,142.2,181.3,355.8), ids:person, score:0.667
pos:(94.8,148.4,134.6,264.5), ids:person, score:0.506
pos:(43.7,141.8,70.7,191.0), ids:person, score:0.447
pos:(94.2,145.9,111.8,166.7), ids:person, score:0.128
~

成功しました。
M2Det/imgs/の中に入っている画像が次々と認識されます!

result-2019-03-09_20.40.48.gif

終わりに

M2Detを試すことができました。
今後はYOLOやSSDより速いのかどうか実際に計測してみたいと思います。

82
80
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
82
80

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?