본문으로 건너뛰기

[POSTECH 산학 연구] 저 FPS CCTV에서 차량 속도를 추정하는 방법

· 약 12분
Jaehun Hwang
Jaehun Hwang
POSTECH AIM Lab
Keonwoo Park
Keonwoo Park
POSTECH AIM Lab

[EVA × POSTECH 산학협력 연구] 포항공과대학교 AIM 연구실의 황재훈·박건우 학생이 연구를 수행했으며, 송민석 교수님이 지도를 맡았습니다.


들어가며: 객체 검출에서 움직임 이해로

영상에서 차량을 찾는 것만으로는 과속이나 위험한 접근을 판단할 수 없습니다. 같은 차량을 시간에 따라 연결하고, 화면 속 이동을 실제 거리로 환산해야 비로소 km/h 단위의 속도를 얻을 수 있습니다.

이번 연구의 목표는 저 FPS CCTV에서도 차량의 ID를 안정적으로 유지하고, 카메라 장면을 실제 도로 좌표로 보정해 EVA가 활용할 수 있는 속도 정보를 생성하는 것이었습니다.

연구팀은 하나의 Tracking 모델을 교체하는 데 그치지 않고, 저 FPS에서의 차량 연결부터 픽셀 좌표의 실제 거리 변환, 속도 결과를 확인하는 화면까지 전체 과정을 하나의 파이프라인으로 구현하고 검증했습니다. 아래 데모에서는 차량별 ID와 이동 궤적, 측정 영역, 추정 속도가 함께 표시되는 모습을 확인할 수 있습니다.

EVA에서 차량별 추정 속도를 확인하는 동작 화면




1. 이미지 Feature 추출: 차량의 생김새를 표현하다

저 FPS 영상에서는 프레임 사이에 차량이 크게 이동해 이전 Bounding Box와 현재 Bounding Box가 겹치지 않는 경우가 많습니다. 위치만으로 같은 차량을 찾기 어려우므로, 검출된 차량 이미지를 비교할 수 있는 Feature Vector로 변환했습니다.

왜 세 가지 Feature가 필요했을까?

차량의 생김새를 구분하는 단서는 형태, 색상, 윤곽으로 나눌 수 있습니다. 각 단서는 강한 장면과 약한 장면이 달랐기 때문에 하나의 Feature만으로 모든 CCTV 환경을 안정적으로 처리하기 어려웠습니다.

Feature강점한계
DINOv2차종, 차체 형태, 전반적인 시각 표현을 함께 포착저해상도 영상이나 외형이 비슷한 차량에서는 세부 차이가 약해질 수 있음
HSV같은 차종이라도 차체 색상이 다르면 빠르게 구분그림자, 역광, 야간 조명과 노출 변화에 민감
HOG색이 흐려져도 윤곽과 밝기 경계로 형태를 보완회전, 가림, 잘린 Bounding Box에서는 윤곽이 크게 달라질 수 있음

DINOv2: 차량의 전체적인 외형을 표현하다

DINOv2는 이미지에서 형태와 질감, 구성 요소를 종합한 Deep Feature를 추출합니다. 연구 초기에는 EVA의 VLM 활용 방향과 연결하기 쉬운 Qwen 계열의 시각 Feature도 후보로 검토했습니다. 하지만 VLM은 이미지의 의미적 유사성을 이해하는 데 강한 반면, Tracking은 외형이 비슷한 차량 한 대 한 대를 구분해야 합니다. 동일 차량과 다른 차량의 유사도 분포를 비교한 결과 DINOv2가 두 그룹을 더 분명하게 나눴고, 이에 따라 Deep Feature의 기본 모델로 선택했습니다.

HSV: 색 분포를 수치화하다

HSV는 색상 계열(Hue), 색의 진함(Saturation), 밝기(Value)를 분리해 표현합니다. 차량 Crop의 RGB 값을 HSV로 변환한 뒤 H·S·V 값을 각각 정해진 구간의 Histogram에 누적하면, 차량에 어떤 색이 얼마나 포함됐는지를 하나의 Feature Vector로 만들 수 있습니다.

HSV 색상 공간HSV 색상 구간화 예시

