분석시각화 대회 코드 공유 게시물은
내용 확인 후
좋아요(투표) 가능합니다.
Semantic Segmentation을 위한 U-Net 모델 [2탄.모델 구조]
안녕하세요.
데이콘에서 활동하고 있는 '동화책'입니다. 📚🤓
'의미론적 분할(Semantic Segmentation)을 위한 U-Net 모델'이라는 제목의 시리즈를 게시하고 있는데요,
이번에는 [2탄. 모델 구조] 입니다.
가볍게 읽어보시고 궁금한 사항 및 피드백 있으시면 편하게 댓글 달아주세요!
* 본 포스팅은 데이콘 서포터즈 "데이크루 1기" 활동의 일환입니다.
INDEX
1탄. 과제 정의 및 배경 [링크]
2탄. 모델 구조
3탄. 학습 과정 특이점 [링크]
4탄. 모델 구현 [링크]
U-Net 모델 구조를 보기 전에 더 이전에 나온 FCN(Fully Convolutional Network)모델을 소개하면 좋을 것 같아요.
FCN은 2015년에 나온 논문 〈Fully Convolutional Networks for Semantic Segmentation〉에 소개된 모델로,
이미지 분류(classification)을 수행하던 모델 VGG 16 구조를 바탕으로 픽셀 단위 분류, 즉 이미지 분할 문제를 수행할 수 있도록 변형한 모델입니다.
FCN은 인공 신경망 네트워크가 이미지 분류를 넘어 조금 더 고차원의 이미지 분할을 수행할 수 있다는 것을 처음으로 보여준 모델이죠.
이미지 분류의 대표적인 대회인 ImageNet Large Scale Visual Recognition Challenge(ILSVRC)에서 2014년 VGG모델이 우승을 하자 이 구조를 분할 문제에 끌고와 적용하기 시작했습니다. 하지만 VGG 16 같은 기존 분류 모델이 분할 문제에 사용되는 것에 있어서 두 가지 문제점을 제시합니다.
① 완전 연결 레이어(Fully Connected Layer) 거치면서 객체의 위치 및 공간 정보가 사라진다.
② 완전 연결 레이어는 고정된 크기의 이미지만 입력할 수 있다.
VGG 16 모델에서는 5번의 Conv + Pooling 레이어를 거쳐 나온 피처맵을 완전 연결 레이어에 연결함으로써 분류를 위해 각 클래스별 스코어를 산출하는데, 이 때 위치 및 공간 정보를 손실한다고 지적했습니다. 분할을 위해서는 객체의 정확한 위치와 뚜렷한 경계의 정보가 필수적이었습니다. 그래서 네트워크 마지막 단의 FC 레이어를 제거하고 Conv 레이어로 대체하는 것을 제안합니다.
Conv 레이어를 통과한 출력을 히트맵으로 그려보니, 피처맵 상에 활성화되는 지역이 이미지에 객체가 존재하는 영역과 일치한다는 것을 알아냅니다. 위치 정보를 보존할 수 있었던 것이죠.
또한 지정된 크기의 이미지만 입력할 수 있었던 FC 레이어와 달리 Conv 레이어는 필터만 학습하면 되었기 때문에 다양한 크기의 입력을 받아낼 수 있다는 장점이 있었습니다.
그림 1. VGG 16 for Segmentation
문제는 네트워크의 Pooling을 거치면서 ① 해상도가 떨어지고, ② 객체의 경계가 너무 거칠어(coarse)진다는 것이었습니다. (그림 〈2〉의 FCN-32s)
픽셀 단위의 분류를 하기 위해서는 줄어든 피처맵의 크기를 원본 이미지의 크기만큼 복원해야 했고 경계 정보를 살려서 정확한 예측(Dense Prediction)이 가능하도록 해야했습니다. 아래 각각의 문제를 해결한 방법을 설명했습니다.
① Upsampling
'이중선형보간법(bilinear interpolation)'이 가장 떠올리기 쉽고 간단한 Upsampling 방식입니다. 간단하게 말하자면 인접한 픽셀 값 사이의 평균값을 중간 픽셀로 채워넣는 방식입니다. 하지만 해당 논문에서는 이중선형보간법보다 더 빠르고 효과적인 네트워크 방식을 사용합니다.
Convolution과 동일하게 Upsampling 시키는 필터의 변수를 학습시키는 Backward Convolution 방식을 적용합니다. 이 방식을 사용하면 학습된 변수 값에 따라서 bilinear interpolation 혹은 deconvolution의 역할을 유연하게 수행한다는 장점이 있지만, 반면에 학습된 변수에 깊게 의존한다는 단점이 있습니다.
② Skip Connection
네트워크 앞단에서 학습한 경계 정보가 pooling을 거치면서 사라지기 때문에 앞단의 피처맵을 upsampling시에 추가하여 경계 정보를 보존하는 방법을 고안해냅니다. 그림 〈2〉에서는 FCN-32s → FCN-16s → FCN-8s로 갈수록 객체의 경계가 뚜렷해지는데 이는 각각 원본 이미지의 1/32, 1/16, 1/8 크기로 압축된 피처맵을 upsampling 시에 더하여 경계 정보를 살려낸 것을 의미합니다. 원본 이미지에서 크기가 작아질수록 (1/n에서 n이 커질수록) 경계 정보를 잃어버리기 때문에 n이 작을수록 더 뚜렷한 경계를 복원해냄을 알 수 있습니다.
그림 2. Skip Connection
그림 〈3〉은 앞서 말씀드린 과정을 잘 시각화하고 있습니다. 이해에 도움이 되셨으면 좋겠네요.
그림 3. FCN [출처:ResearchGate]
U-Net은 FCN 구조와 상당히 유사합니다. U-Net은 이미지를 압축하는 수축 경로(contracting path)와 원본 이미지의 크기로 복원하는 확장경로(expansive path)로 구성되는데요, 각 모듈을 인코더(Encoder), 디코더(Decoder)라고 부르고 그림 〈4〉처럼 모델의 구조가 U자 형태를 띄고 있다고 하여 U-Net으로 불립니다. '인코더','디코더'라는 단어는 네트워크 구조를 설명할 때 정말 자주 쓰이는데요 앞서 배운 FCN에서도 적용할 수 있습니다.
그림 4. U-Net
FCN과 공통점은 원본 이미지 크기로 복원을 위한 Upsampling을 수행하고 그 과정에서 경계 정보를 살려내는 Skip Connection을 거친다는 점입니다.
반면에 차이점은 deconvolution으로 upsampling을 수행하는 과정 사이에 두번의 3x3 Conv 과정이 껴있고, 학습 과정에서 over-tile과 데이터 증폭(data agumentation) 을 사용한다는 점입니다.
오늘은 FCN 구조를 바탕으로 U-Net 구조에 대해서 정리해보았는데요.
다음 게시글에서 over-tile과 데이터 증폭 방식을 포함한 학습 과정에서의 특이점에 대해 설명을 해보도록 하겠습니다.
긴 글 읽어주셔서 감사합니다.
참고자료
읽어주셔서 감사합니다 ☺️
오 정말로 U-Net 구조가 U모양으로 되어있군요..! 처음 알았습니다!
Cycle GAN의 Generator가 U-Net 구조라기에 관련 자료를 찾다가, 읽게되었습니다.
알기 쉽게 잘 정리해주셔서 공부에 도움이 되었습니다.
좋은 자료 감사드립니다 :)
데이콘(주) | 대표 김국진 | 699-81-01021
통신판매업 신고번호: 제 2021-서울영등포-1704호
서울특별시 영등포구 은행로 3 익스콘벤처타워 901호
이메일 dacon@dacon.io | 전화번호: 070-4102-0545
Copyright ⓒ DACON Inc. All rights reserved
FCN 구조만 알고 있었는데 U-Net 구조가 U모양으로 되어있다는게 매우 신기하네요 ! 좋은 정보 감사합니다.