이번 프로젝트는 한 주간 배운 머신러닝을 응용한 웹사이트를 만드는 과제가 주어졌다. (나 제대로 이해한거 맞지??)
현재 같은 팀으로 2번째 프로젝트를 진행하는건데 우리팀은 저번 과제물에 추가로 머신러닝 기능을 추가하여 업그레이드를 하기로 결정했다.
<추가하려는 머신러닝 기능>
- 회원가입 시 주어진 숫자를 이미지로 그려서 봇 확인
- 포스팅 시 사진을 넣으면 AI가 학습한 내용 안에서 가장 유사한 음식을 태그
다른 추가 기능들도 많이 있지만 내가 머신러닝 담당자가 되었기에 학습하고 작업한 내용을 바탕으로 WIL로 회고를 해보겠다.
처음 머신러닝 담당자가 되었을 때 데이터만 바로 찾아지면 생각보다 쉽게 할 수 있지 않을까?라는 생각이 있었는데 그 생각이 깨지는 건 몇 시간도 필요하지 않았다.
캐글에서 101클래스를 가진 이미지 데이터를 다운받아서 바로 학습시켜봤는데,, 답정너 학습이 된 모델이 탄생했다.
어떤 이미지를 넣어도 애플파이만 출력하는 애플파이 원픽 모델, acc = 0.0099, 101개 클래스 넣으면 1개 맞추니까 정확도는 정확하게 나왔구나,,
이렇게 된 원일을 찾아 보니 데이터 셋에 문제가 있다는 결론을 내렸다.
당연한 일이었다. 모델을 학습하기 위한 데이터인데 간단한 전처리도 안 하고 학습을 시켰으니,,, 제대로 학습될 일이 있나,,,
그렇게 시작된 데이터 노가다.
캐글에서 가져온 이미지의 상태가 생각보다 좋지 않아서 많은 사이트를 돌아다니며 음식 사진을 수집하기 시작했고 부족한 사진은 구글에서 스크래핑으로 해결하였다.
AI 허브에서 많은 이미지 사진을 구할 수 있었는데 800GB가 넘는 자료도 있었다.. 컴퓨터 용량만 되면 모두 확인해 보고 싶었지만 과제 시간이 빠듯해서 pass
이미지를 구하고 나서 얼추 됐다 싶었는데 그게 끝이 아니었다. 10gb가 넘는 자료를 구글 드라이브에 넣어 colab에 돌리니 얘가 바보가 되고 속도가 너무 느리다..
해결 방법은 colab에서 코드로 이미지를 학습 사이즈에 맞춰주는 게 아니라 내가 먼저 이미지를 224*224 크기로 줄이고 train / test데이터로 나눠서 드라이브에 업로드하는 것이었다.
이 과정에서 폭풍 구글링을 통해 python os라이브러리와 pillow패키지를 이용하게 되었다.
여기까지 했을 때 이미 프로젝트 3일이 지나고,, 내게 남은 시간은 3일 최적의 학습량을 뽑아내기 위해 스파르타에서 지급한 코랩 프로 계정 외에 추가로 결제하여 2 계정으로 여러 모델과 optimizer를 실험해 보았다.
머신러닝을 속성으로 배워서 이론적인 부분이랑 전이 학습 시 튜닝 능력이 부족하지만 최대한 좋은 결과물을 얻기 위해 3가지 모델로 실험을 해봤으며 optimizer는 adam으로 고정하고 lr를 달리하며 좋은 결과를 찾기 위해 노력했다.
런타임이 끊길까 봐 배치사이즈 조절도 못하고 너무 단순하게 실험을 반복했지만 그래도 한번 경험해보니 어떻게 사용할지 대충 감이 잡힌다.
현재까지 진행된 학습 중 최고는 InceptionV3인데 InceptionResNetV2가 python에서 로딩 시 오류가 발생하지 않아서 실험을 계속했다면 더 좋은 결과를 기대해볼 수 있었을 거 같다.
개인적으로 InceptionResNetV2와 adabound를 조합해서 결과를 만들어 보고 싶은데,, 프로젝트 기간이 정말 얼마 안남았다 ㅠ 이제 내일 모델을 서버와 클라이언트에 넣어서 맞춰보고 테스트를 진행해야 되기 때문에 아쉽지만 여기까지,,
현재 모델의 최종 성적은 82개 클래스 데이터셋으로 82.57 정확도를 가지게 되었는데,, 실전에서 좋은 결과가 나왔으면 좋겠다.
여기까지 프로젝트를 진행하면서 가장 어려웠던 점은 실제 데이터를 넣어서 예측하는 부분이었다.
1주일 동안 모델 가져와서 이미지 넣고 학습시키는 내용은 배웠어도 실제 이미지를 넣어서 예측하는 부분은 배우지 못했기에,, 또 구글링과 많은 시행착오를 거쳐서 겨우 한 가지 방법으로 구현해 냈다. (적어도 사용법은 알려주란 말야 스파르타!!! ㅠㅠ)
물론 구글링 해서 학습을 하는 것에 배워가는 게 많지만 어느 정도는 시간 절약을 위해 기본적인 부분은 알려주는 게,,
해놓고 보면 간단한걸 몇 시간씩 고민해서 해결하다 보면 시간이 너무 아깝다.
기능 구현이나 공부하고 싶은 건 많은데 이렇게 간단한 거에 시간을 이리 잡아 먹혀서야,,
또 새벽에 wil을 쓰다 보니 어느새 푸념을 하고 있는데,, 내일을 위해 여기까지.
내일은 다시 adabound를 이용해서 학습률을 더 끌어 올려보겠다!
<캐글 음식 지미지 101c>
https://www.kaggle.com/kmader/food41?select=images
<AI Hub 음식 이미지>
https://aihub.or.kr/aidata/13594
'Curriculum > AI웹개발자_내일배움캠프' 카테고리의 다른 글
Story 11. WIL (django) (1) | 2022.01.25 |
---|---|
Story 10. 9k 밥 소개 및 KPT (1) | 2022.01.19 |
Story 8. 머신러닝 끝! 알고리즘 시작! (0) | 2022.01.11 |
Story 7. Today I Learned (머신러닝2) (0) | 2022.01.07 |
Story 6. Today I Learned (머신러닝) (0) | 2022.01.06 |