ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Semantic Segmentation] FCN
    Computer Vision & AI/Computer Vision 2024. 2. 10. 17:44

    FCN

    Fully Convolutional Network

    end-to-end 딥러닝 모델의 기본인 FCN 

    https://www.cv-foundation.org/openaccess/content_cvpr_2015/papers/Long_Fully_Convolutional_Networks_2015_CVPR_paper.pdf

    end-to-end 딥러닝 모델

    입력부터 출력까지 프로세스를 하나의 모델로 구현한 것

     

     

     

     

    특징

    1. VGG 네트워크 backbone을 그대로 사용
    2. VGG 네트워크의 FC Layer (nn.Linear)를 Convolution으로 대체함
    3. Transposed Convolution을 이용해서 Pixel Wise prediction을 수행함

     

     

     

     

     

    VGG

    3x3의 convolution을 깊게 쌓아서 적은 파라미터로 효과적으로 receptive field를 넓히면서

    높은 성능을 달성한 네트워크

     

     

     

     

    Convolutional Layer를 사용한 이유

    왜 nn.Linear 에서 nn.Conv2d 를 채택했을까?

     

    기존 Fully Connected Layer는 flatten과정에서 픽셀의 위치정보를 해치게 된다.

    단순 classification문제에서는 상관없으나 

    segmentation 은 pixel 위치정보가 중요하기 때문에 Convolutional Layer를 사용한다.

     

     

     

    또한 추가적인 장점은,

    다른 이미지 입력 사이즈에 상관없이 학습, 추론이 가능하다. 

    그 이유는 다음과 같다.

    nn.Conv2d(input_channel, output_channel, kernel_size, ...)
    
    nn.Linear(input_channel * height * width, output_size)

     

    nn.Linear의 인자로 height, width가 포함된다. 즉, input size가 맞아야 학습이 가능하다.

    그러나 nn.Conv2는 input channel만 고정되면 상관이 없다.

     

     

     

     

     

    Pixel Wise Prediction

    Transposed Convolution

     

    위 그림을 다시 보면, 

    Convolution Layer를 통해서 특징을 추출하는데 

    중간중간 max pooling으로 결과적으로 이미지를 1/32만큼 축소한다.

     

    그러나 우리는 pixel 위치 정보가 중요한 Segmentation task를 해야하기 때문에 

    7x7을 다시 224x224로 늘려야 한다.

     

    이때 Upsampling을 사용한다.

     

     

    Upsampling = Deconvolution = Transposed Convolution

     

    모두 같은 용어인데,

    convolution의 반대 과정이라 Deconvolution (실제 연산 과정도 convolution연산의 반대이다.)

    매트릭스 형태로 봐도 Transposed 된 형태로 계산이 진행된다.

     

     

    이때, Transposed Convolutioin 값도 Backpropagation에서 Update 된다.

     

     

    convolution연산과 마찬가지로 stride, padding을 통해 사이즈를 조정할 수 있다.

    예를들어, 더 큰 사이즈를 만들고 싶다면 stride를 늘린다.

     

     

     

     

     

     

     

    FCN에서 성능을 향상시키기 위한 방법

    논문의 Figure를 보면

    FCN-32s일 때, GT와 비교해서 디테일한 정보들이 많이 손실되어 있음을 볼 수 있다.

     

    이러한 이유는 Conv 블록 마지막에 Pooling을 적용할 때마다 1/2만큼 리사이즈 되는데

    1/32만큼 리사이즈 된 정보를 한번에 Upsampling하면서 정보가 손실되었기 때문이다.

     

    이를 해결하기 위해서 Skip Connection을 적용한다.

     

     

    Pooling에 의해 정보를 잃어버리기 전에 연산을 적용해서 정보를 기억할 수 있다.

     

    만약 크기가 맞지 않는다면 crop을 적용한다.

     

     

     

     

     

     

    Pixel Accuracy

     

    논문에서 Score 평가지표로 사용된 Pixel Accuracy

     

     

    Pixel Accuracy = True pixel / Total pixel

     

     

     

    댓글

Designed by Tistory.