배너
닫기

테크노트

배너

라온피플의 머신러닝 아카데미 (8) - ZFNet (1)

  • 등록 2018.12.09 21:22:41
URL복사

[첨단 헬로티]

 

머신비전산업에서 인공지능 기술(머신러닝, 딥러닝)이 빠르게 확산되고 있다. 인공지능 기술을 통해 기존의 컴퓨터비전 기술로는 어려웠던 검사가 가능해질 뿐만 아니라 ‘데이터의 자기 학습’으로 보다 빠르고 쉬우며 신뢰성과 유연성을 갖춘 머신비전 검사가 가능해졌다. 이에 따라 자연스럽게 인공지능 기술에 대한 관심이 높아지고 있다. 국내 대표적인 머신비전 전문업체인 라온피플은 ‘LAON PEOPLE’s 머신러닝 아카데미’를 통해 인공지능의 대표적인 기술인 머신러닝 기술에 대해 연재한다.


AlexNet 이후의 후속연구와 ZFNet 


2012년 ILSVRC를 우승한 AlexNet에 대한 소식은 관련 분야의 연구자들에게는 엄청난 자극과 희망을 가져다 주게 된다. 이것은 마치 인류의 한계라고 여겼던 100m 달리기 기록이 누군가에 의해 한번 깨지게 되면, 그 다음에는 그 기록을 깨는 사람들이 많이 나오는 것과 유사하다. 그리하여 AlexNet은 이후 새로운 구조나 방식을 개발하는 연구자들이 성능을 비교할 때 사용하는 일종의 reference 역할을 하게 된다.


2012년 ILSVRC에서 AlexNet은 classification error 율이 16.4%로 우승을 했지만, 2013 년 ILSVRC에서는 Clarifai가 11.7%의 에러율을 보이며 우승을 하게 된다. 그리고 AlexNet 보다 좋은 결과를 보이는 팀도 총 8개가 된다. Clarifai는 뉴욕대에서 박사 학위를 받은 Matthew Zeiler가 2013년에 세운 회사로서 영상 인식이나 인공지능 분야의 솔루션을 공급하는 회사이다. Matthew Zeiler는 뉴욕대를 다니는 동안 CNN을 보다 잘 이해할 수 있는 “Visualizing 기법”을 최초로 개발했으며, 2011년에 “Adaptive Deconvolutional Networks for Mid and High-level Feature Learning” 이라는 논문을 발표한다. 이후 2013년에 유명한 논문 “Visualizing and Understanding Convolutional Networks”라는 논문을 발표하였고, 2013년 ILSVRC에도 참가하여 classification error율 13.5% 를 보인다. 아마도 학교에 있을 때, 이미 Visualizing 기법을 활용한 CNN 구조 연구에 이미 정통해 있었고, 2012년 Krizhevsky가 AlexNet을 발표하자, 그 연구 결과에 자신들의 연구를 적용하여 더 좋은 구조를 찾아낼 수 있게 되었고, 그 다음 해에 ILSVRC에 참가한 것으로 보인다. Matthew Zeiler는 결과적으로 2개의 팀으로 참가한 것이나 마찬가지 상황이 되지만, 이미 AlexNet을 능가할 수 있는 아이디어는 꾸준히 발전을 시켰을 것이라 추정이 되고, 이에 고무되어 회사를 설립하고 ILSVRC에는 자신의 회사도 참여하여 우승을 하게 된다. Clarifai의 구조에 대하여 상세 소개한 자료는 거의 없다. 반면 Zeiler가 발표한 ZFNet은 소개가 잘 되어 있으며, 개념적으로도 같은 연구자가 개발하여 脈(맥)이 같을 것으로 추정된다. CNN의 좋은 구조를 찾아가는 것이 우리의 목적이기 때문에, 이번 호에서는 ZFNet에 대하여 살펴보기로 한다.


ZFNet이란?


