embeddedなブログ

組み込みシステムに関することや趣味に関することをダラダラと書いていきます(^^)

YOLOv8によるインスタンスセグメンテーションの実験(Visual Studio Code編)

2023-06-13 20:33:59 | Windows Embedded Standard

YOLOはとても注目されている物体検出と画像セグメンテーションのモデルで、You Only Look Once(一度見るだけでOK!)の略です。2015年にワシントン大学によって開発され、そのリアルタイム性と高精度さから注目されています。

こちらのページを参考にしてYOLO (YOLOv8) でインスタンスセグメンテーションを動かしてみましたので、その方法を共有させていただきます。

まず環境を構築します。ターミナルから以下のコマンドで実験用フォルダ「~/Documents/YOLO」、予測用の画像を格納するフォルダ「~/Documents/YOLO/targets」を作成します。以下フォルダはあくまで例で、お好きなフォルダ以下に構築していただいて構いません。

mkdir ~/Documents/YOLO
cd ~/Documents/YOLO
cd ~/Documents/YOLO/targets

ここから coco128-seg.yaml を取得して、「~/Documents/YOLO」フォルダに配置します。また、予測に使う画像、ここでは、ここからbus.jpgを取得して、予測用の画像を格納するフォルダ「~/Documents/YOLO/targets」に配置します。

ここでVisual Studio Codeを起動して、「~/Documents/YOLO」フォルダを開きます。

次に、以下を参考に実験用のPythonソースコードとして train.py、validate.py、predict.py の3つを作成します。

train.py

from ultralytics import YOLO

# モデルの読み込み
model = YOLO('yolov8n-seg.yaml')  # YAMLから新しいモデルの構築
model = YOLO('yolov8n-seg.pt')  # 学習済みモデルの読み込み
model = YOLO('yolov8n-seg.yaml').load('yolov8n.pt')  # YAMLからの構築と重みファイルの変換

# モデルの学習
model.train(data='coco128-seg.yaml', epochs=100, imgsz=640)

validate.py

from ultralytics import YOLO

# モデルの読み込み
model = YOLO('yolov8n-seg.pt')  # 本家のモデル読み込み
model = YOLO('runs/segment/train/weights/best.pt')  # 自分で学習したカスタムモデルの読み込み

# モデルの評価
metrics = model.val()  # 引数なし
metrics.box.map    # map50-95(B)
metrics.box.map50  # map50(B)
metrics.box.map75  # map75(B)
metrics.box.maps   # 各カテゴリのmap50-95(B)のリスト
metrics.seg.map    # map50-95(M)
metrics.seg.map50  # map50(M)
metrics.seg.map75  # map75(M)
metrics.seg.maps   # 各カテゴリのmap50-95(M)のリスト

predict.py

from ultralytics import YOLO
from PIL import Image
import matplotlib.pyplot as plt

# モデルの読み込み
model = YOLO('yolov8n-seg.pt')  # 本家のモデルの読み込み
model = YOLO('runs/segment/train/weights/best.pt')  # 自分で学習したカスタムモデルの読み込み

# 読み込んだモデルによる予測
model.predict('targets', save=True, show=True, imgsz=320, conf=0.5) # targetsフォルダ内の画像から予測実行

ここから実行準備に入ります。Visual Studio Codeで train.py を開いた状態で、Pythonという表記右側のPythonバージョン(下図の例だと「3.8.12 ('python38': conda)の部分」をクリックします。

利用するPythonを選択する画面が表示されるので、適切なバージョンを選択します。私の環境では「Python 3.9.7('base')」を選択しました。

Visual Studio Codeのメニューで[Terminal]-[New Terminal]を実行して、Visual Studio Codeのターミナルを開きます。そしてそのターミナルから下記コマンドで ultralytics をインストールします。

pip install ultralytics

以上で実行準備は完了で、いよいよ、ここからYOLOの実行です。

まずは学習です。Visual Studio Codeで train.py を開いた状態で、メニューから[Run]-[Start Debugging]を実行します。初回のみ下記のような画面が表示されるので、「Python File」を選択します。

しばらくすると、Visual Studio Codeのターミナル上で学習が始まります。私の環境(Apple M1 Max / 64GB RAM)で約1分強/エポックなので100エポックで2時間半程度でした。予測精度は落ちるかもしれませんが、動作確認するだけであれば、train.pyソースコードの「epochs=100」の部分でエポック数を10などに減らすと、実行時間を短く出来ます。

次に検証の実行です。Visual Studio Codeで validate.py を開いた状態で、メニューから[Run]-[Start Debugging]を実行します。この処理はそれほど時間はかかりません。

最後に予測の実行です。Visual Studio Codeで predict.py を開きます。そのまま実行すると結果表示を見逃すので、念のため、表示する行にブレークポイントを設定します。

この状態で、メニューから[Run]-[Start Debugging]を実行します。ブレークポイントで一時停止します。

F10キーでステップ実行すると、下図のように結果が一瞬表示されます。

上記の結果は、画像ファイルとしても保存されています。「~/Documents/YOLO/runs/segment/predict(predictの後ろに実行回数分の数字が付加されます)」の下に bus.jpg というファイルが生成されていると思います。このファイルが上記と同じ結果画像です。

以上で説明は終わりです。


最新の画像もっと見る