前回の続きです。
自作データセットを用いてYOLOv8で分類を行いました。
今回はmnist2560データセットを用いて学習を行います。
mnistは、手書き数字の画像データベースです。
YOLOの最新版であるYOLOv8には日本語のドキュメントもあります。
ドキュメントとGoogle Colaboratoryのノートブックを読みながらYOLOv8を実行してみました。
YOLOv8
Google Colaboratoryにて実行しました。
ランタイム->ランタイムのタイプを変更->T4 GPUを選択
from google.colab import drive
drive.mount('/content/drive')
!mkdir "/content/drive/MyDrive/yolov8"
%pip install ultralytics
import ultralytics
ultralytics.checks()
学習
mnist2560データセットを用いて、ゼロから学習を行いました。
mnist2560データセットは2560枚の画像から成るデータセットです。
学習(結果はyolov8/runs/classifyに保存される)
%cd "/content/drive/MyDrive/yolov8"
!yolo train data=mnist2560 model=yolov8n-cls.yaml epochs=100 imgsz=64
mnistは以下のサイトから入手することもできます。
mnistの画像の大きさは28 × 28 pxです。
分類
学習結果を用いて、分類を行います。
分類に用いる自作データセット(手書き数字の画像)を、yolov8/testディレクトリに移動しました。
自作データセットは、28 × 28 pxと140 × 140 pxの2種類作成しました。
28 × 28 pxの画像
分類(結果はyolov8/runs/classifyに保存される)
%cd "/content/drive/MyDrive/yolov8"
!yolo predict model="/content/drive/MyDrive/yolov8/runs/classify/train/weights/best.pt" source="/content/drive/MyDrive/yolov8/test"
これらの画像が出力されました。
画像が小さく、結果が画像に入りきっていません。
結果を以下に示します。
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に保存される)
%cd "/content/drive/MyDrive/yolov8"
!yolo predict model="/content/drive/MyDrive/yolov8/runs/classify/train/weights/best.pt" source="/content/drive/MyDrive/yolov8/test"
これらの画像が出力されました。
結果を以下に示します。
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でセグメンテーションを行ってみた記事も、よければご覧ください。