내일배움캠프 AI - 25일차 TIL, 2022.05.23

Dongwoo Kim·2022년 5월 24일
0

TIL / WIL

목록 보기
28/113

스파르타 코딩클럽

내일배움캠프 AI 웹개발자양성과정 2회차

2022.05.23. 25일차- TIL

1. DB 구축 & 코드 병합

09:00-12:00

월요일 아침에는 주말동안 작업 내용들을 리뷰해보고 각자 구현한 코드들을 병합하는 시간을 가졌다. 다행히(?)도 주말에는 쉬자는 팀 그라운드룰을 다들 잘 지켜서 병합할 내용이 크지는 않았다. 다만 DB에서 불러온 정보를 클라이언트에 보여주기위해 클라이언트에 dummy data를 만드는 작업정도 수준으로 사전작업을 해놓았다. 백엔드에도 DB에 dummy data를 넣어놓고 각 기능들이 제대로 작동하는지 확인해봤는데 생각보다 쉽게 구현할 수 있었다.

2. 실제로 사용할 모델 학습

12:00-13:00 점심시간
13:00-15:00 MobileNetV2 학습

어제 각자 CNN 모델을 학습해본 결과 VGG16모델을 제외한 다른 모델들은 대부분 성능(정확도)이 비슷했기 때문에 우리는 보다 빠른 학습과 연산 리소스를 줄이기 위하여 다른 모델들보다 비교적 가벼운 MobileNetV2를 이용하기로 했다. 따라서 실제로 사용할 MobileNetV2 모델을 학습시켰는데 kaggle에 있는 우리와 같은 데이터셋으로 모델을 학습시킨 코드를 참고하여 학습시켰지만 성능은 0.67이 최대였다.

그리고 epoch가 20회가 넘어가면서부터는 training set에 과적합(overfitting)이 일어나서 대략 epoch가 20~25회 사이에서 최대 성능을 보인 model을 저장하여 사용했다.

MobileNetV2 학습 그래프, epoch가 20회가 넘어가면서 val_acc는 오르지않으면서 training_acc만 오르는 과적합 현상이 일어난다.

3. 서로다른 서버와 클라이언트, 어떻게 통신?

15:00-17:00 API 구현

이후에는 본격전인 메인페이지 API를 구현했다. 우선 클라이언트와 서버가 통신해야했는데 서로 다른 프로젝트파일로 만들었다보니 클라이언트 쪽에서 ajax 콜을 보내도 서버쪽에서 response를 보내주지않았다. 분명히 받기는 잘 받았는데 보내주질 않는 것이었다. 이부분에서 왜그런가 보니 header문제라고 직감했다. 서로 다른 파일이기 때문에 서버에서는 클라이언트쪽으로 response를 보낼 권한이 있는지 없는지 판단해야했다. 그런데 생각보다 이 문제를 해결해주는 방법을 찾기 어려웠다. flask header 설정이나 ajax header 설정 등으로 검색해도 내가 원하는 답을 찾기 어려웠다. 나중에 팀원들과 이 문제점에 대해 얘기하고 고민해본 결과 한 팀원이 튜터님들이 진행하는 거북이반 수업에서 이 문제를 이렇게 해결했다고 알려주었다. flask-cors라는 라이브러리를 이용하면 쉽게 헤더를 설정해줄 수 있던 것이다. 이 설명을 듣자마자 내가 원했던 것이라는 걸 알았고 팀원에게 너무 감사했다. 거북이반 수업을 듣지못하는게 한이다.

from flask_cors import CORS
cors = CORS(app, resources={r'*': {'origins': '*'}})
// 다른 클라이언트에서 모두 접근 가능

4. 코드 병합 & 기능 구현 마무리

17:00-18:30 코드 병합
18:30-19:30 저녁시간
19:30-21:00 기능 구현 마무리 & 일일회고
21:00-22:00 이미지 업로드 모달 구현

이후에는 각자 맡았던 기능들을 다시 합치는 과정을 거쳤다. 프로젝트 중간중간 구체적인 목표를 설정해놓고 진행상황을 체크해가며 진행해서 그런지 대부분의 기능들이 일정에 맞게 구현되었다. 한가지 미완성된 부분이 있다면 모달부분이었는데 오늘 캠프일정이 끝난 뒤 해당 역할을 맡았던 팀원과 같이 구현을 완성시켰다. 모달부분은 지난 프로젝트에서 내가 맡았던 부분이라 구체적으로 쉽게 이해시켜줄 수 있어서 다행이었다.

5. 개발 문서 & 코드

profile
kimphysicsman

0개의 댓글