비정사각(16:9) 입력으로 포즈 검출기 CPU 연산 40% 절감
웹캠 영상은 16:9인데 검출기는 640×640 정사각으로 레터박스해서 추론하고 있었습니다. 위아래 여백까지 계산하는 셈이라, YOLO11n 기반 얼굴 · 사람 포즈 모델을 640×384 직사각 입력으로 다시 학습했습니다. 연산량과 CPU 지연이 약 40% 줄었고, 정확도 손실은 AP50 0.01 미만이었습니다.
- 기간
- 2026.09.28 ~ 09.30, 사후 재검토 10.03
- 모델
- YOLO11n 기반 포즈 모델 — 얼굴 · 사람 박스와 키포인트
- 측정 환경
- 배포 환경과 같은 CPU · OpenVINO INT8 (1 · 4 · 16코어)
- 기술
- Ultralytics · PyTorch · OpenVINO (NNCF) · 커스텀 트레이너
정사각 입력이 계산하던 빈 여백
1280×720 웹캠 프레임을 가로 640에 맞추면 그림은 640×360입니다. 정사각 640×640에 넣으면 위아래 280줄이 레터박스 여백이고, 검출기는 그 여백까지 합성곱을 돌립니다.
학습 파이프라인 수정 → 측정 → 사후 재검토
01 — 비정사각 학습을 직접 붙였습니다
Ultralytics는 학습 입력 크기를 한 값(정사각)으로만 받고, 직사각 배치(rect)는 멀티 GPU 학습에서 꺼집니다. 학습은 정사각, 추론만 직사각으로 하면 학습과 추론의 입력 분포가 어긋납니다.
증강 캔버스의 높이를 에폭마다 바꿔 직사각 입력으로 학습하는 커스텀 트레이너를 작성했습니다.
02 — 증강 단계에서 라벨이 사라지던 문제
학습 후반 모자이크 증강이 꺼진 구간에서 원본 이미지가 잘려, 잘린 쪽의 박스와 키포인트가 사라지는 현상을 찾았습니다.
아핀 변환 앞에서 레터박스를 먼저 맞추도록 순서를 바꿔, 그림이 캔버스 밖으로 잘리지 않게 했습니다.
03 — GPU가 아니라 배포 환경(CPU)으로 판단
GPU에서 배치 1로 재면 해상도를 줄여도 지연이 거의 같았습니다. 지연의 77.6%가 커널 디스패치 오버헤드라 입력 크기가 지연에 드러나지 않았습니다.
실제 배포 환경인 CPU · OpenVINO INT8에서 1 · 4 · 16코어로 측정해 판단했습니다.
CPU 지연은 OpenVINO INT8 · 1코어 기준입니다. 4코어 · 16코어에서도 감소폭은 약 40%로 비슷했습니다.
04 — 결과와 사후 재검토 2026.10.03
- 정확도 — 같은 조건의 정사각 모델 대비 얼굴 AP50 −0.0065, 사람 AP50 −0.002 이내. 다만 16px 미만의 아주 작은 얼굴은 손실이 더 컸습니다.
- 재검토 — 결과를 정리한 뒤 다시 검토하다가 커스텀 트레이너의 증강 버그를 스스로 찾아, 처음 보고한 정확도 대가를 바로잡았습니다.
증강 샘플
공개 이미지로 새로 만들어 넣을 자리입니다.