머신러닝

PyTorch Transfer Learning 예제 실행-V

coding art 2019. 7. 13. 09:20
728x90

이와 같이 data 폴더 준비가 되었으면 tutorial data loading 셀 코드를 Colabo에 가져다 실행이 가능해진다. 로딩되는 데이터는 Compose, Crop, Resize, ToTensor 처리를 통해 data augmentation이 이루어져야 Transfer Learning 처리가 가능해진다. 특히 ∙∙∙Crop 명령은 잘라내는 이미지의 크기를 결정하는데 지나치게 작게 잘라내면 인깃이 어려워지므로 실행 시간이 몇배 규모로 늘어날 우려가 있다. 반면에 현재 값 224 보다 큰 값을 사용해도 인식륭이 그다지 개선되지 않으므로 현재 값을 사용하는 것이 무난하다.




Data augmentation 의미가 명확하지 않으므로 데이터 로딩 후 data augmentation 이 일어난 사례를 대상으로 원본 이미지와 처리 후 이미지를 출력을 통해 살펴보자. 학습용 벌 이미지가 crop 된 즉 바깥 부분이 잘려진 상태에서 Resize 된 후 Normalization 한 결과임을 알 수 있다.

 



다음의 벌과 개미 이미지는 각각 Crop, Resize, HorizontalFlip 처리했다.


다음의 벌 이미지도 Crop, Resize 처리했다.




이미지 입력 데이터 파일의 규격이 일정치 않으므로 잘라내든지 돌리든지 거울 반사 이미지를 취하든지 하여 규격화 하는 처리과정임을 알 수 있다.

 

다음은 resnet18 웨이트 매트릭스 정보를 다운받을 때 출력되는 결과이다.

  

 

아래의 실행 결과를 비교해 보자. 구글 Colabo에서의 실행 결과는 Fine Tuning 이나 Fixed Feature Extractor 1분 이상이 소요됨을 알 수 있지만 Fine Tuning 이 좀 더 시간이 소요된다. 파라메터를 바꾸어 여러 번 실행 해본 결과 아무래도 Fine Tuning이 연산 시간이 많이 소요되어 Fixed Feature Extractor 보다 거의 2배까지 시간 소요가 큰 편임을 참조하자.



ResNet50 Transfer Learning을 하려면 다음과 같이 모델 준비 단계에서 resnet18 대신 resnet50 으로 대체하면 된다.

  

 

ResNet50 에 의한 Fine Tuning 결과를 보면 인식률이 더욱 높아야겠지만 꼭 그런 것만은 아니다. ResNet18에 사용했던 이미지 데이터를 그대로 적용해 본 결과 인식률은 오히려 떨어졌으며 웨이트 매트릭스 크기가 증가하여 컴퓨팅 시간이 451초로 대폭 증가했음을 알 수 있다. ResNet50을 사용하려면 Data Loader 단계에서부터 이미지 데이터 해상도, batch size epoch 와 같은 파라메터들의 최적 값을 주어야 할 것이다.