피드로 돌아가기
Dev.toAI/ML
원문 읽기
I Built an AI Skin Disease Detector with Flask, TensorFlow Lite, and Groq — Here's How
Flask + TensorFlow Lite + Groq를 조합해 2초 이내 피부질환 AI 진단 웹앱 개발 및 배포
AI 요약
Context
피부질환은 의료 접근성이 제한된 지역에서 조기 진단이 어렵고, 의사 상담 전에 초기 판단 정보가 필요한 상황이었다.
Technical Solution
- MobileNetV2 기반 CNN 모델을 TensorFlow Lite로 변환: 58MB H5 모델을 2.7MB TFLite 모델로 축소
- 서버 시작 시 TFLite 인터프리터를 메모리에 로드: 첫 예측은 느리지만(콜드 스타트) 이후 예측은 즉시 응답
- 업로드된 이미지를 메모리에서만 처리 후 폐기: 디스크 저장 없음, 데이터베이스 기록 없음
- Groq Llama 4 Scout 17B API로 CNN 예측값을 의료 설명으로 변환: 약 1초 내 3단락 텍스트 생성
- Flask + Jinja2 + Alpine.js + Tailwind로 단일 app.py 구성: 빌드 파이프라인 미사용, 서버 렌더링 방식
- CSRF 토큰 검증, SRI 해시 무결성 검사, HSTS 등 보안 헤더 적용
- 세션당 3회 분석 제한, 파일 타입 화이트리스트, 최대 10MB, 4096x4096 픽셀 제한
- Render 무료 플랜의 단일 Gunicorn 워커로 배포
Impact
- 7-class 피부질환 분류기: 71.64% 정확도
- 이진 원숭이두창 감지기: 95% 정확도
- 모델 크기 감소: 58MB → 2.7MB (95.3% 축소)
- 예측 응답 시간: 2초 이내
- 콜드 스타트 시간: 약 30초
Key Takeaway
TFLite 모델 경량화와 Groq 같은 외부 LLM API의 조합으로, 의료 도메인 웹앱에서 진단 정보의 사용성을 크게 높일 수 있으며, 프라이버시 우선 설계(메모리 기반 처리)와 최소 스택(React 미사용)으로도 프로덕션 품질의 보안과 성능을 달성할 수 있다.
실천 포인트
CNN 분류 모델을 배포하는 웹서비스에서 TensorFlow Lite로 변환하고 시작 시점에 인터프리터를 메모리에 로드하면, 모델 크기를 90% 이상 줄이면서도 예측 지연 시간을 무시할 수 있는 수준으로 유지할 수 있다. 또한 사용자 이미지를 메모리 범위 내에서만 처리하고 즉시 폐기하는 방식으로 GDPR/HIPAA 같은 규정 준수를 단순화할 수 있다.