物体検出でお馴染みのYOLOシリーズの最新版「YOLOv8」について、動かしながら試していきます。
YOLOv8は2023年1月に公開された最新バージョンであり、速度と精度の面で限界を押し広げています。
Google colabを使用して簡単に最新の物体検出モデルを実装することができますので、ぜひ最後までご覧ください。
今回の内容
・「Mask Wearing Dataset」データセット
・学習の準備
・学習
・推論
YOLOv8とは
YOLOv8は2023年1月に公開された最新バージョンであり、既存のオブジェクト検出器を上回り、速度と精度の面で限界を押し広げています。
物体検出だけでなく、セグメンテーションタスクや画像分類タスクでも利用することができます。
YOLOv8のベンチマーク結果は以下となっています。
物体検出モデル
セグメンテーションモデル
なお、YOLOv8のライセンスは「GNU General Public License v3.0」となっています。
YOLOv8の導入
早速YOLOv8を使って動かしていきましょう。
ここからはGoogle colabを使用して実装していきます。
まずはGPUを使用できるように設定をします。
「ランタイムのタイプを変更」→「ハードウェアアクセラレータ」をGPUに変更
GPUの設定が終わったら、Googleドライブをマウントします。
from google.colab import drive
drive.mount('/content/drive')
%cd ./drive/MyDrive
公式よりcloneしてきます。
!git clone https://github.com/ultralytics/ultralytics
%cd ultralytics
次に必要なライブラリをインポートします。
ここではpipでインストールすることにします。
!pip install -r requirements.txt
以上で準備完了です。
YOLOv8を使えるようになりました。
「Mask Wearing Dataset」データセット
ダウンロード
今回はオープンデータセットを提供しているMask Wearing Datasetからデータを使用します。
登録は必要ですが、料金はかかりませんのでご安心ください。
以下の手順に従ってダウンロードしてください。
「416×416-black-padding」を選択
「YOLOv8」を選択
「download zip to computer」を選択して「continue」を実行
ダウンロードしたフォルダの構成は以下のようになっています。
┠ data.yaml
┠ train
┠ valid
┠ test
格納
上のデータをGoogleドライブ上に以下のように格納します。
ultralytics
┗ ultralytics
┗ yolo
┗ data
┗ datasets
┠ data.yaml ←ここに格納
┗ mask ←フォルダ作成
┠ train ←ここに格納
┠ valid ←ここに格納
┠ test ←ここに格納
学習の準備
学習するにあたり必要な情報を記述したyamlファイルを作成します。
上で配置した「data.yaml」を以下のように書き換えます。
train: ./ultralytics/yolo/data/datasets/mask/train/images
val: ./ultralytics/yolo/data/datasets/mask/valid/images
test: ./ultralytics/yolo/data/datasets/mask/test/images
nc: 2
names: ['mask', 'no-mask']
train,val,test | データのディレクトリを記述 |
nc | ラベルの数を記述 |
names | ラベルをリスト形式で記述 |
学習
早速、学習を実行しましょう。
Google colabで学習する場合には「yolov8m.pt」とすれば問題なく学習ができます。
(これより大きいモデルを使用する場合、メモリが足りない場合があります。)
先ほど配置した「data.yaml」のパスと学習回数を指定します。
from ultralytics import YOLO
model = YOLO("yolov8m.pt")
results = model.train(data="./ultralytics/yolo/data/datasets/data.yaml", epochs=300)
学習が終わると「run/detect/train」に結果が保存されます。
推論
学習した結果を用いて推論を行ってみます。
こちらの画像を使用します。
from ultralytics import YOLO
model = YOLO('runs/detect/train/weights/best.pt')
results = model.predict(source="test.jpg", save=True)
正しく判定できていることがわかりました。
まとめ
最後までご覧いただきありがとうございました。
2023年1月に公開された物体検出でお馴染みのYOLOシリーズの最新バージョンである「YOLOv8」について、動かしながら試してみました。
精度・推論速度ともに向上しており、非常に使いやすいものになっています。
物体検出の活用の幅がさらに広がりそうですね。