후기 이미지 분류 모델을 개선하려면 최근 데이터를 다시 라벨링해야 했지만, 10만 장 규모에서 로컬 수작업은 한계에 부딪혔다. S3 이미지 수집과 중복·손상 파일 제거부터 드래그 앤 드롭, 1장씩 분류, 기존 모델을 활용한 반자동 방식까지 비교한다. AWS SageMaker Ground Truth의 private workforce가 협업 문제는 해결했지만 객체 수 기반 비용 때문에 실제 도입은 보류한 과정이다.
핵심 포인트- 기존 이미지 분류기는 스크린샷 후기 비율을 약 10%에서 1%대로 낮췄지만 1년 이상 추가 학습이 없어 오분류 개선이 필요했다.
- S3에서 받은 이미지에는 상품별 중복과 손상 파일이 섞여 있어 해시 중복 제거와 PIL 로딩 검증을 먼저 수행했다.
- 1만 장 정도는 Finder 드래그 앤 드롭이 가장 빨랐고, 1장씩 명령으로 분류하는 방식은 정확하지만 더 느렸다.
- 기존 모델로 선분류한 뒤 사람이 검수하면 작업은 단순해지지만 로컬 추론 비용과 장당 약 200ms의 처리 시간이 들었다.
- Ground Truth는 여러 작업자를 초대하고 진행 상황과 JSON 결과를 관리할 수 있지만, 10만 객체의 private 작업에도 당시 약 4,000달러가 필요했다.
상세 정리- 운영 배경: 컬리는 고객 후기 이미지에서 스크린샷과 실제 사진을 구분하는 모델을 사용했다. 초기 배포 뒤 비율 개선 효과는 있었지만 장기간 재학습하지 않아 정확도 요구가 누적됐다.
- 데이터 규모: 후기 이미지는 날짜별 S3 경로에 저장됐고 하루 약 6천~8천 장이 추가됐다. 2020년 1월 기준 전체는 약 600만 장으로 추산했다.
- 수집: aws s3 cp 명령으로 특정 날짜 경로의 이미지를 로컬에 내려받았다. 우선 약 3일치, 1만 장이 넘는 데이터를 살폈다.
- 중복 문제: 장바구니 단위 후기 등록 때문에 같은 이미지가 여러 상품에 중복될 수 있었다. 파일의 SHA-1 해시를 키로 저장하고 이미 본 해시가 나오면 중복 파일을 삭제했다.
- 손상 문제: 업로드 실패 등으로 잘못된 파일이 있었고, 몇 시간 진행한 학습이 중간에 종료되기도 했다. PIL Image로 열고 load가 실패하는 파일을 제거했다.
- 첫 라벨링: 사진과 스크린샷 두 종류라 Finder 미리보기에서 여러 파일을 골라 폴더로 옮겼다. 1만 장이 조금 넘는 데이터를 한 시간 남짓에 처리했지만 오분류 위험이 컸다.
- 두 번째 방식: 이미지를 하나씩 448×448 RGB로 보여주고 키 입력으로 photo와 screenshot 폴더에 이동했다. 초당 약 2장, 1만 장에 약 1시간 반이 걸렸다.
- 반자동 방식: 첫 모델이 생긴 뒤에는 모델이 먼저 분류하고 작업자가 결과를 확인했다. 사람의 판단 부담은 줄지만 로컬 장비에서 추론하는 데 장당 약 200ms가 필요했다.
- 확장 한계: 최근 10만 장을 받자 Finder가 폴더 접근만으로 멈춰 첫 방식은 사용할 수 없었다. 여러 사람이 나눠 작업할 수 없는 로컬 도구의 한계도 드러났다.
- Ground Truth 입력: 대상 파일을 S3에 올리고 manifest를 만든 뒤 이미지 분류 작업 유형을 선택한다.
- 인력 선택: AWS 외주, private workforce, 다른 업체 외주를 선택할 수 있다. AWS 외주는 난이도와 분류 시간에 따라 가격이 달라졌다.
- private workflow: 이메일로 내부 작업자를 초대하고, 라벨·예시·작업 지침과 실제 화면을 구성한다. 관리 화면에서 진행률을 확인할 수 있다.
- 결과 처리: 완료 결과는 이미지 경로와 라벨을 담은 JSON으로 받아 학습 폴더를 구성할 수 있다. Chain으로 다음 분류 작업을 연결하는 것도 가능하다.
- 비용 결론: 협업과 결과 관리에는 잘 맞았지만 내부 인력이 직접 라벨링해도 객체 수 요금이 붙었다. 10만 장에 약 4,000달러라 실제 도입은 어렵다고 판단했다.
왜 읽나이미지 모델의 재학습을 준비하며 데이터 정제, 수작업 라벨링, 반자동화, 관리형 라벨링 서비스의 비용을 함께 비교해야 하는 ML 실무자에게 유용하다.