파이톨치

[BoostCamp AI Tech] Fully Convolutional Network 본문

AI&ML/BoostCamp AI Tech

[BoostCamp AI Tech] Fully Convolutional Network

파이톨치 2024. 11. 11. 14:20
728x90

Fully Convolutional Network


FCN(Fully Convolutional Network) 개요

FCN은 전통적인 CNN 구조를 변형하여 입력 이미지와 같은 크기의 출력(즉, 각 픽셀의 클래스 레이블)을 생성합니다. 일반적인 CNN과 달리 FCN은 완전 연결 층(Fully Connected Layer)을 사용하지 않으며, 이를 통해 입력 이미지의 해상도를 유지한 채로 픽셀 수준의 예측이 가능하도록 만듭니다.

주요 구조와 동작 원리

  1. VGG 네트워크 백본 사용
    FCN은 기본적으로 이미지의 특징을 추출하기 위한 네트워크(백본)로 VGG 네트워크를 사용합니다. VGG는 다양한 계층을 통해 이미지의 시각적 특징을 추출하는 데 강력하며, 깊고 넓은 계층 구조로 인해 다양한 해상도에서 유용한 특징을 학습할 수 있습니다.
  2. FC Layer(완전 연결 층)를 Convolution 층으로 대체
    VGG의 마지막 부분에는 완전 연결 층이 포함되어 있지만, FCN에서는 이 층을 Convolution 층으로 대체합니다. 이렇게 하면 출력이 고정된 크기로 강제되지 않고, 입력 이미지 크기에 따라 유연하게 처리할 수 있습니다. 완전 연결 층을 제거함으로써 FCN은 입력 이미지를 피쳐 맵으로 변환하여 공간 정보를 보존하게 됩니다.
  3. Transposed Convolution을 통한 업샘플링
    VGG 백본을 거친 후 다운샘플링된 특징 맵을 입력과 동일한 크기로 복원하기 위해 Transposed Convolution(역 컨볼루션)을 사용합니다. Transposed Convolution은 업샘플링 과정에서 손실된 공간적 정보를 보완해 주며, 결과적으로 각 픽셀의 클래스 확률을 예측할 수 있도록 합니다.

 

Fully Connected Layer vs Convolutional Layer

1. Fully Connected Layer (FC Layer)

FC Layer는 각 노드가 입력 데이터의 모든 픽셀과 연결된 구조를 가지고 있습니다. 이는 주로 입력 데이터를 일차원 벡터로 변환한 후에 사용되며, 이미지의 전체적인 정보를 종합하여 결정적인 특징을 추출할 때 활용됩니다. 그러나 이 과정에서 위치 정보를 모두 무시하고, 입력 이미지의 크기에도 민감해 활용 범위가 제한적입니다.

  • 위치 정보 손실: 입력 이미지를 벡터로 변환하여 처리하기 때문에, 각 픽셀의 위치 정보가 무시됩니다.
  • 입력 크기 고정: FC Layer는 입력 크기가 고정되어야 하므로, 이미지나 피처 맵의 크기가 변할 경우 새로 조정이 필요합니다.

2. Convolutional Layer (Conv Layer)

Conv Layer위치 정보 보존과 특징 추출의 효율성에 강점이 있는 층입니다. 이 층은 입력 이미지의 특정 위치에서 주변 정보를 기반으로 특징을 추출하는 필터(kernel)를 사용합니다. Conv Layer는 FC Layer와 달리 위치 정보를 보존하면서 이미지의 크기와 관계없이 적용할 수 있습니다.

  • 위치 정보 보존: Conv Layer는 이미지의 픽셀 위치를 유지하며, 지역적인 특징을 추출할 수 있습니다.
  • 입력 크기 유연성: Conv Layer는 kernel 크기에 따라 연산이 이루어지므로, 입력 이미지나 피처 맵의 크기가 달라도 학습된 필터를 적용할 수 있습니다.


위치 정보를 유지하는 Convolutional Layer

이미지의 각 픽셀 위치가 중요한 세그멘테이션 작업과 같은 경우, Conv Layer는 위치 정보를 유지하며 학습할 수 있는 장점이 있습니다. 이는 이미지 내 객체의 경계, 위치 등을 예측할 때 유리하며, 다양한 해상도의 입력 이미지에 대해 동일한 필터를 사용하여 연산을 수행할 수 있습니다.

1x1 Convolution의 유용성

1x1 Convolution은 높이와 너비를 그대로 유지하면서 채널 방향으로만 특징을 추출하는 독특한 방식입니다. 이 방식은 이미지의 크기와 상관없이 Conv Layer가 작동하게끔 도와줍니다. 실제로 1x1 Convolution은 여러 채널의 입력을 결합하는 데 주로 사용되며, 공간 정보는 그대로 유지하면서 채널 간의 상호작용을 유도합니다.

import torch
import torch.nn as nn

conv_layer = nn.Conv2d(input_channels, output_channels, kernel_size=1)

 

이처럼 Conv Layer는 kernel의 크기나 stride 등의 파라미터에 따라 유연하게 작동하며, 입력 데이터의 크기와 상관없이 사용이 가능합니다.

 

FC Layer의 입력 크기 의존성

FC Layer는 입력 데이터의 모든 픽셀을 연결하기 때문에, 입력 크기와 깊은 관계가 있습니다. 다음 코드에서 알 수 있듯이, height, width가 고정된 크기로 지정되어야만 작동합니다.

# FC Layer 예시
fc_layer = nn.Linear(input_channels * height * width, output_size)

 

마무리

  • FC Layer는 모든 픽셀 간 연결을 통해 종합적인 특징을 추출하지만, 위치 정보를 잃게 되며 입력 크기에 의존적입니다.
  • Conv Layer는 kernel을 사용하여 이미지 내 위치 정보를 보존하며, 다양한 크기의 입력을 처리할 수 있어 세그멘테이션 및 물체 검출과 같은 작업에 적합합니다.
  • 1x1 Convolution과 같은 기법을 통해 공간 정보를 유지하면서도 채널의 상호작용을 학습하는 것이 가능합니다.

이처럼 딥러닝 모델에서 FC Layer와 Conv Layer의 특성을 적절히 활용하여 작업에 맞는 효율적인 네트워크를 설계할 수 있습니다.

 
728x90