【Python3】Mac M1でYolov8の環境を構築する方法

おはこんばんにちは、せなです。
今回はMacでYolov8の環境を構築する方法について説明したいと思います。

はじめに

Yolov8はYolov5の後継としてUltralytics社より公開されたYoloの最新物体検出モデルです。(2023年6月現在)

以下はYolov8のgithubリポジトリにて公開されている、パラメータ数と精度の比較グラフとなります。
Yolov5と比較するとパラメータ数を削減しつつ、精度が向上されていることを確認できるかと思います。

引用: https://github.com/ultralytics/ultralytics

モデルの精度については以下の表が確認しやすいですね。

Yolov8 モデル精度 表
引用: https://github.com/ultralytics/ultralytics#models

Yolov8の環境構築

まずは、以下のコマンドでPythonのバージョンが3.8以上であることを確認してください。

python -V

Yolov8ではPythonのバージョンは3.7以上であることが条件となっています。
ですが、動作させるために必須のPytorchでは3.8以上が求められているので、3.8以上とする必要があります。

※私はPython3.8の最新である3.8.16で環境を構築しています。

次に、以下のコマンドでライブラリをインストールします。

pip install ultralytics

インストールが完了したら、念のためpythonでCLIを起動してインポートが行えるか確認しましょう。

from ultralytics import YOLO

ModuleNotFoundErrorが発生しなければ問題ありません。

Yolov8で推論を行って検知イメージを表示する

実際に推論を行ってイメージの表示まで行ってみましょう。

以下にサンプルコードを記載しますので、コピーして実行してみてください。
(画像の書き出しにopencvが必要なため、pip install opencv-pythonでインストールを行なってください。)

from ultralytics import YOLO
import cv2
import requests


def yolov8_predict(results):
    result = results[0].numpy()

    classes = result.boxes.cls
    confidence = result.boxes.conf
    bbox = result.boxes.xyxy

    for cls, conf, xyxy in zip(classes, confidence, bbox):
        xmin, ymin, xmax, ymax = xyxy

        url = "https://ultralytics.com/images/bus.jpg"
        response = requests.get(url)
        with open("bus.jpg", "wb") as f:
            f.write(response.content)

        img = cv2.imread("bus.jpg")
        cv2.rectangle(img,
                      pt1=(int(xmin), int(ymin)),
                      pt2=(int(xmax), int(ymax)),
                      color=(0, 0, 255),
                      thickness=3)
        cv2.imwrite("bus_result.jpg", img)


if __name__ == "__main__":
    model = YOLO('yolov8l.pt')
    results = model('https://ultralytics.com/images/bus.jpg', save=False)
    yolov8_predict(results)

処理内容の説明については後日、別記事にまとめようかと思いますので割愛します。
実行すると以下のように検知した対象にバウンディングボックスを表示して出力することができますね。

Yolov8 検知結果 バウンディングボックス

最後に

以上で、Yolov8の環境構築&推論の実行例となります。
意外と簡単にできてしまいますね。

次回もYolov8関係の記事を書けたらなと思います。

ではでは〜