Ultralytics YOLO27:

Ultralytics YOLO26による物体追跡ヒートマップ#

Open Heatmaps In Colab

Ultralytics YOLO26ヒートマップソリューションは、ビデオフレーム間で物体を追跡し、蓄積された移動の強度を各フレームに重ね合わせます。これにより、活発なエリアは暖色で明るく表示され、静かなエリアは寒色のままになります。YOLO26の物体追跡を基盤としており、1回のPython呼び出しまたはCLIコマンドで、あらゆるビデオを交通の流れ、人の群れの動き、滞留ゾーンを明らかにする空間的な活動マップに変換できます。



Watch: How to Create Heatmaps with Ultralytics YOLO26 | Visualize Object Activity | VisionAI in Retail 🚀

ビデオ分析にヒートマップを使用する理由#

  • 活動パターンを一目で把握: 追跡対象の物体が時間を過ごす場所では強度が蓄積されるため、手作業でフレームを1枚ずつ確認しなくても、交通量の多いレーン、人気のある棚、群衆のボトルネックが目立ちます。
  • 追跡機能を内蔵: ソリューションはYOLO26の検出と追跡を内部で実行するため、別途トラッキングパイプラインを接続する必要がありません。
  • 同じ処理でカウント: regionを渡すと、ヒートマップの生成中にゾーンへ入る物体とゾーンから出る物体をカウントでき、2つの分析タスクを1回の実行にまとめられます。

実際の用途#

交通小売
車両交通密度を示すUltralytics YOLOヒートマップのオーバーレイ小売店内の顧客の動きを示すUltralytics YOLOヒートマップのオーバーレイ
Ultralytics YOLOの交通ヒートマップUltralytics YOLOの小売ヒートマップ

Ultralytics YOLOでヒートマップを生成する方法#

CLIまたはPythonから、ビデオソースに対してヒートマップソリューションを実行します。Pythonの例では、処理済みフレームを出力ビデオファイルに書き込みます。

Ultralytics YOLOを使用したヒートマップ
# Run a heatmap example
yolo solutions heatmap show=True

# Pass a source video
yolo solutions heatmap source="path/to/video.mp4"

# Pass a custom colormap
yolo solutions heatmap colormap=cv2.COLORMAP_INFERNO

# Heatmaps + object counting
yolo solutions heatmap region="[(20, 400), (1080, 400), (1080, 360), (20, 360)]"

Heatmap()の引数#

以下にHeatmapの引数を示します。

引数デフォルト説明
modelstrNoneUltralytics YOLOモデルファイルへのパスです。
colormapintcv2.COLORMAP_DEEPGREENヒートマップに使用するカラーマップです。
show_inboolTrueビデオストリームに入力カウントを表示するかどうかを制御するフラグです。
show_outboolTrueビデオストリームに出力カウントを表示するかどうかを制御するフラグです。
regionlistまたはdictNone関心領域を定義するポイントです。(x, y)タプルのリスト、または複数の領域に対応する領域名からポイントリストへの辞書(RegionCounterのみ)を指定します。Noneの場合、領域を必要とするソリューションはあらかじめ定義されたデフォルト値にフォールバックします。
line_widthint2ソリューションが描画するボックス、キーポイント、カウントの線の太さです。
verboseboolTrue入力形状、クラス数、処理速度をフレームごとにログに記録する機能を有効にします。トラッキング処理自体は常にサイレントです。

Heatmapソリューションでは、異なるtrack引数を適用することもできます。

引数デフォルト説明
trackerstr'botsort.yaml'使用するトラッキングアルゴリズムを指定します。組み込みオプション:botsort.yamlbytetrack.yamlocsort.yamldeepocsort.yamlfasttrack.yamltracktrack.yaml
conffloat0.25検出の信頼度しきい値を設定します。値を下げるとより多くのオブジェクトを追跡できますが、誤検出が含まれる可能性があります。
ioufloat0.7重複する検出結果をフィルタリングするためのIntersection over Union(IoU)しきい値を設定します。
classeslistNoneクラスインデックスで結果をフィルタリングします。たとえば、classes=[0, 2, 3]は指定されたクラスのみを追跡します。
devicestrNone推論に使用するデバイスを指定します(例:cpucuda:00)。CPU、特定のGPU、その他の計算デバイスから、モデルの実行に使用するものを選択できます。
imgszint or tuple640ターゲット推論画像サイズ:正方形の場合は整数、または (height, width) のペアを指定します。形状はモデルのストライドに合わせて調整されます。
max_detint300トラッキング前にフレームごとに保持される検出の最大数。高密度なシーンでソリューションが処理するオブジェクト数を制限します。
quantizeint or strNone推論精度:PyTorchおよびTorchScriptモデルの場合は 16 (FP16) または 32 / 未設定 (FP32) です。その他のフォーマットでは、アーティファクトとランタイムが選択した精度で計算されます。非推奨となった half フラグに代わるものです。

さらに、サポートされている可視化引数を以下に示します。

引数デフォルト説明
showboolFalseTrueの場合、注釈付きの画像または動画をウィンドウに表示します。開発やテスト中の即時の視覚的フィードバックに役立ちます。
show_confboolTrue各検出のラベルの横に信頼度スコアを表示します。各検出に対するモデルの確信度を確認できます。
show_labelsboolTrue可視化出力に各検出のラベルを表示します。検出されたオブジェクトをすぐに把握できます。

