- 웹 어플리케이션 바로가기
- 깃허브 레포지토리 바로가기
- 프로젝트 포스팅 목록
데이터 전처리
- 저번 시간에 무신사 스트릿 스냅 사진 7가지 스타일 각 600장, 총 4200장의 크롤링을 완료했다.
- 애초에 정제되어있는 데이터를 수집했기 때문에 이상치는 존재하지 않는다.
image_dataset_from_directory
을 사용할 것인데, 모델을 개발할 때 검증 분할을 사용할 것이다.- 이미지의 80%를 훈련에 사용하고 20%를 유효성 검사에 사용하기 위해 디렉토리를 분할해준다.
디렉토리 구조
1 |
|
CNN 분류 모델링
라이브러리 불러오기
1 |
|
데이터 불러오기
image_dataset_from_directory
를 이용하여 import한다.- batch size 및 shapes는 기본값으로 진행한다.
1 |
|
베이스라인 모델
- 7가지의 class이기 때문에 Chance level은 14%이다.(성능이 적어도 찍어서 맞출 확률보단 높아야한다.)
- Chance level을 Baseline으로 잡지 않고, 성능 향상의 비교를 위해 간단한 CNN Model을 생성한다.
- 마지막 Dense 층은 class 수가 7가지이므로 7로 설정하고, activation 함수는 softmax로 설정한다.
1 |
|
컴파일 및 핏(Compile & fit)
1 |
|
- 쩝… 그래도 눈감고 찍는 것 보다는 살짝 잘 나왔다.
- 이제 성능을 개선해보자.
성능 개선
- 전이학습 전에 신경망 층을 여러겹 쌓아 개선하여 성능을 올려본다.
1 |
|
컴파일 및 핏(Compile & fit)
1 |
|
- 나름 어느정도의 개선은 있지만 아쉽다.
전이 학습
- 성능을 대폭 끌어올리기 위해 전이학습을 진행한다.
- ResNet을 이용할 것인데, 이미 훈련이 되어있기에 훌륭하게 ‘특징점’을 잘 추출해 준다.
- Fully Connected layer를 목적에 맞게 구성해준다.
ResNet 불러오기
1 |
|
컴파일 및 핏(Compile & fit)
1 |
|
- ResNet을 사용했음에도 성능이 굉장히 아쉽다.
- 아무래도 패션 스타일 특성상 사람이 구분하기에도 애매한 부분이 많아서 그런 것 같다.
- 여러가지 하이퍼파라미터 튜닝 및 데이터를 좀 더 크롤링하여 성능을 개선해야겠다.
최종 모델
1 |
|
- 이미지를 2배로 더 수집하고 여러가지 튜닝을 한 결과, 최종 validation accuracy 0.6282의 모델을 생성했다.(여러가지라 해봤자… batch size를 16으로 변경하고, 마지막 dense 층을 512로 변경했다.)
- 7가지 클래스인데 60%의 정확도니까 그런대로 만족하고 flask 앱 제작에 돌입한다.
남성용 모델 생성
- class내에 남성에게 해당되지 않는 스타일이 있으므로, 5개의 클래스만 사용한 모델을 하나 더 생성한다.
- 위에서 생성한 모델은 여성용, 지금 만들 모델은 남성용으로 사용할 것이다.
- 클래스 리스트와 최종 dense 층을 수정한다.
1 |
|
모델 저장
- flask에서 활용하기 위해 최종적으로 생성한 model을 h5로 저장한다.
1 |
|