1. 대표적인 딥러닝을 이용한 세그멘테이션 FCN
Abstract
1. VGG 네트워크 백본을 사용 (Backbone : feature extracting network)
2. VGG 네트워크의 FC Layer (nn.Linear을 nn.Conv2d로 대체)
3. Transposed Convolution 을 이용해서 Pixel Wise prediction 을 수행
✔ VGG를 백본으로 사용
- AlexNet, ResNet 등의 다른 모델모다 VGG의 가장 좋았음
- pretrained weight를 사용할 수 있음
Fully Connected Layer vs. Convolution Layer
FCN의 두번째 특징인 FC layer를 Convolution Layer로 바꿈으로써 위치정보를 해치지 않은채로 특징 추출이 가능해짐.
또한 입력값의 크기(width, height)가 상관없어짐
Transposed Convolution
💥 Transposed Convolution에 사용되는 Convolution 과정에서 사용되는 같은 값의 kernel이 아니고 Backpropagation에서 Update되는 학습 가능한 파라미터 입니다!
✔ Transposed Convolution의 과정
각각의 input 픽셀과 kernel 픽셀을 stride만큼 이동하여 elementwise product를 수행한 후 같은 위치의 값은 모두 summation
- 여기서 5x5 output을 만들고 싶다면? stride를 2로!
- 5x5 output에서 padding을 1로 하면 다시 3x3
✔ 용어
Upsampling == Deconvolution == Transposed Convolution 모두 동일하게 쓰이지만 Transposed Convolution이 가장 정확한 표현. Deconvolution이라는 단어는 Conv의 input과 Deconv의 output이 동일하지 않기 때문에 정확하게 맞는 표현은 아님.
Transposed Convolution 으로 표현하는 이유는 Convolution을 한 결과를 Transpose 하여 Convolution을 진행했을 때, 앞서 계산했던 Transposed Convolution의 결과가 나오기 때문
FCN 성능 향상 시키는 방법
우선 FC6 Layer의 Convolution을 1x1이라고 가정
- 각 Conv layer(Conv - Relu)
- Conv1 : pooling 과정을 통해 size가 1/2이 됨
- Conv5 (Conv2~Conv4 생략)
- FC6, FC7
- Score : output channel의 개수는 num_classes
- Up Score : kernel size, stride, padding을 통해 원본 사이즈와 크기 맞춤(32x32)
위의 과정으로 만들어진 FCN-32s가 GT와 비교했을 때 디테일을 잘 예측하지 못함.
이 문제를 해결하기 위해 중간에 pooling의 output 값을 Deconvolution 과정에서 사용하기로 함
1. MaxPooling 에 의해서 잃어버린 정보를 복원해주는 작업을 진행
2. Upsampled Size 를 줄여주기에 좀 더 효율적인 이미지 복원이 가능
'TIL > Boostcamp AI tech' 카테고리의 다른 글
[데이터제작] 데이터 제작의 중요성 - Computer Vision (0) | 2021.11.08 |
---|---|
[Segmentation] FCN의 한계를 극복한 models - 성능면 (0) | 2021.11.08 |
[Segmentation] COCO Dataset format & EDA & Metric (0) | 2021.10.19 |
[3rd P stage] Segmentation Wrap UP (0) | 2021.10.18 |
[Boostcamp]Week9-Day39. Object Detection Library :: seoftware (0) | 2021.09.30 |
댓글