캐글 Cassava Leaf Disease Classification 코드 리뷰

정강훈·2022년 1월 18일
0

케라스 창시자에게 배우는 딥러닝 책을 완독한 후 딥러닝 프로젝트를 시작하기 전 스터디 멤버들끼리 각 자 캐글의 상위에 있는 코드를 보면서 리뷰 해보기로 하였다.

처음이다 보니 많은 코드들 중에서 비교적 어려운 방법이 아닌 코드를 선택하였다.

https://www.kaggle.com/maksymshkliarevskyi/cassava-leaf-disease-best-keras-cnn

이 코드는 Keras CNN중 EfficientNet을 사용하여 구현을 하였고, 해석이 용이해서 선정하고 리뷰를 하기로 했다.

EfficientNet은 2019년 발표된 모델로 일반적으로 CNN에서 모델의 정확도를 높이기 위해 모델의 깊이, 너비, 입력 사이즈 이렇게 3가지를 조절한다.
이 3가지를 수동으로 조절할 시 최적의 효율을 얻지 못하는 경우가 대부분이다.
EfficientNet은 이 3가지를 compound scaling 방법으로 제안하며, 이 3가지가 일정한 관계가 있다는 실험의 내용을 바탕으로 3가지의 균형을 찾고, 이 관계를 수식으로 도출해 최적의 효율을 뽑아낸다.

1. 데이터 확인


학습 데이터는 이미지 형태로 21397개 있다.

다음과 같이 이미지가 라벨링 되어있다.
0은 CBB로 세균병

1은 CBSD 갈색 줄무늬 병

2는 CGM 초록 반점

3은 CMD 모자이크병

4가 정상이다.


각 라벨의 수를 비교하면 3의 모자이크병이 가장 많았고, 그 후 나머지는 다 비슷하였다.

데이터 전처리

주 파라미터는 다음과 같다.

그 후 ImageAugmentation을 진행한다.

ImageDataGenerator에서 생성규칙을 지정하고, flow_from_dataframe을 통해 제너레이터를 만든다. 위 과정을 검증 데이터에도 진행한다.


해당 사진을 Augmentation 진행 시

위 사진처럼 이미지가 증강된다.

모델링


이미지넷 사전학습을 사용 모델 지정(EfficientNetB0)과 아웃풋을 위한 층들을 지정해주면 모델이 생성된다.


총 239개의 층을 가진 모델이다.

그 후 가중치를 불러온 후

학습



다음과 같은 파라미터들로 학습을 시작한다.

결과


10 Epoch 이 후 과적합이 일어난 것 같다.

정확도는 88% 정도로 준수한 성능을 보였다.

그 후 몇개의 층에서 나온 이미지를 비교하면서 코드는 끝이난다.

후기

아직 많은 딥러닝 코드를 접해보지 않았지만, 거의 딥러닝 학습의 표본이지 않을까 싶다.

  1. 데이터 확인
  2. 데이터 전처리
  3. 모델링
  4. 학습

파라미터 조정의 단계는 없었지만, 아마 조정한 모델을 결과로 사용했을 것 같다.

아직은 코드가 익숙치 않지만, 익숙하게 만들기 위해 더 공부해야겠다.

0개의 댓글