인공지능 서비스 개발 및 ML 워크플로 이해
-
모델링
- Python, Tensorflow
-
웹 앱
- Frontend – Bootstrap(HTML, CSS)
- Backend - Flask
- Server - GCP Compute Engine
-
Platform
- Docker
-
기타
- Github
- 가위,바위,보 이미지 각각 2,500개, 총 7,500개의 이미지 데이터
- 모델링 과정에서 오분류된 데이터 중 이상데이터 제거
하드웨어 사양
- Tesla K80 12GB, (Colab 환경, GPU)
데이터의 개수가 많지 않아 전이 학습을 진행
MobileNet, Xception, ResNet50 모델을 비교
- Optimizer : Adam
- learning rate : 2e-5
- Epochs : 20
- Metrics : Cross entropy
MobileNet | Xception | ResNet50 | |
---|---|---|---|
파라미터 개수 | 5,589,187 | 29,251,115 | 31,977,347 |
소요 시간(분:초) | 6:17 | 11:23 | 9:01 |
정확도(%) | 99.3 | 99.5 | 99.7 |
비교 결과 모두 3% 미만의 overfitting, 99% 이상의 정확도를 보여주며, 모델 간 0.5% 이하의 차이를 보여줌
추후 CI/CD 적용을 고려하여 가장 가벼운 모델인 MobileNet 채택
- HTML, CSS를 통해 웹 페이지 구현
- File 송수신을 통해 서버와 이미지를 주고 받음
- Flask를 통해 GCP 서버에서 웹 페이지 구동
- Github를 통한 이슈 트래킹과 코드 형상관리
- Docker를 통한 Container 제공, 배포 관리 단순화
- 비교적 간단한 분류 문제로서 MobileNet과 같이 복잡한 모델을 사용하지 않아도 충분히 성능을 낼 수 있을 것으로 예상, 더 작은 모델로 개선 가능
- 웹앱, 컨테이너, 인스턴스 간의 ip, 포트 연결 문제가 있어 로컬에서 단순 웹앱은 이상없었으나 도커컨테이너에선 접근이 불가능 했음
- 가상환경, ip binding, 포트포워딩에 대한 이해도 필요
- 사용성이 편리한 heroku를 사용하려고 했으나, 프로젝트에 필요한 모듈의 용량으로 인해 heroku 서버에 업로드가 불가능 했음 (Heroku 용량 제한 500MB)
- 모듈간의 의존성의 이해와 최적화 필요
- CNN을 통한 모델 개선
- 포트 포워딩 등 네트워크 이해를 통한 서버 안정화
- 모델 API 패키징
- CI/CD툴을 사용해 자동화,로깅,모니터링 추가
- K8S클러스터 구성 및 CT 파이프라인 구성
- 데이터 버전 관리