본문 바로가기

AI/TensorFlow 학습

23. TensorFlow 2.x - Transfer Learning 예제 두번째 견종 판독

참고: https://youtu.be/9Y77ha3ioYY?si=wRbguq1IYqViWDLw

 

dog_image.zip
17.50MB

 

이번 예제는 인터넷이나 본인이 촬영한 개 사진으로 견종을 분류하는 예제이다.

학습 데이터로 많은 사진을 구해야 하는게 번거러울 수 있으니 유튜브 링크에서 받은 파일을 공유한다.

이 예제를 문제없이 실행하려면, 먼저 사진들을 지정공간에 저장하여야 한다.

 

작업 디렉토리에서 'content'란 폴더를 먼저 생성하고 'content' 폴더 아래에서 'dog_image' 폴더 안에 압축된 사진을 풀어낸다.

 

위 그림과 같은 폴더 구조를 갖도록 하며, 'cats_and_dogs_filtered'는 앞의 글 예제에서 사용한 파일이므로 무시한다.압축을 풀면 'test' 폴더와 'test_image_files' 폴더는 만들어지지 않아서 빈 폴더를 만들어 주고, 아래 코드를 따라하도록 하자.

 

여기까지 하면 test 아래 폴더들이 아래와 같이 더 생성되며, test 폴더 아래에 사진의 10%가 이동되고, 이것들은 확인용 데이터로 사용하게 된다.

 

'test' 폴더 아래 있는 사진들을 모두 'test_image_files' 폴더로 복사하는 코드이다.

 

위 코드는 학습용 데이터중 15%를 검증용으로 사용하기 위한 작업이다.

flow_from_directory()에서 subset인자를 'training', 'validation'으로 나누었다는 것을 확인하자.

 

사전 학습된 모델은 MobileNet()을 사용하며 이중에서도 특징 추출기만 사용한다.

여기서 4가지 견종을 분류하기 위해서 분류기를 설계하고 특히 출력층의 노드는 견종에 맞춰 4개로 설정한다.사전 학습된 모델을 사용하므로 새로 학습하는 비율을 낮게 fine-tuning 하도록 하였다.

 

학습 초기에는 정확도가 47% 정도로 낮았으나, EarlyStopping 조건에 의해 학습을 끝냈을 때는 97%까지 올라갔다.

 

이전 글에서도 많이 했던 loss와 accuracy에 대한 그래프이다. overfitting을 별로 보이지 않는다.

 

이제 다른 사진을 가지고 추론해보자.

앞에서 사진중 일부를 테스트용 데이터로 사용하기 위해서 따로 저장했었다.

 

이것으로 추론하고 그 결과를 보니 잘 맞추고 있다.

 

다음 글에서는 이미 예제에서 사용했었지만, 잘모르고 있는 callback 함수에 대해서 설명한다.