YOLOv8を自分のコードで使ってみたい
タイトルの通り数あるYOLOモデルの最新バージョンであるv8をちゃちゃっと使ってみたかったのですが、記事を書いてる皆さんのレベルが高すぎて自分が理解できなかったり、わかりやすそうな記事が有料だったり、そもそも新しすぎて情報が出きってなかったりしてました。頑張って解読してちゃちゃっと物体検出ができるチュートリアルを書いてみます。
YOLOv8についての説明はもういいですよね?2023年6月時点のつよつよはやはやお手軽物体検出ライブラリ
です。ちゃちゃっと行きます。
前提
まずは学習モデルをダウンロードする。
公式が出してる学習モデルのファイル名はyolov8*.pt
です。yolov8の後に続く接尾辞で検出精度や得意不得意が変わります。
リンクが切れてなければ公式gitHub下のちゃちゃっと動かせるモデルの直リン↓
https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8n.pt
または公式ドキュメントからを開いてお好きなモデルをダウンロード
ultralytics YOLOv8 Docs
実行準備
新しいフォルダにダウンロードしたモデルファイル(YOLOv8*.pt)と物体検出させたい画像ファイルをぶち込み、yolo-test.py
を作成。インプットする画像の用意が無ければ下記の画像をbus.jpg
で保存してください。
インストール
YOLOとopenCVをインストールします。openCVは無くても検出だけなら出来ますが入力する画像をごにょごにょしてYOLOで検出したり、検出された画像をopenCVでごにょごにょしたりすると思うのでopenCVを使うことを想定して書きます。(PILでも可能です。)
pip install ultralytics
pip install opencv-python
実行
このままyolo-test.py
に下記のコードを記述します。
from ultralytics import YOLO
import cv2
# モデル読み込み
model = YOLO("yolov8n.pt")
# 入力画像
results = model('bus.jpg',save=True)
modelのyolov8n.pt
とbus.jpg
はご自身の環境に合わせて変更してください。
実行するとrun\detect\predict
というフォルダが生成され、入力されたファイル名と同じファイル名でラベルが上書きされた画像が出力されます。
model('bus.jpg',save=True)
の第2引数以降は下記の通りに指定することができます。
引数 | デフォルト | 内容 |
---|---|---|
save | False | 推論画像を保存 |
show | False | 推論画像を表示 |
save_txt | False | 結果をテキストファイルに保存 |
save_conf | False | スコアをテキストファイルに保存 |
save_crop | False | 検出された画像をクロップ |
hide_labels | False | ラベルを非表示にする |
hide_conf | False | スコアを非表示にする |
vid_stride | False | 動画のフレームレートのストライド |
line_thickness | 3 | バウンディングボックスの太さ |
visualize | False | モデルの特徴を視覚化 |
augment | False | 拡張推論 |
agnostic_nms | False | クラスに依存しないNMS |
retina_masks | False | 高解像度マスク(セグメンテーション時) |
出力
次は試しに今作っているサービスの画像を使って且つsave_text=true
とsave_conf=True
を追加してみます。クマ自体はstable diffutionに付け加えてもらいました。
from ultralytics import YOLO
import cv2
# モデル読み込み
model = YOLO("yolov8n.pt")
# 入力画像
results = model('bear.png', save=True, save_txt=True, save_conf=True)
2回目以降の実行はruns\detect\predict2
というようにpredictの後に数字がされる形で出力フォルダが増えていきます。
今回はこれに加えてlabelsというフォルダも生成されました。
中を見るとスペース区切りで数字が羅列されているテキストファイルが入っています。
読み方は以下の通りです。
読み方
1番目がクラスID(検出された物体)
2番目が検出された物体を囲む矩形の左上のx座標
3番目が 〃 左上のy座標
4番目が 〃 右下のx座標
5番目が 〃 右下のy座標
最後が検出の精度です。
クラスIDは使用するモデルにより異なると思いますが、yolov8nの場合下記の様に特定の物体に紐づいています。今回の画像ではクラスIDが21
となっているので下記のリストと照らし合わせて熊
が93%
の精度で検出されたと分かりますね。
クラスID | クラス名 | 日本語名 |
---|---|---|
0 | person | 人 |
1 | bicycle | 自転車 |
2 | car | 車 |
3 | motorcycle | バイク |
4 | airplane | 飛行機 |
5 | bus | バス |
⋮ | ⋮ | ⋮ |
21 | baer | 熊 |
⋮ | ⋮ | ⋮ |
79 | toothbrush | 歯ブラシ |
他のIDも知りたい場合は下記の記事を参照してください。
動画
パスを.mp4などの動画を指定すれば簡単に検出してくれます。
YOLOv8すごーい
— Tsubasa (@napspans) June 21, 2023
悩んだけど、実行簡単 pic.twitter.com/dtXByakHmK
まとめ
ここまで実行できればYOLOv8の入門は出来たのではないでしょうか。
他のモデルを使ったり、学習させてみるのもできれば面白そうですね。
お疲れ様でした。ではまた。
参考文献