MacbookにYOLO v3を入れて動かしてみる



###参考にしたウェブページ

- [ITとガジェットあれこれ 「M1 Mac+Python+YOLO V3で物体検出に挑戦」](https://sandambara.com/yolo-v3-with-python-using-m1-mac)

#１. 環境構築

####資源取得（git clone）

```bash:Terminal
electron@diynoMacBook-Pro ~ % cd Desktop                                   
electron@diynoMacBook-Pro Desktop % git clone https://github.com/pjreddie/darknet
```

####ディレクトリ構成の確認
```bash:Terminal
electron@diynoMacBook-Pro Desktop % ls darknet
LICENSE		LICENSE.gen	LICENSE.meta	LICENSE.v1	README.md	data		include		scripts
LICENSE.fuck	LICENSE.gpl	LICENSE.mit	Makefile	cfg		examples	python		src
electron@diynoMacBook-Pro Desktop % 
electron@diynoMacBook-Pro Desktop % ls | grep darknet
darknet
electron@diynoMacBook-Pro Desktop % ls darknet/data
9k.labels			coco9k.map			goal.txt			inet9k.map			person.jpg
9k.names			dog.jpg				horses.jpg			kite.jpg			scream.jpg
9k.tree				eagle.jpg			imagenet.labels.list		labels				voc.names
coco.names			giraffe.jpg			imagenet.shortnames.list	openimages.names
electron@diynoMacBook-Pro Desktop % 
```

####make実行
```bash:Terminal
electron@diynoMacBook-Pro Desktop % cd darknet
electron@diynoMacBook-Pro darknet % make
gcc -Iinclude/ -Isrc/ -Wall -Wno-unused-result -Wno-unknown-pragmas -Wfatal-errors -fPIC -Ofast obj/captcha.o obj/lsd.o obj/super.o obj/art.o obj/tag.o obj/cifar.o obj/go.o obj/rnn.o obj/segmenter.o obj/regressor.o obj/classifier.o obj/coco.o obj/yolo.o obj/detector.o obj/nightmare.o obj/instance-segmenter.o obj/darknet.o libdarknet.a -o darknet -lm -pthread  libdarknet.a
electron@diynoMacBook-Pro darknet % 
```

####学習済みの重みファイルを取得（wget）
```bash:Terminal
electron@diynoMacBook-Pro darknet % wget https://pjreddie.com/media/files/yolov3.weights
--2021-07-12 16:29:23--  https://pjreddie.com/media/files/yolov3.weights
pjreddie.com (pjreddie.com) をDNSに問いあわせています... 
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 248007048 (237M) [application/octet-stream]
`yolov3.weights' に保存中

yolov3.weights                                   100%[========================================================================================================>] 236.52M  11.5MB/s 時間 29s      

2021-07-12 16:29:54 (8.07 MB/s) - `yolov3.weights' へ保存完了 [248007048/248007048]

electron@diynoMacBook-Pro darknet % 
```

以上で、環境構築は終わりです:point_up:

#２. 画像の物体検出 & 矩形抽出を試してみる

では、早速YOLO v3を使ってみたいと思います。

####画像データ： dataディレクトリ直下のサンプル画像「dog.jpg」

#####__（ 扱う画像ファイル ）__

![スクリーンショット 2021-07-12 17.21.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1754134/84c1b081-66d4-0fad-c1ca-01862c4cd815.png)


#####__（ YOLO v3の出力ファイル ）__

![スクリーンショット 2021-07-12 17.18.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1754134/7d9fa951-654c-7b8c-cf4c-2b4880a1feba.png)


#####__（ 実行画面 ）__

```bash:Terminal
electron@diynoMacBook-Pro darknet % ./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg
layer     filters    size              input                output
    0 conv     32  3 x 3 / 1   608 x 608 x   3   ->   608 x 608 x  32  0.639 BFLOPs
    1 conv     64  3 x 3 / 2   608 x 608 x  32   ->   304 x 304 x  64  3.407 BFLOPs
    2 conv     32  1 x 1 / 1   304 x 304 x  64   ->   304 x 304 x  32  0.379 BFLOPs
    3 conv     64  3 x 3 / 1   304 x 304 x  32   ->   304 x 304 x  64  3.407 BFLOPs
    4 res    1                 304 x 304 x  64   ->   304 x 304 x  64
    5 conv    128  3 x 3 / 2   304 x 304 x  64   ->   152 x 152 x 128  3.407 BFLOPs
    6 conv     64  1 x 1 / 1   152 x 152 x 128   ->   152 x 152 x  64  0.379 BFLOPs
    7 conv    128  3 x 3 / 1   152 x 152 x  64   ->   152 x 152 x 128  3.407 BFLOPs
    
   　（ 長いので出力結果を省略 ）
    
      104 conv    256  3 x 3 / 1    76 x  76 x 128   ->    76 x  76 x 256  3.407 BFLOPs
  105 conv    255  1 x 1 / 1    76 x  76 x 256   ->    76 x  76 x 255  0.754 BFLOPs
  106 yolo
Loading weights from yolov3.weights...Done!
data/dog.jpg: Predicted in 18.619947 seconds.
bicycle: 99%
truck: 92%
dog: 100%
electron@diynoMacBook-Pro darknet  %
```

####画像データ： dataディレクトリ直下のサンプル画像「kite.jpg」

#####__（ 扱う画像ファイル ）__

![スクリーンショット 2021-07-12 17.21.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1754134/753d3541-6d47-2db8-de09-5854d5c2001c.png)

#####__（ YOLO v3の出力ファイル ）__

![スクリーンショット 2021-07-12 17.23.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1754134/1b7692b5-0160-ca4f-027f-e3923e3d5d74.png)

#####__（ 実行画面 ）__

```bash:Terminal
electron@diynoMacBook-Pro darknet % ./darknet detect cfg/yolov3.cfg yolov3.weights data/kite.jpg
layer     filters    size              input                output
    0 conv     32  3 x 3 / 1   608 x 608 x   3   ->   608 x 608 x  32  0.639 BFLOPs
    1 conv     64  3 x 3 / 2   608 x 608 x  32   ->   304 x 304 x  64  3.407 BFLOPs
    
   　（ 長いので出力結果を省略 ）
    
  105 conv    255  1 x 1 / 1    76 x  76 x 256   ->    76 x  76 x 255  0.754 BFLOPs
  106 yolo
Loading weights from yolov3.weights...Done!
data/kite.jpg: Predicted in 19.940331 seconds.
kite: 99%
kite: 84%
kite: 80%
kite: 73%
person: 95%
person: 91%
person: 88%
person: 85%
person: 100%
person: 52%
person: 100%
person: 97%
person: 96%

electron@diynoMacBook-Pro darknet  %
```