26. TensorFlow 2.x - Surface Crack Detection 예제
참고: https://youtu.be/p_3iJ035Q_Q?si=oXCT9hZFbViAjLVz
이번 예제는 Kaggle에서 제공하는 콘크리트가 갈라진 사진들을 이용해서 이를 deep learning 모델에 훈련시켜 알아서 인식하도록 하는 예제이다.
dataset은 https://www.kaggle.com/datasets/arunrk7/surface-crack-detection 에서 다운받을 수 있고,
파일 이름이 archive.zip인데 인식하기 편하게 content폴더 아래 surface_crack.zip으로 변경하여 사용하였다.
위 코드를 실행하면, test, train 폴더가 생성되고 그 하위에 Negative, Positive 폴더가 각각 생성되며,
test에는 전체 이미지의 80%, train에는 20%가 저장된다.
ImageDataGenerator()를 이용하여 이미지들을 정규화하고 학습용 이미지를 검증용으로 또 나눈다.
여기서, 원본이미지가 224x224 이미지이지만 128x128로 변환한 것은 컴퓨팅 자원이 부족하게 될 경우를 대비한 것이다.
학습용 이미지들을 일부 읽어서 그림을 확인하면 위와 같다. Positive가 갈라짐이 있는 이미지들이고, Negative가 갈라짐이 없는 이미지들이다.
위 슬라이드와 같이 일반적인 CNN 구조를 가진 모델을 구성하였다.
출력층에서 Dense layer를 2개, 그 사이에 Dropout을 overfitting을 줄이기 위해서 사용하였다.
컴파일에서 최적화 함수 Adam의 인수를 보면 default 값인 1e-3보다 1/10인 1e-4를 사용하여 학습된 결과를 천천히 반영하도록 하였다. 학습 초기 정확도 자체가 97%로 상당히 높고, 끝에서는 99.7%까지 나왔다.
시험용 데이터를 사용했을때도 99.6%의 정확도를 보였다.
차트로 나타내보면 아래와 같다.
overfitting도 별로 없고, 잘 된 학습으로 보인다.
다음 글에서는 역시 Kaggle에서 제공하는 뇌종양 사진을 보고 판독을 추론하는 예제를 해보도록 하자.