Ultralytics YOLO27:

Ultralytics YOLO26을 사용한 객체 추적 히트맵#

Open Heatmaps In Colab

Ultralytics YOLO26히트맵 솔루션은 비디오 프레임 전체에서 객체를 추적하고 누적된 이동 강도를 각 프레임에 오버레이합니다. 따라서 활동이 많은 영역은 따뜻한 색상으로 밝게 표시되고, 조용한 영역은 차가운 색상으로 유지됩니다. YOLO26 객체 추적을 기반으로 구축된 이 솔루션은 단일 Python 호출 또는 CLI 명령으로 모든 비디오를 공간 활동 맵으로 변환하여 교통 흐름, 군중 이동 및 체류 구역을 보여줍니다.



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

비디오 분석에 히트맵을 사용하는 이유#

  • 활동 패턴을 한눈에 파악: 추적된 객체가 머무는 위치에서 강도가 누적되므로, 프레임을 수동으로 하나씩 검토하지 않아도 교통량이 많은 차선, 인기 있는 진열대 또는 군중이 몰리는 병목 구간을 쉽게 확인할 수 있습니다.
  • 추적 기능 기본 제공: 이 솔루션은 내부적으로 YOLO26 감지 및 추적을 실행하므로 별도의 추적 파이프라인을 연결할 필요가 없습니다.
  • 동일한 처리 과정에서 카운팅: region을 전달하면 히트맵을 생성하는 동안 구역에 들어오고 나가는 객체를 카운트할 수 있어, 한 번의 실행으로 두 가지 분석 작업을 결합할 수 있습니다.

실제 적용 사례#

교통리테일
차량 교통 밀도를 보여주는 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.yaml, bytetrack.yaml, ocsort.yaml, deepocsort.yaml, fasttrack.yaml, tracktrack.yaml입니다.
conffloat0.25검출 결과의 신뢰도 임계값을 설정합니다. 값이 낮을수록 더 많은 객체를 추적할 수 있지만 오탐이 포함될 수 있습니다.
ioufloat0.7겹치는 검출 결과를 필터링하기 위한 교집합 대비 합집합 (IoU) 임계값을 설정합니다.
classeslistNone클래스 인덱스로 결과를 필터링합니다. 예를 들어 classes=[0, 2, 3]은 지정된 클래스만 추적합니다.
devicestrNone추론에 사용할 장치를 지정합니다(예: cpu, cuda:0 또는 0). 사용자는 CPU, 특정 GPU 또는 기타 컴퓨팅 장치 중에서 모델 실행 장치를 선택할 수 있습니다.
imgszint or tuple640목표 추론 이미지 크기: 정사각형의 경우 정수 또는 (height, width) 쌍입니다. 형태는 모델 스트라이드에 맞게 조정됩니다.
max_detint300트래킹 전에 프레임당 유지되는 최대 감지 수로, 솔루션이 조밀한 장면에서 처리하는 객체 수를 제한합니다.
quantizeint or strNone추론 정밀도: PyTorch 및 TorchScript 모델의 경우 16(FP16) 또는 32/미설정(FP32); 기타 형식은 아티팩트와 런타임이 선택하는 정밀도로 연산됩니다. 더 이상 사용되지 않는 half 플래그를 대체합니다.

또한 지원되는 시각화 인수는 다음과 같습니다.

인수유형기본값설명
showboolFalseTrue인 경우 annotation이 추가된 이미지 또는 비디오를 window에 표시합니다. 개발 또는 테스트 중 즉각적인 시각적 피드백을 제공하는 데 유용합니다.
show_confboolTrue각 detection의 confidence score를 label과 함께 표시합니다. 각 detection에 대한 모델의 확신 정도를 파악할 수 있습니다.
show_labelsboolTruevisual output에 각 detection의 label을 표시합니다. 검출된 객체를 즉시 파악할 수 있습니다.

히트맵 컬러맵#

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 클래스를 확장합니다. 처음 처리되는 프레임에서 프레임 크기에 맞는 빈 강도 레이어를 생성합니다. 그런 다음 각 프레임을 다음 두 단계로 처리합니다.

  1. YOLO26 추적이 프레임의 모든 객체를 감지하고 추적합니다.
  2. 추적된 각 객체에 대해 해당 객체의 BBox 중심을 기준으로 하는 원형 영역 내에서 히트맵 강도가 증가합니다.

프레임마다 한 번씩 누적된 강도 레이어를 정규화하고, 선택한 컬러맵으로 색을 입힌 다음 원본 프레임과 혼합합니다. 하나 이상의 객체가 추적되는 즉시 오버레이가 표시되며, 추적된 객체가 없는 프레임은 히트맵 오버레이 없이 표시됩니다.

그 결과 시간이 지남에 따라 누적되는 동적 시각화가 생성되어 비디오 데이터의 교통 패턴, 군중 이동 또는 기타 공간적 행동을 보여줍니다. region이 설정되면 히트맵이 생성되는 동안 해당 영역에 들어오고 나가는 객체도 카운트합니다.

결론#

Ultralytics YOLO26 히트맵 솔루션은 몇 줄의 코드만으로 객체 추적 결과를 직관적인 활동 오버레이로 변환합니다. 더 자세히 알아보려면 객체 카운팅과 결합하거나, 다른 Ultralytics Solutions을 살펴보거나, 기본 추적 모드에 대해 읽어보세요.

FAQ#

  • Ultralytics YOLO26은 비디오 프레임 전체에서 객체를 추적하고 각 추적 객체의 위치에 강도 값을 누적한 다음, 그 결과에 색을 입히고 원본 프레임과 혼합하여 히트맵을 생성합니다. 객체가 자주 나타나거나 오래 머무는 영역은 더 높은 강도로 누적되며 더 따뜻한 색상으로 렌더링됩니다. 구성 옵션은 Heatmap() 인수 섹션을 참조하세요.

  • OpenCV의 cv2.VideoWriter을 사용하고 처리된 각 프레임에 대해 results.plot_im을 기록합니다. 이는 기본 예제에 나와 있습니다. plot_im 속성에는 히트맵 오버레이가 이미 적용된 프레임이 저장됩니다.

  • 예. 선, 사각형 또는 다각형 점이 포함된 region 인수를 Heatmap()에 전달하면 히트맵이 생성되는 동안 해당 영역에 들어오고 나가는 객체를 카운트합니다. 반환되는 결과에는 in_count, out_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 히트맵은 객체 감지, 추적, 강도 누적 및 오버레이 렌더링을 단일 호출로 통합하는 반면, OpenCV나 Matplotlib과 같은 범용 도구를 사용하면 이 파이프라인을 직접 구축해야 합니다. 이 솔루션은 비디오 스트림을 실시간으로 처리하며 지속적인 추적과 사용자 지정 가능한 컬러맵을 기본으로 지원합니다. 기본 모델에 대한 자세한 내용은 YOLO26 모델 페이지를 참조하세요.

댓글