일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Segmentation
- eda
- 큐
- 협업필터링
- Machine Learning Advanced
- 한빛미디어
- MySQL
- 파이썬
- TEAM-EDA
- 프로그래머스
- 입문
- 추천시스템
- hackerrank
- 나는 리뷰어다
- 알고리즘
- TEAM EDA
- 튜토리얼
- pytorch
- Recsys-KR
- 엘리스
- DFS
- 나는리뷰어다
- 3줄 논문
- 코딩테스트
- Object Detection
- Image Segmentation
- DilatedNet
- 스택
- Semantic Segmentation
- Python
- Today
- Total
TEAM EDA
Semantic Image Segmentation With Deep Convolutional Nets And Fully Connected CRF (DeepLabv1) 본문
Semantic Image Segmentation With Deep Convolutional Nets And Fully Connected CRF (DeepLabv1)
김현우 2021. 9. 22. 16:39Semantic Image Segmentation With Deep Convolutional Nets And Fully Connected CRF
DeepLabv1부터 v3+까지의 연구는 기존 Image Classification에 맞는 모델을 사용하는게 아니라, Semantic Segmentation에 맞는 모델을 개발한 연구입니다. vgg16 네트워크를 그대로 가져왔지만, 논문에서는 세그멘테이션 테스크에 맞게 어떤 점을 수정했는지 한번 확인해보도록 하겠습니다.
Abstract
DCNN (Deep Convolutional Neural Networks)를 pixel-wise classification인 세그멘테이션 문제를 해결하기 위해 사용하지만, 이는 아직 충분하지 않습니다. 그래서, 세그멘테이션에 맞게 두가지의 장치를 추가하는데 첫째, Dilated (astrous) Convolution 과 DenseCRF 입니다. 이를 이용해서 부족한 Localization 문제를 해결해서 물체의 디테일함을 살리는 연구를 진행했습니다.
Introduction
Classification과 Segmentation (or Object Detection, Pose Estimation)의 Visual Recognition 연구를 한번 비교해보면, 물체의 위치가 의미가 있는지에 차이가 있습니다. 이미지 분류문제 같은 경우에는 물체가 어느 위치에 있든지 상관이 없습니다. 그래서, CNN 자체도 pooling 등 Transition Invariance 속성이 계속 진행되어도 상관이 없었습니다. 하지만, 세그멘테이션은 픽셀 위치 별로 분류를 해야하기에 물체의 위치를 파악하는게 중요합니다. 또한, pooling에 의해서 spatial한 resolution이 줄어들면 중요한 부분만 추출되어서 디테일한 값들이 많이 손실되는 문제가 발생합니다. 이렇게되면, 외각부분의 픽셀에 대해 분류하는데 어려움을 겪을 수 밖에 없습니다.
즉, Classification의 모델을 Segmentation에 가져오려면 두가지의 문제를 해결해야합니다.
- downsampling에 의해서 사라지는 정보손실을 방지해야합니다.
- downsampling과 convolution을 반복하면서 생기는 특징인 Invariance to spatial transformation (공간에 불변성한 특징)을 해결해야합니다.
하지만, 단순하게 downsampling을 제거하면 몇가지의 문제가 있습니다.
- 입력 특징 맵의 크기가 커지기에 메모리를 많이 필요로 합니다.
- Receptive Field가 상대적으로 작아지기에 비슷한 Receptive Field를 가지는 Convolution을 도입하면 많은 파라미터를 필요로합니다.
논문에서는 이를 Downsampling에 의한 resolution 감소를 줄이고 Atrous Convolution을 도입해서 해결하려고 합니다. 이후, Probability Map에 CRF를 적용해서 외각의 디테일함을 잡으려는 시도로 속도, 성능, 간편화의 3가지 장점을 모두 잡아냈습니다.
Dilated Convolution
논문에서는 위의 문제를 해결하기위해서 Dilated Convolution을 도입합니다. Dilated Convolution은 3x3이라는 9개의 동일한 파라미터를 가지고도 넓은 Receptive Field를 가지는 Convolution입니다. DeepLabv2의 Figure에 따르면, Downsampling -> Conv -> Upsampling 보다 Dilated Conv를 바로 적용한게 훨씬 활성화가 잘 되는걸 확인이 가능합니다.
Network Design
네트워크의 모습은 Deeplab-LargeFov을 사용했습니다. 기본적인 네트워크의 구조는 vgg16과 동일합니다. 하지만 몇가지의 차이점이 있습니다.
- 3개의 Convolution block의 maxpool이 2x2에서 3x3으로 수정되었습니다. 이때, 원래 2x2 maxpool은 stride는 2에 padding은 0인데, 3x3은 stride 2에 padding 1을 적용해서 크기는 절반으로 감소하게 만들었습니다.
- conv5에 convolution이 dilated convolution으로 수정되었습니다. 그리고, 3x3 maxpooling과 avgpooling을 연속해서 넣는 구조인데 아마 성능적인 측면에서 이렇게 하지 않았나 생각은 들지만 왜 그렇게 했는지는 모르겠습니다.
- conv4, conv5의 pooling 연산은 모두 stride 1, padding 1을 적용해서 크기의 변동을 막아주었습니다. 이로인해서, 원본 이미지의 크기가 224이면 conv1, 2, 3의 pooling에 의해서 8배만큼 줄어서 28이 된 상태로 계속 유지됩니다.
- 이후, FC6에서 원래는 7x7 conv이었지만 이를 3x3 conv에 dilated rate를 12를 줘서 큰 Receptive Field를 적용합니다.
- 마지막으로, 8배만큼 줄어든 특징맵을 원본 크기만큼 맞춰주기위해 기존에는 Transposed Convolution을 많이 사용했지만 여기는 Bilinear Interpolation을 사용했습니다.
Bilinear Interpolation은 Up sampling 방법의 일종입니다. 하지만, 기존의 Transposed Convolution과는 다르게 학습이 필요가 없고 내분을 통해서 크기를 키워줍니다.
DenseCRF
하지만, 위의까지 과정인 DCNN output을 보면 디테일한 경계부분이 잘 살아나지 않은 것을 볼 수 있습니다. 이를 해결해주기 위해서, 논문에서는 CRF를 적용해서 위의 문제를 해결해줍니다.
DenseCRF는 간단하게 말하면, 입력이미지가 주어졌을때 픽셀이 특정 카테고리에 속할 확률을 최대화하는 작업입니다.
이때, Energy Function은 아래와 같이 구성되어있습니다. 왼쪽의 unary potential θ는 각 픽셀 i가 특정 카테고리에 속할 확률을 의미합니다. 한마디로 세그멘테이션 네트워크를 통과하고 나온 Output을 의미합니다.
오른쪽의 pairwise potential 부분은 아래와 같이 구성되어있습니다. mu의 경우는 같은 카테고리에 속하는지 아닌지에 대한 정보이고 w의 경우 kernel에 대한 가중치를 의미합니다.
이때, Kernel이 무엇을 의미하는지 생각해보면
- 비슷한 위치의 픽셀은 같은 카테고리로 속하도록 함 (이미지 내 각 픽셀의 위치 차이)
- 비슷한 색상의 픽셀은 같은 카테고리로 속하도록 함(이미지 내 각 픽셀의 색상 차이)
- 특정 카테고리에 속하는 픽셀 개수를 일정 수준 이상이 되도록 함
Results
결과적으로 위의 과정을 통해서 CRF 적용전과 비교 후를 비교해보면 평균 4 이상은 IoU가 오른 것을 확인할 수 있습니다.
FCN과 결과를 비교해보면, 디테일한 측면에서 훨씬 좋아진 것을 확인할 수 있습니다. 하지만, 아직 오토바이 그림 같은 경우 흐릿흐릿한 모습이 보이고 새의 다리와 같이 얇은 부분은 잘 안되는게 보입니다.
이 논문의 경우 Dilated Convolution과 DenseCRF을 결합해서 좋은 성능을 거둔 연구입니다. 당연하게만 사용하던 Maxpooling의 한계를 지적하고, 이를 파라미터 수의 손실없이 해결하기위해 Dilated Convolution을 적용했습니다. 또한, Segmentation 에서 고질적인 문제인 경계부분에 대한 정보를 좋게 만들기위해 DenseCRF를 적용해서 이를 해결했습니다.
개인적으로 Dilated Convolution을 사용해서 높은 성능을 거둔 훌륭한 논문이라고 생각합니다. 하지만, 다음 DilatedNet에서 보이듯이 DeepLabv1은 너무 Dilated Convolution의 rate에 대한 실험이 부족한 것 같습니다. 비록 논문에서는 많은 실험을 통해 나온 결과인 rate 2와 FC6 부분에서 rate 12를 사용했겠지만, 실험에 대한 부분도 표현해주었으면 좋았을거라 생각합니다.