CNN, 특히 layer가 여러 개인 DNN의 경우, 무슨 원리로 그렇게 좋은 결과를 낼 수 있는지, CNN의 구조를 결정하는 hyper-parameter는 어떻게 설정을 할 것인지, 또는 자신들이 개발한 구조가 과연 최적인지 판가름하는 것은 너무 어렵다. AlexNet의 경우 2개의 GPU를 사용하여 학습을 하는데 일주일 이상이 걸리는데, 10개가 넘는 hyper-parameter의 조합 중 최고를 찾아낸다는 것아 과연 가능한 일일까? 좋은 결과는 얻었지만, 이론적으로 설명하기가 어렵고, 최적의 구조인지도 확신할 수도 없는 상황이기 때문에 뭔가 CNN을 보다 잘 이해할 수 있는 수단이 필요했으며, Matthew Zeiler는 이것을 “Visualizing 기법"을 사용하여 해결하려는 시도를 하였다. 이것에 관련된 주요 개념은 2011년에 이미 발표를 하였으며, 2012년 AlexNet의 결과가 reference로 만들어지자, 2013년 논문 발표를 통해 자신들의 연구 결과가 효과적임을 입증하였다. 이후 많은 연구자들이 Zeiler의 논문에 자극을 받아 “Visualizing 기법”을 변형/발전시키는 논문을 발표하게 된다. 이 중 2개만 소개하면 아래와 같다.


- Visualizing Convolutional Neural Networks for Image Classification (2015, Danel Brukner)

- Delving Deep into Convolutional Nets (2014, Ken Chatfield)


어찌보면, ZFNet은 특정구조를 가리키는 개념이 아니라, CNN을 보다 잘 이해할 수 있는 기법을 가리키는 개념으로 이해하는 것이 좋을 것 같다. 실제 논문에서도 새로운 구조를 발표했다기 보다는 AlexNet의 기본 구조를 자신들의 Visualizing 기법을 통해 개선할 수 있음을 보여줬다. 결과적으로 보면, 많은 수의 hyper-parameter를 최적화 함에 있어 시간이나 기타 다른 이유로 인해, AlexNet 연구자들이 더 좋은 구조를 설계할 수 있음을 보임으로써 자신들의 연구의 탁월함을 보여준 셈이 된다.


ZFNet속으로 - Deconvolution을 이용한 Visualization이란? 


CNN의 동작을 잘 이해하려면, 중간 layer에서 feature의 activity가 어떻게 되는지를 알 수 있어야 한다. 그런데 중간 layer의 동작은 보기가 어려우니, 이 activity를 다시 입력 이미지 공간에 mapping을 시키는 기법이 바로 “Visualizing 기법”의 핵심이 된다. CNN 구조는 여러 개의 convolutional layer를 기반으로 하고 있는데, 중간 단계 layer에서는 이전 feature map으로부터 데이터를 받아, 그것에 대해 filtering (convolution)을 수행하여 현단계의 feature-map을 만들어내고,정류(ReLU) 장치를 통과시킨 후, Pooling을 수행하는 그림1과 같은 방식을 취한다.



특정 feature의 activity가 입력 이미지에서 어떻게 mapping 되는지를 이해하려면, 위 과정을 역(reverse)으로 수행하면 된다. 그런데 여기에서 가장 문제가 되는 부분이 max-pooling에 대한 역(reverse)를 구하는 것이다. Max-pooling 단계는 주변에서 가장 강한 자극만을 다음 단으로 전달을 하기 때문에, 역방향으로 진행을 할 때는 어떤 위치에 있는 신호가 가장 강한 신호인지 파악할 수 있는 방법이 없다. 여기에서 ZFNet 개발팀의 번득이는 아이디어가 들어가게 된다. 이 사람들은 “switch”라고 명명한 개념을 생각해냈다. 이 switch는 가장 강한 자극의 위치 정보를 갖고 있는 일종의 꼬리표(flag)라고 보면 된다. 가장 강한 자극의 위치 정보를 갖고 있기 때문에, 역으로 un-pooling을 수행할 때는 switch 정보를 활용하여 가장 강한 자극의 위치로 정확하게 찾아갈 수 있다. 원래는 가장 강한 자극 이외의 값들도 있었지만, max-pooling을 수행하면서 사라졌기 때문에, 이 방법의 단점은 가장 강한 자극(feature)에 대한 영향만 파악이 가능하다는 점이다.


