コンテンツへスキップ

高度なデータ視覚化:Ultralytics YOLOv8 🚀を使ったヒートマップ

ヒートマップ入門

ヒートマップ Ultralytics YOLOv8で生成されたヒートマップは、複雑なデータを色分けされた鮮やかなマトリックスに変換します。この視覚的なツールは、様々なデータ値を表現するために色のスペクトルを使用し、より暖かい色調はより高い強度を、より低い色調はより低い値を示します。ヒートマップは、複雑なデータパターン、相関関係、異常値を視覚化することに優れており、多様な領域にわたるデータ解釈に、アクセスしやすく魅力的なアプローチを提供します。



見るんだ: ヒートマップUltralytics YOLOv8

データ分析にヒートマップを選ぶ理由

  • 直感的なデータ分布の視覚化:ヒートマップは、データの集中と分布の理解を単純化し、複雑なデータセットを理解しやすいビジュアル形式に変換します。
  • 効率的なパターン検出:データをヒートマップ形式で可視化することで、トレンド、クラスター、異常値を見つけやすくなり、迅速な分析と洞察が容易になります。
  • 空間分析と意思決定の強化:ヒートマップは空間的な関係を図示するのに役立ち、ビジネスインテリジェンス、環境調査、都市計画などの分野における意思決定プロセスを支援する。

実世界での応用

交通 小売
Ultralytics YOLOv8 輸送ヒートマップ Ultralytics YOLOv8 小売ヒートマップ
Ultralytics YOLOv8 輸送ヒートマップ Ultralytics YOLOv8 小売ヒートマップ

ヒートマップ設定

  • heatmap_alpha:この値が範囲内(0.0~1.0)であることを確認する。
  • decay_factor:オブジェクトがフレームから消えた後、ヒートマップを削除するために使用され、その値も範囲(0.0 - 1.0)でなければならない。

Ultralytics YOLOv8 例を用いたヒートマップ

import cv2

from ultralytics import YOLO, solutions

model = YOLO("yolov8n.pt")
cap = cv2.VideoCapture("path/to/video/file.mp4")
assert cap.isOpened(), "Error reading video file"
w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))

# Video writer
video_writer = cv2.VideoWriter("heatmap_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))

# Init heatmap
heatmap_obj = solutions.Heatmap(
    colormap=cv2.COLORMAP_PARULA,
    view_img=True,
    shape="circle",
    names=model.names,
)

while cap.isOpened():
    success, im0 = cap.read()
    if not success:
        print("Video frame is empty or video processing has been successfully completed.")
        break
    tracks = model.track(im0, persist=True, show=False)

    im0 = heatmap_obj.generate_heatmap(im0, tracks)
    video_writer.write(im0)

cap.release()
video_writer.release()
cv2.destroyAllWindows()
import cv2

from ultralytics import YOLO, solutions

model = YOLO("yolov8n.pt")
cap = cv2.VideoCapture("path/to/video/file.mp4")
assert cap.isOpened(), "Error reading video file"
w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))

# Video writer
video_writer = cv2.VideoWriter("heatmap_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))

line_points = [(20, 400), (1080, 404)]  # line for object counting

# Init heatmap
heatmap_obj = solutions.Heatmap(
    colormap=cv2.COLORMAP_PARULA,
    view_img=True,
    shape="circle",
    count_reg_pts=line_points,
    names=model.names,
)

while cap.isOpened():
    success, im0 = cap.read()
    if not success:
        print("Video frame is empty or video processing has been successfully completed.")
        break

    tracks = model.track(im0, persist=True, show=False)
    im0 = heatmap_obj.generate_heatmap(im0, tracks)
    video_writer.write(im0)

cap.release()
video_writer.release()
cv2.destroyAllWindows()
import cv2

from ultralytics import YOLO, solutions

model = YOLO("yolov8n.pt")
cap = cv2.VideoCapture("path/to/video/file.mp4")
assert cap.isOpened(), "Error reading video file"
w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))

# Video writer
video_writer = cv2.VideoWriter("heatmap_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))

# Define polygon points
region_points = [(20, 400), (1080, 404), (1080, 360), (20, 360), (20, 400)]

# Init heatmap
heatmap_obj = solutions.Heatmap(
    colormap=cv2.COLORMAP_PARULA,
    view_img=True,
    shape="circle",
    count_reg_pts=region_points,
    names=model.names,
)

while cap.isOpened():
    success, im0 = cap.read()
    if not success:
        print("Video frame is empty or video processing has been successfully completed.")
        break

    tracks = model.track(im0, persist=True, show=False)
    im0 = heatmap_obj.generate_heatmap(im0, tracks)
    video_writer.write(im0)

cap.release()
video_writer.release()
cv2.destroyAllWindows()
import cv2

from ultralytics import YOLO, solutions

model = YOLO("yolov8n.pt")
cap = cv2.VideoCapture("path/to/video/file.mp4")
assert cap.isOpened(), "Error reading video file"
w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))

