[POSTECH 산학 연구] 저 FPS CCTV에서 차량 속도를 추정하는 방법
[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 색상 공간(왼쪽)과 픽셀 값을 구간별로 누적하는 Histogram 예시(오른쪽)
서로 다른 차량의 색 분포는 각 Histogram Bin에서 더 작은 값을 합산하는 Histogram Intersection으로 비교했습니다. 색 분포가 많이 겹칠수록 점수가 커지므로, 차종이 같아도 차체 색상이 다른 차량을 빠르게 구분하는 데 도움이 됩니다.
HOG: 윤곽과 밝기 경계를 수치화하다
HOG는 차량 Crop을 흑백으로 변환한 뒤, 픽셀마다 밝기가 변하는 방향과 강도를 계산합니다. 작은 Cell 안에서 방향별 Gradient를 Histogram으로 만들고, 주변 Cell을 Block으로 묶어 정규화한 뒤 이어 붙이면 색상에 덜 의존하는 윤곽 Feature가 완성됩니다.

밝기 변화의 방향과 강도를 방향별 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별 유사도를 결합하고, 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가 Glare Blob에 맞춰지면서 관측 접지점이 진행 방향과 반대로 이동
이에 따라 모든 기준을 단순히 완화하는 대신, 야간의 실패 원인에 맞춰 Feature 조합과 후보 비교 방식, Track 유지 정책을 함께 조정했습니다.
| 변경 항목 | 야간 적용 방식 | 기대 효과 |
|---|---|---|
| 경쟁 후보 | 이미 다른 쌍에 배정된 후보를 Margin·Mutual-best 경쟁자에서 제외 | 실제로 배정할 수 없는 후보 때문에 정답 연결이 기각되는 문제 방지 |
| Fusion | HSV를 가중치·문턱·절대 하한에서 제외하고 DINOv2 0.8 : HOG 0.2로 판단 | Glare 전이 구간의 HSV 급변이 전체 점수를 무너뜨리는 문제 완화 |
| Track Lifecycle | Lost Track 유지 프레임을 5에서 3으로 축소 | 이미 사라진 Track이 정규화와 경쟁 점수에 계속 영향을 주는 문제 감소 |
| 신규 Track | Detection 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를 추출하는 것만큼,

