1. 서론
2. DCNN
3. atrous convolution
4. fully-connected Conditional Random Field
5. Multi-Scale Prediction
5. Experiment Details
일러두기
1. DeepLab 팀은 시멘틱 세그멘테이션(semantic segmentation) 방법으로 DeepLab 시스템을 고안했다. 2015년, 2016년, 2017년, 2018년에 차례로 DeepLab v1, v2, v3, v3+를 발표했다.
2. 본문에서 atrous 알고리즘 혹은 hole 알고리즘은 atrous 알고리즘으로 통일한다. 참고로 DeepLab v1에서는 두 용어를 혼용해서 사용했지만, DeepLab v2부터는 atrous 알고리즘으로만 언급했다.
논문 URL : https://arxiv.org/pdf/1412.7062v4.pdf
1. 서론
DCNN(Deep Convolutional Neural Network)은 영상 처리 분야에서 많은 성과를 보이고 있다. DeepLab 팀도 DCNN을 기반으로 하는 시멘틱 세그멘테이션(semantic segmentation) 방법인 DeepLab 시스템을 고안했다. 2015년에 처음 DeepLab v1을 소개했고, 2016년, 2017년, 2018년에 차례로 v2, v3, v3+를 발표해 성능을 끌어올렸다.
DeepLap팀은 DCNN을 활용한 시멘틱 세그멘테이션의 주안점으로 크게 2가지를 꼽았다. 첫째는 DCNN에서 공통적으로 나타나는 특징인 불변성으로 인한 위치 정보 소실이다. 여기서 불변성이란 특정 객체의 위치나 회전 여부에 상관없이 객체의 가장 두드러지는 특징을 추출할 수 있다는 것이다. 이는 pooling 혹은 striding convolution을 이용해 다운샘플링하는 DCNN의 주요 특징이다. 3x3 max pooling을 생각해보면, 3x3 윈도우 내에서 최댓값(가장 두드러지는 특징값)을 추출하면서 이때 최대값의 위치를 고려하지는 않는다. average pooling이나 striding convolution도 마찬가지다. 이러한 불변성 덕분에 다운샘플링해도 객체의 주요 특징은 보존하기 때문에 이미지 분류 과제에서는 문제가 되지 않는다. 오히려 특징맵의 차원을 줄여 오버피팅을 방지하고, 분류에 불필요한 activation을 제거해 계산 효율을 제고할 수 있다. 하지만 이미지 분류와는 다르게 시멘틱 세그멘테이션은 픽셀마다 클래스를 분류해 결국에는 객체의 위치도 정확히 파악해야 하는 작업이기 때문에 공간 정보가 매우 중요하다. 이 경우 불변성으로 인한 득보다는 실이 더 많아진다. 앞서 말했듯이 불변성을 보장하는 다운샘플링은 두드러지는 특징의 위치는 고려하지 않기 때문에 특징맵이 pooling 층을 거치면 객체의 위치 정보(Spatial Information)가 소실된다. 결국에는 시멘틱 세그멘테이션 시 localization 정확도가 낮아지고, 디테일한 세그멘테이션 성능이 떨어지는 문제가 발생한다.
두번째는 이미지에 나타난 객체마다 스케일, 즉 크기가 다르다는 것이다. DCNN에서는 합성곱 필터의 크기에 따라 결과 특징맵의 한 픽셀을 계산하기 위해 참조한 입력 이미지의 영역 사이즈가 정해진다. 참조한 입력 이미지의 영역을 field of view 혹은 receptive field라고 한다. field of view의 크기가 고정되었다면, 객체의 크기에 따라 field of view에 나타나는 객체의 특징 정보가 달라질 수 있다. 예를 들어 아래 그림1에서 사람을 세그멘테이션한다고 해보자. 비교할 객체는 파란색 박스로 표시한 사람 두 명으로 가까이에 있어 상대적으로 크게 보이는 사람과 멀리 있어 상대적으로 작게 보이는 사람이 있다. 다시 말해 두 사람 객체의 스케일이 다르다. 반면에 빨간색 박스를 보면 가운데 점으로 표시한 픽셀의 클래스를 분류하기 위해 참조하는 field of view의 크기는 빨간색 박스 영역으로 동일하다. 두 픽셀 모두 사람의 팔 가장자리에 위치하지만, 이를 분류하기 위한 참조 영역에는 큰 차이가 있다. 큰 사람 객체는 오른쪽 팔과 어깨, 등 일부분과 배경을 참조하는 반면 작은 사람 객체에서는 상반신 전체와 배경을 참조하는 것을 볼 수 있다. 따라서 사람 클래스를 세그멘테이션한다고 해도 객체의 크기에 따라 성능 차이가 있을 수 있고, 객체의 가장자리를 섬세하게 세그멘테이션하지 못할 수도 있다. 이를 해결하기 위해 다양한 스케일의 객체를 포함하는 데이터셋으로 DCNN을 학습하는 것도 한 방법이겠지만, 추가적인 방법으로 다양한 스케일의 객체를 세그멘테이션하는 성능을 더 높일 수 있다.
앞선 두가지 문제점을 해결하고 세그멘테이션 성능을 높이기 위해 DeepLab 팀은 v1, v2, v3, v3+에 걸쳐서 atrous convolution, fully-connected CRF, ASPP 등 다양한 방법을 도입한다. 본 글에서는 DeepLab v1에 대해 알아보고, 차례로 다른 글로 v2, v3, v3+를 소개하겠다.
2. DCNN
DeepLab v1에서는 그림 2와 같이 FCN[5]과 같이 네트워크 모든 층을 합성곱층으로 만든 VGG16을 사용한다. 그림 2의 output stride는 윈도우가 슬라이딩하는 간격을 말하고, input stride는 3. atrous convolution에서 설명할 rate와 동일한 의미로 사용된다. 서론에서 다뤘던 DCNN을 활용한 세그멘테이션의 문제점을 해결하기 위해서 atrous convolution, fully connected CRF 등을 이용했다.
3. atrous convolution
3.1 개념
DeepLab이 다른 시멘틱 세그멘테이션 알고리즘과 구별되는 가장 뚜렷한 특징이 바로 atrous convolution이다. atrous convolution은 필터 중간중간에 0을 채워넣어 학습해야할 파라미터 수는 유지하면서 보다 넓은 영역을 참조하게끔 하는 방법이다. 그림 3은 1차원 배열에서 atrous convolution이 어떻게 계산되는지 보여준다. 필터(커널) 크기가 3일때 아래 Output 배열의 노드 하나를 계산하기 위해서 Input 배열의 노드 3개가 필요한 것은 일반적인 convolution과 동일하지만, rate를 2로 설정해 Input 노드 사이에 하나씩 간격을 둬 참조하는 배열의 영역이 일반적인 convolution에서는 3이었을 것이 atrous convolution에서는 5로 더 길어졌다. rate는 필터 파라미터 사이에 0값을 얼마나 채워넣을지 정하는 하이퍼 파라미터로, rate가 1이면 일반적인 convolution과 동일한 연산이 수행된다.
그림 4는 2차원 배열에서 rate마다 atrous convolution을 수행하기 위한 필터가 어떻게 달라지는지 보여준다. 1차원 배열에서와 마찬가지로 기존 3x3 필터(커널)의 파라미터값 사이에 rate만큼 0을 채워준다. 이러한 atrous convolution은 기존의 3x3 필터와 학습해야할 파라미터의 수는 9개로 동일하지만 convolution 연산을 수행하는 윈도우의 크기는 rate가 6인 경우 13x13, rate가 12인 경우 25x25, rate가 18인 경우 37x37, rate가 24인 경우 49x49로 커진다. 결국 필터의 크기가 커진다고 볼 수 있기 때문에 atrous convolution을 필터를 업샘플링한다고 표현하기도 한다.
3.2 왜 atrous convolution을 사용해야 하는가?
atrous convolution의 이점을 두가지로 요약해보자면 첫째로는 공간 정보 손실을 줄여 세그멘테이션 성능을 높인다는 것이다. pooling과 atrous convolution을 비교하면 이해가 쉽다. pooling 층을 이용할 경우 해상도가 낮아지고, 불변성 때문에 공간정보는 소실돼 결국에는 localization 정확도가 떨어지는 치명적인 단점이 있다. 하지만 atrous convolution을 이용할 경우 해상도와 공간 정보를 보존하면서도 rate를 조절해 field of view 크기를 키울 수 있다. pooling보다 atrous convolution의 결과 특징맵이 더 크기 때문에 원본 이미지 크기로 복원(업샘플링)하는데 수월해지고, 이는 세그멘테이션 성능을 높일 수 있는 요인이다.
atrous convolution의 두번째 이점은 계산 비용이다. 앞서 살펴보았듯이 atrous convolution을 이용하면 학습 파라미터 수를 늘리지 않고 field of view를 키울 수 있고, 필터의 크기가 커진다 해도 0이 아닌 값만 고려해 합성곱 연산에도 추가 계산 비용이 들지 않는다. pooling의 단점을 보완하기 위해 deconvolution을 이용할 수도 있지만, 추가되는 학습 비용 때문에 DeepLab에서는 atrous convolution을 이용한다.
그림 5는 pooling과 convolution을 거친 특징맵을 업샘플링한 결과와 atrous convolution을 이용한 결과를 보여준다. 이를 보면 atrous convolution이 훨씬 더 밀도 있게 표현한다는 것을 알 수 있다.
참고로 atrous는 본래 불어로 à trous라 표기하며, 구멍(hole)이라는 의미를 갖는다. 또한 atrous convolution은 hole algorithm, dialted convolution 등 다양하게 불리지만, atrous convolution이라 불리는 경우가 많다.
아래 표1은 기존 VGG16과 DeepLab v1에서 수정한 VGG16을 비교한다.
3. fully-connected Conditional Random Field
3.1 개념
DeepLab v1에서는 객체 가장자리를 섬세하게 세그멘테이션하기 위해 fully-connected Conditional Random Field를 이용한다. 이는 그래픽 모델링 분야의 방법론으로 이미지 세그멘테이션에 적용하면 한 픽셀의 클래스를 예측할 때 다른 모든 픽셀을 고려한다. 픽셀 간의 관계를 long-range dependency라고도 표현하며, fully-connected CRF를 적용하면 수치 상으로는 크게 성능이 개선되지는 않으나 그림 6과 같이 눈으로 보았을 때 더 나은 결과를 보여준다. fully-connected CRF는 DeepLab v2까지만 사용된다.
참고로 short-range CRF는 특징맵을 더 부드럽게 만들어주는 효과가 있다. 그림 5 DCNN output의 스코어맵을 봤을 때 이미 충분히 있고, CRF를 이용하는 목적은 객체의 테두리를 더 명확히 구분하는 데 목적이 있기 때문에 short-range CRF를 사용하는 것은 오히려 성능을 안 좋게 만든다.
3.1. 에너지 함수
DCNN 스코어맵에서 객체의 테두리를 정확하게 예측하기 위한 방법으로 DeepLab 시스템에서는 fully connected CRF 모델[7]을 사용했다. 이 모델의 에너지 함수는 다음과 같다.
- x¡ : i번째 픽셀의 예측 레이블값이다.
- unary 항 θ¡(x¡) = - log P(x¡), 이때 P(x¡)는 i번째 픽셀이 x라고 예측하는 확률이다.
- pairwise 항 θ¡, (x¡,j(x¡ ,xj) = μ(x¡ ,xj) ∑Km=1 wm·km(f¡, fj) where μ(x¡ ,xj) = 1 if x¡ ≠ xj, and 0 otherwise
어떤 이미지에서 i픽셀과 j픽셀 사이의 pariwise 항은 한개다. 이때 두 픽셀사이의 거리는 상관 없다. 즉, CRF 모델에서 모든 픽셀이 연결된다(fully connected). km은 i와 j 픽셀에서 추출한 특징(f)에 따라 달라지는 가우시안 커널이다. 그리고 wm은 km의 가중치다. 커널을 자세히 살펴보면 식 2와 같다.
첫번째 커널은 두 픽셀의 위치(p)와 색(I)와 관련있다. 두번째 커널은 위치로 결정된다. 하이퍼 파라미터 σα, σβ, σγ는 가우시안 커널의 스케일을 조절한다. 값과 학습 방법은 5장에서 설명한다.
[7]에서 제안한 이 모델은 효율적으로 예측 확률을 계산할 수 있다. message passing[8]은 완전히 분해되는 평균 영역 근사치 b(x) = ∏¡b¡(x¡)를 이용해 업데이트한다. 따라서 가우시안 커널을 이용해 합성곱 연산으로 표현할 수 있다는 것이다. 고차원 필터링 알고리즘[9]을 이용하면 message passing 업데이트 연산을 더 빠르게 할 수 있다. PASCAL VOC 이미지를 대상으로는 평균적으로 0.5초도 걸리지 않는다.
지금까지 설명한 DCNN과 CRF가 DeepLab v1 시스템의 큰 축이다. 하나 더 추가하자면 DCNN의 결과 특징맵이 원래 이미지 크기의 1/8이기 때문에 Upsampling을 해줘야 하는데, 이 때 쌍선형 보간법(Bi-linear Interpolation)을 이용한다. DeepLab v1 시스템으로 이미지를 분할하는 전체적인 흐름은 아래 그림 6과 같다.
4. MULTI-SCALE PREDICTION
FCN[5]은 여러 스케일의 특징맵을 이용해 위치 추론 성능을 높였는데, DeepLab팀도 같은 시도를 했다. 네트워크 끝단의 스코어맵 뿐만 아니라 원본 이미지와 처음 4개 max pooling의 특징맵을 이용해 최종 스코어맵을 구했다. 이때 각 특징맵을 그대로 사용하지 않고 2층 합성곱 신경망을 통과시킨다. VGG16 네트워크의 가중치는 고정시킨 상태로 2층 합성곱 신경망만 학습한다. 첫번째 층은 3x3 필터를 128개 사용하고, 두번째 층은 1x1 필터를 128개 사용했다. 그렇게 해서 최종 128개의 채널을 같은 5개의 특징맵이 나오고, 이를 메인 네트워크 마지막 층의 특징맵과 채널 수준으로 결합(concatenation)해 채널 수가 640만큼 증가한다. (이때 특징맵의 크기가 다를텐데, 어떻게 concatenation하는지는 논문에서 설명하지 않는다.) 다른 층의 특징맵을 바로 사용해 위치 정확도 성능을 올리긴 하지만 그 효과가 fully-connected CRF를 사용했을 때 만큼 크진 않다.
5. Experiment Details
데이터셋
20개의 객체 클래스와 배경으로 구성된 PASCAL VOC 2012 이미지 분할 벤치마크 데이터셋을 이용해 DeepLab 모델을 테스트했다. 원본 데이터셋의 훈련, 검증, 테스트셋은 각각 1, 464, 1, 449, 1, 456개로 구성된다. [10]에서 제안한 데이터 증강 방법을 이용해 10,582개 훈련 이미지를 얻었다. 성능 평가는 평균 IoU(mean intersection over union)을 이용했다.
훈련
DeepLab 시스템의 DCNN과 CRF 모델은 따로 학습했다. CRF를 학습할 때 DCNN에 의존하는 unary항은 고정한다.
DCNN을 최적활 할 때에는 cross-entropy loss와 SGD를 이용한다. 20개 이미지로 한 개의 미니 배치를 구성하고 초기 학습률은 0.001(마지막 층만 0.01)로 설정한다. 2000번씩 반복할 때마다 0.1씩 곱해 학습률을 조정한다. 모멘텀은 0.9, L2 규제는 0.0005로 한다.
DCNN를 최적화한 후에 fully connected CRF 모델을 학습한다. 이때 w₂ = 3, σγ = 3을 기본 설정값으로 이용하고, w₁, σα, σβ의 최적값을 찾기 위해서 교차 검증한다. 검증 셋의 크기는 100개로 구성한다. 또한 coarse-to-fine전략을 이용한다. 초기 탐색 범위를 w₁ ∈ [5, 10], σα∈ [50 : 10 : 100] σβ∈ [3 : 1: 10] 로 잡아 넓게 탐색한 뒤에, 점점 범위를 줄여 최적값을 찾아낸다. CRF 반복 횟수은 10번으로 고정한다.
검증
기본적으로 PASCAL 'train'셋으로 학습한 모델을 'val' 셋으로 검증한다. 표 1 (a)가 이 방법으로 평가한 DeepLab 모델들의 성능을 보여준다. fully connected CRF를 사용하면 기본 모델보다 4% 정도 성능이 향상되는데, 직관적인 성능차이는 그림 n을 보고 알 수 있다. fully connected CRF를 이용하면 객체의 테두리를 더 정확하게 잡아내는 것으로 보인다.
Multi-Scale Features
앞서 4.3에서 설명했던 것 처럼 Multi Scale 특징맵을 이용하기도 했다(DeepLab-MSc). DeepLab-MSc는 기본 모델보다 1.5% 정도 성능 향상에 기여했고 fully connected CRF와 같이 사용하면(DeepLab-MSc-CRF) 추가로 4%정도 성능이 더 높아진다. 그림 8을 보면 객체의 테두리를 조금씩 더 정확하게 잡아내는 것을 볼 수 있다.
Feild of View
'atrous' 알고리즘을 이용해 DeepLab 모델은 Field-of-View(FOV) 즉, receptive field의 크기를 조절할 수 있다. DeepLab 팀은 fc6 층의 커널 사이즈와 input stride를 조절하면서 정확도와 속도 변화를 실험했다. 표 2에 그 결과가 나와있는데, 커널 사이즈를 줄이고 input stride를 키우면(DeepLab-CRF-LargeFOV) 학습해야 할 파라미터가 줄어들어 속도가 빨라지고, 성능도 단순히 큰 커널(7x7)을 이용했을 때와 동일하게 나왔다.
Mean Pixel IOU along Object Boundaries
객체 테두리를 기준으로 모델의 성능을 평가하기 위해서 'void'레이블을 이용했다. 'void'레이블은 객체의 테두리 주위를 어노테이션한다. DeepLab 팀은 'void' 레이블을 일정한 두께로 표현하면 그림 9 (a)처럼 객체의 테두리만 그려지는 모습을 볼 수 있다. 이러한 레이블맵을 trimap이라 한다. 그림 9 (b), (c)를 보면 DeepLab 모델 중에서 객체의 형상을 가장 잘 예측한 모델은 DeepLab-MSc-CRF 모델이라는 것을 알 수 있다.
Comparison with State-of-art
Reference
[1] Liang-Chieh Chen, George Papandreou, Iasonas Kokkinos, Kevin Murphy, Alan L. Yuille. Semantic image segmentation with deep convolutional nets and fully connected crfs. In ICLR, 2015
[2] Liang-Chieh Chen, George Papandreou, Iasonas Kokkinos, Kevin Murphy, Alan L. Yuille. DeepLab: Semantic Image Segmentation with Deep Convolutional Nets, Atrous Convolution, and Fully Connected CRFs. In IEEE, 2016
[3] Khuyen Le. An overview of VGG16 and NiN models. https://medium.com/mlearning-ai/an-overview-of-vgg16-and-nin-models-96e4bf398484
[4] Krahenbuhl, P. and Koltun, V. Efficient inference in fully connected crfs with gaussian edge potentials. In NIPS, 2011.
[5] J. Long, E. Shelhamer, and T. Darrel. Fully convolutional networks for semantic segmentation. In CVPR, 2015.
[6] Mostajabi, M., Yadollahpour, P., and Shakhnarovich, G. Feedforward semantic segmentation with zoomout features. arXiv:1412.0774, 2014.
[7] Krahenb ¨ uhl, P. and Koltun, V. Efficient inference in fully connected crfs with gaussian edge potentials. In NIPS, 2011.
[8] Kacper Kubara. Introduction to message passing neural networks. https://towardsdatascience.com/introduction-to-message-passing-neural-networks-e670dc103a87
[9] Adams, A., Baek, J., and Davis, M. A. Fast high-dimensional filtering using the permutohedral lattice. In Computer Graphics Forum, 2010.
[10] Hariharan, B., Arbelaez, P., Bourdev, L., Maji, S., and Malik, J. Semantic contours from inverse ´ detectors. In ICCV, 2011.