Mask R-CNN & U-Net
1
생체기계연구실 박세훈
Mask R-CNN
2
Mask R-CNN
3
Faster R-CNN까지는 2-stage에 기초한
특히 2) Object detection을 위해 고안된 모델들
Mask R-CNN은
3) Image segmentation을 수행하기 위해 고안된 모델
Mask R-CNN
4
Faster R-CNN
+
Mask branch
FPN
RoI align
Mask R-CNN
=
Fast R-CNN
+
RPN
(region proposal network)
Faster R-CNN
=
Mask R-CNN
5
Faster R-CNN
+
Mask branch
FPN
(Feature pyramid network)
RoI align
Mask R-CNN
=
새롭게 mask branch 가 추가됨
2. RPN전에 FPN(feature pyramid network)가 추가됨
3. Image segmentation의 masking을 위해 RoI align이 RoI pooling을 대신하게 됨
Mask R-CNN
6
Mask R-CNN
7
(using bilinear interpolation)
Mask R-CNN: Resize Input image
8
<Bilinear interpolation 계산과정>
Mask R-CNN: Backbone-ResNet101
9
이를 극복하기 위해 ResNet 고안
ResNet: Skip connection을 이용한 residual learning을 통해
Layer가 깊어짐에 따른 gradient vanishing 문제를 해결
Mask R-CNN: Backbone-ResNet101
10
Mask R-CNN: Backbone-ResNet101
11
+
Mask R-CNN: Backbone-ResNet101
12
Mask R-CNN: FPN(Feature Pyramid Network)
13
backbone의 결과로 나온 1개의 feature map에서 RoI를 생성, classification 및 bbox regression을 진행
해당 feature map은 backbone 모델 최종 layer에서의 output, 이렇게 layer를 통과할수록 아주 중요한 feature만 남고 중간중간의 feature들은 모두 잃어버리게 됨
최종 layer에서 다양한 크기의 object를 검출해야 하므로 여러 scale 값으로 anchor를 생성
→ 비효율적
Mask R-CNN: FPN(Feature Pyramid Network)
14
마지막 layer의 feature map에서 점점 이전의 중간 feature map들을 더하면서 이전 정보까지 유지할 수 있도록 함
이렇게 함으로써 더 이상 여러 scale값으로 anchor를 생성할 필요 x, 모두 동일한 scale의 anchor를 생성
따라서 작은 feature map에서는 큰 anchor를 생성하여 큰 object를, 큰 feature map에서는 다소 작은 anchor를 생성하여 작은 object를 detect할 수 있도록 설계
마지막 layer에서의 feature map에서 이전 feature map을 더하는 것은 upsampling을 통해 이루어짐
Mask R-CNN: FPN(Feature Pyramid Network)
15
먼저 2배로 upsampling을 한 후 이전 layer의 feature map을 1x1 Fully convolution 연산을 통해 filter 개수를 똑같이 맞춰준 후 더함으로써 새로운 feature map 생성
결과적으로 ResNet을 통해 C1, C2, C3, C4, C5 feature map을 생성
C1은 사용하지 않고 C5부터 P5, P4, P3, P2를 생성
P5에서 maxpooling을 통해 P6를 추가로 생성
최종적으로 P2, P3, P4, P5, P6 이렇게 5개의 feature map이 생성
- P2~P5의 경우
RPN에 보내기전에 3x3 convolution연산을 거친 후 보냄
P2~P5는 upsampling과 이전 feature map을 더함으로써 feature data가 조금 망가졌을 수 있기에 3x3 연산을 한 번 더해주는 것
- P6의 경우
P5에서 max pooling을 한 결과이므로 3x3 연산을 하지 않고 RPN에 그대로 전달
Mask R-CNN: RPN
16
FPN을 통해 생성된 P2, P3, P4, P5, P6을 각각 RPN모델에 전달
Faster R-CNN과 달리 이제 각 feature map에서 1개 scale의 anchor를 생성
→ 각 pyramid feature map마다 scale 1개 x ratio 3개 = 3개의 anchor를 생성
RPN을 Faster R-CNN과 비교했을 때 생성하는 anchor 개수의 차이만 존재
Mask R-CNN: RPN
17
RPN을 통해 output으로 classification값, bbox regression값이 나옴
이때 bbox regression값은 delta값
아래의 그림에서의 t값들, 즉 delta값을 output으로 받게 됨
따라서 이 delta 값에 anchor정보를 연산해서 원래 이미지에 대응되는 anchor bounding
box 좌표값으로 바꿔주게 됨
Mask R-CNN: Non-max-suppression
18
NMS 전
NMS 후
→ FPN에서 이미 각기 다른 feature map크기를 갖고 있기에 모두 통일되게 정규 좌표계로 이동시키는 것.
이렇게 수천개의 anchor box가 생성되면 NMS알고리즘을 통해 anchor의 개수를 줄임
주위에 다른 anchor들은 모두 지우는 것
→ IoU가 해당 bbox와 0.7이 넘어가면 두 bbox는 동일 object를 detect한 것이라 간주,
score가 더 낮은 bbox는 지우는 식으로 동작
최종적으로 각 객체마다 score가 가장 큰 box만 남게 되고 나머지 box는 제거
Mask R-CNN: RoI align
19
RoI pooling → object detection을 위한 모델
정확한 위치 정보를 담는 것 중요 x
따라서 왼쪽의 그림과 같이 인접 픽셀들로 box를 이동시킨 후 pooling 진행
RoI가 소수점 좌표를 가지면 좌표를 반올림하는 방식으로 이동시킨 후 pooling 진행
Mask R-CNN: RoI align
20
RoI pooling → object detection을 위한 모델
정확한 위치 정보를 담는 것 중요 x
따라서 왼쪽의 그림과 같이 인접 픽셀들로 box를 이동시킨 후 pooling 진행
RoI가 소수점 좌표를 가지면 좌표를 반올림하는 방식으로 이동시킨 후 pooling 진행
문제점: input image의 위치정보가 왜곡
→ segmentation에서는 문제가 됨
Mask R-CNN: RoI align
21
따라서 이러한 문제를 해결하기 위해 Bilinear interpolation을 이용해서 위치정보를 담는 RoI align을 이용
Mask R-CNN: Mask branch
22
→ FC layer를 사용하여 (channels 1,1) vector로 변환
→ convolution을 사용하여 pixel-to-pixel 정보를 추출
Mask R-CNN: Mask branch
23
U-Net
24
U 자 모양으로 생긴 U-Net은 의료 이미지 특성상 적은 수의 데이터로도 정확한 Segmentation이 가능
U-Net이 개선한 점
Context : 서로 이웃한 이미지 픽셀 간의 관계
→ 이미지의 일부를 보고 전반적인 이미지의 context를 파악하는 맥락으로 보면 됨
Trade-off : 넓은 범위의 이미지를 한꺼번에 인식하면 전반적인 context를 파악하기에 용이,
그러나 localization을 제대로 수행하지 못해 어떤 픽셀이 어떤 레이블인지 세밀하게 인식 x
반대로 범위를 좁히면 세밀한 localization이 가능하지만 context 인식률 ↓
U-Net
25
U-Net의 아이디어
2. Contracting path에서는 이미지의 context를 포착
3. Expanding path에서는 feature map을 upsampling한 뒤, 이를 contracting path에서 포착한 (feature map의)context와 결합하여 localization의 정확도를 높임
→ 속도 향상
→ trade-off 해결
U-Net
26
U-Net의 구조
- 점진적으로 넓은 범위의 이미지 픽셀을 보며 의미정보(Context information)을 추출
- 의미정보를 픽셀 위치정보와 결합(localization)하여 각 픽셀마다 어떤 객체에 속하는지 구분
수축 경로에서 확장경로로 전환
U-Net: 수축 경로(Contracting Path)
27
수축 경로에서 아래와 같은 Downsampling 과정 반복하여 특징맵(Feature Map) 생성
→ 처음 input channel(1)을 64개로 증가시키는 부분을 제외하면
채널은 1 → 64 → 128 → 256 → 512 → 1024개로 Downsampling 진행할 때마다 증가
U-Net: 전환 구간(Bottle Neck)
28
수축 경로에서 확장 경로로 전환되는 구간
U-Net: 확장 경로(Expanding Path)
29
확장 경로에서 아래와 같은 Upsampling 과정 반복하여 특징맵(Feature Map) 생성
→ 여러 번 패딩이 없는 3x3 Convolution Layer를 지나면서 특징맵의 크기가 줄어들기 때문
U-Net: 학습 방법
30
본 논문에서 다양한 학습 장치들을 통해 모델의 성능을 향상시킴
큰 이미지를 겹치는 부분이 있도록 일정크기로 나누고 모델의 Input으로 활용
이미지의 경계(Border) 부분을 거울이 반사된 것처럼 확장하여 Input으로 활용
모델이 객체간 경계를 구분할 수 있도록 Weight Loss를 구성 및 학습
적은 데이터로 모델을 잘 학습할 수 있도록 데이터 증강 방법 활용
U-Net: Overlap-tile strategy
31
U-Net: Mirroring Extrapolate
32
U-Net: Weight Loss
33
U-Net: Weight Loss
34
U-Net: Weight Loss
35
U-Net: Data Augmentation
36
Data Augmentation
1. Preprocessing & augmentation을 하면 대부분 성능이 좋아진다.
2. 원본에 추가되는 개념이니 성능이 떨어지지 않는다.
3. 쉽고 패턴이 정해져 있다.
1. 좌우반전을 해준다.
2. 이미지를 잘라준다.
3. 밝기 조절
U-Net: Data Augmentation
37
Data Augmentation
1. Elastic Deformation
- 적은 수의 이미지를 가지고 효과적으로 학습하기 위해 이 방식을 사용했다고 함
- 티슈 조직 등의 실질적인 변형과 유사하다고 함
2. Weighted Cross Entropy + Data Augmentation
- 많은 cell을 Segmentation 해야 하는 문제에서의 도전 과제는 같은 클래스가 서로 인접해 있는
케이스
U-Net: Data Augmentation
38
U-Net 정리
39
여러 Biomedical Image Segmentation문제에서 우수한 성능을 보여줌
Thank You!
40