본문 바로가기

AI/TensorFlow 학습

28. TensorFlow 2.x - COVID 19 Radiography 예제

참고: https://youtu.be/6CXcLRVW78w?si=NXLGIKJ0xCYkA5wo

 

이번 글은 Kaggle에서 제공하는 폐 x-ray 사진을 이용하여 모델을 만들고 추론 성능이 어떻게 되는지 살펴보는 예제이다. 학습용 데이터로 사용할 이미지는 아래 링크에서 다운 받을 수 있다.

https://www.kaggle.com/datasets/tawsifurrahman/covid19-radiography-database

 

다운 받은 파일을 보면, 3가지의 폐질환과 정상 폐사진으로 구분되어 있다. 

이것을 기존에 해오던 대로 train과 test 폴더에 나누어 담아 모델을 학습하고 검증할 것이다.

 

content 폴더에 COVID-19_Radiography라는 하위 폴더를 만들고 압축을 해제하였다.

압축해제된 파일들 중에 폴더 이름들이 label로 지정되어 있어 label_name_list로 따로 저장하였다.

 

위의 코드는 다운 받은 이미지들를 섞은 뒤 새로 train/test 폴더를 만들어서 훈련용과 테스트용으로 배분하는 코드이다. 별로 중요치 않다. 아무튼 구조는 아래와 같다.

 

이미지 사이즈를 224x224로 설정하고 ImageDataGenerator를 이용하여 정규화 및 검증용 데이터 비율을 정하였다.

모델을 학습시키기 전에 이미지들이 어떤 형태인지 알아보기 위해 표시해 보았다.

 

이번에도 Transfer Learning을 사용하고 그 모델은 가볍고 성능이 좋다고 소문난 MobileNet을 선택하였다.

이 모델이 어떻게 구성되어 있는지 알아보기 위해 summary()를 보았는데 특징 추출기만 가져왔음에도 구조가 꽤 복잡하였다.

 

 

특징추출기 뒤에 분류기와 출력층을 붙여서 모델을 새로 만들고,

최적화 함수는 Adam으로 학습률을 2e-5로 줄여서 학습반영이 천천히 되도록 하였다.

또한 callback함수 ModelCheckpoint()와 EarlyStopping()을 사용하여 학습이 잘 된 것들을 저장하고, 일정이상 학습의 효과가 없으면 중지하도록 하였다.

초기 정확도는 80%, 학습후 정확도는 95%이다. GPU가 없어서 시간이 많이 소요되었다.

 

정확도와 손실 그래프를 보면 안타깝지만 overfitting이 많이 발생함을 볼 수 있다. 분류기에 Dense layer와 Dropout을 추가해서 성능을 좀더 높일 수 있을 것이다.

 

 

시험용 이미지로 추론하였을 때는 정확도가 94%임을 알 수 있다.

 

이 글을 마지막으로 TensorFlow 학습은 종료된다.

요즘 EdgeAI에 관심이 있어서 그쪽을 더 공부하고 포스팅하는 것이 앞으로의 계획이다.