HSV 색상 공간(왼쪽)과 픽셀 값을 구간별로 누적하는 Histogram 예시(오른쪽)

서로 다른 차량의 색 분포는 각 Histogram Bin에서 더 작은 값을 합산하는 Histogram Intersection으로 비교했습니다. 색 분포가 많이 겹칠수록 점수가 커지므로, 차종이 같아도 차체 색상이 다른 차량을 빠르게 구분하는 데 도움이 됩니다.

HOG: 윤곽과 밝기 경계를 수치화하다

HOG는 차량 Crop을 흑백으로 변환한 뒤, 픽셀마다 밝기가 변하는 방향과 강도를 계산합니다. 작은 Cell 안에서 방향별 Gradient를 Histogram으로 만들고, 주변 Cell을 Block으로 묶어 정규화한 뒤 이어 붙이면 색상에 덜 의존하는 윤곽 Feature가 완성됩니다.

HOG Gradient Histogram 생성 과정

밝기 변화의 방향과 강도를 방향별 Histogram으로 표현하는 HOG 예시
출처: LearnOpenCV

어느 하나의 Feature만으로는 모든 장면을 충분히 설명하기 어려웠습니다. 주간처럼 색상 정보가 선명한 장면에서는 HSV가 강한 구분력을 보였고, 색상 단서가 약한 장면에서는 HOG의 윤곽 정보가 보완 역할을 했습니다. 최종적으로 세 점수를 정규화한 뒤 DINOv2 0.3 : HSV 0.5 : HOG 0.2 비율로 결합했습니다.

이 Fusion 방식은 어느 한 Feature가 조명이나 가림의 영향을 받아 흔들릴 때 다른 Feature가 판단을 지지하도록 합니다. 영상 환경에 따라 최적 비율은 달라질 수 있지만, 세 Feature를 함께 사용하는 구성은 다양한 CCTV에 적용하기 위한 안정적인 공통 기준이 되었습니다. 통합 Feature는 각 차량의 시각적 지문으로 사용되며, 다음 단계의 Tracking에서 과거 Track과 현재 Detection을 비교하는 기준이 됩니다.


2. 저 FPS Tracking: Feature와 이동 정보로 ID를 연결하다

이미지 Feature가 비슷하다는 이유만으로 두 차량을 바로 연결하면 비슷한 색상과 차종이 동시에 등장할 때 ID가 뒤바뀔 수 있습니다. 반대로 Motion만 사용하면 이동 이력이 없는 신규 차량이나 프레임 간격이 긴 영상에 대응하기 어렵습니다. 따라서 Appearance를 중심으로 후보를 찾고 Motion 정보를 보조 신호로 사용하는 방식을 적용했습니다.

Feature 기반 저 FPS Tracking 흐름

Feature별 유사도를 결합하고, Motion·점수 기준을 통과한 후보만 1:1로 연결하는 흐름

먼저 과거 Track과 현재 Detection의 모든 조합에 대해 통합 Feature 유사도를 계산합니다. 이동 이력이 있는 Track에는 최근 방향과 속도를 바탕으로 만든 Motion Prior를 더해, 현재 위치에 실제로 도착할 수 있는 차량인지 확인합니다. Appearance가 멀리 이동한 차량의 후보를 찾는다면, Motion은 그 후보가 물리적으로 가능한지를 한 번 더 확인하는 역할입니다.

다음으로 Hungarian Matching을 이용해 전체 후보를 중복 없이 1:1로 배정합니다. 다만 배정됐다는 이유만으로 바로 같은 차량이라고 판단하지는 않습니다. 유사도 자체가 충분한지, 다음 후보보다 뚜렷하게 나은지, Track과 Detection이 서로를 가장 좋은 후보로 선택했는지를 확인한 뒤 연결을 승인합니다.

승인 조건을 통과하지 못한 조합은 제외하고 남은 후보를 다시 탐색합니다. 이렇게 하면 첫 배정에 가려졌던 정상 후보를 되찾으면서도 억지 연결을 줄일 수 있습니다. 승인된 결과만 Track Memory에 반영하고, 신규 차량과 화면을 벗어난 차량을 별도로 관리해 한 번의 오검출이 이후 매칭까지 연쇄적으로 흔드는 문제를 막았습니다.

