自作データセットを用いてYOLOv8で分類を行った2

https://qiita.com/wawana12/items/7e2c4cdcf2232ceb8876

前回の続きです。
自作データセットを用いてYOLOv8で分類を行いました。
今回はmnist2560データセットを用いて学習を行います。
[mnist](https://docs.ultralytics.com/datasets/classify/mnist/)は、手書き数字の画像データベースです。
YOLOの最新版であるYOLOv8には日本語のドキュメントもあります。

https://docs.ultralytics.com/ja/

https://github.com/ultralytics/ultralytics

ドキュメントと[Google Colaboratoryのノートブック](https://colab.research.google.com/github/ultralytics/ultralytics/blob/main/examples/tutorial.ipynb)を読みながらYOLOv8を実行してみました。

# YOLOv8
Google Colaboratoryにて実行しました。
ランタイム->ランタイムのタイプを変更->T4 GPUを選択
```Python
from google.colab import drive
drive.mount('/content/drive')
```
```Python
!mkdir "/content/drive/MyDrive/yolov8"
```
```Python
%pip install ultralytics
import ultralytics
ultralytics.checks()
```

# 学習
mnist2560データセットを用いて、ゼロから学習を行いました。
mnist2560データセットは2560枚の画像から成るデータセットです。

学習（結果はyolov8/runs/classifyに保存される）
```Python
%cd "/content/drive/MyDrive/yolov8"
!yolo train data=mnist2560 model=yolov8n-cls.yaml epochs=100 imgsz=64
```

mnistは以下のサイトから入手することもできます。

https://github.com/ultralytics/yolov5/releases

mnistの画像の大きさは28 × 28 pxです。

# 分類
学習結果を用いて、分類を行います。
分類に用いる自作データセット（手書き数字の画像）を、yolov8/testディレクトリに移動しました。
自作データセットは、28 × 28 pxと140 × 140 pxの2種類作成しました。

## 28 × 28 pxの画像
分類（結果はyolov8/runs/classifyに保存される）
```Python
%cd "/content/drive/MyDrive/yolov8"
!yolo predict model="/content/drive/MyDrive/yolov8/runs/classify/train/weights/best.pt" source="/content/drive/MyDrive/yolov8/test"
```

![IMG_0017.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3569835/42558733-15b4-4bf2-7353-1a81a8fb953a.png)![IMG_0018.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3569835/c2e20d4f-a7fc-1a6a-73bb-06d2ef5a6b86.png)![IMG_0019.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3569835/31ce6a68-ca75-562e-d512-369c09df6260.png)![IMG_0020.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3569835/fdb68864-07ad-d147-c38a-66bab6fa57a5.png)![IMG_0021.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3569835/d2a1c7f9-a1b8-e641-9126-3b5de2437056.png)![IMG_0022.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3569835/59fedd56-a6c3-c7a4-e6ad-f555200b6541.png)![IMG_0023.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3569835/ce43c11a-53ab-9b91-0025-783861d1c3df.png)![IMG_0024.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3569835/9e635ce0-3f66-83dd-d019-2c1ab0008e9a.png)![IMG_0025.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3569835/f85f7e47-e502-b660-c584-14f7751db656.png)![IMG_0026.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3569835/c52b1658-20ca-023e-cbba-a28dcefa49c3.png)

これらの画像が出力されました。
画像が小さく、結果が画像に入りきっていません。
結果を以下に示します。
```
0    0 0.80, 7 0.13, 5 0.02, 2 0.01, 8 0.01
1    1 0.98, 9 0.01, 7 0.01, 8 0.00, 6 0.00
2    0 0.53, 2 0.22, 3 0.14, 6 0.07, 8 0.01
3    3 0.93, 8 0.05, 5 0.03, 2 0.00, 7 0.00
4    4 0.48, 9 0.46, 8 0.03, 7 0.01, 2 0.01
5    5 0.93, 8 0.04, 7 0.01, 3 0.01, 9 0.01
6    6 0.87, 8 0.07, 3 0.03, 2 0.01, 5 0.01
7    7 1.00, 9 0.00, 5 0.00, 4 0.00, 8 0.00
8    8 0.85, 3 0.13, 5 0.01, 9 0.00, 7 0.00
9    9 0.87, 7 0.08, 8 0.04, 4 0.01, 1 0.00
```

全ての数字で正しく分類できており、スコアが1でした。

## 140 × 140 pxの画像
分類（結果はyolov8/runs/classifyに保存される）
```Python
%cd "/content/drive/MyDrive/yolov8"
!yolo predict model="/content/drive/MyDrive/yolov8/runs/classify/train/weights/best.pt" source="/content/drive/MyDrive/yolov8/test"
```

![IMG_0028.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3569835/d9df721a-dc44-c7ca-ba33-2236d78155d1.png)![IMG_0029.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3569835/5783b443-d0c3-1fd6-b63b-22dc061c2222.png)![IMG_0030.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3569835/152a98ca-5e1c-ce16-6436-459adda8dd9a.png)![IMG_0031.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3569835/162d0c8a-90b5-eae8-a575-8d95a825227a.png)![IMG_0032.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3569835/ee8e7f6e-146f-d84c-c9af-eff8ced4ed0b.png)
![IMG_0033.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3569835/38fe220a-de91-d6ab-d92a-6ee28af87d5c.png)![IMG_0034.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3569835/7b47e1e0-c1d7-72e6-dd56-478889153399.png)![IMG_0035.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3569835/15b5ef39-e8a8-071d-d1b6-f86aec6a6408.png)![IMG_0036.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3569835/00a4db27-ce50-c6e3-e19f-2dfc13b1619a.png)![IMG_0037.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3569835/1bb32869-fd97-e377-d5f5-b88f41b9e9ef.png)

これらの画像が出力されました。
結果を以下に示します。
```
0    0 1.00, 6 0.00, 9 0.00, 5 0.00, 2 0.00
1    1 1.00, 4 0.00, 8 0.00, 6 0.00, 7 0.00
2    2 1.00, 5 0.00, 3 0.00, 7 0.00, 9 0.00
3    3 1.00, 5 0.00, 9 0.00, 7 0.00, 6 0.00
4    4 1.00, 6 0.00, 7 0.00, 2 0.00, 0 0.00
5    5 1.00, 3 0.00, 9 0.00, 6 0.00, 2 0.00
6    6 1.00, 2 0.00, 5 0.00, 3 0.00, 0 0.00
7    7 1.00, 8 0.00, 1 0.00, 9 0.00, 4 0.00
8    8 1.00, 9 0.00, 6 0.00, 3 0.00, 2 0.00
9    9 1.00, 6 0.00, 0 0.00, 4 0.00, 5 0.00
```

全ての数字で正しく分類できており、スコアが1でした。
28 × 28 pxの画像でも、140 × 140 pxの画像でも、正しく分類することができました。
学習に用いるデータセットをmnist160からmnist2560に変えたことで、モデルの精度が上がりました。

YOLOv8で物体検出を行ってみた記事、YOLOv8でセグメンテーションを行ってみた記事も、よければご覧ください。

https://qiita.com/wawana12/items/fde830c0b04567c4d68a

https://qiita.com/wawana12/items/b8bae36500ad188ae41b