머신러닝

PyTorch Transfer Learning Fine Tuning 예제를 사용한 AlexNet-VI

coding art 2019. 7. 20. 23:29
728x90

2017년도 기준 각종 이미지 네트워크의 인식률 수준을 비교해 보면 가장 초기의 네트워트였던 AlexNet Top-1 error rate 기준으로 50%를 상회하는 수준이었으며 뒤를 이어 출현한 다양한 네트워크들이 인식률을 높여 나갔다. Top-5 error rate로 기준을 바꾸면 인식률이 20% 이상 훨씬 올라 갈 수도 있음에 유의하자.




2017년을 기준으로 그때까지 발표된 다양한 네트워크들이 5 기가플롭스 수준에서 테스트되었으며 ResNet18AlexNet 과의 차이가 무려 15%에 달하고 있다.


ResNet18 기준으로 작성된 PyTorch Transfer Learning 예제 코드를 다음과 같이 수정하여 AlexNet을 적용해 보고 인식률을 체크해 보자.


인간의 인식률 경계를 95%로 보는데 ResNet Residual 레이어 알고리듬을 적용하여 이 선을 넘었던 반면에 가장 초기에 해당하는 AlexNet10% 이상 낮은 인식률을 보여주며 컴퓨팅 시간 부담도 ResNet18에 비해 2배 또는 그 이상인 듯하다.


 

본격적인 Image Classification 의 시작이랄 수 있는 AlexNet 이후에 성능이 비약적으로 개선된 네트워크들이 지속적으로 출현할 수 있었던 요인은 2012ILSVRC에서 발표되었던 AlexNet의 아키텍추어를 대상으로 파라메터 규모에 따른아키텍추어 개선에 크게 힘입은 듯하다. 따라서 AlexNet 의 파라메터 규모를 정확하게 평가해 보도록 하자.


227X227X3 RGB 이미지 데이타 하나에 대해서 11X11 필터로 Stride=4 로 설정하여 컨볼류션 처리하면 55X55 96개로 필터링 된 이미지 데이타들이 얻어진다. 여기서 컨볼루션 필터 수에 해당하는 96AlexNet 설계자가 설정한 값이다. 아울러 한 번의 컨볼루션 작업에 대해서 11X11X3X96=34,848 개의 웨이트 값과 96개의 바이아스 값이 도입되므로 총 34,944 개의 파라메터가 도입되어 사용되는 셈이다. 그림에서는 총 필터 수가 96개이지만 48개짜리를 합쳐서 그래픽 처리하면 너무 두껍게 보일 수 있으므로 그림 상으로는 마치 48개짜리가 2벌 있는 것처럼 도시하였다.


컨볼루션 처리 후 ReLU()를 적용하고 다시 3X3 kernelStride=2로 설정하여 최대값을 Max-Pooling 하면 27X27 사이즈의 96개로 처리된 이미지 데이터들이 얻어진다. 이어서 다시 27X27 이미지 데이터를 얻을 수 있도록 디지털 필터 5X5 를 사용하여 pad=2 로 설정하고 Stride=1 로 처리하면 동일한 27X27 크기 이미지가 얻어지되 필터의 수를 256개로 늘린다. 컨볼루션 작업에서 디지탈 필터 수를 늘린다는 것은 뉴럴 네트워크에서 Depth를 늘려 잡는 개념과 유사하므로 그만큼 도입되는 웨이트 수가 5X5X96X256=614,400 개이며 256개의 바이아스 수가 늘어나게 된다. 즉 파라메터 수가 614,656개 늘어난다. 이와 같이 AlexNet 전체로 도입되는 파라메터들을 아래와 같이 표로 정리하여 보자. 합계 62,378,344 개의 파라메터들이 사용되고 있음을 알 수 있다.


AlexNet에 이어 인식률이 개선된 모델에서는 각 레이어 별로 채택하는 컨볼루션 디지털 필터 크기와 갯수 Stride 값 및 레이어 수들이 아주 다르게 설정되고 있으며 보다 인식률을 높일 수 있도록 앙상블 기법이라든지 또는 GRU(Gated Recurrent Unit) 알고리듬과 유사한 형태의 알고리듬이 채택되어 있다. 특히 버클리와 스탠포드에서 개발한 SqueezeNet 의 경우는 AlexNet 수준의 인식률을 얻기 위해서 AlexNet2% 수준의 파라메터면 충분하다는 것이 알려져 있다.