본문 바로가기
Daily/김인턴의 하루

DeepLab 딥랩

by HANNI하니 2020. 10. 13.

관련 논문

(사실상 논문 리뷰이지만, 내가 리뷰한 게 아니라 정리한 것이므로 리뷰라고 적지 않겠다.)

DeepLab V1 : Semantic image segmentation with deep convolutional nets and fully connected CRFs

arxiv.org/pdf/1412.7062.pdf

DeepLab V2 : DeepLab: Semantic image segmentation with deep convolutional nets, atrous convolution, and fully connected CRFs

arxiv.org/pdf/1606.00915.pdf

 

 

0. DeepLab : Deep Labelling for Semantic Image Segmentation

DeepLab is a state-of-art deep learning model for semantic image segmentation, where the goal is to assign semantic labels (e.g., person, dog, cat and so so) to every pixel in the input image. Cureent implementation includes the following features : 

 

1) DeepLabv1 : We use atrous convolution to explicitly control the resolution at which feature responses are computed within Deep Convolutional Neural Networks.

 

2) DeepLabv2 : We use atrous spatial pyramid pooling (ASPP) to robustly segment objects at multiple scales with filters at multiple sampling rates and effective fields-of-views.

 

3) DeepLabv3 : We augment the ASPP module with image-level feature to capture longer range information. We also include batch normalization parameters to facilitate the training. In particular, we applying atrous convolution to extract output features at different output strides during training and evaluation, which efficiently enables training BN at output stride = 16 and attains a high performance at output stride = 8 during evaluation.

 

4) DeepLabv3+ : We extend DeepLabv3 to include a simple yet effective decoder module to refine the segmentation results especially along object boundaries. Furthermore, in this encoder-decoder structure one can arbitraily control the resoultion of extracted encoder features by atrous convolution to trade-off precision and runtime.

 

github.com/tensorflow/models/tree/master/research/deeplab

 

tensorflow/models

Models and examples built with TensorFlow. Contribute to tensorflow/models development by creating an account on GitHub.

github.com

 

 

1. DeepLab V1과 V2의 차이

2015년에 발표된 구조 DeepLab V1

2016년에 발표된 구조 DeepLab V2

 

Atrous convolution과 fully connected CRF 개념을 사용한다는 점은 동일하지만, multiple-scale에 대한 처리 방법이 V2에서 개선되었다.

VGG-16 뿐만 아니라 ResNet-101도 DCCN으로 사용하여 성능을 끌어올렸다.

DCNN(Deep Convolutional Neural Networks)에서 max-pooling layer 2개를 제거함으로써, 1/8 크기의 feature-map을 얻고, atrous convolution을 통해 넓은 receptive field를 볼 수 있도록 했다.

 

pooling 후 동일한 크기의 convolution을 수행하면, 자연스럽게 receptive field가 넓어지는데, 여기서는 detail을 위해 pooling layer를 제거했기 때문에, 이 부분을 atrous convolution을 더 넓은 receptive field를 볼 수 있도록 하여, pooling layer가 사라지는 문제를 해소시켰다.

 

 

 

2. 알아야할 용어들

1) Receptive field ?

더보기

수용영역, 수용장

출력 레이어의 뉴런 하나에 영향을 미치는 입력 뉴런들의 공간 크기

얼마나 많은 문맥 정보를 사용하는 가와 비례한다.

이론적으로 CNN에서는 receptive field는 입력 이미지의 크기보다 더 크다.

하지만 실험적으로는 이론에 비해 훨씬 작기 때문에 많은 네트워크들이 문맥 정보를 잘 이용하지 못하고 있다.

dialted convolution은 이 문제를 해결하기 위한 방법 중 하나이다!!

 

blog.naver.com/PostView.nhn?blogId=sogangori&logNo=220952339643&parentCategoryNo=6&categoryNo=&viewDate=&isShowPopularPosts=true&from=search

 

receptive field(수용영역, 수용장)과 dilated convolution(팽창된 컨볼루션)

receptive field 는 출력 레이어의 뉴런 하나에 영향을 미치는 입력 뉴런들의 공간 크기이다. 그림 1) 일반...

