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 というファイルが生成されていると思います。このファイルが上記と同じ結果画像です。
以上で説明は終わりです。