yolov8にて物体検出のオリジナルモデルを学習及び推論する(Windows11)
Yolo8を使ってみた
とうとうYoloを使ってみたくなったので、メモとして記録します。
仮想環境を作る
.\Scripts\activate で仮想環境を有効化する
cd H:\Family_data\Michi\python\
py -3.11 -m venv yolo311
cd yolo311
.\Scripts\activate
Pythonの仮想環境にultralyticsをインストールする
pip install ultralytics
labelImg(画像データに対して物体の位置や種類をラベル付けするためのオープンソースのツール)をインストールする
pip install labelImg
labelImgが不安定なので以下を修正する
星杜なぎささんページを参考に修正する
H:\Family_data\Michi\python\yolo311\Lib\site-packages\labelImg\labelimg.py
を修正する。971行目、1025行目、1026行目
H:\Family_data\Michi\python\yolo311\Lib\site-packages\libs\canvas.py
を修正する。526行目、530行目、531行目
projectフォルダを作る
yolo311以下にprojectフォルダを作る → H:\Family_data\Michi\python\yolo311\project
projectフォルダ下でlabelImgを起動してラベリングする
labelImg
Yoloにしておく
あらかじめ用意した画像フォルダを選択する
画像を矩形選択してラベリングする
ラベリングしてOKを押したらNext Imageを押す
pngファイルのところに矩形情報のtxtファイルが保存される(はず)
ディレクトリ構造の準備
以下のフォルダを作る
画像ファイルはimagesに入れる(学習用と検証用に分ける)
ラベルファイル(.txt)はlabelsに入れる(学習用と検証用に分ける)
project/
├── images/
│ ├── train/ # 学習用画像
│ ├── val/ # 検証用画像
├── labels/
│ ├── train/ # 学習用ラベル(アノテーションファイル)
│ ├── val/ # 検証用ラベル
├── data.yaml # データセットの設定ファイル
データセット設定ファイル (data.yaml) の作成
こんな感じで。(例:ドラえもん画像を学習)
train: H:/Family_data/Michi/python/yolo311/project/images/train
val: H:/Family_data/Michi/python/yolo311/project/images/val
nc: 1 # クラス数(アノテーションで使用するカテゴリ数)
names: ['dora'] # クラス名(アノテーションのラベルと対応)
トレーニングする
(yolo311) PS H:\Family_data\Michi\python\yolo311\project> yolo task=detect mode=train model=yolov8n.pt data=data.yaml epochs=50 imgsz=640
こんな感じになる
Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size
49/50 0G 0.2899 1.494 1.031 4 640: 100%|██████████| 1/1 [00:00<00:00, 1.87it/s]
Class Images Instances Box(P R mAP50 mAP50-95): 100%|██████████| 1/1 [00:00<00:00, 6.45it/s]
all 3 3 0.00333 1 0.49 0.339
Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size
50/50 0G 0.3407 1.585 0.9935 4 640: 100%|██████████| 1/1 [00:00<00:00, 1.98it/s]
Class Images Instances Box(P R mAP50 mAP50-95): 100%|██████████| 1/1 [00:00<00:00, 6.56it/s]
all 3 3 0.00333 1 0.49 0.339
50 epochs completed in 0.016 hours.
Optimizer stripped from runs\detect\train5\weights\last.pt, 6.2MB
Optimizer stripped from runs\detect\train5\weights\best.pt, 6.2MB
Validating runs\detect\train5\weights\best.pt...
Ultralytics 8.3.36 🚀 Python-3.11.3 torch-2.5.1+cpu CPU (12th Gen Intel Core(TM) i5-12400)
Model summary (fused): 168 layers, 3,005,843 parameters, 0 gradients, 8.1 GFLOPs
Class Images Instances Box(P R mAP50 mAP50-95): 100%|██████████| 1/1 [00:00<00:00, 7.13it/s]
all 3 3 0.00333 1 0.755 0.638
Speed: 0.7ms preprocess, 37.9ms inference, 0.0ms loss, 4.2ms postprocess per image
Results saved to runs\detect\train5
💡 Learn more at https://docs.ultralytics.com/modes/train
モデルの評価をする
(yolo311) PS H:\Family_data\Michi\python\yolo311\project> yolo task=detect mode=val model=runs/detect/train4/weights/best.pt data=data.yaml
Ultralytics 8.3.36 🚀 Python-3.11.3 torch-2.5.1+cpu CPU (12th Gen Intel Core(TM) i5-12400)
Model summary (fused): 168 layers, 3,005,843 parameters, 0 gradients, 8.1 GFLOPs
val: Scanning H:\Family_data\Michi\python\yolo311\project\labels\val.cache... 3 images, 0 backgrounds, 0 corrupt: 100%|██████████| 3/3 [00:00<?, ?it/s]
Class Images Instances Box(P R mAP50 mAP50-95): 100%|██████████| 1/1 [00:00<00:00, 6.37it/s]
all 3 3 0.00333 1 0.755 0.638
Speed: 1.4ms preprocess, 41.9ms inference, 0.0ms loss, 4.2ms postprocess per image
Results saved to runs\detect\val2
Class: クラス(今回は all となっており、1つのクラス dora に対する評価が行われています)。
Images: 検証に使用した画像の数(今回は3枚)。
Instances: 画像内で検出されたオブジェクトのインスタンス数(今回は3)。
Box(P): バウンディングボックスの精度(Precision)を示しています。数値は 0.00333 となっていますが、これはかなり低い精度であることを示しています。
R (Recall): 検出率(Recall)は 1.0 で、すべてのオブジェクトを検出できていることを示します。
mAP50: 50% IoU(Intersection over Union)での平均精度(mAP)。0.755 という値は良好な結果です。
mAP50-95: IoU 50%から95%の範囲での平均精度(mAP)。0.638 という結果も良い評価ですが、改善の余地があります。
推論を実行する
画像(ドラえもんの他の画像:suiron2.png)を用意し、推論させる
結果を見ると、バウンディングボックスの精度が低いせいか、ドラえもんを検出できず。。
(yolo311) PS H:\Family_data\Michi\python\yolo311\project> yolo task=detect mode=predict model=runs/detect/train4/weights/best.pt source=H:\Family_data\Michi\python\yolo311\project\suiron\suiron2.png
Ultralytics 8.3.36 🚀 Python-3.11.3 torch-2.5.1+cpu CPU (12th Gen Intel Core(TM) i5-12400)
Model summary (fused): 168 layers, 3,005,843 parameters, 0 gradients, 8.1 GFLOPs
image 1/1 H:\Family_data\Michi\python\yolo311\project\suiron\suiron2.png: 640x544 (no detections), 48.1ms
Speed: 2.0ms preprocess, 48.1ms inference, 1.0ms postprocess per image at shape (1, 3, 640, 544)
Results saved to runs\detect\predict3
おわりに
ひとまず一連のフローを書き留めておきました。これでYoloを使いこなせることができるでしょう。
備考:リアルタイムで物体検出する
実行すると以下のようになる。ブラウザでhttp://localhost:8501にアクセスする。
(yolo311) PS H:\Family_data\Michi\python\yolo311> yolo streamlit-predict
💡 Loading Ultralytics Live Inference app...
Collecting usage statistics. To deactivate, set browser.gatherUsageStats to false.
You can now view your Streamlit app in your browser.
Local URL: http://localhost:8501
以下の画面が出るので左部のVideoをVideoにし、Classesを選択しStartを押せばリアルタイムで物体検出を開始する