コンテンツにスキップ

Ultralytics YOLOによるモデル予測

Ultralytics YOLO ecosystem and integrations

イントロダクション

機械学習やコンピュータビジョンの世界では、視覚データから意味を引き出すプロセスを「推論」または「予測」と呼ばれています。UltralyticsのYOLOv8は、幅広いデータソースに対して高性能でリアルタイムな推論を行うために特化した、「予測モード」と呼ばれる強力な機能を提供しています。



視聴: Ultralytics YOLOv8モデルの出力をカスタムプロジェクトに取り込む方法を学ぶ。

実際の応用例

製造業 スポーツ 安全
Vehicle Spare Parts Detection Football Player Detection People Fall Detection
車両のスペアパーツ検出 フットボール選手検出 人の転倒検出

予測にUltralytics YOLOを使う理由

様々な推論ニーズにYOLOv8の予測モードを検討すべき理由です:

  • 柔軟性: 画像、動画、さらにはライブストリームにおいて推論を行う能力があります。
  • パフォーマンス: 正確さを犠牲にすることなく、リアルタイムで高速な処理が行えるように設計されています。
  • 使いやすさ: 迅速な展開とテストのための直感的なPythonおよびCLIインターフェース。
  • 高いカスタマイズ性: 特定の要件に応じてモデルの推論動作を調整するためのさまざまな設定とパラメーター。

予測モードの主な特徴

YOLOv8の予測モードは、頑健で多様性があり、次の特徴を備えています:

  • 複数のデータソースとの互換性: データが個々の画像、画像の集合、動画ファイル、またはリアルタイムの動画ストリームのいずれの形式であっても、予測モードが対応しています。
  • ストリーミングモード: Resultsオブジェクトのメモリ効率の良いジェネレータを生成するためにストリーミング機能を使用します。stream=Trueを予測器の呼び出しメソッドに設定することにより有効になります。
  • バッチ処理: 単一のバッチで複数の画像や動画フレームを処理する能力は、さらに推論時間を短縮します。
  • 統合が容易: 柔軟なAPIのおかげで、既存のデータパイプラインや他のソフトウェアコンポーネントに簡単に統合できます。

UltralyticsのYOLOモデルは、stream=Trueが推論中にモデルに渡されると、PythonのResultsオブジェクトのリストまたはResultsオブジェクトのメモリ効率の良いPythonジェネレータのいずれかを返します:

予測

from ultralytics import YOLO

# モデルをロード
model = YOLO('yolov8n.pt')  # 事前にトレーニングされたYOLOv8nモデル

# 画像のリストに対してバッチ推論を実行
results = model(['im1.jpg', 'im2.jpg'])  # Resultsオブジェクトのリストを返す

# 結果リストを処理
for result in results:
    boxes = result.boxes  # バウンディングボックス出力用のBoxesオブジェクト
    masks = result.masks  # セグメンテーションマスク出力用のMasksオブジェクト
    keypoints = result.keypoints  # 姿勢出力用のKeypointsオブジェクト
    probs = result.probs  # 分類出力用のProbsオブジェクト
from ultralytics import YOLO

# モデルをロード
model = YOLO('yolov8n.pt')  # 事前にトレーニングされたYOLOv8nモデル

# 画像のリストに対してバッチ推論を実行
results = model(['im1.jpg', 'im2.jpg'], stream=True)  # Resultsオブジェクトのジェネレータを返す

# 結果ジェネレータを処理
for result in results:
    boxes = result.boxes  # バウンディングボックス出力用のBoxesオブジェクト
    masks = result.masks  # セグメンテーションマスク出力用のMasksオブジェクト
    keypoints = result.keypoints  # 姿勢出力用のKeypointsオブジェクト
    probs = result.probs  # 分類出力用のProbsオブジェクト

推論ソース

YOLOv8は、以下の表に示されるように、異なるタイプの入力ソースを推論に処理できます。ソースには静止画像、動画ストリーム、およびさまざまなデータフォーマットが含まれます。表には、各ソースがストリーミングモードで使用できるかどうかも示されており、引数stream=Trueで✅が表示されています。ストリーミングモードは、動画やライブストリームを処理する場合に有利であり、すべてのフレームをメモリにロードする代わりに結果のジェネレータを作成します。

ヒント