ヒートマップのカラーマップ#

colormap引数には、任意のOpenCVカラーマップを指定できます。cv2モジュールの定数を渡します。例: colormap=cv2.COLORMAP_INFERNO

カラーマップ名説明
cv2.COLORMAP_AUTUMNAutumnカラーマップ
cv2.COLORMAP_BONEBoneカラーマップ
cv2.COLORMAP_JETJetカラーマップ
cv2.COLORMAP_WINTERWinterカラーマップ
cv2.COLORMAP_RAINBOWRainbowカラーマップ
cv2.COLORMAP_OCEANOceanカラーマップ
cv2.COLORMAP_SUMMERSummerカラーマップ
cv2.COLORMAP_SPRINGSpringカラーマップ
cv2.COLORMAP_COOLCoolカラーマップ
cv2.COLORMAP_HSVHSV(色相、彩度、明度)カラーマップ
cv2.COLORMAP_PINKPinkカラーマップ
cv2.COLORMAP_HOTHotカラーマップ
cv2.COLORMAP_PARULAParulaカラーマップ
cv2.COLORMAP_MAGMAMagmaカラーマップ
cv2.COLORMAP_INFERNOInfernoカラーマップ
cv2.COLORMAP_PLASMAPlasmaカラーマップ
cv2.COLORMAP_VIRIDISViridisカラーマップ
cv2.COLORMAP_CIVIDISCividisカラーマップ
cv2.COLORMAP_TWILIGHTTwilightカラーマップ
cv2.COLORMAP_TWILIGHT_SHIFTEDShifted Twilightカラーマップ
cv2.COLORMAP_TURBOTurboカラーマップ
cv2.COLORMAP_DEEPGREENDeep Greenカラーマップ

ヒートマップの仕組み#

ヒートマップソリューションObjectCounterクラスを拡張しています。最初に処理するフレームで、フレームサイズに合わせた空の強度レイヤーを作成します。その後、各フレームを次の2段階で処理します。

  1. YOLO26の追跡により、フレーム内のすべての物体を検出して追跡します
  2. 追跡対象の各物体について、バウンディングボックスの中心を中心とする円形領域内のヒートマップ強度を増加させます

フレームごとに1回、蓄積された強度レイヤーを正規化し、選択したカラーマップで色付けして、元のフレームとブレンドします。少なくとも1つの物体が追跡されるとオーバーレイが表示されます。追跡対象の物体がないフレームは、ヒートマップのオーバーレイなしで表示されます。

結果として、時間の経過とともに構築される動的な可視化が得られ、ビデオデータ内の交通パターン、群衆の動き、その他の空間的な行動を明らかにできます。regionを設定すると、ヒートマップの構築中に、その領域へ入る物体と領域から出る物体もカウントします。

まとめ#

Ultralytics YOLO26のヒートマップソリューションは、数行のコードで物体追跡の結果を直感的な活動オーバーレイに変換します。さらに活用するには、物体カウントと組み合わせたり、他のUltralyticsソリューションを試したり、基盤となる追跡モードについて確認したりできます。

FAQ#

  • Ultralytics YOLO26は、ビデオフレーム間で物体を追跡し、追跡対象の各物体の位置に強度値を蓄積してから、その結果を色付けし、元のフレームとブレンドすることでヒートマップを生成します。物体が頻繁に現れる場所や長く留まる場所では強度が高くなり、暖色で表示されます。設定オプションについては、Heatmap()の引数セクションを参照してください。

  • メインの例に示すように、OpenCVのcv2.VideoWriterを使用し、処理した各フレームに対してresults.plot_imを書き込みます。plot_im属性には、ヒートマップのオーバーレイが適用済みのフレームが格納されます。

  • はい。線、長方形、またはポリゴンの点を指定したregion引数をHeatmap()に渡すと、ヒートマップの構築中に、その領域へ入る物体と領域から出る物体をカウントします。返される結果には、in_countout_count、およびクラスごとのカウントが含まれます。領域の設定については、物体カウントガイドを参照してください。

  • 保持するクラスインデックスを指定して、classes引数をHeatmap()に渡します。たとえば、classes=[0, 2]は人物と車両のみ(COCOクラスインデックス0と2)からヒートマップを生成します。

    import cv2
    
    from ultralytics import solutions
    
    cap = cv2.VideoCapture("path/to/video.mp4")
    heatmap = solutions.Heatmap(show=True, model="yolo26n.pt", classes=[0, 2])
    
    while cap.isOpened():
        success, im0 = cap.read()
        if not success:
            break
        results = heatmap(im0)
    cap.release()
    cv2.destroyAllWindows()
  • Ultralytics YOLO26のヒートマップは、物体検出、追跡、強度の蓄積、オーバーレイの描画を1回の呼び出しに統合しています。一方、OpenCVやMatplotlibなどの汎用ツールでは、そのパイプラインを自分で構築する必要があります。このソリューションはビデオストリームをリアルタイムで処理し、永続的な追跡とカスタマイズ可能なカラーマップを標準でサポートします。基盤となるモデルの詳細については、YOLO26モデルページを参照してください。

コメント