-
[Segmentation] 딥러닝을 이용한 Segmentation FCNCS 공부/AI 2023. 6. 6. 17:17
요약
- VGG 네트워크 backbone을 사용하여 feature 추출
- VGG 네트워크의 FC layer을 Convolution으로 대체
- Transposed Convolution을 이용해서 pixel wise prediction 수행
Fully Connected Layer vs Convolution Layer
FC layer을 Convolution layer로 대체하였을 때의 장점
- FC layer은 flatten 이후에 fc layer을 적용하기 때문에 각 픽셀의 위치정보를 해침
- Convolution layer은 각 픽셀의 위치정보를 해치지 않은채로 특징을 추출
- 1x1 convolution을 사용하면 kernel의 파라미터에 의해 영향을 받고, 이미지 혹은 layer 크기와 상관없이 학습됨
- height, width와 상관이 없음
- nn.Conv2d(input_channel, output_channel, kernel_size, ..) -> 항상 학습 가능
- nn.Linear(input_channel * height * width, output_size) -> height, width 안맞으면 학습 불가
Transposed Convolution
- 입력 이미지를 Upsampling하는 방법 중 하나 (Deconvolution)
- Transposed Convolution의 값은 이전 Convolution의 값과 동일한 값이 아니라 Convolution처럼 학습이 가능한 값으로 Backpropagation 과정에서 Update되는 값
- 중요한 점은 Convolution과 마찬가지로 학습 가능한 파라미터를 통해서 줄어든 이미지를 다시 키우는 Convolution이라는 점
- Transposed Convolution으로 불리는 이유는 Convolution을 transpose하여 연산하기 때문이다
convolution을 transpose하고 2x2 input을 flatten하여 연산한 것과 같음 FCN에서 성능을 향상시키기 위한 방법
- FC6 layer의 Convolution을 지나면, 이미지 크기가 1x1로 변동되는 문제 발생
- 우선, 편의상 FC6 layer에 1x1 conv 적용한 것을 설명
- FC6 layer(7x7 Convolution)을 적용했을 때 발생하는 이슈
- FC6을 지나면 이미지의 크기가 변동되기 때문에 이 문제를 해결하기 위해 conv1의 첫번째 Conv에 zero padding=100을 넣어줌으로써 input size 키워주었는데 이렇게 되면 input=224x224, output=256x256으로 사이즈가 다름
- 따라서 conv1의 첫번째 Conv에 padding을 주고 마지막에 Crop함 (기존 transposed convolution에 있는 padding은 모두 제거)
FCN 구조
- conv block 한개는 Conv-ReLU-Conv-ReLU-Max pooling으로 구성됨
- FC6
self.fc6=CBR(512,4096,1,1,0) self.drop6=nn.Dropout2d()
- FC7
self.fc6=CBR(4096,4096,1,1,0) self.drop6=nn.Dropout2d()
- Score / Upscore (stride=32)
- 32배나 키우면 정보가 소실되는 문제를 어떻게 해결해야할까? => Skip-connection
self.score_fr=nn.Conv2d(4096,num_classes,1,1,0) self.upscore32=nn.ConvTranspose2d(num_classes,num_classes,kernel_size=64,stride=32,padding=16)
FCN에서 성능을 향상시키기 위한 방법
- Max Pooling에 의해서 잃어버린 정보를 복원해주는 작업을 진행
- Upsampled Size를 줄여줘 좀 더 효율적인 이미지 복원이 가능
Score과 Upscore(x2)의 summation 진행하려면 채널의 크기가 같아야 함. 1x1 conv로 채널의 크기를 맞추고,Crop image를 통해 이미지의 크기를 통일시킴 평가지표
pixel 단위로 계산 클래스별 GT와 Predict의 교집합/합집합의 평균 'CS 공부 > AI' 카테고리의 다른 글
[Segmentation] DeepLab v2~v3+, PSPNet (4) 2023.06.08 [Segmentation] DeconvNet, SegNet, FC DenseNet, Unet, DeepLab, DilatedNet (0) 2023.06.06 [Segmentation] Baseline Code (0) 2023.06.05 Annotation 도구 소개 (0) 2023.05.25 [OCR] 성능 평가 방식 (0) 2023.05.25