그림2를 보면, 녹색 화살표가 가리키는 자극은 강하지 않기 때문에 max-pooling을 수행하면서 오른쪽 빨간색 화살표처럼 사라진다.



다음 과정은 ReLU의 역과정을 수행하여야 하는데, ReLU의 경우 앞선 클래스에서도 살펴봤지만, 음의 값을 갖는 것들은 0으로 정류(rectify) 하고 0이상 값들은 그대로 pass 시키기 때문에, 역과정을 수행할 때 양의 값들은 문제가 없고, 0 이하의 값들만 정류되었기 때문에 복원할 방법이 없다. 그렇지만 이들의 연구 결과에 따르면 영향이 미미 하다고 한다. 다음 과정은 filter에 대한 inverse filter 연산을 수행하는 것이다. 이 과정은 가역이 가능한 과정이기 때문에 특별히 문제가 될 것이 없다. 이렇게 Deconvolution을 수행하면, 정확하게 입력과 같은 상태로 mapping이 되는 것은 아니지만, 가장 강한 자극(feature)가 입력 영상에 어떻게 mapping되는지를 확인할 수 있으며, 이렇게 결과를 시각적으로 확인을 할 수 있기 때문에 CNN에 대하여 더 잘 이해를 할 수 있고, 한 걸음 더 나아가 어떤 구조가 최적의 구조인지를 좀 더 잘 결정할 수 있게 된다.


Feature Visualization


그럼 실제로 어떻게 나타나는지 좀 더 살펴보자. 학습 데이터를 이용하여 training을 마치게 되면, 각 layer에서의 자유 변수가 결정이 된다.


AlexNet처럼 5개의 convolutional layer를 갖는 CNN 구조를 생각해보자. 각각의 단계의 feature-map에서 가장 강한 특징 9개만 보여주고, 그 9개의 feature에 대해 원본 영상을 같이 쌍으로 보여주기로 한다. 그림3은 Layer1과 Layer2를 보여주는 것으로서, 주로 영상의 코너나 edge 혹은 컬러와 같은 low level feature를 시각화 한 것이다.



다음은 Layer3에 대한 그림이다. 이 그림4를 보면, Layer1/Layer2에 비해 좀 더 복잡한 (상위 수준) 항상성(invariance)을 얻을 수 있거나 비슷한 외양(texture)를 갖고 있는 특징을 추출할 수가 있다.



Layer4에서는 사물이나 개체의 일부분을 볼 수 있으며, 그림5의 경우처럼 개의 얼굴(1열, 1행)이나 새의 다리(4열 1행) 등을 볼 수 있다. Layer5에서는 위치나 자세 변화 등까지 포함한 사물이나 개체의 전부를 보여준다.



이렇게 시각화(Visualizing)를 수행하게 되면, 특정 단계에서 얻어진 feature-map 들이 고르게 확보되어 있는지 혹은 특정 feature 쪽으로 쏠려 있는지, 개체의 pose나 기타 invariance 등을 잘 반영하는지 등등을 파악할 수 있기 때문에, 학습의 결과에 대한 양호 여부를 판단할 수도 있고, 결과적으로 CNN의 구조가 적절했는지 등을 판단하기에 좋다.


지금까지 Matthew Zeiler 연구팀이 발표한 “Visualization 기법”의 필요성과 방법 및 기본 개념에 대하여 살펴보았다. CNN의 중간 layer를 시각화 하기 위해 Deconvolution을 사용하였으며, 가장 큰 난관인 max-pooling 결과에 대한 un-pooling 문제를 해결하기 위해 switch라는 개념이 적용되었음을 알았다. 각각의 intermediate 단에서의 feature가 원영상에서 어떤 영역에 해당하는지, local feature등이 layer가 올라감에 따라 global feature로 바뀌는 것에 대해서도 좀 더 잘 이해할 수 있게 되었다. 이 Visualization 기법이 만능 툴은 아니지만, 적어도 CNN 구조의 적합성 여부를 판단하는데 좋은 툴이 될 수 있음은 분명하다. 다음에는 이점에 대해 좀더 자세히 살펴보고, 이것을 통해 과연 AlexNet의 성능을 끌어올릴 수 있는지도 살펴보자.


