2012년 ILSVRC에서 발표되었던 AlexNet은 물론 그 인식률이 50∼60% 라고는 하지만 그 이 후로 다양한 Image Classification 모델들의 출현을 가능하게 했다는 점에서 본격적인 Image Classification 분야 발전의 서막을 연 신호탄이라 할 수 있다. AlexNet에서 사용하는 파라메터 규모를 분석해 보면 그 아키텍추어가 LeCUN이 크게 기여한 CNN(Convolutional Neural Network)에 바탕을 두고 있음을 알 수 있다. 특히 CNN은 1959년 하바드 의과대학의 후벨박사와 뷔젤 박사의 고양이 시각피질 연구의 결과를 고스란히 반영한 컴퓨터 코드로 진화하여 오늘 날 컴퓨터 비전 알고리듬의 핵심이 되어 있다.
이 CNN 알고리듬에서 처음에 이해하기 어려운 부분의 하나가 특히 32개 또는 64개 아니면 128개를 사용하는 예제들에서 볼 수 있는 바로 컨볼루셔널 디지탈 필터 개념이다. mXm 사이즈 디지털 필터를 설정하여 일정 한 간격으로 Striding 하는 Convolution 과정 설명에서 웨이트 값을 도입하여 설정하는 방법을 정확히 이해해야 한다. 이 부분의 내용이 그렇게 어려운 것은 아니지만 만약에 이 부분을 잘 이해하지 못한다면 결국 LeNet, AlexNet 이후로 ResNet에 이르는 Image Classification 발전 과정을 제대로 이해하고 논하기는 불가능할 것이다. AlexNet 이후로 성능이 비약적으로 개선된 네트워크들이 지속적으로 출현할 수 있었던 요인으로서 AlexNet의 아키텍추어를 대상으로 파라메터 규모에 따른 아키텍추어 개선에 크게 힘입은 듯하므로 AlexNet 의 파라메터 규모를 정확하게 평가해 볼 수 있도록 하기 위해서 CNN 의 디지털 필터링을 다시 요약해 보자.
컨볼루션 디지털 필터를 mXm 사이즈로 정의하게 되면 그에 해당하는 크기의 웨이트 매트릭스와 바이아스가 도입되어 해당 레이어에서의 Hypothesis를 형성할 수 있게 된다. MNIST에서는 28X28 문자 데이터 하나하나가 입력 데이터가 되지만 CNN에서는 컨볼루션 필터의 크기 만큼에 해당하는 부분이 하나의 입력 데이터가 되며 Stride 값에 따라서 필터가 이동하게 되면 그때마다 Hypothes 계산이 가능해지는데 바로 그것이 MNIST 수기문자 데이터 하나와 유사해지는 것이다.
AlexNet에서의 파라메터 개수를 정확하게 평가해 보기로 하자.
227X227X3 RGB 컬러 이미지 데이타 하나에 대해서 11X11 필터로 Stride=4 로 설정하여 컨볼류션 처리하면 55X55 96개로 필터링 된 이미지 데이타들이 얻어진다. 여기서 컨볼루션 디지털 필터 수에 해당하는 96은 AlexNet 설계자가 설정한 값이다. 아울러 한 번의 컨볼루션 작업에 대해서 11X11X3X96=34,848 개의 웨이트 값과 96개의 바이아스 값이 도입되므로 총 34,944 개의 파라메터가 도입되어 사용되는 셈이다. 여기서 11X11=121개 웨이트 매트릭스를 사용하여 각 컬러별로 계산 후 더하고 바이아스는 하나를 더해주게 된다. 이러한 과정을 96회 되풀이 한다는 의미이다.
위 AlexNet 그림을 관찰해 보면 총 필터 수가 96개이지만 48개짜리를 합쳐서 그래픽 처리하면 너무 두껍게 보일 수 있으므로 그림 상으로는 마치 48개짜리가 2벌 있는 것처럼 도시하였다.
1차 컨볼루션 처리 후 ReLU()를 적용하고 다시 3X3 kernel로 Stride=2로 설정하여 최대값을 Max Pooling 처리하면 27X27X96 사이즈 매트릭스 데이터가 얻어진다. 이어서 다시 2차 컨볼루션 디지털 필터 5X5 를 사용하여 pad=2 로 설정하고 Stride=1 로 처리하면 동일한 27X27 크기 이미지가 얻어지되 필터의 수를 256개로 늘린다. 컨볼루션 작업에서 디지탈 필터 수를 늘린다는 것은 뉴럴 네트워크에서 Depth를 늘려 잡는 개념과 유사하므로 그만큼 도입되는 웨이트 수가 5X5X96X256=614,400 개로 늘어나며 256개의 바이아스가 추가로 새로 도입되어 늘어나게 된다. 즉 파라메터 수가 614,656개 늘어난다. 2차 컨볼루션 처리된 결과에 대해서 ReLU() 처리 후 다시 3X3 kernel로 Stride=2로 설정하여 Max Pooling 처리하면 13X13X256 사이즈의 매트릭스 데이터가 얻어진다.
첫 시작 이미지 데이터 크기가 227X227X3=154,587개였는데 2차 컨볼루션 및 Max Pooling을 마치면 13X13X256=43,264로 즉 28%로 줄어들었음을 알 수 있다. 여기서 중요한 것은 단순히 데이터 사이즈를 줄였다는 것이 아니라 CNN 의 특성 상 이미지 데이터의 특징(Feature)들이 고스란히 추출되어(Extraction) 유지되어야 한다는 점이다.
3차 컨볼루션 작업에서도 디지털 필터 사이즈가 3X3 이며 Stride=1 , Pad=1을 사용한다. Pad를 부여해서 사용하는 경우에는 Striding 후 얻어지는 매트릭스 사이즈가 앞 단계와 동일하게 그대로 유지되는 특징이 있다. 이와 같이 3차, 4차까지 컨볼루션 작업 후 5차 컨볼루션 작업에서만 Max Pooling 작업을 하는데 AlexNet 에서의 매트릭스 사이즈는 2차 컨볼루션 및 Max Pooling 의 결과와 동일한 43,264개를 그대로 유지한다.
이와 같이 컨볼루션 및 Max Pooling이 완료된 상태에서 최종적으로 ImageNet에서 정해져 있는 1000종에 해당하는 Classification을 위해 Fully connected 레이어 작업이 이루어진다. 즉 43,264개에서 막바로 1000개로 줄이는 것은 지나치게 변동이 크므로 3차에 걸쳐서 즉 43,264→4096→4096→1000으로 줄이는 것이다. 물론 마지막 레이어는 Softmax이다.
이와 같이 AlexNet 전체로 도입되는 파라메터들을 아래와 같이 표로 정리하여 보면 합계 62,378,344 개의 파라메터들이 사용되고 있음을 알 수 있다. AlexNet 의 Deep Learning 구조를 살펴보면 LeCUN의 CNN 아키텍추어 개념이 그대로 잘 반영되어 있음을 알 수 있는데 PyTorch 예제문제에서 체크해 본 결과 이러한 네트워크를 사용하여 ∼60% 선까지의 인식률을 보여준다. 오늘 날 이미 95% 인식률을 넘어가는 우수한 네트워크들이 출현했지만 결국 AlexNet에서 파생되었다고 봐도 무방할 것이다.
AlexNet에 이어 인식률이 개선된 모델에서는 각 레이어 별로 채택하는 컨볼루션 디지털 필터 크기와 갯수 Stride 값 및 레이어 수들이 아주 다르게 설정되고 있으며 보다 인식률을 높일 수 있도록 앙상블 기법이라든지 또는 GRU(Gated Recurrent Unit) 알고리듬과 유사한 형태의 알고리듬이 채택되어 있다. 특히 버클리와 스탠포드에서 개발한 SqueezeNet 의 경우는 AlexNet 수준의 인식률을 얻기 위해서는 AlexNet의 2% 수준의 파라메터면 충분하다는 것이 알려져 있다.
Image Classification 분야에서 R&D를 수행하기 위해서는 이러한 평가 작업 정도는 스스로 해볼 수 있어야 하지만 실제로 AlexNet을 동일하게 재현하는 일은 쉽지만은 않다. 구글 TensorFlow 홈페이지에 게재된 AlexNet을 구글 Colabo에서 Transfer Learning 기법을 사용하여 처리해본 경험에 따르면 데이터 리딩에 문제가 발생하여 재현이 어려웠다. 하지만 PyTorch Fine Tunning Transfer learning 튜토리얼 예제를 사용하면 재현이 가능하다는 점을 지적해 둔다. 아울러 이 튜토리얼 예제에서는 AlexNet으로부터 VGG, SqueezeNet, ResNet을 비롯한 9종의 네트워크 벤치마킹이 가능하다는 점을 지적해 둔다.
'머신러닝' 카테고리의 다른 글
Application of Statistical softmax To TensorFlow Iris flower data classification (0) | 2019.07.23 |
---|---|
Scikit-learn 라이브러리 지원 Iris flowers 예제 (0) | 2019.07.22 |
PyTorch Transfer Learning Fine Tuning 예제를 사용한 AlexNet-VI (0) | 2019.07.20 |
PyTorch Transfer Learning 예제 실행-V (0) | 2019.07.13 |
7-30 PyTorch Transfer Learning 예제-IV : Fine Tuning 모델 준비 (0) | 2019.07.09 |