야간 Tracking 성능 개선

야간에는 주간에 유효했던 색상과 위치 정보가 동시에 흔들렸습니다. 경광등이나 헤드라이트의 Glare가 차량을 덮으면 같은 차량의 HSV 색 분포가 프레임마다 크게 달라집니다. 검출 Bounding Box도 차체가 아닌 빛 번짐이나 노면 반사를 따라 움직일 수 있어, 실제 진행 방향과 반대쪽으로 이동한 것처럼 보이기도 합니다. 저 FPS에서는 다음 관측까지 차량이 멀리 이동하므로 Appearance와 Motion 중 하나만으로 이 오류를 복구하기 어려웠습니다.

글레어로 인해 Bounding Box가 왜곡되는 야간 Tracking 시계열

시간 순으로 나열한 프레임. Bounding Box가 Glare Blob에 맞춰지면서 관측 접지점이 진행 방향과 반대로 이동

이에 따라 모든 기준을 단순히 완화하는 대신, 야간의 실패 원인에 맞춰 Feature 조합과 후보 비교 방식, Track 유지 정책을 함께 조정했습니다.

변경 항목야간 적용 방식기대 효과
경쟁 후보이미 다른 쌍에 배정된 후보를 Margin·Mutual-best 경쟁자에서 제외실제로 배정할 수 없는 후보 때문에 정답 연결이 기각되는 문제 방지
FusionHSV를 가중치·문턱·절대 하한에서 제외하고 DINOv2 0.8 : HOG 0.2로 판단Glare 전이 구간의 HSV 급변이 전체 점수를 무너뜨리는 문제 완화
Track LifecycleLost Track 유지 프레임을 5에서 3으로 축소이미 사라진 Track이 정규화와 경쟁 점수에 계속 영향을 주는 문제 감소
신규 TrackDetection Confidence 기준은 0.5에서 0.4로 낮추되, Track Confidence가 0.6 이상일 때만 새 ID 발급야간 미검출을 줄이면서 오탐·부분 검출에서 생기는 불필요한 ID 억제

UA-DETRAC 12개 시퀀스를 1 FPS로 평가한 결과, IDF1은 64.0에서 75.3, MOTA는 56.5에서 64.8로 높아졌고 ID Switch는 640에서 176으로 줄었습니다. Deep Feature 교체의 기여는 약 15%였으며, 나머지 개선은 이미 배정된 후보를 제외하는 경쟁 규칙과 야간 전용 Gate·Lifecycle 조정에서 얻었습니다. 좋은 Feature를 추출하는 것만큼, 불확실한 연결을 언제 거절하고 언제 다시 검토할지 정하는 Matching 절차가 중요하다는 결론을 얻었습니다.


3. 픽셀을 미터로 바꾸는 Camera Calibration

Tracking 결과로 알 수 있는 값은 차량의 픽셀 위치와 시간입니다. 하지만 원근 때문에 같은 픽셀 거리도 화면의 앞쪽과 뒤쪽에서 서로 다른 실제 거리를 의미합니다. 따라서 속도를 계산하기 전에 픽셀 좌표를 도로 위의 미터 좌표로 변환해야 합니다.

원근에 따라 실제로 같은 5 m가 화면에서 서로 다른 픽셀 길이로 보이는 예시

속도를 추정하는 흐름은 간단합니다.
먼저 Tracking으로 같은 차량의 위치와 촬영 시각을 이어 붙이고, Calibration으로 화면 속 위치를 실제 도로 위 위치로 바꿉니다. 마지막으로 두 시점 사이에 차량이 이동한 실제 거리와 경과 시간을 비교해 속도를 구합니다.

처음에는 단안 Depth, 차량 평균 길이, Vanishing Point를 이용한 자동 보정을 검토했습니다. 자동화에는 유리했지만, 저 FPS·회전 차량·희미한 차선이 함께 나타나는 CCTV에서는 작은 추정 오차가 전체 좌표계와 속도에 크게 전달됐습니다. 그럴듯하지만 잘못된 결과가 만들어져도 사용자가 원인을 확인하기 어렵다는 문제도 있었습니다.

