Object Re-identification (Re-ID)
객체 재식별(Re-ID)은 외관 임베딩을 비교해 카메라, 시간 간격, 가림이 달라져도 같은 사람이나 차량을 다시 인식합니다.
객체 재식별(Re-ID)은 객체가 다른 카메라에 다시 나타나거나, 시간이 지난 후 다시 나타나거나, 가려진 뒤 다시 나타났을 때 동일한 객체인지 인식하는 컴퓨터 비전 작업입니다. 객체 탐지가 이미지에 사람이 있음을 알려준다면, Re-ID는 그 사람이 10분 전에 입구 카메라를 지나간 사람과 동일한지 판단합니다. 옷 색상, 체형, 소지한 가방, 차량 색상과 지붕의 세부 사항 같은 외형을 비교합니다. 따라서 시야가 겹치지 않는 카메라 네트워크에서 관측 결과를 연결하는 주요 도구입니다. 사람 Re-ID와 차량 Re-ID가 가장 많이 연구된 유형입니다.
재식별의 작동 방식#
Re-ID 시스템은 탐지된 객체마다 간결한 외형 디스크립터를 생성하고 디스크립터를 비교합니다:
- 탐지 및 크롭: 탐지기가 각 사람이나 차량을 찾고, 바운딩 박스 안의 이미지를 잘라낸 뒤 크기를 조정합니다.
- 임베딩으로 인코딩: 컨볼루션 신경망 또는 비전 트랜스포머가 크롭 이미지를 수백 개에서 수천 개의 숫자로 이루어진 벡터로 변환해 객체의 외형을 요약합니다.
- 코사인 유사도로 매칭: 쿼리 임베딩을 저장된 임베딩 갤러리와 비교해 점수를 매기고, 유사도가 높은 순서대로 갤러리를 정렬합니다. 일부 시스템은 대신 유클리드 거리를 사용합니다.
최고 점수에 대한 임계값으로 쿼리가 알려진 신원인지 새로운 신원인지 판단합니다:
인코더는 메트릭 학습으로 학습해 동일한 신원의 임베딩은 서로 가까이 모이고 서로 다른 신원의 임베딩은 멀어지도록 합니다. 일반적인 학습 방식은 신원 분류 손실과 트리플렛 손실을 결합합니다. 트리플렛 손실은 기준 이미지를 같은 신원의 다른 이미지에 가깝게 하고 다른 신원의 이미지에서는 멀어지게 하며, 하드 네거티브 마이닝으로 외형이 비슷한 사례에 집중합니다. 핵심 과제는 불변성입니다. 시점, 조명, 해상도, 부분적인 가림이 달라도 동일한 사람은 서로 가까운 임베딩으로 표현되어야 합니다.
Re-ID와 추적 및 안면 인식 비교#
Re-ID는 다음 두 가지 인접 작업과 혼동되는 경우가 많습니다:
- 객체 추적: 일반적으로 칼만 필터로 객체의 움직임을 예측하고 프레임 간 박스의 겹침 정도를 비교해 매칭함으로써 한 비디오 안에서 객체를 추적합니다. 시간적 연속성에 의존하므로 객체가 오랫동안 가려지거나 시야를 벗어나면 추적이 끊깁니다. 바로 이러한 공백에서 Re-ID가 신원을 복구합니다.
- 안면 인식: 수년간 안정적으로 유지되는 얼굴 특징으로 사람을 식별하며, 얼굴이 보여야 합니다. 사람 Re-ID는 뒤에서 찍혔거나 해상도가 낮아도 작동합니다. 주로 옷차림에 의존하기 때문에 일반적으로 몇 시간에서 하루 정도만 유효합니다.
다중 객체 추적기에서의 Re-ID#
2017년 DeepSORT 이후 여러 다중 객체 추적(MOT) 추적기가 Re-ID 임베딩을 움직임 단서와 결합해, 두 사람이 서로 교차해도 각자의 ID를 유지하고 기둥 뒤로 사라진 사람에게 기존 ID를 다시 부여합니다. Ultralytics YOLO의 추적 모드에서 BoT-SORT, Deep OC-SORT, TrackTrack 추적기는 with_reid: True을 허용하며, yolo26n-reid.onnx부터 yolo26x-reid.onnx까지 처음 사용할 때 다운로드되는 YOLO26 Re-ID 인코더를 불러올 수 있습니다:
from ultralytics import YOLO
from ultralytics.utils import YAML
from ultralytics.utils.checks import check_yaml
# Copy the default TrackTrack settings and enable Re-ID with a YOLO26 appearance encoder
cfg = YAML.load(check_yaml("tracktrack.yaml"))
cfg.update(with_reid=True, model="yolo26n-reid.onnx")
YAML.save("tracktrack_reid.yaml", cfg)
# Track people (class 0); appearance embeddings help restore IDs after occlusions
model = YOLO("yolo26n.pt")
source = "https://github.com/ultralytics/assets/releases/download/v0.0.0/decelera_portrait_min.mov"
identities = set()
for result in model.track(source, tracker="tracktrack_reid.yaml", classes=[0], stream=True):
if result.boxes.is_track:
identities.update(result.boxes.id.int().tolist())
print(f"Person identities assigned: {len(identities)}")가려진 뒤 추적기가 복구한 모든 ID는 출력되는 인원수가 비디오에 실제로 등장하는 인원수에 더 가까워지도록 합니다.
실제 적용 사례#
- 리테일 분석: 통로 카메라에 포착된 쇼핑객의 관측 결과를 연결하면 익명화된 매장 전체 이동 경로, 체류 시간, 전환 퍼널을 파악할 수 있습니다.
- 교통 관리: 차량 Re-ID는 번호판을 읽을 수 없는 경우에도 서로 다른 교차로에서 동일한 차량이 포착된 결과를 연결해 이동 시간과 출발지-목적지 흐름을 측정합니다.
- 스포츠: 선수 Re-ID는 선수가 중계 화면을 벗어나거나 스크럼에서 뒤엉켜도 일관된 신원을 유지합니다.
- 야생동물 연구: 동물 Re-ID는 카메라 트랩 및 드론 이미지에서 털 무늬와 지느러미 표시를 바탕으로 얼룩말, 고래, 대형 고양잇과 동물을 개체별로 식별합니다.
벤치마크 및 지표#
Re-ID는 검색 문제로 평가합니다. Rank-1 정확도는 가장 높은 순위의 갤러리 이미지가 올바른 신원을 보여주는 쿼리의 비율이며, 평균 정밀도(mAP)는 전체 갤러리에서 모든 정답 매치가 얼마나 높은 순위에 놓이는지 측정합니다. 대표적인 사람 Re-ID 벤치마크인 Market-1501에는 대학 캠퍼스의 카메라 6대로 촬영한 1,501명의 바운딩 박스 32,668개가 포함됩니다.










