Jetson Orin NanoでYOLOv8をリアルタイム物体検出する方法

Jetson Orin NanoでYOLOv8をリアルタイム物体検出する方法

Jetson Orin NanoにYOLOv8を導入してリアルタイム物体検出を動かしたい人向けに、環境構築から動作確認まで実機で検証した手順をまとめました。

この記事でわかること

  • Jetson Orin NanoにYOLOv8を動かすための環境構築手順
  • カメラ映像を使ったリアルタイム推論の実行方法
  • TensorRTを使った高速化の基本的な流れ
  • つまずきやすいポイントとその対処法
  • 動作環境と用意するもの

    この記事では以下の環境で動作確認しています。

  • Jetson Orin Nano 8GB Super Developer Kit
  • JetPack 6.1
  • Python 3.10
  • Ultralytics YOLOv8.3.x
  • ストレージはmicroSDカードでも動かせますが、モデルの読み込み速度や作業の快適さを考えると、NVMe SSD Western Digital SN770 500GB NVMe(Amazon) への換装を強くおすすめします。microSDカード Samsung microSDXC 128GB (Endurance)(Amazon) でもとりあえず動作確認はできます。

    カメラはUSB接続のウェブカメラで十分ですが、より高品質な映像で試したい場合は対応カメラモジュール Raspberry Pi Camera Module V2(Amazon) を検討してみてください。

    YOLOv8の環境構築

    Pythonの仮想環境を作る

    Jetson環境はシステムのPythonに余計なパッケージを入れると壊れやすいため、まず仮想環境を作ります。

    
    sudo apt update
    sudo apt install python3-pip python3-venv -y
    python3 -m venv ~/yolov8_env
    source ~/yolov8_env/bin/activate
    

    依存パッケージのインストール

    PyTorchはJetPack 6.1にプリインストールされていますが、最新版を使う場合はNVIDIA公式のJetson向けホイールを確認してください。

    
    pip install --upgrade pip
    pip install numpy
    

    JetPack 6.1ではtorchvisionもソースからビルドします。少し時間がかかりますが、焦らず待ちましょう。

    
    sudo apt install libjpeg-dev zlib1g-dev libpython3-dev libopenblas-dev libavcodec-dev libavformat-dev libswscale-dev -y
    git clone --branch v0.18.1 https://github.com/pytorch/vision torchvision
    cd torchvision
    python setup.py install
    cd ..
    

    Ultralyticsのインストール

    
    pip install ultralytics
    

    インストール後に動作確認します。

    
    yolo version
    

    エラーが出なければ準備完了です。

    画像ファイルで物体検出を試す

    まずはカメラなしで静止画に対して推論を実行して、正しく動くか確認します。

    
    from ultralytics import YOLO
    
    model = YOLO("yolov8n.pt")  # 初回はモデルが自動ダウンロードされる
    results = model("https://ultralytics.com/images/bus.jpg")
    results[0].show()
    

    このコード中の yolov8n.pt はもっとも軽量なモデルです。検出精度より速度を優先するJetson環境ではまず n(nano)モデルから試すのが定石です。

    カメラを使ったリアルタイム物体検出

    USBカメラで推論を実行する

    USBウェブカメラが /dev/video0 に認識されていることを確認してから以下を実行します。

    
    from ultralytics import YOLO
    
    model = YOLO("yolov8n.pt")
    results = model.predict(source=0, show=True, stream=True)
    
    for result in results:
        pass  # ウィンドウを閉じるまでループ
    

    source=0 がカメラデバイスの番号です。複数のカメラを接続している場合は 12 に変更して試してください。

    CSIカメラを使う場合

    Jetson対応のCSIカメラ Raspberry Pi Camera Module V2(Amazon) を使う場合は、GStreamerパイプラインで映像を取得します。

    
    import cv2
    from ultralytics import YOLO
    
    model = YOLO("yolov8n.pt")
    
    gst_pipeline = (
        "nvarguscamerasrc ! "
        "video/x-raw(memory:NVMM), width=1280, height=720, framerate=30/1 ! "
        "nvvidconv ! "
        "video/x-raw, format=BGRx ! "
        "videoconvert ! "
        "video/x-raw, format=BGR ! appsink"
    )
    
    cap = cv2.VideoCapture(gst_pipeline, cv2.CAP_GSTREAMER)
    
    while True:
        ret, frame = cap.read()
        if not ret:
            break
        results = model(frame)
        annotated = results[0].plot()
        cv2.imshow("YOLOv8", annotated)
        if cv2.waitKey(1) == ord("q"):
            break
    
    cap.release()
    cv2.destroyAllWindows()
    

    TensorRTで推論を高速化する

    YOLOv8はTensorRT形式への変換をコマンド一つで行えます。変換には10〜20分ほどかかりますが、推論速度が大きく改善します。

    
    yolo export model=yolov8n.pt format=engine device=0
    

    変換が完了すると yolov8n.engine が生成されます。以降の推論ではこちらを使います。

    
    from ultralytics import YOLO
    
    model = YOLO("yolov8n.engine")
    results = model.predict(source=0, show=True, stream=True)
    
    for result in results:
        pass
    

    実測では変換前のPyTorchモデルで約20fps、TensorRT変換後は40fps以上(USBカメラ、imgsz=640)が出る場面もありました。Jetson Orin Nano Superの性能を引き出すにはTensorRT化は必須と考えてよいでしょう。

    よくあるトラブルと対処法

    CUDA関連のエラーが出る

    JetPackのバージョンとPyTorchのバージョンが合っていない場合に起きやすいです。jtop コマンドでJetPackのバージョンを確認し、対応するホイールを選び直してください。

    
    sudo apt install python3-jtop
    jtop
    

    カメラが認識されない

    ls /dev/video* でデバイスが存在するか確認してください。USBカメラの場合はいったん抜き差しすると認識されることがあります。JetPack 6.1では初回GStreamer使用時に遅延が発生しやすいので、2回目以降を試してください。

    長時間動かすと熱でパフォーマンスが落ちる

    Jetson Orin Nanoは負荷が高いと熱によってクロックが下がります(サーマルスロットリング)。冷却ファン Noctua NF-A4x10 5V PWMファン(Amazon) を取り付けて、安定した冷却を確保することをおすすめします。ケースなしのむき出し状態で長時間の推論処理をするのは避けたほうがよいです。

    まとめ

    Jetson Orin NanoでYOLOv8をリアルタイム物体検出する手順を紹介しました。

  • 環境構築はJetson専用のPyTorchホイールを使う点がポイント
  • まずは yolov8n.pt の軽量モデルから試す
  • TensorRT変換で推論速度が大幅に向上する
  • 長時間稼働には冷却対策が必要
  • 最初のセットアップは少し手間がかかりますが、一度動き始めるとYOLOv8の手軽さとJetsonのGPU性能の組み合わせの良さを実感できます。ぜひ試してみてください。

    次はこちら

    YOLOv8の推論をさらに高速化したい方や、Jetson Orin Nanoの活用幅を広げたい方はこちらの記事もどうぞ。

  • Jetson Orin Nano TensorRT高速化チュートリアル
  • Jetson Orin Nano 熱対策・冷却方法まとめ
  • Jetson Orin Nano 対応カメラモジュール おすすめ5選
  • コメント

    タイトルとURLをコピーしました