이미지 분류에 사용되던 CNN 구조를 픽셀 단위 예측이 가능하도록 변형한 네트워크.
네트워크 전체가 Convolution 연산으로만 구성되어 있다.
기존 CNN에서 사용되던 Fully Connected Layer(완전연결층)를 제거하고, 그 자리를 Convolution Layer로 대체한 구조이다.
이로 인해 FCN은 입력 이미지 크기에 제약 없이 출력이 공간 구조를 유지한 채 생성될 수 있다.
참고 : FCN은 이후 등장한 U-Net, DeepLab 등 모든 Segmentation 모델의 기반이 된다.
기존 CNN 분류 모델의 마지막 단계에 있는 Fully Connected Layer는 입력 이미지의 공간 정보를 모두 벡터 형태로 압축(flatten)하는데,
FCN은 이 레이어를 제거하고 이를 1×1 Convolution으로 대체한다.
Fully Connected Layer는 위치 정보를 버리는데,
1×1 Convolution은 각 위치에서 분류를 수행하는 것이다.
FCN은 고정 크기 입력을 요구하지 않는다.
모든 연산이 convolution이기 때문에, 임의 크기의 입력 이미지에 대해 동일한 구조로 추론 가능하다.
이미지 크기가 달라도 네트워크 구조를 바꿀 필요가 없다는 것이다.
FCN은 하나의 이미지에 대해 조밀한(dense) 예측, 즉 모든 위치에 대한 출력을 생성한다.
이미지 1장이 결과 1개 (Classification)가 아니라, 픽셀 수만큼 결과(FCN)가 나오는 것이다.
Pooling과 stride로 인해 줄어든 feature map 해상도를
Upsampling(Deconvolution / Transposed Convolution)으로 복원한다.
앞부분에서 이미지를 작게 만들고, 뒷부분에서 다시 크게 만들어서 원래 이미지 크기의 출력 생성하는 것이다.
FCN은 서로 다른 해상도의 feature map을 결합하여 저수준 위치 정보 + 고수준 의미 정보를 함께 활용한다.
깊은 층에서는 이게 뭔지를 보고, 얕은 층에서는 어디에 있는지를 보아 이 둘을 합쳐 더 정확한 분할 수행이 가능하다.
| 구분 | CNN 분류 모델 | FCN |
|---|---|---|
| 마지막 레이어 | Fully Connected | Convolution |
| 출력 형태 | 클래스 벡터 | 공간적 feature map |
| 입력 크기 | 고정 | 가변 |
| 공간 정보 | 소실 | 유지 |
| 목적 | 이미지 단위 분류 | 픽셀 단위 분류 |