인공지능/컴퓨터 비전

Fully Convolutional Networks (FCN)

백관구 2023. 1. 11. 17:35
반응형

안녕하세요 :)

 

    이번 포스팅에서는 이미지의 의미적 분할(Semantic Segmentation) 문제를 해결하기 위해 개발된 Fully Convolutional Networks (이하 FCN)에 대하여 알아보도록 하겠습니다. 아래 그림은 이번에 다룰 FCN의 개념을 보여주는 대표적인 그림이라 할 수 있겠습니다. 개, 고양이 영역을 잘 분할된 것을 볼 수 있습니다. 그림에 표현되지 못한 FCN의 중요한 개념이 있으니 끝까지 봐주세요.

 

Fully Convolutional Networks (FCN)

 

    이 신경망은 2015년에 『Fully Convolutional Networks for Semantic Segmentation (Long et al.)』 논문을 통해 공개되었습니다. 다른 의미적 분할 모델과 비교해 오래 전에 개발되긴 했지만 FCN에 적용되었던 개념들이 일부 계속 차용되고 있기 때문에 중요한 연구라고 생각합니다.

    아래 내용들은 논문과 University of British Columbia의 CPSC 440 강의 자료, Artificial Inteligence를 참고하였습니다.

 


 

1. 픽셀 라벨링

Pixel labeling

 

    이미지의 의미적 분할은, 곧 이미지를 구성하고 있는 가장 작은 단위인 픽셀을 클래스별로 분류하는 작업과 동일합니다. 위 그림처럼 왼쪽 이미지의 모든 픽셀 하나하나에 대해 책상, 사람, TV인지 클래스를 분류하는 문제입니다. 이러한 픽셀 분류 문제를 풀기 위해 아래와 같이 convolution 층과 fully connected 층으로 구성된 전통적 구조의 Convolution Neural Network (CNN)을 적용한다면 두 가지 방안으로 접근할 수 있습니다.

 

전통적인 CNN 구조

 

  • 방안 1
    • 타겟 픽셀을 중심에 두는 바운딩 박스를 입력값, 타겟 픽셀의 클래스를 라벨로 하는 CNN 분류 모델
    • 모든 픽셀에 대해 바운딩 박스를 설정하고 CNN 분류 수행
  • 방안 2
    • 이미지를 입력값, 모든 픽셀의 클래스를 라벨로 하는 CNN 분류 모델
    • 모든 픽셀을 한 번에 분류할 수 있도록 Fully Connected 층의 출력을 확장 : (1000) → (모든 픽셀 개수, 1000)

 

    하지만, 위 두 가지 접근 방식은 단점이 있습니다.

 

  • 방안 1
    • 바운딩 박스 바깥의 타겟 픽셀과 거리가 먼 픽셀들의 정보를 반영할 수 없음
    • 느린 연산 속도 : 방안 1에 높이 200 너비 200의 이미지를 적용하면 총 40,000 번의 분류 작업이 필요
  • 방안 2
    • Fully Connected 층의 공간 정보 손실
    • 이미지 크기(높이, 너비)가 동일한 경우에만 적용 가능

 

    이 같은 단점들은 보완하고자 등장한 것이 FCN 입니다. 다음은 FCN에 대해 살펴보겠습니다.

 

CPSC 440 9페이지

 


 

2. Fully Convolutional Networks

Fully Convolutional Networks (FCN) 구조

 

    FCN은 단어 그대로 모든 층을 convolution 층으로만 구성한 신경망입니다. 그래서 전통적인 CNN 구조에서 fully connected 층이 convolution 층으로 대체된 형태라고 보시면 됩니다. 위의 그림처럼 말이죠. 이렇게 하면 어떤 점이 개선 될까요. 바로 fully connected 층에서 손실됐던 이미지 내 공간 정보를 보존할 수 있는 가능성이 생기게 됩니다. Convolution 층은 합성곱 연산을 수행함으로써 픽셀들 간의 형태를 여러 차원에서 학습하기 때문입니다.

 

합성곱 신경망 (Convolutional Neural Networks ; CNN)

안녕하세요 :) 이미지의 의미적 분할에 활용되는 Fully Convolutional Network (FCN), U-Net과 같은 딥러닝 모델들을 다루기에 앞서 이들을 구성하고 있는 합성곱 신경망(Convolutional Neural Network; CNN)의 개념을

