딥러닝을 위한 Atrous Convolution과 U-Net 구조: 간략한 역사

2019. 1. 3. 21:03Tips/번역글

원문: Atrous Convolutions and U-Net Architectures for Deep Learning: A Brief History

https://blog.exxactcorp.com/atrous-convolutions-u-net-architectures-for-deep-learning-a-brief-history/


딥러닝의 터닝 포인트

때때로 이전보다 훨씬 효과적이어서 마치 산불이 번지는것과 같이 사람들에게 전파되어 이전과는 완전히 다른 세계를 보여주는 도구가 새로 발명되곤 한다.

딥러닝은 이러한 도구 중 하나이다.

우리는 흔히 2012 ImageNet 대회가 사람들의 인식을 무너뜨리는 포인트라고 지적한다. 데이터셋이 수백만개의 이미지를 포함하고 수천개의 카테고리로 분류되어있는 문제에서, 이러한 데이터셋을 가지고 Convolutional neural network, 즉 이전에 "SuperVision" (또는 AlexNet)이라 불리는 방법을 이용해 15%에 불과한 오류율을 보였다.


해당 대회에서 2위는 25%의 오류율을 보였는데, 이는 전년도에서 우승했던 모델에 비교할만한 정도이다.  비슷한 케이스로 1990년도 후반에 Yann LeCun과 Yoshua Bengio의 LeNet 구조(http://yann.lecun.com/exdb/publis/index.html#lecun-98)를 이용한 손글씨 인식 케이스가 있다.


90년대부터 현대까지: Neural Network 개발들에 관하여

1990년도에 Neural network가 손글씨 인식을 마스터 했을때와(유명한 예로 MNIST데이터셋을 이용한 10가지 클래스의 분류)과 현재 사람이 만든 이미지 classification의 차이는 향상된 Deep Learning 소프트웨어(https://www.exxactcorp.com/Supported-Software-Deep-Learning)와 효과적인 하드웨어의 사용이다. Convolution 연산을 통해 다수의 Layer를 연결하는 기본적인 Network 구조와 back-propagation을 통해 오차율을 감소하는 학습의 알고리즘 자체는 예나 지금이나 바뀌지 않았다.

Conv-Net의 핵심 컨셉인 Convolutions는 입력 이미지에서 kernel이라고 불리는 일정 범위(windowed clusters)의 가중치를 순차적으로 진행하는 방식이다. 각 위치에서 해당하는 픽셀 값과 kernel의 가중치(weights)를 곱해줌으로서 다음 Layer에 대한 Neural activation을 생성한다. 이렇게 구성되는 Convolutional Layer를 여러개 쌓음으로서 네트워크는 점점 더 추상적인 특징들을 추출하는 것을 배운다.

딥러닝: 고양이를 판별하는 것부터 현실의 문제를 푸는 단계까지


사실, 당신은 딥러닝의 주요 목적이란 이미지나 비디오에서 고양이를 찾아내는 것과 같은 것이라고 생각할지도 모른다. 하지만 사실, 딥러닝은 무수한 시각적/추상적 작업에 관련해서 Localized image captioning(https://cs.stanford.edu/people/karpathy/densecap/), super-resolution(http://mmlab.ie.cuhk.edu.hk/projects/SRCNN.html), 그리고 perspective synthesis(https://arxiv.org/abs/1506.06825)와 같은 다양한 방법으로 기존의 SOTA(state of the art)를 압도하고 있다.


예를 들면, 기존의 biomedical에서의 이미지 작업은 이전부터 실제 의학이나 의료 연구환경 모두 전문가의 분석에 의존했다. 의학에서는 X-ray, MRI나 병리학에서는 딥러닝의 도움을 통한 분석이 증가하고 있다. 의료 연구에서는 부분적으로 자동화된 현미경 실험으로 단일 실험으로 몇 테라바이트에 달하는 이미지가 생성되는데, 이에 대해 각 이미지에 대해 머신러닝 용어로 "semantic segmentation"이라고 불리는 방법을 통해 셀(cell)과 셀 구성 요소를 분류하고 있다. 지금의 가장 좋은 컴퓨터 비전 알고리즘을 사용하더라도 이러한 실험에서의 병목현상(bottleneck)은 잘못 분류된 이미지로부터 비롯되는 오진료로 이어진다.


이는 일반화된(generalized) 세포 핵 분류를 주제로 Kaggle, Booz Allen Hamilton, 그리고 Broad Institute가 2018 Data Science Bowl(https://datasciencebowl.com/2018dsbtutorial/)을 개최하기에 충분한 주제였다.


End-to-End 딥러닝이라고도 알려진 Fully Convolutional Neural Network의 여러 종류들은 이러한 종류의 이미지 처리 작업에 특히 더 적합하다.


학습된 Feature Engineering / 딥러닝 Conv-Nets

딥러닝의 중요성이 부각되게 되는 주요 요소는 Feature Engineering의 학습이었다. 중첩된 Convolution 연산은 back-propatation(https://en.wikipedia.org/wiki/Backpropagation)을 통해 오차율을 최소화 하는 방법으로 적절한 feature를 추출해낸다. 이는 다시말해, 사람의 전문성에 기반한 fine-tuning을 통한 feature추출 작업이 미적분의 연쇄 법칙(Chain rule)에 기반한 알고리즘으로 대체되었다는 뜻이다. 과거에는 수작업을 통한 컴퓨터 비전 알고리즘의 조합(HOG, SIFT, GLOH와 같은)으로 컴퓨터 비전 작업을 했다면, 지금은 딥러닝의 Conv-Net이 error-gradient의 탐색을 통해 자동으로 관련성 있는 feature를 추출하기 위한 Network의 가중치를 학습한다.


이러한 점은 Conv-Net이 종종 너무 잘 작동하는 것으로 이어진다.


기존의 컴퓨터 비전 알고리즘에 비해 큰 노력을 들이지 않고도 Conv-Net이 어떻게 작동하는지, 그리고 왜 이러한 결과를 보여주는지에 대한 이해 없이 성능이 좋다. 연구자들이 새로운 모델에 대한 구조를 제시할때, 이러한 모델이 왜 작동하는지 또는 의도하지 않은 방향으로 모델이 작동하는 경우에 대해 설명하는 것보다는 잘 작동한다고 증명하는데에 대부분의 노력을 투자하는 것은 바람직하지 않아 보인다.


잘 작동하는 모델에 대해 개인적으로 직접 만들어보고 조사하는 방법은 특정 상황에서 어떤 Conv-Net 방법이 가장 적합할지에 대해 이해하는데 도움이 될 것이다.


Semantic Segmentaion: 이동 불변성(Translation Invariance) vs. 이동 동일성(Translation Equivariance)

Conv-Net이 달성한 이동 불변성(Translation Invariance) -- 이미지 내 어디에 나타나도 사물(Object)를 인식할 수 있는 능력 --은 Convolution의 깊이가 깊어질 수록 (예를들면 Convolutional kernel의 수를 증가시킨다던지) 순차적으로 이미지의 x축과 y축의 차원을 줄여나가는 방식으로 가능하다.


Deep net에 순차적으로 이러한 방식을 적용한 것이 Conv-Net이 이미지 분류(classification)에서 그렇게 좋은 성능을 낼 수 있는 이유의 하나이다.


하지만 semantic segmentation에서는 이러한 이동 불변성(Translation Invariance)은 불필요하며, 오히려 이동 동일성(Translation Equivariance)을 필요로 한다. 이것은 우리가 사물을 인식하는 것 뿐만이 아닌 사물의 위치를 정확히 집어내는 것(pinpoint)도 필요하기 때문이다. 만약, 3개의 pooling layer를 가진 Conv-Net(예를 들면 AlexNet과 같은)이 있다고 가정하면, 이 Conv-Net은 입력 이미지의 x, y의 차원을 8배 감소시킬 것이며(1/8 크기), 현재의 Conv-Net은 보통 훨씬 깊은 구조를 가진다. 그래도 Conv-Net의 Transposed Convolution을 통해 Upsample을 어떻게 할지에 대해 학습한다고 하더라도, semantic segmentation은 세부적인 디테일에서는 저조한 성능을 자주 보일 것이다.


연구에서의 현미경을 통한 관찰 자료의 semantic segmentation 작업에서 가장 중요한 데이터는 세포핵의 비정상적인 형태 또는 밀집된 형태 (암 진행의 특징)가 해당 될 것이다.


Conv-Net의 발전: Dilated Convolution (Atrous Convolution)과 U-Net 구조

지난 몇년동안 semantic segmentation을 위한 fully connected Conv-Net의 디테일에 대한 몇몇 개선사항이 (재)발견 되었다.


Dilated convolution 또는 atrous convolution은, 이전에 signal decimation없이 하는 wavelet 분석에서 설명했던 대로 (역주: 이전글이 있었나 봅니다), Convolution kernel에 0값을 넣는 방법으로 가중치(weight)의 갯수를 늘리지 않고 window size를 늘린다.


딥러닝 프레임워크 Tensorflow에서는 다음 함수를 통해 atrous convolution을 도입할 수 있다:


tf.nn.atrous_conv2d


Theano로 작성된 모델에서는 다음 방식을 통해 atrous convolution을 도입할 수 있다:


theano.tensor.nnet.conv2d에서 filter_dilation인자 사용


Dilated Convolution은 semantic segmentation map이 뿌옇게 되는(blurring) 현상을 감소시키는데 효과적이라고 알려져있으며, 긴 범위의 정보의 추출에 대해 최소한 부분적으로는 pooling의 필요가 없이 작동한다고 알려져있다.


U-Net 구조는 초반 부분의 레이어와 후반 부분의 레이어에 skip connection을 추가함으로서 높은 공간 frequency 정보를 유지하고자 하는 방법이다. 이러한 테크닉들이 어떻게 잘 작동하는지 조사하기위해, 우리는 Fully-Connected Conv-Net, Atrous Convolution기반의 Conv-Net, 그리고 U-Net스타일의 skip connection을 가진 Conv-Net의 3종류의 네트워크를 학습시켰다.


아래 그림은 동일한 가중치 갯수를 가진 8개의 레이어로 구성된 각 네트워크를 나타내며, 400장의 672x512로 구성된 형광색의 셀 세포 이미지로 학습을 진행했다.


각 Conv-Net에서 어떤 feature를 추출할지 보기 위해서, 우리는 Autoencoder 방식을 통한 학습을 진행한다. 여기서 Autoencoder방식이란 Unsupervised 테크닉으로서 입력 이미지를 출력(output)에서 재구성함으로서 효과적인 데이터 representation을 학습하는 방식을 말한다.


아래 그림은 Fully-Connected Conv-Net을 통해 재구성된 Test셋 이미지이다.

이미지 재구성한 출력에서 셀 세포들 사이사이의 경게선과 세포 내 밝은 점들이 흐려지는 현상으로 세부적인 디테일이 섬세하게 재현되지 못하는 현상을 확인할 수 있다. 이 밝은 점들은 heterochromatin foci라고 불리며, 유전자가 발현되지 않을때 DNA를 단단히 묶인 패킷형태로 저장하는 역할을 한다. 때문에 질병이나 돌연변이에 의한 비정상적인 유전자 발현을 지목하기 위해 heterochromatic foci의 출현 낮은 빈도와 높은 빈도가 혼재되어있는 집합군에 대해 segmentation이나 분류(classification)을 할 수 있는 실험을 계획하는 것이 적합하다.


우리는 위에서 언급한 테크닉들을 이용해서 foci의 경계선의 해상도를 개선하는것이 가능할까?


Atrous Convolution을 이용해서 multi-scale의 재구성에 대한 품질을 향상시킬 수 있다. 빈 가중치로 커널을 확장함으로써 네트워크는 pooling 함수에 의존하지 않고 장거리 피처를 학습하며, pooling이 없이도 네트워크는 더 많은 높은 공간 빈도의 세부요소들을 유지시킬 수 있다.


Convolution의 커널에서 Dilated 구조를 이용하면 Fully connected Conv-Net에서의 가중치(weight)수 이상을 사용하지 않고 학습할 필요가 없다. 하지만, inference와 학습 단계에서 네트워크는 반드시 레이어의 activation을 유지해야 하며, pooling연산이 줄어들면 activation 텐서가 더 많이 필요할 수 있다. 이러한 점은 테스트시의 입력 이미지의 크기를 제한하게 하며, 각기 다른 batch 크기에 대해 시도해볼 여지를 줄인다.


결과적으로, 이러한 점은 GPU에서 사용할 수 있는 메모리가 얼마나 있느냐에 따라 네트워크 전체의 깊이를 줄일 수 있으며, 학습이 더 느려지는 결과를 낳을 수 있다. 따라서, U-Net구조를 사용함으로서 Feature의 세부 디테일에 대한 개선과 deep network의 빠른 학습 모두를 아마도 기대할 수 있을것이다.


U-Net구조와 Atrous Convolution을 이용한 Multi-Scale Conv-Net: 장점과 취약점

사실, U-Net구조에서의 테스트 결과는 Fully-connected나 Atrous Convolution을 이용한 multi-scale Conv-Net보다 질적으로 우수하다. U-Net스타일 구조의 유일한 취약점이라고 하면 깊은 모델에서의 중간 단계의 레이어에서 학습이 느려질 수 있기 때문에, 대략적인 Feature에 대한 정보가 유실될 수 있다는 점이다. 이것은 gradient가 오차율(error)를 계산하는 부분인 네트워크의 output에서 멀어짐에 따라서 발생하는 현상으로, 멀거나 제거된 가중치들에 대한 학습이 느려지는 결과를 보인다.


그럼에도 불구하고 U-Net모델의 장점은 충분히 이러한 위험을 감수할만할 것이며, 올바른 activation 함수와 regularization 파라미터를 사용함으로서 U-Net모델의 중간 레이어(Layer)에서 gradient가 사라지는(vanishing) 현상을 어느정도 줄일 수도 있지만, 이 주제에 대해서는 다음 시간에 기회가 될 때 다루도록 한다.


실전에서는 multi-scale의 비젼 Task의 개선을 위해서 Atrous Convolution과 U-Net구조를 섞어줌으로써 단일 방법을 쓰는 것에 비해 더 나은 성능을 달성할 수 있겠지만, 위에서 작성했듯 두 방법간의 단순 비교는 U-Net이 몇가지 위험을 감수해야 하는 것을 염두에 둔다는 전제하에, 다른 구조에 비해 세부 디테일에 대해 더 쉽게 학습할 수 있다는 사실을 보여준다.


딥러닝은 너무나 잘 작동해서 임의의 모델 구조를 근거없이 만들어내거나, 가장 어떻게 작동하는지에 대해 이해하는 시간을 들이지 않고 최신의 테크닉을 사용하고자 하는 유혹에 쉽게 빠지기 쉽다.


다른 한편으로는, 모델을 최적화하는데 노력을 투자하거나 각 모델을 informative하게 쪼개서 살펴보는 등의 방식으로 모델을 살펴보는 것은 모델 구조에 대해 엔지니어링 측면에서의 결정을 내리는데 필수적이다. 이것은 heterochromatin foci나 연결 시냅스의 세부 디테일을 인식하는 등의 biomedical 이미지 처리방법에만 적용하는 것이 아니다. 산업 환경 내에서의 소규모 스케일의 결함 검출에서는 기존의 컴퓨터 비전 알고리즘을 위한 Custom한 feature 엔지니어링을 위해 조명이나 orientation(방향) 및 component sparsity를 디자인 하는것은 많은 인력과 시간이 필요할 수 있다. 이러한 작업을 대체하기 위해 Conv-Net은 세부 정보를 유지하면서 feature를 자동으로 분류하도록 학습할 수도 있다.