# Video writer
video_writer = cv2.VideoWriter("heatmap_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))

# Define region points
region_points = [(20, 400), (1080, 404), (1080, 360), (20, 360)]

# Init heatmap
heatmap_obj = solutions.Heatmap(
    colormap=cv2.COLORMAP_PARULA,
    view_img=True,
    shape="circle",
    count_reg_pts=region_points,
    names=model.names,
)

while cap.isOpened():
    success, im0 = cap.read()
    if not success:
        print("Video frame is empty or video processing has been successfully completed.")
        break

    tracks = model.track(im0, persist=True, show=False)
    im0 = heatmap_obj.generate_heatmap(im0, tracks)
    video_writer.write(im0)

cap.release()
video_writer.release()
cv2.destroyAllWindows()
import cv2

from ultralytics import YOLO, solutions

model = YOLO("yolov8s.pt")  # YOLOv8 custom/pretrained model

im0 = cv2.imread("path/to/image.png")  # path to image file
h, w = im0.shape[:2]  # image height and width

# Heatmap Init
heatmap_obj = solutions.Heatmap(
    colormap=cv2.COLORMAP_PARULA,
    view_img=True,
    shape="circle",
    names=model.names,
)

results = model.track(im0, persist=True)
im0 = heatmap_obj.generate_heatmap(im0, tracks=results)
cv2.imwrite("ultralytics_output.png", im0)
import cv2

from ultralytics import YOLO, solutions

model = YOLO("yolov8n.pt")
cap = cv2.VideoCapture("path/to/video/file.mp4")
assert cap.isOpened(), "Error reading video file"
w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))

