Macでyolo v3を動かして画像認識する

# 目的
Macでyolo v3を動かして画像認識した際の備忘録です

> [YOLO: Real-Time Object Detection](https://pjreddie.com/darknet/yolo/)

# 準備

下記サイトを参考にさせて頂きyolo v3の動作環境構築します。

> [YOLOv3をCPU環境でpython使ってリアルタイム画像認識を動かしてみた](https://qiita.com/daiarg/items/03c55c82fdc6e623bf07)
> [Macで物体検知アルゴリズムYOLO V3を動かす](http://starpentagon.net/analytics/yolo_v3_on_mac/)
> [pytorch-yolo-v3](https://github.com/ayooshkathuria/pytorch-yolo-v3)

下記の通りcondaを使ってYolov3用の環境を構築して試しました。

```
$ conda create -n yolo_v3 python=3.6 pip
```

# テスト

imgsフォルダに画像認識させたい.jpgファイルを格納してdetect.pyを実行します。

```
$ python detect.py --images imgs --det det
```

![det_dog.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344880/0cacfdd7-8bb2-d2e8-1378-25b65e9ba56e.jpeg)
![det_003_bikkuri.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344880/1a6069a7-0a77-bfaf-43ab-8d060d8ef2b3.jpeg)
![det_005_hai.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344880/caf2ac13-bcd9-e2eb-5b7b-bc62d8cccde5.jpeg)
![det_011_ohayo.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344880/97d51e73-d8f8-a98a-828e-c36efd715be4.jpeg)
![det_014_omedeto.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344880/349573f6-6d33-df23-46ee-711850c58efb.jpeg)
![det_021_Zzz....jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344880/2c22fedd-3db6-ced6-692f-2e0a14f85e1f.jpeg)
![det_022_ima_nanishiteru_kana.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344880/d6388966-a5a3-0ddb-e2da-bed42ac0e3c3.jpeg)
![det_001_verygood.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344880/a4f33c24-282e-dc70-2964-195d00d4a539.jpeg)

![person.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344880/ca0724db-5c3b-e9f3-5c01-ab26c746de97.png)


dog, bicycle.person...が認識されました
たまにdogがchair, teddy bearと認識されるのは一体なぜ..

[Pexels](https://www.pexels.com/videos/)からダウンロードした動画にvideo_demo.pyを実行します。

```
$ python video_demo.py --video samplemovie.mp4
```

<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">yolo v3 テスト <a href="https://t.co/pDCnri5GhG">pic.twitter.com/pDCnri5GhG</a></p>&mdash; st (@st17890027) <a href="https://twitter.com/st17890027/status/1148177655742652417?ref_src=twsrc%5Etfw">July 8, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> 


# Error対策

```
$ python detect.py --images imgs --det det
RuntimeError: invalid argument Sizes of tensors must match except in dimension
```

batサイズの指定が誤っているようです。
下記サイトを参考に修正して動作させました。

> [RuntimeError: invalid argument 0: Sizes of tensors must match except in dimension 0](https://github.com/ayooshkathuria/pytorch-yolo-v3/issues/70)

```
You might add if output.size()[1] == prediction.size()[1]: condition, beforeoutput = torch.cat((output,prediction)), inside detect.py
```
# 参考

[YOLO: Real-Time Object Detection](https://pjreddie.com/darknet/yolo/)
[YOLOv3をCPU環境でpython使ってリアルタイム画像認識を動かしてみた](https://qiita.com/daiarg/items/03c55c82fdc6e623bf07)
[Macで物体検知アルゴリズムYOLO V3を動かす](http://starpentagon.net/analytics/yolo_v3_on_mac/)
[pytorch-yolo-v3](https://github.com/ayooshkathuria/pytorch-yolo-v3)

[YOLOv3を動かしてみる](https://qiita.com/Shoooooko/items/eae72c7aad5d7f6d5d63)
[KerasのYOLO-v3を動かしたった](https://qiita.com/yoyoyo_/items/10d550b03b4b9c175d9c)
[YOLOとかOpenCVとかで物体検知](https://qiita.com/hiroyuki_mrp/items/ae70eba771449fc6f283)
[Pexels](https://www.pexels.com/videos/)

[RuntimeError: invalid argument 0: Sizes of tensors must match except in dimension 0](https://github.com/ayooshkathuria/pytorch-yolo-v3/issues/70)