최종적으로는 사용자가 신뢰할 수 있는 도로 평면의 기준을 정하고, 시스템이 Homography 계산·검증·저장을 담당하는 사용자 정의형 Calibration을 선택했습니다. 입력 방식은 다음 두 가지입니다.

여기서 Homography는 화면에 사다리꼴로 보이는 도로 영역을 위에서 내려다본 평면으로 펼치는 변환입니다. 영상 속 네 점과 실제 도로 위 좌표를 대응시키면, 차량의 픽셀 위치를 미터 단위 위치로 바꿀 수 있습니다.

  • 실제 도로에서 직사각형인 영역의 네 꼭짓점과 길이·폭
  • 실제 (X, Y) 좌표를 아는 4개 이상의 기준점 또는 도면 대응점

BrnoCompSpeed는 고정형 도로 카메라 영상과 차량별 실측 속도를 제공하는 공개 차량 속도 추정 벤치마크 데이터셋입니다.
이 데이터셋의 9개 카메라 시점에서 실제 Tracking 궤적을 사용해 비교한 평균 절대오차는 다음과 같았습니다.

Calibration 기준평균 절대오차
데이터셋 실측 영역1.13 km/h
짧은 직사각형7.48 km/h
진행 방향으로 긴 직사각형1.52 km/h

이 결과에서 얻은 설정 원칙은 단순합니다.
Calibration 영역은 차량이 실제로 지나는 도로 위에 두고, 진행 방향으로 가능한 한 길게 잡아야 합니다. 짧은 구간에서는 1 m의 입력 오차가 큰 비율 오차가 되지만, 긴 구간에서는 같은 오차의 영향이 작아집니다. 차량 위치를 도로에 투영할 때는 여러 점의 평균보다 Bounding Box의 하단 중심점 한 곳을 사용하는 방식이 가장 안정적이었습니다.


4. VLM 기반 실제 도로 크기 추정

사용자 정의형 Calibration에는 도로 영역의 실제 길이와 폭이 필요합니다. 정확한 값을 직접 측정하는 것이 가장 안전하지만, 모든 현장에서 운영자가 처음부터 적절한 영역과 수치를 판단하기는 어렵습니다. 이에 VLM이 표시된 도로 영역과 주변 장면을 보고 실제 크기의 초깃값을 제안할 수 있는지 검증했습니다.

실험에서는 도로 영역의 네 꼭짓점을 P1–P4로 표시하고, 파란 외곽선과 반투명한 빨간 면으로 측정 영역을 강조했습니다. 이미지 표시만 제공하거나 좌표만 전달하는 방식보다, 표시된 이미지와 네 꼭짓점의 픽셀 좌표를 함께 제공하고 질문은 짧게 유지했을 때 가장 안정적인 결과를 얻었습니다.

VLM에 전달하기 위해 도로 영역을 표시한 예시

Qwen3.8-27B-FP8을 사용해 7개 장면의 3개 카메라 시점, 총 21개 이미지를 대상으로 입력 형식을 개선한 결과는 다음과 같습니다.

평균 비율 오차는 VLM이 추정한 길이·폭이 실제 값에서 평균적으로 얼마나 벗어났는지를 나타내며, 낮을수록 좋습니다.

평가 항목초기 방식최종 입력 방식
평균 비율 오차50.16%25.84%
길이 평균 절대오차-7.80 m
폭 평균 절대오차-1.83 m
길이·폭 모두 10 m 이내-18/21 (85.7%)

입력 방식을 개선해 평균 비율 오차를 절반 가까이 줄였지만, 7.80 m의 길이 오차는 속도 계산에 필요한 절대 기준으로 바로 사용하기에는 컸습니다. 긴 원근 설명이나 Thinking을 추가하는 방식도 모든 장면에서 일관된 개선으로 이어지지 않았습니다.
따라서 현재 단계에서 VLM이 실측값을 자동 확정하도록 하기보다는, 사람이 확인할 수 있는 설정 가이드로 활용하는 것이 적절하다고 판단했습니다.


