1
1

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

Last updated at Posted at 2023-12-10

自作データセットを用いてYOLOv8で分類を行いました。
今回は、mnist160データセットを用いて学習を行い、自作データセットを用いて分類を行いました。
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()

学習

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

学習(結果はyolov8/runs/classifyに保存される)

%cd "/content/drive/MyDrive/yolov8"
!yolo train data=mnist160 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"

IMG_0017.PNGIMG_0018.PNGIMG_0019.PNGIMG_0020.PNGIMG_0021.PNGIMG_0022.PNGIMG_0023.PNGIMG_0024.PNGIMG_0025.PNGIMG_0026.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

0、1、3、5、6、7、8、9は正しく分類できており、スコアが0.5以上です。
4は正しく分類できていますが、スコアが0.5未満です。
2は0に分類されてしまいました。

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"

IMG_0028.PNGIMG_0029.PNGIMG_0030.PNGIMG_0031.PNGIMG_0032.PNG
IMG_0033.PNGIMG_0034.PNGIMG_0035.PNGIMG_0036.PNGIMG_0037.PNG

これらの画像が出力されました。
結果を以下に示します。

0    0 0.56, 3 0.26, 5 0.07, 2 0.04, 8 0.03
1    1 0.80, 8 0.05, 6 0.05, 9 0.05, 7 0.02
2    3 0.54, 2 0.34, 0 0.05, 6 0.03, 5 0.03
3    3 0.77, 8 0.18, 5 0.04, 2 0.00, 7 0.00
4    4 0.76, 2 0.08, 9 0.06, 6 0.06, 8 0.03
5    8 0.70, 5 0.22, 3 0.07, 9 0.01, 7 0.00
6    6 0.44, 3 0.41, 8 0.07, 2 0.03, 5 0.02
7    7 0.61, 9 0.33, 8 0.05, 5 0.00, 4 0.00
8    8 0.54, 3 0.36, 5 0.09, 7 0.00, 9 0.00
9    8 0.68, 9 0.27, 7 0.02, 3 0.02, 5 0.02

0、1、3、4、7、8は正しく分類できており、スコアが0.5以上です。
6は正しく分類できていますが、スコアが0.5未満です。
2は3に、5は8に、9は8に分類されてしまいました。
140 × 140 pxでは、28 × 28 pxのときと異なる結果になりました。
きれいに書いたつもりだったのですが、癖があったのかもしれません。
また、mnist160データセットのデータ数が少なかった可能性があるため、次回はmnist2560データセットを用いて学習を行います。

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

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1