-
Fully Convolutional Networks (FCN)
- network가 CNN으로만 구성 된 network
- Input size를 자유롭게 할 수 있다.
- network의 모든 부분이 미분 가능 -> 모든 부분이 학습 가능하다.
- Fully-connected layer로 가기 위해 Flatten할 때, channel 방향으로 single feature vector를 뽑아내는데, 이 과정과 완전 유사하게 1x1 convolution m개를 사용해 feature map을 얻는다.
- FCN의 결과로 저해상도의 score map을 얻게 된다 -> 저해상도를 해결하기 위해 Upsampling 사용
- Pooling이나 Stride를 사용하지 않으면 어느정도 고해상도의 map을 얻을 수 있겠지만, 이 경우 receptive field가 작아져 영상의 context를 파악하기 힘들다.
-
Upsampling
- FCN을 통해 작아진 Activation map size를 원래 Input size에 맞춰주기 위해 Upsampling을 사용한다.
- 역으로 FCN으로 Activation map을 만드는 과정은 Downsampling이라 할 수 있다.
- Receptive field는 키워서 영상의 context를 파악하게 하는 게 성능에 좋고, 그 후에 Upsampling을 통해 강제로 resolution을 맞춰준다.
- 보통 unpooling보다는 Transposed convolution, Upsample and convolution을 사용한다.
-
Transposed convolution
- Filter가 Input보다 크다.
- 특정 위치만 Overlap Issue가 있다.
-
Upsampling and convolution
- Transposed convolution의 일부만 Overlap되는 issue를 피하기 위해, 골고루 overlap 되게 만든다.
- 영상처리에 쓰이는 Nearest-neighbor, Bilinear 등을 통해 해상도부터 키우고, 이후 Convolution을 적용한다.
-
Upsampling을 해도 이미 줄어든 image에서 원래 정보를 찾는 것은 쉽지 않다 -> 여러 층의 conv 결과를 활용하자.
- 저층의 Image : 해상도 높음, Receptive field 작아 국지적, Detail에 민감
- 고층의 Image : 해상도 낮음, Receptive field 높아 의미 파악 쉬움
-
FCN - Adding skip connections
- 고층의 activation map은 upsampling해 해상도를 키운다.
- 그에 맞춰 중간 층도 upsampling해 가져온다.
- 이들을 concatenation해서 최종 출력을 만든다.
- 최종 출력에 사용한 pool layer의 종류와 개수에 따라 최종 출력도 그에 맞게 달라진다.
- 이를 통해, 사람의 개입 없이 모든 부분을 학습할 수 있고, 여러 과정을 통합했으므로 end-to-end architecture이며, 성능도 괜찮다.
-
Hypercolumns for object segmentation
- 낮은 layer와 높은 layer를 융합
- FCN과 많은 부분이 유사, but end-to-end가 아님.
-
U-Net
- 영상의 일부분을 집중해야 하는 기술에서 많이 사용된다.
- FCN 기반
- FCN with skip-connection보다 좀 더 정교
-
U-Net의 과정
- Contracting path : convolution과 pooling을 통해 channel 증가, 넓은 receptive field, 저해상도의 activation map 확보(FCN과 동일)
- Expanding path : 단계별로 activation map의 해상도를 올리고 channel은 낮춘다.
- Contracting path와 대칭으로 대응되는 layer와 size를 맞춘다.
- 대응되는 layer들은 concatenate 가능하도록 channel 수와 size가 호환 가능하게 되어있다.
- concatenate를 통해, Input에 조금의 변화에도 예민하게 변화를 관찰할 수 있다(경계선 같은 부분)
- Input number와 feature size는 반드시 짝수가 되어야 한다.
-
DeepLab
-
여러 Segmentation model 중 성능이 상위권에 많이 포진되어 있다.
-
DeepLab V3+ 까지 있음
-
Atrous Convolution
- kernel element간에 stride를 줘서, 적은 kernel size로 더 큰 receptive field를 갖게 한다.
- 파라미터 r(rate)로 stride를 표현
-
Atrous Spatial Pyramid Pooling(ASPP)
- rate가 다른 Atrous Convolution을 병렬로 적용한 뒤, 이들을 합친다.
- 다양한 scale에서의 context를 종합하여 판단함으로서 Semantic segmentation 성능을 올릴 수 있다.
-
Depthwise separable convolution
- 일반적인 convolution : filter 크기 input의 channel 수 filter의 channel 수
- 여기서, input의 channel을 모두 분리시켜, channel 수가 1인 filter들로만 이를 계산하는 것이 Depthwise separable convolution
- 각 Input channel에 convolution을 적용한 후, 11channel 크기의 convolution을 적용한다.
- 성능은 비슷하면서도 파라미터 수를 확 줄일 수 있다.
-
Encoder-Decoder형태로 구성