카테고리 없음

반려동물 체형 분석기

kynikosist 2026. 5. 27. 08:00

서론

토스 미니앱 공모전용으로 만든 반려동물 체형 분석기다.

사진 3장으로 강아지·고양이의 BCS(비만도)를 판정하는 앱이다.

AI Hub 공공데이터 12만 건으로 모델을 학습시켰는데, 지원 품종이 11종뿐이다.

사용자들의 사진과 체중 데이터를 모아서 모델을 더 똑똑하게 만들 수 있는 구조를 설계했다.

문제

  • AI Hub 데이터는 강아지 7종, 고양이 4종만 커버한다. 말티즈나 토이푸들 같은 인기 소형견은 있지만, 커버리지가 넓진 않다
  • 수의사가 직접 라벨링한 데이터라 품질은 좋지만, 더 이상 데이터가 늘어나지 않는다. 고정된 데이터셋이다
  • 실제 사용자의 반려동물은 데이터셋과 다르다. 조명, 각도, 배경이 전부 다르다. 현장 데이터로 보강하지 않으면 모델이 학습 데이터에만 잘 맞는 상태로 남는다

해결(토스 미니앱 사용해보기)

 

토스 펫팻

앱 설치 없이 쓰는 토스 미니앱

og.toss.im

 

기여하기 추가

핵심 원칙은 하나다. 측정 흐름은 100% 온디바이스를 유지한다.

기여하지 않는 사용자에게는 아무것도 달라지지 않는다.

결과 화면에 "데이터 기여하기" 카드를 하나 추가했다.

버튼을 누르면 바텀시트가 올라오고, 종 선택과 체중 입력을 받는다.

동의하면 사진 3장이 224x224로 리사이즈되어 Supabase로 올라간다.

사진 3장 합쳐서 90KB. GPS나 기기 정보 같은 EXIF 메타데이터는 리사이즈 과정에서 자동으로 날아간다.

수의사 없이 라벨을 만드는 법

사용자 데이터의 핵심 문제는 라벨이다.

"이 사진이 과체중인지 표준인지" 누가 판단하나. 사용자 주관에 맡기면 편향이 심하다.

수의사를 고용할 수도 없다.

 

내가 생각한 방법은 종별 표준 체중 범위를 이용하는 것이다.

말티즈의 표준 체중이 2.0~3.2kg이면, 입력된 체중이 2.7kg × 0.85 이하면 저체중, 3.2kg × 1.15 이상이면 과체중, 그 사이면 표준. 수의학적 BCS와 정확히 일치하진 않지만, "대략적으로 맞는 약한 라벨"로는 충분하다.

이 라벨이 완벽하지 않다는 건 안다.

학습할 때 label smoothing을 높여서 라벨 노이즈에 대한 내성을 확보한다.

매 파인튜닝마다 50건씩 수동으로 눈으로 확인하고, 정확도가 70% 미만이면 계수를 재조정하려고 한다.

기존 데이터와 섞어서 학습

사용자 데이터만으로 학습하면 기존 성능이 망가진다.

이전에 잘 맞추던 것까지 틀리게 되는 catastrophic forgetting이 일어난다.

AI Hub 원본 12만 건과 사용자 기여 데이터를 합쳐서 학습한다.

기여 데이터는 원본의 30% 이하로 제한한다.

특정 종에서 기여가 20건 미만이면 노이즈 비율이 너무 높으니 아예 안 넣는다. 기존 11종의 성능이 떨어지면 배포하지 않는다.

프라이버시

토스 미니앱이라 토스 계정 정보에 접근할 수 있지만, 쓰지 않는다.

수집하는 건 리사이즈된 사진 3장, 종, 체중뿐이다. Supabase anonymous auth로 익명 세션을 만들고, 이 세션은 기여 횟수 제한과 철회 처리에만 쓴다.

기여 후 철회하고 싶으면 로컬에 저장된 기여 ID로 삭제 요청을 보낸다.

기여하기 버튼을 누르기 전까지는 어떤 데이터도 전송되지 않는다.

이 구분을 UX에서 명확하게 보여준다.

결론

아직 위에서 언급한 추가 학습은 한번도 진행되지 않았다.

기여 500건 이상 쌓이면 첫 파인튜닝을 돌릴 계획이다.

설계하면서 제일 고민한 건 자동 라벨링이었다.

수의사 판단 없이 객관적 라벨을 만드는 게 가능한가. 결론은 "완벽하지 않아도 체계적으로 보정하면 쓸 만하다"는 거다.

체중 기반 약한 라벨 + 노이즈 내성 학습 + 수동 스팟체크.

이 세 겹이면 실용적 수준은 되지 않을까 기대해본다.

 

사용한 도구들

비슷한 구조를 만들어보고 싶다면:

 

용도 도구 비고
AI 모델 TensorFlow.js 브라우저 온디바이스 추론. 서버 비용 0원
학습 TensorFlow / Keras EfficientNet B0 기반. AI Hub 데이터로 학습예정
공부는 PyTorch를 했지만 GPU서버를 따로 두지 않고
사용자 스마트폰에서 구동하려면 TensorFlow가 적합하다.
백엔드 Supabase Storage + DB + anonymous auth. 무료 티어
앱 프레임워크 React + TypeScript 토스 미니앱 빌드 시스템(granite) 위에서 동작
공공 데이터 AI Hub 반려동물 건강정보 데이터셋 12만 건. 무료