일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 삼성코테
- 삼성역테
- bfs문제
- 알고리즘
- 코테
- dfs
- 컴퓨팅사고
- 코테 문제
- DP문제
- 임베디드 딥러닝
- dfs문제
- BFS
- tflite
- 코딩테스트
- 포스코 AI교육
- 그리디
- 영상처리
- 초소형머신러닝
- sort
- 삼성코딩테스트
- 다이나믹프로그래밍
- 포스코 ai 교육
- MCU 딥러닝
- 포스코 교육
- tinyml
- 자료구조
- 딥러닝
- 삼성역량테스트
- DP
- TensorFlow Lite
- Today
- Total
코딩뚠뚠
[머신러닝 공부] 딥러닝/FCN (Fully Convolutional Networks) 본문
이번 포스팅에서는 Semantic Segmentation 문제를 위해 제안된 딥러닝모델인
Fully Convolutional Networks 에 대해 공부해보았다.
이 Network 는 U-Net에의 기본개념이기도 하다.
Semantic Segmentation 이란
입력이미지에서 물체를 Detect 하여 bounding box를 그리는 것 뿐 아닌 픽셀단위로 물체를 분할하며 예측하는 것이다.
이와 같이 말이다.
FCN은 Semantic Segmentation 을 위해 기존 이미지 분류에서 쓰인 CNN기반의 모델을 목적에 맞춰 변형시킨 것이다.
어떤 모델을 변형시킨걸까 ? -> VGG16
VGG16으로부터 Transfer Learning 을 사용한다.
Classification model -> Semantic segmentation model 의 과정
- Convolutionalization
- Deconvolution (Upsampling)
- Skip architecture
1. Convolutionalization
CNN 기반의 Image classification 모델들은 출력에서 이미지를 분류하기 위해 출력층이 Fully-connected layer 로 구성되어 있다.
하지만 이미지에서 픽셀 위치를 찾는 Semantic Segmentation에서는 FC의 단점이 드러난다
- convolution 연산에서는 위치정보가 유지되지만 FC를 실행하는 순간 위치정보가 사라진다는 점
- 마지막 Dense layer가 고정되어있기 때문에 가중치 유지를 위해 결국엔 Input Size도 동일해야 된다는 점
따라서 FCN(Fully convolution networks)에서는 FC(Fully connected layer)를 모두 Convolution layer로 대체하는 방법을 내세웠다.
= Dense layer 를 Conv layer로 대체한다
이렇게 될 경우 output 은 이미지의 위치정보를 내포하게 된다.
그러나 Input 에 비해 너무 거친 위치정보를 내포하게 된다. (정보는 있어도 Input에 대비하면 coarse하다)
2. Deconvolution (Upsampling)
따라서 Coarse한 feature map을 원본이미지 픽셀과 가까운 Dense map으로 변환해 주어야 한다.
아래의 방법을 이용한다.
- Interpolation
- Deconvolution
- Unpooling
- Shift and stitch
애초에 pooling 을 사용하지 않거나 stride를 줄이면 Feature map 크기가 작아지는 것을 방지할 수 있지만 이는
- 파라미터 수를 감소시키지 못한다 -> 학습시간 증가
- 필터가 세밀한 부분을 볼수는 있다 -> but Receptive Field가 줄어들어 이미지 컨텍스트를 놓친다.
위와 같은 문제를 발생시킬 수 있다.
FCN에서 사용한 방법 (Coarse -> Dense 위해)
1. Bilinear Interpolation
- Linear interpolation을 2차원으로 확장시킨 개념으로 보간하여 확장시킨 것이다. 늘렸을 때 Feature map 의 빈 영역 추정이 가능하다.
2. Backwards convolution
- Convolution 연산을 반대로 실행하여 Up-sampling 효과를 본다.
하지만 여전히 Dense map의 정보는 거칠다.
거친 Segmentation 결과가 GT에 가깝게 되려면 또 어떤 과정을 거쳐야 할까?
3. Skip architecture
Coarse(깊은 층에 존재) 레이어의 Semantic 정보와 fine (얕은 층) 층의 appearance 정보를 결합한 architecture
즉 앞에서 구한 Feature Map (=Coarse한, Dense) 에 얕은층 (=보다 위치정보가 많이 살아있는) 의 정보를 결합하여 (Upsampling) Segmentation 품질을 개선하였다.
- FCN-32s는 input image의 1/32의 크기에서 32배만큼 upsampling 한 결과이고
- FCN-16s는 pool5의 결과를 2배 upsampling 한 것과 pool4의 결과를 합치고 그 결과를 16배 upsampling 한 것
- FCN-8s는 FCN-16s의 중간 결과를 2배 upsampling 한 결과와 pool3에서의 결과를 합쳐 8배 upsampling 한 것
주로 FCN-8s의 결과만을 사용한다. (그림과같이 가장 정확하기 때문)
추후 U-Net의 Architecture를 보면 이와 같은 Skip Architecture 방법을 한눈에 볼 수 있다.
결과적으로
FCN은 이미지 분류모델을 가져와 Semantic Segmentation 에 맞게 Architecture를 수정해 준 것이다.
이를 Transfer Learning 해주어 목적에 맞게 사용할 수 있다.
- Dense layer -> Conv layer = Coarse map
- Coarse map -> Up-sampling = size up 됨 (위치파악 쉽게하기위해)
- Skip architecture 를 사용해 얕은 층이 가지고 있는 위치정보와 깊은 층이 가지고 있는 의미정보를 결합
References
'공부 > ML&DL' 카테고리의 다른 글
[머신러닝 공부] 딥러닝/SPP Net (object detection) (0) | 2021.04.15 |
---|---|
[머신러닝 공부] 딥러닝/RCNN (object detection) (0) | 2021.04.14 |
[머신러닝 공부] KNN의 이해 (0) | 2021.04.04 |
[머신러닝 공부] 딥러닝/U-Net (0) | 2021.04.03 |
[머신러닝 공부] 딥러닝/GNN (Graph Neural Network) (0) | 2021.04.03 |