머신러닝

MNIST CNN Image Classification History

coding art 2021. 7. 10. 15:55
728x90

컨볼루셔널 뉴럴 내트워크(CNN)MNIST 수기숫자 인식 문제를 연구했던 LeCun에 의해서 꽃을 피우게 된다. MNIST 수기 숫자들은 텍스트가 아니라 사진 이미지이기 때문에 동식물이나 사람의 얼굴처럼 일단 그래픽으로 봐야 한다. 따라서 filtering, pooling back-propagation 적용으로 MNIST 문제의 인식률이 상당히 개선되었으며 그 기법들은 LeNet이라 불리우며 지금까지도 CNN에 그대로 사용되고 있다.

 

한편 2001년에는 Viola-Jones가 사람의 얼굴을 실시간으로 인식하기 위한 Haarcascade 알고리듬을 고안하였다. 사람 안면의 부분적인 이미지 요소들을 분석하여 안면 특징을 추출한다는 측면에서 LeCun의 필터링과 공통점을 가진다.

 

하지만 LeCun의 알고리듬은 학습범위가 미국인들이 작성한 수기숫자에 한정되어 있기 때문에 일반적인 오브젝트 모두를 인식하는데 까지 적용되는 것은 아니다. 그러한 확장은 2012CNN 기반의 AlexNet 등장에 의해서 이루어졌다. Alex Krizhevsky 역시 캐나다에서 힌튼 교수의 박사과정 학생으로서 Alexnet 알고리듬을 구성하였다. 결과론적으로 2012년 이미지 분석 컨테스트에서 에러율을 15.3% 로 줄여 최고의 인식률을 달성했다. AlexNet의 기본적인 구성은 LeNet 과 유사하지만 Sigmoid 함수 또는 tanh 함수 채용을 지양하고 LeRU함수를 사용했던 바 CNN의 중심으로 자리를 잡게 되었다.

 

CNN 방식에 의한 MNIST 수기 수자 인식 문제를 다룸에 있어서도 이미 ReLU 함수가 사용되어 99%의 인식률이 얻어진다. AlexNet 이전에도 MNIST 인식률을 개선하기 위한 무수한 노력들이 있었으나 일단 CNN 기법에 의해 MNIST 인식률 99% 이상을 달성함으로서 완전한 정리가 이루어져 버렸다.

 

다음의 Wikipedia에서 제공되었던 표를 참고해 보기 바란다. NN 이후로 Wide Deep CNN 의 발전에 의해 거의 99% 를 넘겨 버렸다. 현재 Wikipedia 사이트는 내용이 개편되었다.

어느 정도 인식률 향상에 종지부를 찍어버린 MNIST 데이터베이스의 연구는 마무리 되었으며 그 다음 연구의 방향은 이미지 분석으로 방향을 선회하게 된다.

 

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

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

ResNet18 기준으로 작성된 PyTorch Transfer Learning 예제 코드를 다음과 같이 수정하여 AlexNet을 적용해 보고 인식률을 체크해 보기로 한다. 지금 현재 사용되고 있는 이미지분석 네트워크들은 MNIST 예제를 풀기위한 네트워크의 규모에 비해 그 레이어수에 있어서 엄청난 차이가 있으므로 반드시 GPU 컴퓨팅이 뒷받침 되는 환경 하에서도 학습에 수주일 이상이 걸림에 유의하자. 다행스럽게도 구글의 경우 Colaboratory에서 GPU 디바이스 무료 지원이 가능하므로 누구든지 예제 문제를 쉽게 실행시켜 볼 수 있을 것이다.

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

 

본격적인 Image Classification의 시작이랄 수 있는 AlexNet 이후에 성능이 비약적으로 개선된 네트워크들이 지속적으로 출현할 수 있었던 요인은 2012ILSVRC에서 발표되었던 AlexNet의 아키텍추어를 대상으로 파라메터 규모에 따른 아키텍추어 개선에 크게 힘입은 듯하다. 아키텍츄어 관점에서의 MNIST 예제는 특징 추출을 위한 소수의 CNN 뉴럴 네트워크로 구성된다. 반면에 AlexNet에서부터 ResNet에 이르는 본격적인 이미지분석 네트워크에서의 아키텍추어는 그 규모면에서 비교가 되지 않을 정도로 크며 세부 네트워크에서도 다양성이 포함되어 있다.

따라서 여기서는 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 전체로 도입되는 파라메터들을 다음 페이지의 표로 정리하여 보자. MNIST60,000개 수준임에 비해 60,000,000개 수준의 파라메터들이 사용되고 있음을 알 수 있다.

 

AlexNet에 이어 개발된 보다 높은 인식률을 보여주는 모델들에서는 각 레이어 별로 채택하는 컨볼루션 디지털 필터 크기와 갯수 Stride 값 및 레이어 수들이 아주 다르게 설정되고 있으며 보다 인식률을 높일 수 있도록 앙상블 기법이라든지 또는 GRU(Gated Recurrent Unit) 알고리듬과 유사한 형태의 알고리듬이 채택되어 있다.

특히 버클리와 스탠포드에서 개발한 SqueezeNet의 경우는 6천만개 가량의 파라메터를 사용하는 AlexNet 수준의 인식률을 얻기 위해서 AlexNet2% 수준의 파라메터면 충분하다는 것이 알려져 있다. SqueezeNet은 이와 같이 크기가 엄청나게 압축되었으므로 예를 들자면 앱인벤터 스마트폰 코딩에도 적용이 가능해지게 되었다.