논문 : https://arxiv.org/pdf/1606.00915.pdf
semantic segmentation에 관련된 또 다른 논문이다.
Deeplearning의 CNN 네트워크는 영상처리의 대부분의 문제에서 그 효과를 발휘하고 있다.
이전에 말했듯이 classification와 objectDetection 문제에서 꽤나 좋은 효과를 발휘를 하였는데,
이를 segmentation에 적용을 했더니 왠걸 여기서도 엄청나게 좋은 성능을 보이는 것이었다.
하지만 기존의 네트워트가 classification 문제에 적합하게 구조가 짜져있어서
이를 segmentation 문제에 적용하기 위한 여러논문이 나오기 시작하는데
이전에 봤었던 dilatedNet도 그중의 하나이고
이번 포스팅에서 살펴볼 deepLab의 연구결과도 마찬가지의 목적을 가진다.
결국은 연구의 방향은 무엇이냐면
CNN이 가지고 있는 한계점을 어떻게 극복하냐는 것이다.
우리가 classification 문제를 접할때는 그 이미지가 어떤 이미지인가만 살펴보면 된다.
구체적인 부분에 집중하지 않고 global한 대략적인 CNN이 가지고 있는 특징에 맞춰서 추상화된 의미를 찾을수만 있으면 되었다.
classification에서 장점으로 작용한것들이 segmentation에서는 단점으로 작용을 한것이다.
그렇다고 그 구조자체를 바꿀수가 없으니, 우리는 몇가지 트릭(?)이라고 할 수 있는 것들을 추가하여 그것을 극복해 나가면 된다.
segmentation논문을 볼때는 기존의 CNN이 가지고 있는 어떠한 문제를 정의를 하였고,
그것을 해당 논문은 어떻게 해결을 하려는 노력을 가졌는지에 집중해서 보면 생각보다 쉽게 접근 할 수 있을거라고 생각한다.
deeplab에서는 3가지의 문제점에 대해서 고민을 하였고, 나름의 해결책을 제시해주고 있다.
첫번째 문제점은 기존 CNN 네트워크를 돌렸을때에 feature resolution이 점점 작아지는 형상을 제시하였다.
CNN네트워크는 네트워크마다 그 세부적인 부분은 다르겠지만 stride와 pooling으로 인해 네트워크가 깊어질수록
feature들의 크기가 작아진다. 그런데 이는 classification에서는 중요한 부분에만 집중할수 있게된다는 장점으로 작용을 할수 있겠지만,
segmentation같이 해당 pixel당의 정확도가 중요한 문제에서는 이는 단점으로 작용을 하게 된다. 그래서 정확도를 높이기 위한 방법으로
해당 논문에서는 astrous convolution이라는 개념을 쓰면서 이를 해결하려는 모습을 보여준다. 말이 달라서 그렇지 이는 이전에 봤었던
dilated convoltution이랑 똑같은것이다. 내가 짐작하는 바로는 이 논문을 쓰는 deepLab팀과 이전에 소개했던 dilatedNet팀이 segmentation에서는 서로 경쟁을 해서 똑같은 개념이지만 다른 용어로 서로 신경전을 하는게 아닐까 추측을 해본다.
astrous convolution에 대해서 잠깐 설명을 하자면, 우리가 학습해야되는 parameter의 갯수는 고정이 되어 있는데, receptive field의 크기만 늘어나는 convolution 연산을 말한다.
위의 (a)부분의 그림이 기존의 convolution의 연산의 개념이다. 그런데 (b)를 보면 한칸이 띄워져 있는데 이는 학습해야될 파라미터마다 공간을 띄우고 그 공간에다 0으로 채워서 receptive field의 크기를 넓히는 효과를 가진다. 그러면 연산량은 기존보다 줄어들지만, 우리가 수용해야될 부분은 일정해지는 효과를 얻는다.
그러면 실제로 astrous convolution을 사용하면 어떻게 좋은지에 대해서 알아보자.
해당 그림은 논문에 fig3번 그림이다. 기존의 conv 연산을 통한 네트워크의 결과와 astrous conv연산을 한 결과를 보여준다.
기존의 방법은 receptive field의 확장을 위해 pooling을 통해 featuer사이즈를 줄인 다음에 conv연산을 시행하고 다시 키워주는 방식을 택했다.
하지만 astrous conv는 dilated된 필터를 사용하기 때문에 pooling과 같은 방법으로 데이터 손실을 발생시키지 않더라도 넓은 receptive field를 관찰을 할 수가 있다. 이를 통해 기존의 CNN이 가지고 있는 detail부족을 해결을 할수가 있는 것이다.
두번째 해결해야 될 문제는 서로다른 object크기인 물체가 존재하는 이를 찾는 알맞게 하는 방법이다.
어찌보면 object detection에서의 문제와 비슷해 보이나. 정확하게 어떤것이 다른지는 모르겠으나.
해결하는 방법은 조금 비슷하다. object detection은 boundary box를 정확히 취하는 것이고, segmentation에서는 같은 물체를 색칠하는 것을 목표로 하는데 말이다.
이 논문에서는 ASPP(Atrous Spatial Pyramid Pooling)이라는 방법으로 이 multi-scale문제를 해결하려고 한다.
이름에서 풍기는 냄새처럼 여기서도 Atrous conv를 사용하는데, 특정레이어다 여러개의 astrous convolution을 처리하는 분기를 만들고 이를 다시 취합하는 방식을 따른다.
Fc6번 레이어에다 rate가 {6, 12, 18, 24}인 astrous convolution을 각각 취하고 이를 Fc8이후에 결과를 합치는 방식이다.
이러면 여러개의 receptive field를 수용하여 여러크기의 물체를 인식하는데 좋은 결과를 가져온다.
세번째의 문제는 첫번째문제와 맞닿아 있는데 DCNN의 spatial accurary의 제한 문제이다. 줄였다가 다시 늘리는 방식을 취하다보니
정확한 포지션에다 그 문제를 해결을 하지 못하는게 문제가 된다. 그래서 논문에서는 fully connected CRF(Conditional Random Field)라는 후처리 방법을 통해서 문제를 해결을 한다.
아래는 이 논문네트워크의 전반적인 flow이다.
줄였다가 bi-linear interpolation방법을 통해서 늘리고 fully connected CRF로 더욱 정확도를 높이는 방식을 따른다.
그러면 마지막 부분에 대해서 조금 더 알아보도록 하자.
CRF방식을 사용하면 iteration을 하면할수록 그 정확도가 높아짐을 볼수가 있다. 이런 놀라운 일이!!!
아래는 CRF수식인데, 이 부분은 설명하기 어려워 해당 블로그의 원문을 그냥 옮긴다
(라온피플: http://laonple.blog.me/221000648527 )
CRF의 수식을 보면, unary term과 pairwise term으로 구성이 된다. 아래 식에서 x는 각 픽셀의 위치에 해당하는 픽셀의 label이며, i와 j는 픽셀의 위치를 나타낸다. Unary term은 CNN연산을 통해서 얻을 수 있으며, 픽셀간의 detail한 예측에는 pairwise term이 중요한 역할을 한다.
Pairwise term에서는 마치 bi-lateral filter에서 그러듯이 픽셀값의 유사도와 위치적인 유사도를 함께 고려한다.
위 CRF 수식을 보면, 2개의 가우시안 커널로 구성이 된 것을 알 수 있으며, 표준편차 알파,베타,감마를 통해 scale을 조절할 수 있다.
첫번째 가우시안 커널은 비슷한 위치 비슷한 컬러를 갖는 픽셀들에 대하여 비슷한 label이 붙을 수 있도록 해주고,
두번째 가우시안 커널은 원래 픽셀의 근접도에 따라 smooth 수준을 결정한다. 위 식에서 pi, pj는 픽셀의 위치(position)을 나타내고
li, lj는 픽셀의 컬러값(intensity)이다.
이것을 고속으로 처리하기 위해, Philipp Krahenbuhl 방식을 사용하게 되면 feature space에서는 Gaussian convolution으로 표현을
할 수 있게 되어 고속연산이 가능하다.
CRF 설명자료
1) Efficient Inference in Fully Connected CRFs with Gauissian Edge Potentials :
http://swoh.web.engr.illinois.edu/courses/IE598/handout/fall2016_slide15.pdf
2) Deeplab- semantic image segmentation
http://www.cs.jhu.edu/~ayuille/JHUcourses/ProbabilisticModelsOfVisualCognition/Lecture20DeepNetwork2/Pages%20from%20DeepMindTalk.pdf
이렇게 하면 DeepLab v2의 설명이 모두 끝난다.
성능기존보다 많이 좋아진것으로 알고 있는데, 자세한 사항은 논문의 결과를 보면 좋을것 같다.