이미지상의 Feature? 


만약에 디카로 찍은 영상들을 자동 분류(auto-tagging)를 하고 싶다면, 어떻게 해야 할까? 답은 영상을 분석하여 영상을 대표할 수 있는 “그 무엇(representation)”을 끄집어 내야 한다. 그렇다면 영상을 대표할 수 있는 “그 무엇(feature)”의 후보는 어떤 것들이 될까? 영상을 대표할 수 있는 특징은 크게 3가지로 분류가 가능하다.


- Low-level feature: edge, corner, color

- Mid-level feature: edge junction

- High-level feature: object의 일부분이나 전체 object


영상을 대표할 수 있는 feature로는 흔히 사용하는 영상의 경계(edge)를 꼽을 수 있다. 영상의 경계는 우리가 알고 있는 Sobel, Laplacian, Canny 등 edge 검출 필터를 사용하면 쉽게 검출이 가능하지만, 그것이 무엇을 뜻하는지 파악하기란 매우 어렵다. 그렇기 때문에 많은 feature 검출 알고리즘들은 단순한 edge가 아니라 좀 더 강인한 특징을 갖는 edge를 추출하고, 거기에 histogram이나 기타 다른 방법을 통해, 좀 더 효과적으로 구별하려는 시도들을 한다. 좀 있다가 살펴볼 SIFT도 비슷하다. 아래 그림6을 한번 보자. 이것은 좀전에 살펴본 그림의 일부이며, Zeiler가 자신의 논문에서 사용한 그림이다. 예를 들어, 아래 그림을 보면 서로 다른 개가 나오는데 이것을 edge에 기반한 feature 만으로 제대로 분류가 가능할까? 또한 다양한 각도에서 바라보는 자전거를 잘 분류해 낼 수 있을까?



ILSVRC 2012년 결과를 보면, SIFT 기반의 결과와 CNN을 사용한 결과는 10% 이상의 성능차이를 보였으며, 2013년의 Zeiler의 Clarifai는 다시 2012년 결과를 5% 이상 개선을 하였기 때문에 이제는 CNN과 low-level feature 기반의 알고리즘을 비교한다는 것 자체가 별로 의미가 없어졌다.


SIFT(Scale Invariant Feature Transform)


그래도 한동안 대세로 자리를 잡았던 low-level feature 기반 영상 비교 알고리즘의 선두 주자였던 SIFT에 대해서 잠깐 살펴보자. SIFT는 Scale Invariant Feature Transform의 약어로, 크기의 변화나 회전에 영향을 받지 않는 영상의 feature를 검출하고 그것으로 꽤 괜찮은 성능을 보이는 알고리즘이다. SIFT는 크게 보면, 다음 4개의 step을 거쳐 특정 object를 대표할 수 있는 descriptor를 생성한다. 


1. Scale-space extrema를 찾아낸다.

2. Key-point localization & Filtering

3. Orientation 할당

4. Descriptor를 생성


SIFT 알고리즘을 설명할 때, 가장 많이 사용되는 그림이 바로 아래 그림7이다. 영상에서 단순하게 경계를 검출하면, 잡음을 포함한 의미없는 edge도 많이 검출하기 때문에 먼저 Gaussian filter를 여러 레벨로 적용(σ 값을 조절)하여 영상을 blur 시키고, 그것들 간의 차(difference)를 구하면, 잡음에 강인한 feature가 얻어진다. (DoG: Difference of Gauassian). 




이렇게 현재 scale에 대한 작업을 마치면, scale 변화에 대응이 가능하도록 영상의 scale을 바꿔가면서 동일한 작업을 수행하여, 서로 다른 scale(크기)에서의 강인한 feature(extrema)를 구한다.


DoG를 통해 비교적 강인한 extrema를 추출했을지라도 아직 쓸모없는 정보들도 많이 포함이 되어 있기 때문에 이것을 key-point localization 작업과 filtering을 통해 의미가 있는 정보들만 추출해낸다. 다음은 gradient의 방향에 따른 histogram을 구한다.


