【semantic segmentation】 SegNet : Pooling Indices로 메모리 효율화

semantic segmentation으로 유명한 SegNet. 네트워크 보는 느낌 심플하지만 무엇이 다른 것과 다른지 정리해 보았다.

혹시 실험하면 github에도 타고 싶다.
htps : // 기주 b. 코 m / 요코 슌 / 세그 g t

네트워크




Encoder-Decoder만의 심플한 네트워크로 Deconvolution을 사용하지 않아도 Unpooling시에 Pooling Indices를 사용하면 적당히 정밀도도 나오고, 메모리에 상냥하다고 하는 설계.

Max-pooling indies vs sum





왼쪽이 SegNet에서 제안하는 Max-Pooling Indices를 사용한 unpooling. Max Pooling 시에 최대값의 위치를 ​​Indices로 기억함으로써 unpooling 시에 원래 위치로 특징량을 되돌릴 수 있다.

우측이 FCN 으로 2배로 Upsampling한 결과와 Encoder의 특징량을 더하는 것으로 전체감을 잡으면서, 세세한 정보에 액세스 할 수 있게 되어 있다.

비교




하나씩 비교를 해설해 나갈 생각

SegNet-Basic vs SegNet-Basic-EncoderAddition



encoder의 결과를 decoder에 더하면 정밀도가 오르지만, 메모리의 사용량도 오른다.

SegNet-Basic vs SegNet-Basic-SingleChannelDecoder



Decorder의 filter수를 1로 하는 것으로 Paeameter의 수가 줄어들어, 계산 속도도 빨라지지만, 정밀도가 떨어진다

FCN-Basic vs FCN-Basic-NoAddition



Decoder에 Encoder의 결과를 두지 않으면 정밀도가 떨어지지만, 사용하는 메모리량이 줄어든다.

FCN-Basic vs FCN-Basic-NoDimReduction



channel수를 작게 하지 않고, 큰 네트워크를 사용하는 것으로 정밀도는 오르지만, parameter수, 메모리 사용량, 계산 시간이 상승한다

FCN-Basic-NoDimReduction vs FCN-Basic-NoAddition-NoDimReduction



Decoder에 Encoder의 결과를 두지 않으면 정밀도가 떨어지지만, 사용하는 메모리량이 줄어든다.

결론



SegNet-Basic은 메모리의 사용량을 작게 할 수 있어, 더욱 결과는 FCN-Basic과 같은 정도의 정밀도가 나오므로, Pooling Indiceies라고 하는 방법은 적당히 효율적이라고 말할 수 있다.

물론 정밀도를 높이고 싶다면, Decoder에 Encoder의 결과를 더하기도 하는 것도 있지만 메모리의 사용량 늘어난다고 하는 논문이었습니다.

참고문헌



SegNet: A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation
htps : // / r ぃ v. rg / pdf / 1511. 00561. pdf
Fully Convolutional Networks for Semantic Segmentation
htps : // / r ぃ v. rg / pdf / 1605. 06211. pdf

좋은 웹페이지 즐겨찾기