# Video writer
video_writer = cv2.VideoWriter("heatmap_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))

classes_for_heatmap = [0, 2]  # classes for heatmap

# Init heatmap
heatmap_obj = solutions.Heatmap(
    colormap=cv2.COLORMAP_PARULA,
    view_img=True,
    shape="circle",
    names=model.names,
)

while cap.isOpened():
    success, im0 = cap.read()
    if not success:
        print("Video frame is empty or video processing has been successfully completed.")
        break
    tracks = model.track(im0, persist=True, show=False, classes=classes_for_heatmap)

    im0 = heatmap_obj.generate_heatmap(im0, tracks)
    video_writer.write(im0)

cap.release()
video_writer.release()
cv2.destroyAllWindows()

論争 Heatmap()

名称 タイプ デフォルト 説明
names list None クラス名の辞書。
imw int 0 画像の幅。
imh int 0 画像の高さ。
colormap int cv2.COLORMAP_JET ヒートマップに使用するカラーマップ。
heatmap_alpha float 0.5 ヒートマップオーバーレイのアルファブレンド値。
view_img bool False 画像をヒートマップオーバーレイで表示するかどうか。
view_in_counts bool True リージョンに入るオブジェクトの数を表示するかどうか。
view_out_counts bool True リージョンから出ていくオブジェクトの数を表示するかどうか。
count_reg_pts list または None None 計数領域を定義する点(線または多角形)。
count_txt_color tuple (0, 0, 0) カウントを表示するテキストの色。
count_bg_color tuple (255, 255, 255) カウント表示の背景色。
count_reg_color tuple (255, 0, 255) カウント領域の色。
region_thickness int 5 領域線の太さ。
line_dist_thresh int 15 ラインベースのカウントのための距離のしきい値。
line_thickness int 2 描画に使用する線の太さ。
decay_factor float 0.99 ヒートマップの減衰係数。
shape str "circle" ヒートマップ・ブロブの形状(「円」または「矩形」)。

論争 model.track

名称 タイプ デフォルト 説明
source im0 None 画像またはビデオのソース・ディレクトリ
persist bool False フレーム間のトラックの持続
tracker str botsort.yaml トラッキングメソッド「bytetrack」または「botsort
conf float 0.3 信頼閾値
iou float 0.5 借用書のしきい値
classes list None つまり、class=0、またはclass=[0,2,3]。

ヒートマップ COLORMAPs

カラーマップ名 説明
cv::COLORMAP_AUTUMN 紅葉マップ
cv::COLORMAP_BONE 骨カラーマップ
cv::COLORMAP_JET ジェットカラー・マップ
cv::COLORMAP_WINTER 冬のカラーマップ
cv::COLORMAP_RAINBOW 虹色マップ
cv::COLORMAP_OCEAN 海の色マップ
cv::COLORMAP_SUMMER 夏色マップ
cv::COLORMAP_SPRING 春のカラーマップ
cv::COLORMAP_COOL クールなカラーマップ
cv::COLORMAP_HSV HSV(色相・彩度・明度)カラーマップ
cv::COLORMAP_PINK ピンクのカラーマップ
cv::COLORMAP_HOT ホットカラーマップ
cv::COLORMAP_PARULA パルーラ カラーマップ
cv::COLORMAP_MAGMA マグマ・カラーマップ
cv::COLORMAP_INFERNO インフェルノ カラーマップ
cv::COLORMAP_PLASMA プラズマカラーマップ
cv::COLORMAP_VIRIDIS ヴィリディス カラーマップ
cv::COLORMAP_CIVIDIS チヴィディス カラーマップ
cv::COLORMAP_TWILIGHT トワイライト・カラー・マップ
cv::COLORMAP_TWILIGHT_SHIFTED シフトトワイライトカラーマップ
cv::COLORMAP_TURBO ターボカラーマップ
cv::COLORMAP_DEEPGREEN ディープグリーンのカラーマップ

このようなカラーマップは、異なる色表現でデータを視覚化するためによく使われる。

よくあるご質問

Ultralytics YOLOv8 どのようにヒートマップを作成し、どのような利点があるのか?

Ultralytics YOLOv8 ヒートマップは、複雑なデータを色分けされたマトリックスに変換することで、異なる色相がデータの強度を表すヒートマップを生成します。ヒートマップは、データのパターン、相関関係、異常を視覚化しやすくします。暖かい色調は高い値を表し、冷たい色調は低い値を表す。主な利点は、データ分布の直感的な視覚化、効率的なパターン検出、意思決定のための空間分析の強化などです。詳細および設定オプションについては、ヒートマップ設定のセクションを参照してください。

Ultralytics YOLOv8 を使って、オブジェクトのトラッキングとヒートマップの生成を同時に行うことはできますか?

はい、Ultralytics YOLOv8 、オブジェクト・トラッキングとヒートマップ生成を同時にサポートしています。これは Heatmap ソリューションは、オブジェクト追跡モデルと統合されています。そのためには、ヒートマップオブジェクトを初期化し、YOLOv8 のトラッキング機能を使用する必要があります。簡単な例を示します:

import cv2

from ultralytics import YOLO, solutions

model = YOLO("yolov8n.pt")
cap = cv2.VideoCapture("path/to/video/file.mp4")
heatmap_obj = solutions.Heatmap(colormap=cv2.COLORMAP_PARULA, view_img=True, shape="circle", names=model.names)

while cap.isOpened():
    success, im0 = cap.read()
    if not success:
        break
    tracks = model.track(im0, persist=True, show=False)
    im0 = heatmap_obj.generate_heatmap(im0, tracks)
    cv2.imshow("Heatmap", im0)
    if cv2.waitKey(1) & 0xFF == ord("q"):
        break

cap.release()
cv2.destroyAllWindows()

詳しいガイダンスについては、トラッキングモードのページをご覧ください。

Ultralytics YOLOv8 ヒートマップは、OpenCVやMatplotlibのような他のデータ可視化ツールと何が違うのでしょうか?

Ultralytics YOLOv8 ヒートマップは、オブジェクト検出および追跡モデルと統合するために特別に設計されており、リアルタイムデータ解析のためのエンドツーエンドのソリューションを提供します。OpenCVやMatplotlibのような一般的な可視化ツールとは異なり、YOLOv8 のヒートマップはパフォーマンスと自動処理のために最適化されており、持続的追跡、減衰係数調整、リアルタイムビデオオーバーレイなどの機能をサポートしています。YOLOv8 のユニークな機能の詳細については、Ultralytics YOLOv8 Introduction をご覧ください。

Ultralytics YOLOv8 を使って、ヒートマップで特定のオブジェクト・クラスだけを可視化するにはどうすればよいですか?

で必要なクラスを指定することで、特定のオブジェクト・クラスを視覚化できます。 track() YOLO メソッドを呼び出します。例えば、車と人(クラスインデックスが0と2であると仮定)のみを可視化したい場合は classes パラメータを使用する。

import cv2

from ultralytics import YOLO, solutions

model = YOLO("yolov8n.pt")
cap = cv2.VideoCapture("path/to/video/file.mp4")
heatmap_obj = solutions.Heatmap(colormap=cv2.COLORMAP_PARULA, view_img=True, shape="circle", names=model.names)

classes_for_heatmap = [0, 2]  # Classes to visualize
while cap.isOpened():
    success, im0 = cap.read()
    if not success:
        break
    tracks = model.track(im0, persist=True, show=False, classes=classes_for_heatmap)
    im0 = heatmap_obj.generate_heatmap(im0, tracks)
    cv2.imshow("Heatmap", im0)
    if cv2.waitKey(1) & 0xFF == ord("q"):
        break

cap.release()
cv2.destroyAllWindows()

なぜ企業はデータ分析におけるヒートマップ生成にUltralytics YOLOv8 を選ぶべきなのか?

Ultralytics YOLOv8 は、高度なオブジェクト検出とリアルタイムのヒートマップ生成をシームレスに統合しており、データをより効果的に可視化したい企業にとって理想的な選択肢です。主な利点としては、直感的なデータ分布の視覚化、効率的なパターン検出、より良い意思決定のための強化された空間分析などが挙げられます。さらに、YOLOv8'の永続的な追跡、カスタマイズ可能なカラーマップ、さまざまなエクスポート形式のサポートなどの最先端の機能により、TensorFlow や OpenCV などの他のツールよりも包括的なデータ分析に優れています。Ultralytics プランで、ビジネスアプリケーションの詳細をご覧ください。



作成 2023-12-07 更新 2024-07-14
著者RizwanMunawar(8),glenn-jocher(13),IvorZhu331(1),AyushExel(1),1579093407@qq.com(1)

コメント