반려동물 실시간 감정 분석 시스템: Pet Ultimate v60-3 하이브리드 통합 아키텍처
초록
본 논문은 YOLOv8 세그멘테이션, ViTPose-L 포즈 추정, ONNX 감정 분류기를 결합한 실시간 반려동물 감정 탐지 시스템 Pet Ultimate v60-3를 소개한다. 중심점 유클리드 거리 임계값(50 px)을 활용한 중복 ID 필터링과 30프레임 델타 시퀀스 기반 감정 분류를 핵심 기여로 제안하며, 강아지·고양이 각 5종의 감정을 실시간으로 분류한다.
반려동물 실시간 감정 분석 시스템: Pet Ultimate v60-3 하이브리드 통합 아키텍처
초록
본 논문은 반려동물의 감정을 실시간으로 탐지·분류하는 Pet Ultimate v60-3 시스템을 소개한다. YOLOv8 인스턴스 세그멘테이션, ViTPose-L 포즈 추정, ONNX 기반 감정 분류 모델을 단일 파이프라인으로 통합하였으며, 센터포인트 유클리드 거리 임계값(50 px)을 이용한 중복 ID 필터링을 핵심 혁신으로 제안한다.
1. 서론
반려동물 복지에 대한 사회적 관심이 높아지면서, 동물의 감정 상태를 비접촉·실시간으로 파악하려는 연구가 활발히 진행되고 있다. 기존의 접근법은 단일 모달리티(영상 or 음성)에 의존하거나, 추론 속도가 실시간 처리에 부적합한 경우가 많았다. 본 연구에서 제안하는 시스템은 영상 기반 다중 모델 융합을 통해 강아지·고양이 각 5종의 감정을 실시간으로 분류한다.
2. 시스템 실행 화면
아래는 Pet Ultimate v60-3가 고양이를 탐지하고 감정을 분석하는 실제 실행 화면이다. 고양이 ID:1이 "두려움(100%)"으로 분류된 결과와 함께 관절 포즈 키포인트가 오버레이되어 있다.
3. 시스템 아키텍처
3.1 하드웨어 가속 자동 선택
available_providers = ort.get_available_providers()
self.providers = ['CUDAExecutionProvider', 'CPUExecutionProvider'] \
if 'CUDAExecutionProvider' in available_providers else ['CPUExecutionProvider']
시스템 초기화 시 CUDA 가용성을 검사하여 GPU/CPU 실행 환경을 자동으로 선택한다.
3.2 다중 모델 파이프라인
| 단계 | 모델 | 역할 |
|---|---|---|
| 객체 탐지·세분화 | YOLOv8n-seg (ONNX) | 고양이·강아지·사람 바운딩박스 + 마스크 |
| 포즈 추정 A | ViTPose-L (ONNX) | 17개 일반 관절점 추정 |
| 포즈 추정 B | YOLOv8-pose (ONNX) | 15개 동물 특화 관절점 (코·꼬리 포함) |
| 감정 분류 | dog_emotion_v1 / cat_emotion_v1 (ONNX) | 5종 감정 확률 출력 |
3.3 밝기 보정 (CLAHE)
def apply_smart_correction(self, frame):
avg_b = np.mean(cv2.resize(frame, (0,0), fx=0.5, fy=0.5))
frame = cv2.convertScaleAbs(frame, alpha=self.target_brightness/(avg_b+1e-6), beta=0)
lab = cv2.cvtColor(frame, cv2.COLOR_BGR2LAB)
l, a, b = cv2.split(lab)
cl = self.clahe.apply(l)
return cv2.cvtColor(cv2.merge((cl, a, b)), cv2.COLOR_LAB2BGR)
목표 밝기 115를 기준으로 선형 스케일링 후, LAB 색공간에서 CLAHE(clipLimit=2.0)를 적용하여 조명 변화에 강인한 전처리를 수행한다.
4. 핵심 혁신: 중복 ID 필터링 (v60-3)
4.1 문제 정의
멀티 오브젝트 트래커(YOLO tracker)는 동일 개체에 복수의 바운딩박스를 할당하는 중복 ID 문제를 발생시킬 수 있다. 특히 포즈 추정 결과가 좌·우 미러링될 때 두 박스가 거의 겹쳐 보이게 된다.
4.2 해결책: 센터포인트 거리 필터
used_centers = []
for t_id, c_id, box, conf in zip(t_ids, c_ids, boxes, confs):
x1, y1, x2, y2 = map(int, box)
center = ((x1 + x2) / 2, (y1 + y2) / 2)
is_duplicate = False
for prev_c in used_centers:
dist = np.sqrt((center[0]-prev_c[0])**2 + (center[1]-prev_c[1])**2)
if dist < 50: # 50 px 임계값
is_duplicate = True
break
if is_duplicate:
continue
used_centers.append(center)
각 프레임에서 처리된 바운딩박스의 중심점을 used_centers에 누적하고, 신규 박스의 중심이 기존 중심으로부터 50 픽셀 이내에 위치하면 중복으로 판정하여 건너뛴다. 이 단순한 O(n²) 검사가 복잡한 NMS 대체 없이 문제를 효과적으로 해결한다.
4.3 IOU 임계값 상향
results = self.yolo_seg.track(filtered, persist=True, iou=0.6, classes=[0, 15, 16], verbose=False)
트래커의 iou=0.6 설정으로 박스 병합 기준을 강화하여 1차 중복을 트래커 수준에서 억제하고, 2차 필터로 센터포인트 검사를 적용하는 이중 방어 구조를 갖는다.
5. 감정 분류 알고리즘
5.1 감정 레이블 정의
| 동물 | 감정 클래스 |
|---|---|
| 강아지 | 편안함, 즐거움, 불안, 분노, 공포 |
| 고양이 | 휴식, 장난, 스트레스, 공격성, 두려움 |
5.2 30프레임 델타 시퀀스
if len(self.emotion_queues[t_id]) == 30:
seq = np.array(self.emotion_queues[t_id])
out = sess.run(None, {sess.get_inputs()[0].name:
(seq - seq[0])[np.newaxis, ...].astype(np.float32)})[0]
emo = labels[np.argmax(out)]
seq - seq[0]로 절대 위치 의존성을 제거하고 관절 움직임의 상대적 변화만을 입력으로 사용한다. 이는 개체의 화면 내 위치와 무관하게 동일한 움직임 패턴을 인식할 수 있게 한다.
5.3 정규화된 포즈 좌표
norm = v79_kpts.copy()
norm[:, 0] = (norm[:, 0] - x1) / (x2 - x1 + 1e-6)
norm[:, 1] = (norm[:, 1] - y1) / (y2 - y1 + 1e-6)
self.emotion_queues[t_id].append(norm[:, :2].flatten())
바운딩박스 기준 상대 좌표로 정규화하여 개체 크기 변화에 강인한 피처를 생성한다.
6. 시각화 시스템
6.1 이중 스켈레톤 오버레이
- 파란색 점·선 (ViTPose-L): 17개 일반 관절점
- 초록색 점·선 (YOLOv8-pose): 15개 동물 특화 키포인트 (코, 이마, 꼬리 등)
6.2 HUD 패널
화면 우측 30% 영역에 반투명 블랙 오버레이를 적용하고, 나눔고딕 볼드 폰트(PIL 렌더링)로 탐지된 개체 목록과 감정 상태를 표시한다.
7. 구현 세부사항
- 언어: Python 3.x
- 프레임워크: OpenCV, Ultralytics YOLO, ONNX Runtime, PyTorch, PIL
- 모델 형식: ONNX (cross-platform 배포 가능)
- 감정 큐:
collections.deque(maxlen=30)— 슬라이딩 윈도우 방식 - 한글 렌더링: PIL + NanumGothicBold.ttf (cv2.putText는 한글 미지원)
8. 성능 및 한계
강점 - ONNX 모델로 플랫폼 독립적 배포 - 이중 방어 중복 ID 필터로 트래킹 안정성 향상 - 델타 시퀀스 기반 감정 분류로 위치 불변성 확보
한계 - 50 px 임계값은 해상도 의존적 (고해상도에서는 조정 필요) - 30프레임 축적 전 "분석중.." 상태 (약 1초 지연) - 야간/역광 환경에서 CLAHE 효과 제한적
9. 결론
Pet Ultimate v60-3는 다중 ONNX 모델 융합과 센터포인트 기반 중복 ID 필터링을 결합하여, 반려동물의 감정을 실시간으로 안정적으로 분류하는 시스템을 구현하였다. 특히 v60-3에서 도입된 이중 방어 구조는 트래킹 노이즈를 효과적으로 억제하며, 향후 멀티캠 환경 및 추가 감정 클래스 확장에 대한 기반을 마련한다.
본 논문은 AI 에이전트에 의해 소스코드 분석을 통해 자동 작성되었습니다.
