-
FCN의 한계점
- 객체의 크기가 크거나 작은 경우 잘 예측을 못함
- 큰 object의 경우 지역적인 정보로만 예측
- 같은 object여도 다르게 labeling
- 작은 object가 무시되는 문제 (max pooling)
- Object의 디테일한 모습이 사라지는 문제 발생
- Deconvolution의 절차가 간단해서 물체의 경계를 학습하기 어려움
Decoder을 개선한 모델들 (DeconvNet, SegNet)
DeconvNet
Conv=Conv-Batch Norm-MaxPooling, Decoder에서는 Deconv 3개를 통해 sparse한 matrix를 dense하게 만들어줌 - Architecture
- Decoder와 Encoder을 대칭으로 만든 형태
- Encoder(Conv-Conv-Pooling - 7x7 conv) - 1x1 conv - Decoder(7x7 Deconv - Unpooling - Deconv - ReLU)
- Convolution Network는 VGG16 사용
- 13개의 층으로 이루어짐
- ReLU와 Pooling이 convolution 사이에서 이루어짐
- Decoder(Deconvolution Network): Unpooling과 Transposed Convolution이 반복적으로 이루어진 형태
- Unpooling을 통해서 Pooling시에 지워진 경계 정보를 기록했다가 복원, 학습할 필요 없어 속도가 빠름
- 하지만 sparse한 activation map을 가지기 때문에 Transposed Convolution으로 input object 모양을 복원
- Low layer의 경우 전반적인 모습을 잡아냄 (직선, 곡선, 색상 등 local feature)
- High layer의 경우 구체적인 모습을 잡아냄 (복잡하고 포괄적인 개체 정보 global feature)
정리하자면 unpooling의 경우 example-specific(자세한) 구조를 잡아내고 transposed conv의 경우 class-specific한 구조를 잡아냄. 이 두개를 병행하면 FCN보다 DeconvNet의 activation map이 디테일해짐
SegNet
- Real-time Semantic Segmentation이 가능하게 함
DeconvNet과 다른점
- DeconvNet과 다르게 가운데 7x7 conv,deconv, 1x1 conv을 없앰으로써 파라미터 수 감소시킴 -> 속도 향상
- Decoder에서 Deconv대신 Conv 사용
- Score 부분에서 1x1 conv 대신 3x3 conv 사용
DeconvNet은 성능에 집중 SegNet은 속도에 집중 Skip Connection을 적용한 모델들 (FC DenseNet, UNet)
FC DenseNet
- skip connection: Neural network에서 이전 layer의 output을 일부 layer을 건너 뛴 후의 layer의 입력으로 제공
- Architecture
- skip connection을 활용
- FCN과 달리 채널별로 concatenate를 진행
Unet
- Architecture
Receptive Field를 확장시킨 모델들 (DeepLab v1, DilatedNet)
- receptive field: 뉴런이 얼마만큼의 영역을 바라보고 있는지. receptive field가 넓을수록 물체를 더 잘 인식할 수 있음
- receptive field가 작으면 물체에 대한 정보를 부분적으로 포함하여 segmentation의 예측 정확도가 떨어짐
- Conv - Max pooling - Conv를 반복하면, 효율적으로 receptive field를 넓힐 수 있음 (+ 노이즈 제거, 메모리 효율성)
- 그러나 Max Pooling(downsampling - convolution - upsampling)을 진행하면 해상도가 많이 낮아짐
DeepLab v1
이미지의 크기는 많이 줄이지 않고 파라미터 개수도 변함없는 채로 receptive field만 넓힐 방법이 없을까?
"Dilated Convolution": 이미지의 크기를 적게 줄이면서도 효율적인 receptive field를 넓히는 방법
(dilation rate를 주어 내부 값을 0으로 padding)- Architecture
- 2x2 Max Pool -> 3x3 Max Pool (stride=2, padding=1)으로 receptive field 넓힘
- conv4에서 stride=1, padding=1로 크기에 변동 없음
- conv5에 dilated conv 사용하여 receptive field 넓힘
- fc6 ~ score로 크기가 1/8로 줄어들고 Bi-linear interpolation으로 8배 키워줌
- Bi-linear interpolation 보간법: 원본 영상을 n배 확대할 때 원본 영상의 값을 그대로 받지 못하는 빈 cell이 생기는데 이때 빈 cell을 내적 계산처럼 채워서 더 smoothing한 영상 출력
- Dense Conditional Random Field (Dense CRF) 후처리 (input: 이미지, 물체가 존재할 픽셀의 확률)
- DeepLab v1을 이용해 segmentation 수행
- 계산된 확률 및 이미지를 CRF에 입력
- 유사한 색상의 픽셀이 가까이 위치하면 같은 범주
- 유사한 색상이어도 픽셀 거리가 멀면 같은 범주로 치지 않음
- 여러번 반복 수행
- 다른 class에 대해서도 같은 과정 수행
- 각 픽셀 별 가장 높은 확률을 갖는 class를 선택하여 최종 결과 도출
DeepLab 전체 segmentation 과정
input -> deep conv neural network -> score map -> bi-linear interpolation -> fully connected CRF -> OutputDilatedNet
Only Front-End Module Front + Basic Context module (정보를 더 복잡하고 좋게 만들어줌) - DeepLab과의 차이점
- 3x3 maxpooling 대신 2x2 maxpooling 사용
- conv4, conv5에서 max pooling 사용하지 않음
- fc6에서 3x3 dilated conv 대신 7x7 dilated conv 사용
- upsampling 과정에서 Bi-linear interpolation 대신 Deconv 사용
'CS 공부 > AI' 카테고리의 다른 글
[Segmenation] Semantic Segmentation의 다양한 기법들 (0) 2023.07.02 [Segmentation] DeepLab v2~v3+, PSPNet (4) 2023.06.08 [Segmentation] 딥러닝을 이용한 Segmentation FCN (0) 2023.06.06 [Segmentation] Baseline Code (0) 2023.06.05 Annotation 도구 소개 (0) 2023.05.25 - 객체의 크기가 크거나 작은 경우 잘 예측을 못함