참고: https://youtu.be/BqoxyGh9IW8?si=nyrsXWDbMjGVEp2I
이번 예제는 Kaggle에서 제공하는 뇌종양(Brain Tumor) 사진들을 이용하여 모델을 학습시키고 다른 사진들을 잘 판독하는지 점검해보는 예제이다. Kaggle의 데이터는 아래 링크에서 다운 받을 수 있다.
https://www.kaggle.com/datasets/sartajbhuvaji/brain-tumor-classification-mri
위 슬라이드에서 이야기한 것 처럼 이미지의 수가 많지 않기 때문에 모델을 처음부터 학습시키기 쉽지 않아 Transfer Learning을 이용하여 미리 학습된 모델인 MobileNet을 사용하고 아래와 같이 구성한다.
다운 받은 데이터셋의 압축을 해제하면 위와 같이 폴더 구조가 나타난다. 그대로 훈련용과 시험용을 사용해도 되겠지만, 두 이미지들이 서로 이질적인 부분이 많아 하나로 섞고 다시 나누기로 한다.
압축을 풀고 각 폴더에 있는 이미지들의 개수들을 확인해 보았다.
이제 앞에서 이야기한 대로 이미지를 섞은 후 다시 분배해 보자.
이미지를 무작위로 섞은 뒤에 다시 훈련용(80%)과 시험용(20%) 폴더에 나누었다.
ImageDataGenerator를 이용하여 정규화 하였고, 이미지 크기는 244x244로 변환하였다.
실제 어떤 이미지인지 살펴보기 위해 matplotlib을 이용하여 출력해 보았다. 이제 모델을 구성해보자.
앞에서 이야기한대로 transfer learning 방법을 이용하기 위해 MobileNet을 가져오고 뒤에 분류기와 출력층을 만들었다. 정확도를 높이고 overfitting을 줄이기 위해서 3개의 Dense layer와 2개의 Dropout을 넣었으며 compile()에서 최적화함수는 Adam으로 하였고 학습률을 2e-5로 줄여 학습하도록 하였다.
earlystopping 조건을 마련하고 학습을 시켰을 때 처음 정확도는 46%에서 시작하였다. 그렇지만, 조기 종료 조건에 의해 학습이 종료 되었을 때는 96%까지 정확도가 올라갔다.
정확도와 손실값을 보았을때 약간의 overfitting을 볼 수 있으나, 잘 학습되었다.
시험용 이미지를 이용하여 평가하였을 때도 96%의 추론 능력을 보여주었다.
다음 글에서는 또다른 예제로 연습해보도록 하자.
'AI > TensorFlow 학습' 카테고리의 다른 글
28. TensorFlow 2.x - COVID 19 Radiography 예제 (0) | 2024.09.03 |
---|---|
26. TensorFlow 2.x - Surface Crack Detection 예제 (0) | 2024.08.30 |
25. TensorFlow 2.x - GTSRB를 이용한 예제 (0) | 2024.08.29 |
24. TensorFlow 2.x - callback 함수 소개 (0) | 2024.08.26 |
23. TensorFlow 2.x - Transfer Learning 예제 두번째 견종 판독 (0) | 2024.08.23 |