-
[자료 읽기] Image Segmentation (이미지 분할)자료 읽기 2022. 3. 10. 15:04
출처 : https://wikidocs.net/142644
3. Image Segmentation (이미지 분할)
(1) 이미지 분할 아이디어
1) 이미지 분할
- 객체검출(Object detection) : 바운딩 박스(Bounding box)로 객체 검출
- 이미지 분할(Image segmentation) : 픽셀의 분류(Classification)- 이미지 분할 목표 : 네트워크가 입력 이미지 안의 모든 픽셀을 (지정된 개수의)클래스로 분류
2) 이미지 분할 종류
- Semantic Segmentation : 각 Pixel이 어떤 클래스인지 구분하는 문제
- Instance Segmentation : 같은 사물안에서 서로 다른 객체(Instacne)까지 구분하는 문제- Segmentation map : 이미지 분할 네트워크의 출력값, 각 pixel이 N개의 클래스 중 어떤 클래스에 속하는지
- argmax로 처리한 Segmentation map
3) 이미지 분할 네트워크의 기본 구조 : 엔코더 & 디코더
- 엔코더 : 입력 이미지의 W, H를 줄이고 체널수를 늘려 피처의 개수를 증가
- 디코더 : W,H를 입력이미지의 사이즈로 회복, 체널수는 클래스의 사이로 맞춰 Segmentation map을 생성
(2) 이미지 분할 모델 이해를 위한 사전지식
1) Down-sampling
- 정의 : 인코딩할때 data의 개수를 줄이는 처리과정
1.1) Pooling
- 정의 : 특정한 규칙(Max, Average)에 의해서 Kernel 내에서 값을 만들어 내거나 추출하는 방법
1.2) Dilated (Atrous) convolution
- 구조 : 일반적인 convolution filter 사이에 빈 공간을 넣어서 구멍이 뚫려 있는 듯한 구조
- Semantic Segmentation에서 높은 성능을 내기 위해서는 CNN의 마지막 feature map에 존재하는 한 픽셀이 입력값에서 어느 크기의 영역에서 커버하는지를 결정하는 receptive field가 얼마나 큰지가 중요
1.3) Depthwise convolution
- 각 channel 마다 필터를 적용하여 spatial feature를 추출
- input channel 수 = output channel 수
- 기존 convolution과 Depthwise convolution를 비교
1.4) Depthwise separable convolution
- 구조 : Depthwise convolution 뒤에 1x 1 convolution을 연결한 구조
- 기존 Convolution 필터가 Spatial dimension과 Channel dimension을 동시에 처리 하던 것을 따로 분리시켜 각각 처리하는 방법으로 해석
- 기존 Convolution에 비해 parameter의 수와 연산량이 훨씬 적다
2) Up-sampling
- 정의 : 디코딩시 복원하기 위해서 data의 크기를 늘리는 처리 과정
2.1) Unpooling
- Maxpooling을 거꾸로 재현
- Nearest Neighbor Unpooling : 주변 픽셀들을 동일한 값으로 채우는 방식
- Bed of NailsUnpooling : 주변 픽셀들을 0으로 채워주는 방식
2.2) Max Unpooling
- Max pooling할때의 선택된 값들의 위치를 기억해 원래 자료의 동일한 위치에 Max값을 위치시켜 Unpooling
2.3) Bilinear Interpolation
2.4) Deconvolution
- convolution의 역연산인 역행렬
2.5) Transposed Convolution (Backward Strided Convolution)
(3) 이미지 분할 모델
1) FCN
- 모델 : CNN 기반 모델(AlexNet, VGG16, GoogLeNet)을 Semantic Segmentation Task를 수행할 수 있도록 변형시킨 모델
- 구현 : 이미지 분류 문제를 먼저 트레이닝 시킨 후 모델을 튜닝해 전이학습
1.1) 네트워크 핵심 아이디어
- 기존 이미지 분류에서 쓰인 네트워크(Pretrain)로 Feature를 추출하고, FC 레이어 대신 1X1 Conv과 Up-sampling(Transpose Convolution)로 변경하여(Fine-Tuning) 입력이미지와 같은 사이즈 회복을 하도록 네트워크를 구성
1.2) 네트워크 구조
- Convolution Layer를 통해 Feature 추출
- 1x1 Convolution Layer를 이용해 피처맵의 체널수를 데이터셋 객체의 개수와 동일하게 변경 (Class Presence Heat Map 추출)
- 낮은 해상도의 Heat Map을 Upsampling(=Transposed Convolution) 한 뒤, 입력 이미지와 같은 크기의 Map 생성
- 최종 피처 맵과 라벨 피처맵의 차이를 이용하여 네트워크 학습
1.2.1) Up-sampling by Transposed convolution
1.2.2) Skip architecture
1.2.3) FCN 확장 모델 (FCN-32s, FCN-16s, FCN-8s)
1.3) 네트워크 트레이닝
- 손실함수 : 모든 픽셀의 크로스 엔트로피를 구하고 이를 모두 더하여 최종적으로 손실를 계산
1.4) 네트워크 장단점 및 시사점
1.4.1) Skip architecture 아이디어
1.4.2) 이미지 분류 네트워크를 이미지 분할 네트워크에 적용
1.4.3) FC 레이어를 삭제하여 이미지 분할을 구현 가능하도록 만들었습니다.
2) SegNet
- 픽셀단위의 정교한 segmentation + 실시간으로 빠른 계산
2.1) 네트워크 구조
2.1.1) 인코더 네트워크
- VGG16의 구조에서 FC layer를 뺀 13개의 layer를 사용
2.1.2) 디코더 네트워크
- 인코더의 정반대 구조
- 인코더의 전체 feature map을 저장하지 않는 대신 max-pooling indices(위치정보)만 저장해두었다가 Max unpooling에 사용
2.1.3) Softmax classifier
2.2) SegNet의 성능
2.2.1) Cam Vid dataset
2.2.2) SUN RGB-D dataset
3) U-Net
3.1) 네트워크 핵심 아이디어
-
'자료 읽기' 카테고리의 다른 글
[자료 읽기] (2022) How does unlabeled data improve generalization in self-training? (0) 2022.03.15 [자료 읽기] 딥러닝논문리뷰 PointNet (0) 2022.03.15 [자료 읽기] (2020) 비대면 시대를 위한 물류로봇 기술 연구 동향 (0) 2022.03.14 [자료 읽기] Object detection(객체 검출) (0) 2022.03.14 빈피킹(Bin picking) vs 피스피킹(Piece picking) (0) 2022.03.11