5. 실제 촬영 시간을 이용한 속도 계산

최종 속도 추정기는 세 가지 정보를 함께 사용합니다.

  • Track ID는 같은 차량의 관측을 연결합니다.
  • Calibration 결과는 Bounding Box 하단 중심점을 실제 도로 위 좌표로 바꿉니다.
  • 실제 촬영 시각은 프레임 수가 아닌 정확한 시간 차이를 제공합니다.

Track별로 최근 위치 이력을 유지한 뒤, 최근 Window의 처음과 마지막 지점이 실제 도로 위에서 얼마나 떨어져 있는지 확인합니다. 이 거리를 두 지점 사이의 실제 촬영 시간으로 나누어 평균 속력을 계산합니다.
프레임 수가 아니라 실제 Timestamp를 사용하기 때문에 입력 FPS가 달라져도 같은 시간 기준을 유지할 수 있습니다. 계산 결과에는 EMA를 적용해 Bounding Box의 작은 흔들림을 줄였습니다.

현재 출력은 순간속도가 아니라 최근 Window의 양 끝점을 기준으로 한 지면상 평균 속력입니다. 따라서 곡선 주행에서는 실제 이동 경로보다 짧게 측정될 수 있으며, 카메라 흔들림이나 비평면 도로에서도 별도의 보정이 필요합니다.

차량 속도 추정 데모


6. 제품화 계획: 연구 결과를 EVA의 기능으로

이번 연구의 목표는 속도값을 계산하는 기술을 만드는 데서 그치지 않고, 현장 운영자가 실제로 설정하고 활용할 수 있는 EVA 기능의 기반을 마련하는 것이었습니다. 차량의 속도와 이동 방향을 EVA의 탐지 영역, 객체 정보, 이벤트 규칙과 결합하면 단순 모니터링을 넘어 다음과 같은 상황을 감지할 수 있습니다.

활용 시나리오적용 예시
과속 차량 탐지공장 내부 도로, 물류 구역, 캠퍼스에서 제한 속도를 넘는 차량 알림
위험 접근 감지차량이 작업자, 설비 또는 통제 구역을 향해 빠르게 접근하는 상황 탐지
급가속·급감속 감지짧은 시간에 속도가 크게 변하는 비정상 주행 상황 확인
비정상 저속·정체 감지통행 구간에서 지나치게 느리게 이동하거나 장시간 정체된 차량 확인
운영 현황 분석시간대·구역별 차량 속도 분포와 위험 이벤트 추이를 대시보드로 제공

이번 연구는 기술적인 성능 검증에만 머물지 않고, 제품화를 전제로 사용자가 기능을 설정하고 결과를 확인하는 UX까지 함께 고려하여 진행했습니다. 이를 바탕으로 운영자가 카메라 화면에서 차량이 지나는 측정 영역을 지정하면 VLM이 길이와 폭의 초깃값을 제안하고, 사용자는 현장 정보나 실측값으로 이를 확인·수정할 수 있도록 구성했습니다. 이후 Overlay 미리보기에서 영역, 차량 궤적, 추정 속도를 한 화면에 보여주어 설정이 올바른지 바로 검증할 수 있습니다.

설정이 완료된 뒤에는 사용자가 구역별 제한 속도와 관심 시나리오를 선택하고, 발생한 이벤트를 EVA의 알림 채널과 대시보드에 연결하는 흐름으로 이어집니다. 고정 카메라에서는 검증된 Calibration을 반복 사용할 수 있으며, 카메라 위치나 Zoom이 바뀐 경우에는 재설정이 필요하다는 안내를 제공하는 방식도 함께 고려하고 있습니다. 이처럼 기술 내부의 복잡성은 줄이고, 사용자가 설정의 근거와 결과를 쉽게 확인할 수 있도록 하는 것이 제품 UX의 핵심입니다.

이번 연구에서 개발한 차량 속도 추정 기술은 현장별 설정 가이드, VLM 기반 초기값 제안, 결과 검증 화면, 시나리오 설정과 알림 연동을 포함하는 제품화 과정을 거쳐 EVA의 정식 기능으로 제공될 예정입니다.