다음은 4×4 gradient window에서 8개의 방향으로 4×4×8 = 128 총 128차원의 descriptor를 만들고, 이 descriptor를 비교하는 방식으로 영상의 정합성 여부를 판단하게 된다. 결과적으로 보면, 영상의 mid나 high-level 특징을 보는 대신에 low-level gradient가 scale-space에서 어느 방향으로 향하는 것인가에 대해서만 살피기 때문에 태생적으로 한계를 가질 수밖에 없다. 조명의 변화에 대해서도 민감하며, 영상을 취득할 때 saturation 되는 부분에 따라서도 많은 영향을 받게 된다. SIFT를 소개하는 자료는 인터넷 상에 워낙 많기 때문에 이 정도로 간단하게 정리를 한다. 


CNN과 Feature Visualization


CNN이 SIFT등 기존 알고리즘과 다른 점은 여러 단계의 convolution과 pooling을 거치면서 mid 및 high-level feature를 이용한다는 점이다. 그리고 처리를 해야 할 영상의 형태나 내용과 관계없이 동일한 방식을 따르는 것이 아니라, 데이터에 따라 convolution에 사용할 filter의 parameter를 학습을 통해 최적값을 결정한다는 점이 다르다. 하지만 최적의 결과를 얻으려면, 적절한 hyper-parameter의 설정이 필요하며, 이것을 직관적으로 이해하기가 쉽지 않다. “Feature Visualizing 기법”은 CNN에서 최적의 구조를 결정하는데 크게 도움이 되는 수단을 제공한다. 이러한 수단이 없다면, 그냥 경험이나 직관에 의존을 해야 되지만, Feature Visualization 기법을 이용하면, 중간 단계의 filter 연산에서 적절한 feature들이 추출이 되었는지를 확인할 수 있으며, 이를 통해 현재 실험 중인 hyper-parameter의 조합이 최적의 결과인지도 확인해낼 수 있다. 논문에 있는 실험 결과를 살펴보자. 


그림9에서 (a)는 Krizhevsky의 논문에 기반하여 얻은 첫번째 layer의 특징이며 이것을 보면, 특정 feature가 많이 나타나는 것을 볼 수가 있다. 이는 filter kernel이 벡터 관점에서 보면 대표성이 떨어진다고 볼 수 있다. (b)는 Zeiler가 좀 더 개선된 결과를 얻어내기 위해 Krizhevsky의 1단계 구조에서 stride와 filter kernel의 크기를 바꿔 개선한 것이다. (b)는 (a) 보다 훨씬 다양한 feature를 검출할 수 있다는 것을 확인할 수 있다.



그림10 (c)는 Krizhevsky 논문의 두번째 layer를 Visualization 기법으로 본 결과이며, (d)는 ZFNet의 결과이다. 대충 봐도 알 수 있듯이, (d)는 (c) 보다 훨씬 선명하고, anti-aliasing artifact도 없음을 알 수 있다.



이처럼, Feature Visualization 기법을 잘 활용하면, 최적의 architecture를 결정하는데 큰 도움을 받을 수 있다. 좋은 feature는 topology나 scale 변화에 무관해야 한다. 다시 처음에 사용한 그림10으로 돌아가보자. 다섯번째 layer에서 보면, 여러 형태 여러 위치에서 개(dog)를 잘 검출할 수 있는 것을 알 수가 있다. 이 또한 Visualization 기법을 통해 쉽게 확인이 가능하며, 또한 마지막 convolution 단계인 5단계를 거치면서 edge나 edge의 junction과 같은 low-level feature가 아니라 개의 얼굴이나 자전거의 바퀴처럼, object의 일부분이나 전체를 효과적으로 검출이 가능하다는 것을 확인할 수 있다.



CNN이 다른 low-level feature 기반 알고리즘과 달리 장점을 갖는 이유를 Visualization 기법을 통해서 확인을 하였고, 또한 Visualization 기법을 통해 최적의 architecture를 결정할 때도 잘 활용할 수 있음을 살펴보았다. 

다음에는 Visualization 기법을 활용하여, Krizhevsky의 AlexNet의 성능을 끌어올린 구조에 대하여 살펴보고, 기타 Visualization 기법의 특징에 대하여 살펴볼 예정이다. 


(주)라온피플










배너









주요파트너/추천기업