yolov3開発者が使っているPCの価格を算出したった。

# Motive
最近yoloを使って物体検出することがあったのですが、精度が高くて驚いています。:scream:

<img src="https://pjreddie.com/media/image/sayit.jpg">

以前は学習させたい物体が固定化し、正解画像と誤画像をかき集めつつ振り分けて分類器(カスケード)を作成してたのですが、DeepLearningが流行し始めた2012年から画像内の物体エリアにアノテーションをつけてCNN(畳み込みニューラルネットワーク)で学習させる手法になりつつあります。openCVもversion4以降から分類器を自作するシェルが削除されています。

それで、自分の学習用に自作のPCを用意しようと思ったのですが、GPUのスペックや値段でどのパーツを買えばいいかと悩んでいたところです。

で、yolov3開発者(本人)も各方面から質問で聞かれているみたいです。

一部抜粋　[yolo v3 Hardware Guide: Neural Networks on GPUs](https://pjreddie.com/darknet/hardware-guide/)

*Convolutional neural networks are all the rage in computer vision right now. However, since they are relatively new and the field is moving so fast around them many people are confused about how best to train them. I've had fellow grad students and industry researchers ask me what kind of hardware they should get for personal machines or servers.*

*畳み込みニューラルネットワークはコンピュータビジョンの中では沸騰ワードです。しかしながら、CNNは比較的新しくてこの分野の動向が他よりも早い状況下で多くの人はどのように学習すればいいのかで困惑しています。私は学生や企業関係者から自作PCやサーバでどのハードウェアの種類を選んだ方がいいかを聞いてくることがあります。*

このページは2016年1月とちょっと古めなのですが、開発で使われたと思われるそれぞれのPCパーツが紹介されています。おそらく2020年現在では書きに登場するパーツよりも新しい物で使われている可能性があるのですが、ここでは現在の価格でそれぞれのPCパーツがいくらかをamazonで調べてみて合計金額がどのくらいかかるかを見てみます。


# Price

| Parts         | Name                             | Price | Numbers | URL |
|:--------------|:---------------------------------|------:|------:|:------|
| GPU           | NVIDIA Titan X                   |¥189,390|  4| https://www.amazon.co.jp/dp/B00V7C9N26|
| Motherboard   |  GIGABYTE GA-X99-UD3P            |$299.99 |  1| https://www.amazon.co.jp/dp/B00VVR06ZK/ |
| CPU           | Intel Core i7-5820K              |¥34,800 |  1| https://www.amazon.co.jp/dp/B00MMLXIKY|
| Power Supply  | Rosewill Hercules 1600W          |$169.98 |  1| https://www.amazon.com/dp/B00PCLGZOC |
| Memory        | G.SKILL Ripjaws 4 Series 32GB    |¥182,009|  1| https://www.amazon.co.jp/dp/B00ZQ4BJ3C |
| SSD           | Mushkin Enhanced Reactor 2.5 1TB |¥32,522 |  1| https://www.amazon.co.jp/dp/B01NCPL29P |
| Case          | Rosewill Thor V2                 |¥32,234 |  1| https://www.amazon.co.jp/dp/B005XUAAP2/ |

### 

```Python
GPU = 189390
Mother = 299.99
CPU = 34800
Power = 169.98
Memory = 182009
SSD = 32522
Case = 32234

doller = 110

sum = GPU * 4 + Mother * doller + CPU + Power * doller + Memory + SSD + Case
print("{:,}円".format(int(sum)))

>>> 1,090,821円
```

約３年くらい前に発売されたパーツなので現在の価格はその当時よりもお手頃な値段にはなっていそうですが、合計金額を出してみると約100万円くらいになってしまいました。:sweat_smile:
DeepLearningでより多くの学習をさせるのに並列処理は必須で、GPUのメモリサイズが大きい分だけ処理速度がよくなります。
TitanX（メモリサイズ12G）は今でも約20万くらいして、しかも4枚を使っているので全体だとざっくり50Gくらいになります。で、PCパーツ全体価格の8割を占めているのでGPUが重要なのかがわかります。

で、データセット量あたりの学習時間なのですが、[how long time it takes to train YOLOV3 on coco dataset
](https://github.com/pjreddie/darknet/issues/742#issuecomment-456723045) に下記のコメントがありました。cocoはMicrosoftが提供しているデータセットで画像枚数が約10万、クラス数は80あります。

*on coco with a multi gpu 4xGTX1080 if you want to train like J. redmond, so 500 000 iterations, it takes 10 days. But after 1 days the result is not so bad and the 9 days after are just for few percents better.*

*4xGTX1080(メモリ32G)を使って学習すると50万回試行して10日かかります。1日目でそこまで悪くない結果であれば9日目まで学習させても少ししか改善しないです。*

とあるのでもしTitanX*4 を使ってcocoのデータセットを使うと約数日はかかるみたいです。

yolov3を発表するときは[VOC 2012 - VOC 2007](https://pjreddie.com/projects/pascal-voc-dataset-mirror/)のデータセットを使っているのですが合計で2万枚の画像を使っています。クラス数は20です。この場合では予想として2,３日を使って学習させていると思います。


# Future
物体を一度に検出したい個数と学習させたい画像の枚数によってGPUのパーツ選びは変わってくると思います。
ガッツリcocoかVOCで学習させたいのであればtitanXですが、最初からだとハードルが高いのでトライアルで2,3くらいの物体を学習させるくらいでいいかなと思っています。

ということでGPUは中古の GeForce GTX1060(6G 約2~3万)が良さげです。:thinking:

# Reference
- [yolo v3 Hardware Guide: Neural Networks on GPUs](https://pjreddie.com/darknet/hardware-guide/)