blog.naver.com

 

2) Atrous Convolution(dilated convolution) ?

더보기

Atrous는 프랑스어의 'A trous' (구멍이 있는)에서 나온 말.

일반적인 convolution 사이에 공간을 넣어서 구멍이 뚫린 듯한 구조.

 

Dialted convolution (팽창된 컨벌루션)은 receptive field가 D에 따라서 다르다.

(그림1 참고)

D=1 인 경우, 1-dialted 3*3 convolution. receptive field가 9.

D=2인 경우, 2-dialted 3*3 convolution. receptive field가 5*5로 15.

D=3인 경우, 3-dialted 3*3 convolution. receptive field가 7*7로 49.

 

웨이브릿(wavelet)을 이용한 신호 분석에 사용되던 방식이며, 보다 넓은 scale을 보기 위해 중간에 hole(zero)를 채워 넣고 convolution을 수행하는 것을 말한다.

같은 연산량으로 더 큰 특징을 잡아낼 수 있다.

다양한 확장 비율을 가진 atrous convolution을 병렬적으로 사용해서 더 많은 특징을 담을 수 있다.

DeepLab V1~V3에서 쓰이는 방법이다.

 

atrous convolution(dilated convolution)을 사용하면 receptive field의 크기가 커지는 효과를 얻을 수 있다.

그림1
확장계수(rate)가 2인 (b)는 중간에 hole이 1개씩 들어와서 똑같은 kernel 3을 사용하더라도 대응하는 영역의 크기가 커졌음을 확인할 수 있다.

 

 

3. Atrous Convolution(dilated convolution) 결과

작은 이미지로부터 feature-map을 구한 다음 그것을 unsampling 하게 되면 오른쪽 위 이미지처럼 해상도가 많이 떨어질 수 있다. 이 과정이 파란 화살표로 표현되었다. 상단 2,3 번째 그림 사이에 있는 작은 이미지는 필터이다.

반면, 빨간 화살표처럼 큰 이미지로부터 dilated-convolution하면 해상도가 높은 feature-map을 구할 수 있다. 이 때 사용된 필터의 값들(아래 첫번째 작은 그림)에서 픽셀들이 인접해 있지 않고 떨어져 있는 것을 볼 수 있다.

 

영상 데이터와 같은 2차원에서도 좋은 효과가 있다는 것을 확인 가능.

 

 

일반적인 convolution, pooling에서 convolution의 stride를 4로 하는 경우이다.

레이어 k+1에서 2개의 픽셀간의 거리는 레이어 k에서 8픽셀 간의 거리에 해당한다.

convolution에서 1/4가 되었고, pooling에서는 1/2가 되서 총 1/8로 작아졌다.

 

 

convolution의 stride가 1이고 pooling이 없는 경우에는 해상도가 유지된다.

하지만, 이런 경우에는 pooling으로 사이즈가 줄어들지 않게 되므로 연산량이 많아진다.

convolution의 reception field를 늘이기 위해 kernel 사이즈를 키우게 되면 파라미터가 너무 많아져서 오버피팅된다.

 

 

이런한 문제를 해결하기 위해 dilated convolution을 사용한다!

convolution의 커널 크기는 9로 크긴 크다. 하지만 9개 중 3개의 값만 진짜이며 나머지 6개는 0이다. sparse(대부분 0이다)이다. 필터 값이 0인 부분은 계산을 하지 않도록 한다면 계산량 문제는 없다.

convolution하면 output 픽셀들간의 간격은 이전 레이어에서의 1픽셀 간격의 정보를 이용하였기 때문에 해상도가 유지가 된다. width, height도 변하지 않으므로 해상도 유지가 되는 것은 당연하다.

아래 그림은 마지막 레이어에 전체 픽셀 중 5개만 그렸다. 원래는 바로 왼쪽의 긴 15짜리 레이어와 동일하다.

 

 

VGG-16은 분류를 위한 넷이기 때문에 FC(Fully Connected)에서 width*height가 1*1이 된다. segmentation에서는 width*height가 입력의 크기와 같아야 한다.