data-science-note.tistory.com

 

    그리고 이미지 내 모든 픽셀을 입력값으로 convolution 층을 거치기 때문에 멀리 떨어진 픽셀들 간의 공간 정보도 학습될 여지가 있으며, 이전처럼 모든 픽셀에 대해 각각 연산하지 않아도 되기 때문에 연산 속도 또한 개선됩니다. 모든 층에서 합성곱 연산만 진행되기 때문에 입력 이미지의 크기가 다른 경우에도 적용 가능한 장점도 있습니다.

 

CPSC 440 11페이지

 

반응형

 


 

2-1. Upsampling

Transposed Convolution (Upsampling) / Output 크기는 아래 식에 따라 3x3이 맞습니다
Transposed Convolution Output 크기

 

    FCN의 또다른 특징은 "Upsampling"이라는 과정을 통해 원래 이미지 크기로 복원시키는 연산이 추가됩니다. 일반적으로 convolution 층이 특성맵 크기(높이x너비)를 축소시켜 출력한다면 upsampling은 그 반대로 특성맵 크기를 확대 출력한다라고 생각하시면 됩니다. 그래서 "transposed convolution" 또는 "deconvolution"이라 불리기도 합니다. 여러 자료를 찾아보니 transposed convolution이 정확한 표현이라고 합니다.

 

CPSC 440 12페이지

 


 

2-2. Skip Connections

Skip Connections 결과

 

    Transposed convolution 연산 과정을 보면 적은 양의 정보(예시. 2x2)로부터 많은 양의 정보(4x4)를 복원합니다. 이 과정에서 일부 공간 정보가 손실되며, 공간 정보 손실의 결과물은 위 두번째 그림(no skips)과 같이 나타나게 됩니다. 자전거와 인물을 어느정도 분할하고는 있지만 경계가 많이 모호한 것을 볼 수 있습니다.

    이러한 공간 정보 손실을 보충하고자 도입된 개념이 "Skip Connection" 입니다. 이 개념은 최근 나오는 CNN 구조에 대부분 활용될 정도로 여러 연구에서 그 효과가 입증되었습니다. 구조는 단순합니다. 입력층에 가까운 특성맵을 중간 단계 없이 바로 출력층에 가까운 다른 층과 결합하는 과정이 추가됩니다.

    통상적으로 CNN 계열의 모델에서 입력층에 가까운 특성맵은 정보량이 촘촘하고(fine) 위치와 형태 등 공간정보를 상대적으로 많이 가지며, 반면 출력층에 가까운 특성맵은 정보량이 성기며(coarse) 공간 정보보다는 추상적인 의미적 정보를 더 많이 갖게 됩니다. 이런 측면에서 봤을 때, skip connection은 출력층에 가까운 특성맵(공간 정보 손실)과 입력층에 가까운 특성맵(공간 정보 풍부)을 결합함으로써 출력값에 공간 정보를 보충하는 역할로 볼 수 있습니다.

 

Skip Connections

 

    위 그림은 skip connection을 적용한 FCN의 모식도를 나타낸 것으로 FCN-32s, FCN-16s, FCN-8s는 끝단에서 upsampling을 몇 배(32배, 16배, 8배) 하는지 연관됩니다. 먼저, FCN-32s는 skip connection 없이 conv7 특성맵을 32배 upsampling 하여 입력 이미지 크기로 복원합니다. FCN-16s는 2배 upsampling 된 conv7 특성맵과 skip 된 pool4 특성맵을 합해 16배 upsampling 합니다. 마지막으로 FCN-8s는 4배 upsampling 된 conv7 특성맵, skip 되어 2배 upsampling 된 pool4 특성맵, skip 된 pool3 특성맵을 합해 8배 upsampling 합니다.

    위의 자전거 그림으로 돌아가서 보면 FCN-8s (2 skips)의 이미지 분할 성능이 가장 좋은 것을 확인할 수 있습니다.  아래 그림은 위의 Skip Connections 그림 중 FCN-8s 모델을 더 자세하게 나타낸 것입니다.

 

FCN-8s

 


 

3. FCN 활용

    이미지의 의미적 분할은 클래스 분류(인물, 자전거, 나무 등) 외에도 흑백 이미지를 컬러 이미지로 변환하는 작업에도 활용될 수 있습니다.

CPSC 440 17페이지
CPSC 440 18페이지

 


 

    Fully Convolutional Networks에 대한 리뷰를 마치도록 하겠습니다. 다음 포스팅은 오늘 공부한 FCN을 PyTorch로 구현하고 실제 데이터셋을 적용했을 때 그 성능을 검토하는 내용으로 돌아오겠습니다.

 

감사합니다 :>

반응형