연구 03 · 컴퓨터 비전 · 가상 착용
인물 사진에 옷을 입혀 보는 가상 착용 앱
2021 · 학부연구생인물 사진과 입힐 옷을 고르면 서버가 가상 착용 이미지를 돌려주는 Android 앱과 서버를 만들었습니다.
- 1인물 사진·입힐 옷 선택
Android 앱에서 인물 사진과 의류 ID 전송
- 2인체 파싱, 포즈, 옷 마스크
ACGPN 입력 형식으로 정리
- 3착용 이미지 생성
Flask 서버가 앱으로 반환
ACGPN과 인체 파싱, 포즈 추정 공개 모델을 묶은 통합 구현
직접 맡은 역할과 결과
- 맡은 역할
- 공개 가상 착용 모델에 필요한 입력 전처리와 의류 마스크를 구성하고, Flask 업로드 API와 Kotlin·Retrofit Android 클라이언트를 연결했습니다.
- 만들어낸 결과
- 인물 사진과 고른 옷을 받아 전처리하고, 착용 이미지를 만들어 앱으로 돌려주기까지 한 번에 동작하게 만들었습니다. 생성 모델과 포즈 추정, 인체 파싱 모델은 공개 모델을 그대로 썼고, 직접 구현한 것은 모델 입력 만들기와 마스크 처리, 서버와 앱 연동입니다.
직접 구현·분석한 것
- 인체 파싱, 포즈, 의류 마스크를 ACGPN 입력 형식으로 정리
- OpenCV GrabCut으로 의류 마스크 생성
- Flask 업로드, 결과 반환 API
- Kotlin, Retrofit Android 클라이언트 연결
바탕이 된 연구·공개 모델
- ACGPN 가상 착용 모델
- 인체 파싱, 포즈 추정 공개 모델
실험 결과와 시행착오
업로드부터 착용 결과 반환까지 확인하고 마스크 오류를 분석했습니다
공개 코드 실행 · VITON-HD 테스트 이미지(CC BY-NC 4.0) · 얼굴 모자이크 · 아래 시간은 CPU 실험값
서버 업로드 API로 착용 이미지를 받아 보니, 옷 40벌 중 13벌은 GrabCut 사각형이 이미지 밖으로 나가 마스크가 배경까지 번졌습니다.
- Apple M1 Pro CPU
- PyTorch
- 공개 가중치
- 서버 업로드 API 실행

- 13 / 40벌마스크가 배경까지 번진 옷
- 0.93 → 0.96사각형을 고친 뒤 마스크 IoU
- 4.9초요청 한 번 · CPU 중앙값
문제와 해결
문제가상 착용 모델에는 인물 사진 말고도 포즈와 신체 부위, 옷 영역을 정해진 형식으로 넣어야 합니다.
해결공개 인체 파싱·포즈 추정 모델의 출력을 ACGPN 입력 형식에 맞추고, GrabCut으로 의류 마스크를 만드는 전처리를 붙였습니다.
문제여러 모델의 파일 입출력을 사용자가 직접 다루기에는 과정이 복잡합니다.
해결Flask 업로드 API 하나가 전처리와 추론을 차례로 실행해 결과 이미지를 돌려주게 했고, Android 앱은 Retrofit으로 이 API를 호출합니다.
문제의류 마스크에 배경이 섞이면 생성된 옷과 몸통이 번집니다.
보완 실험공개 코드를 실행하다가 GrabCut 초기 사각형이 이미지 경계를 넘는 문제를 찾았고, 사각형을 이미지 안으로 줄인 비교 실험에서는 마스크 IoU 중앙값이 0.929에서 0.957로 올랐습니다.
실험 비교와 세부 결과
| 항목 | 결과 | 조건 |
|---|---|---|
| 요청 한 번 처리 시간 | 중앙값 4.90초 (사분위 3.57–6.57초) | 요청 40회, CPU |
| 그중 ACGPN 생성 | 중앙값 2.27초 | 같은 40회 |
| 같은 옷 복원 SSIM | 평균 0.869 · 중앙값 0.884 | 인물 20명 |
| GrabCut 마스크 IoU | 중앙값 0.929 → 0.957 | 옷 40벌 · 코드 그대로 → 사각형을 이미지 안으로 |
관찰한 원인과 남은 과제
- GrabCut 사각형 오류
사각형 (1, 1, w, h)가 이미지 경계를 넘어 배경 단서가 위와 왼쪽 한 줄뿐이었고, 40벌 중 13벌에서 마스크가 배경까지 번졌습니다.
- 실패 유형 세 가지
마스크가 배경으로 새면 몸통이 번지고, 소매 길이가 바뀌면 팔에 잔상이 생기고, 기장이 다르면 원래 옷 무늬가 밑단 아래에 남습니다.
- SSIM 읽는 법
같은 옷을 다시 입혀 원본과 비교한 값입니다. 옷 밖은 입력을 그대로 쓰므로 점수가 후하고, ACGPN 논문 값과 비교할 수 없습니다.
- 데이터와 가중치
VITON 데이터는 배포가 막혀 VITON-HD 테스트 이미지를 썼고, ACGPN과 OpenPose 가중치는 비상업 연구용으로 공개된 것입니다.
결과를 읽는 기준
- 화질이나 속도를 개선한 성과가 아닌 통합 구현
- 공개 가중치로 테스트 이미지 몇십 장을 돌린 값
- 제품 수준 성능이나 상용 운영 여부는 보여 주지 않음
서로 다른 모듈의 입력과 출력을 맞춰 하나로 잇는 일은, 서버에서 만든 가공 계획을 Fusion에서 실행되게 하는 지금의 작업과 닮았습니다.
3D 모델을 읽고 가공 전략까지 설계하는 AI