長い動画や大きなデータセットを効率的にメモリ管理するためにstream=Trueを使用します。stream=Falseでは、すべてのフレームまたはデータポイントの結果がメモリに格納されますが、大きな入力で迅速にメモリが積み上がり、メモリ不足のエラーを引き起こす可能性があります。対照的に、stream=Trueはジェネレータを利用し、現在のフレームまたはデータポイントの結果のみをメモリに保持し、メモリ消費を大幅に削減し、メモリ不足の問題を防ぎます。

ソース 引数 タイプ 備考
画像 'image.jpg' str または Path 単一の画像ファイル。
URL 'https://ultralytics.com/images/bus.jpg' str 画像へのURL。
スクリーンショット 'screen' str スクリーンショットをキャプチャ。
PIL Image.open('im.jpg') PIL.Image HWCフォーマットでRGBチャンネル。
OpenCV cv2.imread('im.jpg') np.ndarray HWCフォーマットでBGRチャンネル uint8 (0-255)
numpy np.zeros((640,1280,3)) np.ndarray HWCフォーマットでBGRチャンネル uint8 (0-255)
torch torch.zeros(16,3,320,640) torch.Tensor BCHWフォーマットでRGBチャンネル float32 (0.0-1.0)
CSV 'sources.csv' str または Path 画像、動画、ディレクトリへのパスを含むCSVファイル。
動画 ✅ 'video.mp4' str または Path MP4、AVIなどの形式の動画ファイル。
ディレクトリ ✅ 'path/' str または Path 画像または動画を含むディレクトリへのパス。
グロブ ✅ 'path/*.jpg' str 複数のファイルに一致するグロブパターン。ワイルドカードとして*文字を使用します。
YouTube ✅ 'https://youtu.be/LNwODJXcvt4' str YouTube動画のURL。
ストリーム ✅ 'rtsp://example.com/media.mp4' str RTSP、RTMP、TCP、IPアドレスなどのストリーミングプロトコルのためのURL。
マルチストリーム ✅ 'list.streams' str または Path ストリームURLを行ごとに1つ含む*.streamsテキストファイル。つまり、8つのストリームをバッチサイズ8で実行します。

以下は、それぞれのソースタイプを使用するためのコード例です:

予測ソース

画像ファイルに推論を実行します。

from ultralytics import YOLO

# 事前にトレーニングされたYOLOv8nモデルをロード
model = YOLO('yolov8n.pt')

# 画像ファイルへのパスを定義
source = 'path/to/image.jpg'

# ソースに推論を実行
results = model(source)  # Resultsオブジェクトのリスト

現在の画面内容のスクリーンショットに推論を実行します。

from ultralytics import YOLO

# 事前にトレーニングされたYOLOv8nモデルをロード
model = YOLO('yolov8n.pt')

# 現在のスクリーンショットをソースとして定義
source = 'screen'

# ソースに推論を実行
results = model(source)  # Resultsオブジェクトのリスト

リモートのURL経由でホストされている画像や動画に推論を実行します。

from ultralytics import YOLO

# 事前にトレーニングされたYOLOv8nモデルをロード
model = YOLO('yolov8n.pt')

# リモート画像や動画のURLを定義
source = 'https://ultralytics.com/images/bus.jpg'

# ソースに推論を実行
results = model(source)  # Resultsオブジェクトのリスト

Python Imaging Library (PIL)を使用して開いた画像に推論を実行します。

from PIL import Image
from ultralytics import YOLO

# 事前にトレーニングされたYOLOv8nモデルをロード
model = YOLO('yolov8n.pt')

# PILを使用して画像を開く
source = Image.open('path/to/image.jpg')

# ソースに推論を実行
results = model(source)  # Resultsオブジェクトのリスト

OpenCVを使用して読み込んだ画像に推論を実行します。

import cv2
from ultralytics import YOLO

# 事前にトレーニングされたYOLOv8nモデルをロード
model = YOLO('yolov8n.pt')

# OpenCVを使用して画像を読み込む
source = cv2.imread('path/to/image.jpg')

# ソースに推論を実行
results = model(source)  # Resultsオブジェクトのリスト

numpy配列として表される画像に推論を実行します。

import numpy as np
from ultralytics import YOLO

# 事前にトレーニングされたYOLOv8nモデルをロード
model = YOLO('yolov8n.pt')

# HWC形状(640, 640, 3)、範囲[0, 255]、型`uint8`のランダムなnumpy配列を作成
source = np.random.randint(low=0, high=255, size=(640,640,3), dtype='uint8')

# ソースに推論を実行
results = model(source)  # Resultsオブジェクトのリスト


Created 2023-11-13, Updated 2023-11-18
Authors: glenn-jocher (2)

コメント