일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- hackerrank
- 나는리뷰어다
- 프로그래머스
- TEAM-EDA
- 나는 리뷰어다
- eda
- DilatedNet
- TEAM EDA
- 추천시스템
- 알고리즘
- 3줄 논문
- 엘리스
- Object Detection
- 스택
- pytorch
- Recsys-KR
- Segmentation
- Semantic Segmentation
- 튜토리얼
- 큐
- MySQL
- 협업필터링
- 한빛미디어
- 입문
- 파이썬
- 코딩테스트
- DFS
- Python
- Machine Learning Advanced
- Image Segmentation
- Today
- Total
TEAM EDA
A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation (SegNet) 본문
A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation (SegNet)
김현우 2021. 9. 21. 16:24A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation (SegNet)
SegNet은 2016년도에 소개된 논문으로 DeconvNet과 매우 유사한 구조를 가지는 네트워크입니다. 하지만, DeconvNet과 다르게 Application 측면에서 나온 논문이라 DeconvNet과는 몇개의 차이를 보입니다. 한번, 네트워크가 Application을 하도록 어떤 테크닉을 사용했는지 살펴보도록 하겠습니다.
Abstract
먼저, 이전의 DeconvNet과 비교해보면 내부의 7x7 conv - 1x1 conv - 7x7 deconv
가 사라지는 것을 볼 수 있습니다. DeconvNet과 마찬가지로, Encoder와 정반대의 Decoder를 이용해서 resolution을 증가시키는 모습을 보입니다.
하지만, 가장 큰 차이점은 발전동기에 차이가 있다는 것입니다. SegNet은 Real-Time Segmentation을 위해 나온 논문으로 Road Scene Understanding applications라는 분야에서 Semantic Segmentation을 수행하기 위한 모델입니다. 특히, 자율 주행에 있어 차량, 도로, 차선, 건물, 보도, 하늘, 사람 등의 class를 빠르고 정확하게 구분할 수 있어야합니다. 그렇기에 모델 자체도 성능을 최대한 보존하면서 속도를 높이도록 구성되어있습니다.
Network Architecture
첫째, VGG16의 13개 층을 Encoder로 사용하고 뒤집은 부분을 Decoder로 사용합니다. 이때, 중간의 Fully Connected Layer 부분을 제거해서 학습 파라미터를 줄여서 (134M -> 14.7M) 속도를 상승시킵니다.
둘째, DeconvNet처럼 Maxpooling과 Unpooling을 같이 사용합니다. 단, 이때도 Transposed Convolution이 아닌 Unpooling을 통해서 크기를 키우기에 메모리의 효율성 + 학습 및 인퍼런스 속도가 빠르고 경계에 대한 정보를 효율적으로 저장할 수 있습니다.
Results
Training
- Camvid Dataset
- Training Dataset : 367
- Test Dataset : 233
- Class : 12 (배경포함 )
- Initialized (He initialized)
- Optimization : SGD (lr : 0.1, momentum 0.9)
- validation score가 가장 높은 Epoch 선택합니다.
- Cross Entropy Loss
- Medium Frequency Balancing
- larger Class의 weight를 1보다 작게 설정합니다.
Analysis
실험을 위한 평가함수와 테스트 데이터셋 세팅합니다.
Performance Metric
- Global Accuracy (Pixel Accuracy - G)
- Class average accuracy (Mean Pixel Accuracy - C)
- mean Intersection over union (mIoU)
- Boundary F1-measure (BF)
- mIoU의 경우 계산방법과 사람이 인식하는 경계부분이 좀 다른데, 이를 보완하기 위해 경계부분에 대해서 정확도를 측정하는 방법입니다.
Test Set (CAMVID)
- CamVid validation set을 기준으로 global accuracy가 가장 높은 Epoch로 추론합니다.
- 하지만, 도로와 건물, 하늘, 보도처럼 대부분의 이미지를 차지하는 클래스 때매 클래스의 평균 정확도가 높다고해서 Global Accuracy가 높은게 아닙니다.
첫째, 3가지 경우에 대해서 각각 성능을 비교 (파라미터 / 추론속도 / 성능) 한 결과는 위와 같습니다.
- unsampling의 종류 (Bilinear / Upsampling – indices / Learning to upsample)
- Median frequency balancing
- Natural frequency balancing
둘째, Bilinear-Interpolation의 경우입니다.
셋째, SegNet Basic과 FCN Basic을 비교하는 부분입니다. 참고로, FCN과 SegNet Basic은 다음과 같이 구현되어있습니다.
- SegNet의 small version으로 4 encoders와 4 decoders으로 구성 (SegNet은 5개씩으로 구성) 됩니다.
- Encoders는 max-pooling 과 sub-sampling을 수행하고 이때의 indice를 받아서 unmaxsampling을 수행됩니다.
- Conv layer 이후에는 BN 이 사용되고 Bias는 없습니다.
- Decoder Network에는 Relu, Bias 를 사용하지 않습니다.
- 7x7 의 conv을 이용해서 wide context를 잡으려고합니다.
- SegNet-Basic과 Encoder는 동일하게 사용합니다.
- 단, Decoder에는 UnMaxPooling이 아닌 Transposed Convolution으로 전부 대체합니다.
그 결과 둘에 대한 비교를 하면 다음과 같습니다.
- SegNet-Basic : Less memory (Storage multiplier) 의 모습을 보입니다.
- FCN-Basic : encoder feature maps
- encoder 층마다 feature maps 필요로 해서 메모리의 소요가 훨씬 큽니다.
- 하지만, 파라미터가 적기에 Faster Inference time (Deconvolution layer가 적음) 을 보입니다.
마지막으로, 그 외의 부분들 입니다.
- SegNet-Basic-SingleChannelDecoder : 추론속도와 파라미터의 수가 엄청 작습니다.
- SegNet-Basic-EncoderAddition : Unsampling시에 Max-pooling Indices를 사용합니다.
- FCN-Basic-NoDimReduction : 성능이 가장 높고 Infer time도 작음. 파라미터와 메모리의 경우 1.625M과 64로 가장 큽니다.
- FCN-Basic-NoAddition-NoDimReduction : Addition을 제거시에 정확도가 많이 감소 84.8 -> 67.8 합니다.
- SegNet-Basic-EncoderAddition, FCN-Basic-NoDimReduction과 같이 무거운 모델이 성능이 높습니다.
- FCN에서는 차원축소를 제거하는게 성능과 BF 측면에서 성능향상이 큽니다.
- Memory와 정확도 사이에는 Trade-off 관계를 보입니다.
이를 정리하면, 다음과 같습니다.
- 인코더 기능 맵이 완전히 저장되어 있을 때 최상의 성능을 얻을 수 있음. 특히 의미론적 등고선 설명 메트릭(BF)에 확하게 반영됩니다.
- 추론 중 메모리가 제한될 때, 압축된 형태의 인코더 특징 맵(차원 감소, 최대 풀링 지수)을 적절한 디코더(예: SegNet 유형)와 함께 저장 및 사용하여 성능을 개선할 수 있습니다.
- Decoder의 깊이가 커지면서 성능이 향상합니다.
Benchmarking
Road Scene Segmentation
- FCN과 DeconvNet에 비해서 SegNet과 DeepLabv1은 적은 iteration에서 높은 성능을 보입니다.
- 40K, 80K 에서 성능의 차이가 특히 발생하고 >80K에서는 DeconvNet하고 성능은 비슷한 모습을 보이고, 오히려 BF 부분은 DeconvNet의 성능이 더 높습니다.
- SegNet과 DeepLabv1은 G, C, mIoU에 대해서는 초기에는 성능이 거의 비슷하고 Iteration이 늘어날 수록 차이가 발생 (BF의 경우 40K에서도 SegNet이 우수) 합니다.
SUN RGB-D Indoor Scenes
Deep Architectures (SegNet, DeconvNet)가 80K에서 낮은 성능을 보입니다. (G, C, mIoU)
SegNet의 경우 G와 BF가 DeepLab-LargeFOV 보다 높은 경향을 보이지만 C와 mIoU는 높은 경향을 보이고 CamVid 데이터셋에 비해 성능이 많이 감소합니다.
- 첫번째 원인은 Class의 수가 증가했고, small class가 이미지에 많이 등장하는 경향이 있습니다.
- 두번째 원인은 VGG를 사용하는 Deep한 Architecture때문에 발생합니다. (파라미터가 많아서 수렴 x, 정보손실이 큼)
Conclusion and Discussion
Conclusion
road and indoor scene understanding 분야에서 동기를 얻어서 memory와 computational time을 효율적으로 만드려고 시도을 보입니다.
SegNet을 다른 논문인 FCN, DeconvNet 등과 비교해서 architectures에 따라서 어떤 식으로 정확도, 학습 및 추론 속도 등이 trade-offs 관계를 가지는지 파악합니다.
Encoder network feature maps를 저장해서 활용하는게 성능은 가장 좋지만 inference time과 memory 측면에서 좋지 않습니다.
위의 3의 성능을 보완하기위해서 max-pooling indices를 사용하면 충분히 좋은 성능에 도달합니다.
추후, End-to-End의 학습이 잘 되도록 개선할 예정입니다.
SegNet은 FCN, DeepLab v1 보다는 느리지만 DeconvNet 보다는 빠릅니다.
- FCN, DeepLabv1에 비해 SegNet은 Decoder Architecture가 있어서 느릴 수밖에 없습니다.
- DeconvNet에서 FC Layer를 제거한 구조여서 DeconvNet 보다는 속도가 빠릅니다.
SegNet은 Traning, Inference memory가 작은 편이고 Model Size 또한 FCN, DeconvNet에 비해 작습니다.
Object의 크기가 큰 경우에 대해서는 잘 맞추는 모습을 보이지만, 반대의 경우에 대해서는 성능이 떨어지는 모습을 보입니다.
Advantages
- Scene Understanding이라는 특수한 분야의 Task에 초점을 맞춰서 문제를 해결하려고합니다.
- Object의 크기가 크다는 점
- Object간에 동시에 발생하고 서로 관계가 있다는 점 (보행자-인도, 자동차-도로)
- 자율주행의 경우 Inference 속도가 빨라야 한다는 점
- 구조 자체가 DeconvNet에서 Fully Connected Layer만 뺀 구조라서 SegNet의 장점을 어필하기 위해 다양한 시도와 초점을 맞춰서 진행합니다.
- Scene 분야 / Memory 및 Training, Inference Time / Parameter에 의한 오버피팅
- DeconvNet vs SegNet / FCN vs SegNet / Unet vs Segnet
- Iterations이 적은 경우와 많은 경우에 대해 성능이 어떻게 나오는지 비교
- 클래스의 크기가 작은 경우와 많은 경우에 대해 성능이 어떻게 나오는지 비교
Disadvantages
DeconvNet에 Fully Connected Layer만 뺀 논문치고는 굉장히 화려한게 아닌가 생각이 듭니다. (시점으로보면 미리 준비하고 있었는데 DeconvNet이 나와서 arxiv에 낸게 아닌가 불쌍하기도함)
CamVid와 SUNRGB-D 라는 특수한 데이터셋에 대해서는 성능이 제일 좋았지만 다른 데이터셋에 대해서는 어떻게 나왔을지 비교가 필요(일반화성능) 합니다.
- 참고로 FCN, DeconvNet, DeepLab 논문의 경우 위의 2개 데이터에 대해서 실험을 한 내용이 없어서 직접 구현해서 돌렸을텐데 튜닝을 어느정도 했을지에 대한 의문도 남음
- PASCAL VOC 2012에 대해서도 비교를 해야 정확한 결과였을 것 같음
- Global Accuracy가 가장 높은거로 선택했다고 했는데 mIoU나 다른 지표로 weight를 선택해서 실험했을때 어떤 결과가 나왔을지에 대해 궁금
Large Object를 잡고 Object간의 관계를 파악하는 것을 수행하는게 MaxPooling -> UnMaxPooling인데 과연 이걸로 충분한가? 사실 DeconvNet도 위의 장치가 있는게 결과 차이가 너무 나는게 이상함. Fully Connected Layer 있고 없고에 대해서 어떤 차이가 나오는지 등에 대해 정확한 분석이 들어가야 되고 위의 원인이 맞는지도 의심스럽습니다.
같은 얘기 너무 반복함. 모든 내용에 Training Time / Computation / Memory 중요하다는 얘기가 반복되고 FCN이나 다른 방법에 비해 크게 상승했는지도 의문입니다.
CamVid Data가 가지고 있는 문제점입니다.
SegNet의 실험 대부분이 CamVid에서 비교했는데 해당 데이터는 약간의 문제가 있음
- Input / Output data가 Time Correlated됨
- Dataset의 수가 작고 이상한 라벨들이 존재
- Train 367 / Test 233
- Weird Label이 존재 (Bycycle == Person / 라벨이 자세하지 않음)
Appendix
- J. Long, E. Shelhamer, and T. Darrell. Fully convolutional networks for semantic segmentation. In CVPR, 2015
- A. Krizhevsky, I. Sutskever, and G. E. Hinton. Imagenet classification with deep convolutional neural networks. In NIPS, 2012
- K. Simonyan and A. Zisserman. Very deep convolutional networks for large-scale image recognition. CoRR, abs/1409.1556, 2014
- C. Szegedy, W. Liu, Y. Jia, P. Sermanet, S. Reed, D. Anguelov, D. Erhan, V. Vanhoucke, and A. Rabinovich. Going deeper with convolutions. CoRR, abs/1409.4842, 2014
- B. Hariharan, P. Arbelaez, L. Bourdev, S. Maji, and J. Malik. ´ Semantic contours from inverse detectors. In ICCV, 2011
- C. L. Zitnick and P. Dollar. Edge boxes: Locating object ´ proposals from edges. In ECCV, 2014
- https://medium.com/@sunnerli/simple-introduction-about-hourglass-like-model-11ee7c30138
'EDA Study > Image Segmentation' 카테고리의 다른 글
Convolutional Networks for Biomedical Image Segmentation (U-Net) (0) | 2021.09.21 |
---|---|
A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation (SegNet) Code (0) | 2021.09.21 |
Deconvolutional Network (DeconvNet) Code (0) | 2021.09.21 |
Deconvolutional Network (DeconvNet) (4) | 2021.09.21 |
Fully Convolutional Networks (FCN) Code (0) | 2021.09.21 |