[CV 논문 리뷰 스터디 / 2주차 / 공도웅] U-Net: Convolutional Networks for Biomedical Image Segmentation
Ciresan과 그의 동료들은 픽셀의 local region(patch)을 주어 window sliding 방식으로 학습을 시키는 network를 구축한다. 이 network은 ISBI 2012, EM segmentation challenge에서 우승하는 쾌거를 이루는데 해당 논문에서는 당시 SOTA 모델의 단점과 이에 대한 개선점을 제시하며 U-Net을 제안한다.
1)
First, it is quite slow because the network must be run separately for each patch, and there is a lot of redundancy due to overlapping patches.
각각의 patch에 대해 network가 개별적으로 학습을 진행하기 때문에 속도 측면에서 다소 느리며, patch가 서로 overlapping 되어있어 중복된 영역에 대한 학습이 이루어지기 때문에 자원 낭비가 심하다.
2)
Secondly, there is a trade-off between localization accuracy and the use of context. Larger patches require more max-pooling layers that reduce the localization accuracy, while small patches allow the network to see only little context.
patch 사이즈가 크면, max pooling이 더 많이 적용 되고 정확한 위치 정보를 알기에는 어렵지만(reduction of localization accuracy), 더 넓은 범위의 이미지를 보기 때문에 context 인식에는 효과(use of context)를 가진다. => trade-off between localization accuracy and use of context
3)
The main idea in [9] is to supplement a usual contracting network by successive layers, where pooling operators are replaced by upsampling operators. Hence, these layers increase the resolution of the output. In order to localize, high resolution features from the contracting path are combined with the upsampled output. A successive convolution layer can then learn to assemble a more precise output based on this information.
개괄적으로 살펴보면, Contraction path에서는 이미지의 context 정보를 도출, expansive path에서는 해상도를 다시 높여가며(up sampling) 더욱 세부단위의 localization 수행하는 것이 U-Net의 main idea이다.
4) Fully convolutional network의 의미
-Classification network는 fully connected layer의 특성문제로 인해 고정된 크기의 입력 값(분류하고자 하는 라벨의 개수)만을 받아들여야함. Fully connected layer를 1x1 convolution으로 대체하면 더 이상 입력 이미지의 크기에 제한을 받지 않는다.
-또한, FCN(Fully connected layer)의 경우, 이미지의 우치정보가 사라지는 반면, 합성곱을 사용함으로써 이미지의 위치정보가 보존되는 효과를 지닌다.
크게 contracting path와 expansive path로 구분된다.
그림에서 보이는 blue box는 multi-channel feature map을 의미하고 그 옆에 작은 숫자들은 x,y 사이즈를, 그 위에 숫자는 channel의 개수를 의미한다. 그리고 각각의 화살표는 색 마다 서로 다른 operation을 의미하는데 그 의미는 그림 우측 하단에 있다.
Contracting Path는
Expanding Path는
(crop을 하는 이유는 contracting path에 있는 feature map과 expansive path에 있는 feature map의 해상도가 같지 않기 때문)
맨 마지막 단계에서 3x3 CNN을 2번 거치고 upsampling 대신 1x1 CNN을 사용해 channel의 개수를 2개로 줄인다. 왜냐하면 최종적으로 판단할 클래스 개수가 2개(foreground, background)이기 때문이다.
정리하자면, U-Net은 총 23개의 convolution layer로 구성된 모델이다.
1) Skip connection
Reference 1
U-Net은 FCN 모델을 기반으로 한다. 따라서 FCN에서 제시한 Skip connection의 개념에 대해서 이해를 해두면 좋을 것 같다.
참고 : 위에서 명시한 reference의 포스팅의 내용을 발췌하였다.
FCN 논문에서는 Deep Neural Network에서 얕은 층의 Local 정보와 깊은 층의 Semantic 정보를 결합하는 Skip architecture를 통해 보다 정교한 Segmantation 결과를 얻을 수 있다고 밝혔다. 이를 조금 더 의미론적으로 접근해보면 깊은층인 Deep & Coarse(추상적인) 레이어의 의미적(Semantic) 정보와 얕은층인 Shallow & fine 층의 외관적(appearance) 정보를 결합한 Skip architecture를 정의했다고 할 수 있다.
이러한 skip architecture를 고안한 이유는 네트워크 앞단에서 학습한 경계 정보(각 object를 구분하는 경계)가 pooling을 거치면서 사라지기 때문이다. 아래 그림 〈2〉에서는 FCN-32s → FCN-16s → FCN-8s로 갈수록 객체의 경계가 뚜렷해지는데 이는 각각 원본 이미지의 1/32, 1/16, 1/8 크기로 압축된 피처맵을 upsampling 시에 더하여 경계 정보를 살려낸 것을 의미한다. 원본 이미지에서 크기가 작아질수록 (1/n에서 n이 커질수록) 경계 정보를 잃어버리기 때문에 n이 작을수록 더 뚜렷한 경계를 복원해냄을 알 수 있다.
2) Upsampling
Reference 2
참고 : 위에서 명시한 reference의 포스팅의 내용을 발췌하였다.
Semantic segmentation의 최종 목적인 픽셀 단위 예측과 비교했을 때, FCN의 출력 Feature map은 너무 coarse(거친, 알맹이가 큰) 하다.따라서, Coarse map을 원본 이미지 크기에 가까운 Dense map으로 변환해줄 필요가 있다. 적어도 input image size * 1/32 보다는 해상도가 높을 필요가 있다.
이 대략적인(coarse) 특성맵들의 크기를 원래 이미지의 크기로 다시 복원해줄 필요가 있다. 이미지의 모든 픽셀에 대해서 클래스를 예측하는 dense prediction을 해주는 것이 semantic segmentation의 목적이기 때문이다. (coarse와 dense는 서로 반의어다.) 이 원래 이미지 크기로 복원하는 과정을 upsampling이라고 부른다. upsampling을 통해 각 클래스에 해당하는 coarse한 특성맵들을 원래 사이즈로 크기를 키워준다. upsampling된 특성맵들을 종합해서 최종적인 segmentation map을 만든다. 간단히 말해서, 각 픽셀당 확률이 가장 높은 클래스를 선정해주는 것이다.
Coarse map에서 Dense map을 얻는 몇 가지 방법이 있다 ( Upsampling의 방법 : 4가지 )
1) Interpolation
2) Deconvolution
3) Unpooling
4) Shift and stitch
Pooling을 사용하지 않거나, stride를 줄여 feature map이 줄어드는 것을 방지할 수 있지 않을까?
물론 Pooling을 사용하지 않거나, Pooling의 stride를 줄임으로써 Feature map의 크기가 작아지는 것을 처음부터 피할 수도 있다. 그러나, 이 경우 필터가 더 세밀한 부분을 볼 수는 있지만 Receptive Field가 줄어들어 이미지의 컨텍스트를 놓치게 된다. 또한, Pooling의 중요한 역할 중 하나는 특징맵의 크기를 줄임으로써 학습 파라미터의 수를 감소시키는 것인데, 이러한 과정이 사라지면 파라미터의 수가 급격히 증가하고 이로인해 더 많은 학습시간을 요구하게 된다.
따라서, Coarse Feature map을 Dense map으로 Upsampling하는 방법을 고려해야 한다.
그런데 단순히 upsampling을 시행하면, 특성맵의 크기는 원래 이미지 크기로 복원되고, 그것들로부터 원래 이미지 크기의 segmentation map을 얻게 되지만 여전히 coarse한, 즉 디테일하지 못한 segmentation map을 얻게 된다.
FCN의 개발자들은 좀더 디테일한 segmentation map을 얻기 위해 skip combining이라는 기법을 제안한다. (앞서 살펴보았던 skip architecture) 기본적인 생각은 다음과 같다. 컨볼루션과 풀링 단계로 이뤄진 이전 단계의 컨볼루션층들의 특성맵을 참고하여 upsampling을 해주면 좀 더 정확도를 높일 수 있지 않겠냐는 것이다. 왜냐하면 이전 컨볼루션층들의 특성맵들이 해상도 면에서는 더 낫기 때문이다.
또 더 나아가서 전전 컨볼루션층의 결과도 참고해서 특성맵들을 얻고, 또 그 특성맵들로 segmentation map을 구할 수도 있다. 이 방법은 FCN-8s라고 부른다. 좀 더 구체적으로 이야기하면, 먼저 전전 단계의 특성맵(pool3)과 전 단계의 특성맵(pool4)을 2배 upsampling한 것과 현 단계의 특성맵(conv7)을 4배 upsampling 한 것을 모두 더한 다음에 8배 upsampling을 수행하므로 특성맵들을 얻는다. 이것을 모두 종합해서 최종 segmentation map을 산출한다.
3) overlap-tile method
Reference 3
https://dacon.io/en/forum/405849
https://sylaboratory.tistory.com/1
참고 : 위에서 명시한 reference의 포스팅의 내용을 발췌하였다.
일반적인 이미지와 다르게 의료공학 분야에서는 고해상도 이미지가 대부분이기 때문에 많은 연산량을 필요로 하다. 고용량의 의료 이미지를 효율적으로 처리하기 위한 방안으로 overlap-tile 전략을 고안해낸다.
오른쪽의 노란색 박스 영역을 분할하기 위해서는 파란색 박스 영역의 이미지 데이터가 필요하다. 작은 영역을 예측하기 위해서 큰 영역을 학습해야한다고 이해하면 된다.
하지만 이렇게 예측을 하게 되면 기존에 가지고 있는 원본 이미지보다 훨씬 더 작은 영역만 예측이 가능할것 이다. 하지만 우리는 입력한 전체 이미지의 분할 결과를 얻고 싶다.
그래서 누락되는 부분을 원본 이미지를 미러링해서 채워넣어서 전체 입력 이미지에 대해 분할할 수 있도록 하였다. 그림의 왼쪽을 자세히 보시면 원본 이미지를 둘러싼 테두리의 이미지가 원본 이미지와 거울을 댄 것처럼 대칭인 것을 확인하실 수 있다. 픽셀 값을 복사(미러링)함으로써 메모리의 추가적인 사용을 줄이고 원본 이미지 크기의 예측 결과를 얻어낼 수 있는 것이다.
기존 FCN에서와 다른 중요한 점이 있는데 upsampling과정에서 feature channel의 수가 많다는 것입니다. 이는 network가 context를 higher resolution successive layer에게 전파할 수 있음을 의미합니다. 이 netwrok는 fully connected layer를 포함하지 않으며 오직 각각의 convolution의 valid part만을 사용합니다. valid part는 full context가 들어있는 segmentation map입니다. 이러한 기법은 overlap-tile 기법을 사용하여 seamless segmentation을 가능하도록 합니다. (출처 : https://sylaboratory.tistory.com/1)
위 그림의 노란색 영역, 즉 타일을 예측하게 되면 다음 타일로 넘어가는데 필요한 영역이
이전에 예측을 위해 사용했던 영역과 겹치게(overlap) 된다.
따라서 이 방법을 overlap-tile이라고 불리게 된 것으로 이해하면 될 것이다.
논문에서는 overlap-tile 전략은 "GPU 메모리가 한정되어 있을 때
큰 이미지들을 인공 신경망에 적용하는데 장점이 있다"고 말하고 있다.
이미지의 경계 부분 픽셀에 대한 세그멘테이션을 위해 0이나 임의의 패딩값을 사용하는 대신
이미지 경계 부분의 미러링을 이용한 Extrapolation 기법을 사용하였다.
-기본적으로 U-net은 SGD(Stochastic Gradient Descent) optimizer를 활용하여 모델을 학습시킨다.
-연산의 효율성을 위해 patch 크기를 크게하여 single image당 batch연산 수를 줄였다. 하지만, 이에 따른 trade off로 학습에 있어서 최적화가 어렵기 때문에 이를 보완하기 위한 방법으로 momentum을 0.99로 크게 주어 과거의 데이터를 좀 더 잘 학습하도록 만들었다고 한다.
energy function
최종 출력된 feature map의 각 픽셀에 대해 pixel-wise soft-max를 적용하여 계산한다. w는 가중치라고 생각하면 되고, 그 이후의 log값은 cross entropy값을 의미한다.
P(l)(x): softmax of each pixel comparing true label l
l: true label of each pixel
w: weight map (to give some pixels more importance)
w는 weight map으로서 특정 픽셀에 가중치를 두기 위해 적용했다고 한다. 크게 2가지 기능을 수행하는데,
1)
to compensate the different frequency of pixels from a certain class in the training data set
첫째로 학습 데이터 셋에서 특정 동일 클래스로 분류된 픽셀의 다른 frequency를 보완하기 위해서
(첫번째 term의 기능이 사실 이해가 잘 안되었는데, wc(x)의 경우, 픽셀 x의 위치에 해당하는 클래스의 빈도수에 따라 값이 결정된다고 이해하였다. 즉, x 픽셀에 background인지, foreground인지의 여부에 대한 빈도수에 따라 결정된다고 이해하였다. 사실 이해가 더 필요할 것 같음)
2)
to force the network to learn the small separation borders that we introduce between touching cells
둘째로, 인접한 간격(separation border)이 아주 미세한 cell을 구별하기 위해서이다.
다시말해, 서로 인접한 cell에 대해서는 background와 분리하기 위해 loss 값에 의도적으로 큰값의 가중치를 둔 것이라고 이해하면 된다.
wc: weight map to balance the class frequencies
d1: distance to the border of the nearest cell (첫번째로 가까운 세포까지의 거리)
d2: distance to the border of the second nearest cell (두번째로 가까운 세포까지의 거리)
w0 = 10, sigma = 5
U-Net은 이러한 energy function의 값이 작아지는 방향으로 학습을 수행한다.
Data augmentaion은 모델이 바람직한 불변성(invariance)와 강건함(robustness)를 갖추기 위해 필수적이며 적은 개수의 샘플만이 사용가능할 때 효과적으로 작용한다.
특히 해당 논문이 발간된 의료분야(Biodmedical Image Segmentation)에서는 annotated된 이미지의 개수가 적기 때문에 data augmentation이 중요한 요소로서 고려되어야 하는데, 해당 논문은 이를 위해 elastic deformation이라는 augmentation 기법을 활용한다.
Elastic deformation 사용을 추천하는 경우 :
연속체에서 어떤 힘이나 시간 흐름으로 인해 변화가 발생하는 경우. 이 힘이 제거된 후 변형이 원래처럼 돌아오게 되면 이 변형을 탄성이라고 한다. 이렇게 탄성이 있는 경우는 같은 물체라 해도 촬영 방법이나 각도 등에 의해서 다른 결과를 가져올 수 있으므로 이럴 때 사용하면 좋다고 하나 이 외의 경우에도 사용
선형 변환이 아닌 확률적으로 노이즈를 가하여 픽셀별로 자연스럽게 뒤틀리게 된다.
구체적인 적용 method
1. coarse 3 x 3 grid에 random displacement vectors을 이용해 smooth deformation을 수행
displacement는 10개 픽셀이 가지는 값들의 표준편차를 따르는 가우시안 분포에서 임의로 뽑은 값 : 수평 수직 방향에 대해서 임의의 stress(강도)가 생성되는 과정으로 이해할 수 있음
변수1) alpha (무작위 초기변위에서의 최댓값)
2. bicubic interpolation을 이용해 픽셀 단위로 displacement를 계산
가까운 픽셀이 유사한 displacement(변위)를 갖도록 하기 위해 가우시안 필터를 적용하는 것
변수2) sigma (가우시안 필터의 표준편차에 의해 주어진 평활화 작업의 강도)
(* 참고 - bicubic interpolation은 쌍삼차보간법(bicubic interpolation으로 어떠한 값을 추정할 때 이웃한 두개의 점을 참조하여 3차함수를 활용하는 방법인 삼차보간법을 2차원에서 수행하는 것을 의미)
3. contracting path의 맨 끝에 있는 Drop out layer가 더욱 implicit한 Data augmentation을 수행하도록 유도
https://stat-cbc.tistory.com/28
https://bskyvision.com/789 - 쌍삼차보간법(bicubic interpolation)
4.Experiment
댓글 영역