그래서 DeepLab에서 한 것이 conv+pool 레이어를 dilated convolution을 사용하여 width*height가 유지되도록 바꾸었다. FC도 1*1 convolution을 사용해서 공간 차원 정보가 유지되도록 하였다.

하지만 공간 크기도 1, 2번째 conv+pool을 거치면서 이미 224*224에서 28*28로 1/8 줄어버렸다. 그러므로 최종레이어 쪽에서 bilnear upsampling로 원래 크기로 복원하였다.

 

두 net의 차이는 다이아몬드로 표시된 dilated convolution와, upsampling 8* 이다.

 

 

 

 

 

 


 

 

 

 

m.blog.naver.com/laonple/221000648527

 

[Part Ⅶ. Semantic Segmentation] 6. DeepLab [1] - 라온피플 머신러닝 아카데미 -

라온피플 머신러닝 아카데미 [Part Ⅶ. Semantic Segmentation]6. DeepLab [1] Semantic Segmentati...

blog.naver.com

medium.com/hyunjulie/2%ED%8E%B8-%EB%91%90-%EC%A0%91%EA%B7%BC%EC%9D%98-%EC%A0%91%EC%A0%90-deeplab-v3-ef7316d4209d

 

2편: 두 접근의 접점, DeepLab V3+

1편에서 소개했던 두가지 방법을 합쳐놓은, 두 세계가 만난 순간… 너의 가능성은?

medium.com

docs.google.com/presentation/d/1b4rM1VlUi_g3fJJKxfsNa8frmE42yk6q8U5ZUwdLX2g/pub?start=false&loop=false&delayms=3000&slide=id.g19ca216670_0_420

 

DeepLab Semantic Segmentation

DeepLab Semantic Image Segmentation with Deep Convolutional Nets Liang-Chieh Chen, George Papandreou, Iasonas Kokkinos, Kevin Murphy, Alan L. Yuille

docs.google.com

blog.naver.com/PostView.nhn?blogId=sogangori&logNo=220952339643&parentCategoryNo=6&categoryNo=&viewDate=&isShowPopularPosts=true&from=search

 

receptive field(수용영역, 수용장)과 dilated convolution(팽창된 컨볼루션)

receptive field 는 출력 레이어의 뉴런 하나에 영향을 미치는 입력 뉴런들의 공간 크기이다. 그림 1) 일반...

blog.naver.com

medium.com/hyunjulie/1%ED%8E%B8-semantic-segmentation-%EC%B2%AB%EA%B1%B8%EC%9D%8C-4180367ec9cb

 

1편: Semantic Segmentation 첫걸음!

Semantic Segmentation이란? 기본적인 접근 방법은?

medium.com

sthalles.github.io/deep_segmentation_network/

 

Deeplab Image Semantic Segmentation Network - Thalles' blog

Introduction Deep Convolution Neural Networks (DCNNs) have achieved remarkable success in various Computer Vision applications. Like others, the task of semantic segmentation is not an exception to this trend. This piece provides an introduction to Semanti

sthalles.github.io

 

 

******Deeplab Code*******

https://www.programmersought.com/article/569651670/

 

Tensoflow-code combat articles--Deeplab-V3+ code reproduction - Programmer Sought

First, reference materials: 1. Great God Blog: https://blog.csdn.net/u011974639/article/details/80574306 2, the official code: githup Second, preparations: surroundings: Environment: anaconda3 + python3 + tensorflow-gpu1.8 Machine: 1 block GTX1070 (8G) Git

www.programmersought.com

github.com/tensorflow/models/issues/6275

 

Stuck Waiting for new Checkpoint in deeplab PASCAL VOC 2012 · Issue #6275 · tensorflow/models

System information What is the top-level directory of the model you are using: deeplab Have I written custom code (as opposed to using a stock example script provided in TensorFlow): in local_test....

github.com

'Daily > 김인턴의 하루' 카테고리의 다른 글

NVIDIA Jetson Nano  (2) 2020.10.20
TPU 텐서처리장치  (0) 2020.10.13
COCO Dataset  (0) 2020.10.12
DLL 파일  (0) 2020.10.12
배쉬 Bash  (0) 2020.10.12

댓글