real-time-Personal-estimation（ローカル上でのGPUを使った学習）

## 初めに
前回新たなモデルを作るという題名で記事を書いて検証しましたが,なんと乃木坂のまっつんを与田ちゃんに間違えるという悲惨な結果になってしまいました.
したがってモデルがうまくいっていないということが分かったわけですが,ここであきらめるわけにはいかない.モデルを作り直すことを決意して今回の記事を書いていこうと思います.
GPUを使った学習環境を整えるの大変だったよ.
## 環境について
OS:windows10
GPU:GTX960
Yolov5
## 環境構築について
まず,GPUを動かしながらYoloを動かすために環境を作り直すところから始めました.
(1)cudaの導入
(2)で述べるPyTorchを導入する前にcudaを導入する必要があります.cudaの導入については
いろんなサイトがあるんですけどそんなに難しくないのでできると思います.
自分はcuda10.1を多分導入しました.
URLは以下に示します.
https://developer.nvidia.com/cuda-10.1-download-archive-base?target_os=Windows&target_arch=x86_64&target_version=10&target_type=exelocal
(2)PyTorchの導入
cuda10.1用のPyTorchを導入します.

```
pip install torch==1.6.0+cu101 torchvision==0.7.0+cu101 -f https://download.pytorch.org/whl/torch_stable.html
```
(3)Yolov5の導入
前記事に書いてあるのでそちらをご確認ください.
https://qiita.com/asmg07/items/e3be94a3e0f0195c383b
(4)テスト学習
今この記事を書きながらepochs 50回回しているところですがCPU使用をしないのですごくいい感じに記事がかけています.
ここの部分はとりあえず使ったコマンドだけを示しておいて
学習が終わったら検証をします.


```
 python train.py --img 640  --epochs 50 --data data.yaml --cfg ./models/yolov5m.yaml --batch-size 2
```
記事を書いている間に学習が終わりました.
(5)検証
![results.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/567360/fcf6f090-2fc8-b084-cd1c-3959291f82ff.png)
これが結果の画像です.まぁまだよくわかんないです.
意外と早く終わったのでepochs 100回もやってみたいと思います.
100回の結果
![results.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/567360/4c7cb044-e1ac-4e68-cbb2-4b538b11938e.png)

(6)学習のコマンドの説明
まだ自分もよくわかっていませんが説明します.
--epochs 50➡回数
--batch-size 2
ここが重要です.--batch-size 2がなんでこうしているかというと
GTX960を使っていてメモリが2GBです.
これよりも大きい数字を使うとメモリがこれよりも大きくなってしまってエラーを吐いてしまいます.


なのでこれでやっています.なんかメモリには専用メモリと共有メモリっていうのがあって専用メモリのみしか使えないのかな.
共有メモリも使う方法があれば教えてほしいです.


## 最後に
とりあえず環境を変えたので新しい記事をまた書きました.
発展があればまた書いていきますのでお願いします.
PS.
コメントが欲しいなぁ.


・共有メモリと専用メモリのこととか.


・2カテゴリでやったときに全く学習させてない第三の画像を当てたときに2カテゴリ内で推論してしまうのを避ける方法とか.
っていうか学習させてない画像がある顔個人とかはそもそも難しいのかな
昔似たようなことをやったときは全く関係のない第三のいろんな顔データを入れて3カテゴリで学習させたけどそれはやりたくないんだよなぁ
この辺を教えてもらえると嬉しいです.
## 追記
⓵共有メモリは使えないらしい.
⓶epochs 1000で学習させました.

```
python train.py   --epochs 1000 --data data.yaml --cfg ./models/yolov5s.yaml --batch-size 1
```

2カテゴリで画像データは80枚くらい
学習後の出力されたデータ
![results.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/567360/a831de72-f383-b510-904c-8616ef72f103.png)
これ自体は結構いい感じなんかなぁとか思いました.
・実際に100枚くらいのデータでテストした結果
カテゴリー外（カテゴリに含まれない）
![000027.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/567360/501e57da-cced-429e-46f7-6721fd60ff54.jpeg)
![000035.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/567360/97b57942-9e30-6e8e-6fee-8e4cec636678.jpeg)
![000047.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/567360/b8a85c5d-c039-5fa8-3d54-6cd22f085525.jpeg)
カテゴリー内
![000011.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/567360/3f6ac698-f0be-04fe-3479-bb07e1409ce8.jpeg)
![000068.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/567360/52e25a10-fc74-cdd9-751b-389c2b71aa3b.jpeg)
カテゴリーに含まれている乃木坂ちゃんの推定はうまくいっているけど,カテゴリ外（カテゴリに含まれない）乃木坂ちゃん
の推定はうまくいっていない.
問題点
・カテゴリ外（カテゴリに含まれない）画像を認識してしまう問題をどうするか.
そもそも論ですが,やっぱり学習データが少なすぎるのも問題の一つかもしれない.
※何か解決方法があれば教えてください.

## 環境と整える間に発生した問題（githubで質問したもの）
https://github.com/ultralytics/yolov5/issues/1094
https://github.com/ultralytics/yolov5/issues/1093