1 of 40

Mask R-CNN & U-Net

1

생체기계연구실 박세훈

2 of 40

Mask R-CNN

  • 컴퓨터 비전의 주요 과제 3가지

  1. Classification
  2. Object detection
  3. Image segmentation

2

3 of 40

Mask R-CNN

  • 컴퓨터 비전의 주요 과제 3가지

  1. Classification
  2. Object detection

  • Image segmentation

3

Faster R-CNN까지는 2-stage에 기초한

특히 2) Object detection을 위해 고안된 모델들

Mask R-CNN은

3) Image segmentation을 수행하기 위해 고안된 모델

4 of 40

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

=

5 of 40

Mask R-CNN

5

Faster R-CNN

+

Mask branch

FPN

(Feature pyramid network)

RoI align

Mask R-CNN

=

  1. Fast R-CNN의 Classification, localization(bounding box regression) branch에

새롭게 mask branch 가 추가됨

2. RPN전에 FPN(feature pyramid network)가 추가됨

3. Image segmentation의 masking을 위해 RoI align이 RoI pooling을 대신하게 됨

6 of 40

Mask R-CNN

6

7 of 40

Mask R-CNN

7

  1. 800~1024 사이즈로 이미지를 resize

(using bilinear interpolation)

  1. Backbone network의 인풋으로 들어가기 위해 1024 x 1024의 인풋사이즈로 맞춤 (using padding)

  • ResNet-101을 통해 각 layer(stage)에서 feature map(C1, C2, C3, C4, C5)를 생성

  • FPN을 통해 이전에 생성된 feature map에서 P2, P3, P4, P5, P6 feature map을 생성

  • 최종 생성된 feature map에 각각 RPN을 적용하여 classification, bbox regression output값을 도출

  • Output으로 얻은 bbox regression값을 원래 이미지로 projection시켜 anchor box 생성

  • Non-max-suppression을 통해 생성된 anchor box 중 score가 가장 높은 anchor box를 제외하고 모두 삭제

  • 각각 크기가 서로 다른 anchor box들을 RoI align을 통해 size 조정

  • Fast R-CNN에서의 classification, bbox regression branch와 더불어 mask branch에 anchor box 값을 통과

8 of 40

Mask R-CNN: Resize Input image

8

  • 이미지 input size가 800~1024일 때 성능이 좋음
  • Bilinear interpolation을 사용하여 resize
  • Bilinear interpolation은 여러 interpolation 기법 중 하나
  • 2 x 2의 이미지를 왼쪽 그림과 같이 4 x 4로 Upsampling을 한다면 2 x 2에 있던 pixel value가 각각 P1, P2, P3, P4로 대응
  • 이때 총 16개 중 4개의 pixel만 값이 대응되고 나머지 12개는 값이 아직 채워지지 않게 됨
  • 이를 bilinear interpolation으로 값을 채워주게 됨
  • 이렇게 기존의 image를 800~1024 사이로 resize해준 후 네트워크의 input size인 1024 x 1024로 맞추기 위해 나머지 값들은 zero padding으로 값을 채워 줌

<Bilinear interpolation 계산과정>

  • 일반적으로 두 지점 p1, p2에서의 데이터 값이 각각 f(p1), f(p2)일 때, p1, p2 사이의 임의의 지점 p에서의 데이터 값 f(p)는 다음과 같이 계산 할 수 있음

9 of 40

Mask R-CNN: Backbone-ResNet101

9

  • 이전의 연구들로 모델의 layer가 너무 깊어질수록 오히려 성능이 떨어지는 현상이 생김을 밝힘
  • 이는 gradient vanishing/exploding 문제 때문에 학습이 잘 이루어지지 않기 때문
  • Gradient vanishing이란 layer가 깊어질수록 미분을 점점 많이 하기 때문에 backpropagation을 해도 앞의 layer일수록 미분값이 작아져 그만큼 output에 영향을 끼치는 weight 정도가 작아지는 것
  • 이는 overfitting과는 다른 문제, overfitting은 학습 데이터에 완벽하게 fitting시킨 탓에 테스트 성능에서는 안 좋은 결과를 보임을 뜻하고 위와 같은 문제는 Degradation 문제로 training data에도 학습이 되지 않음을 뜻함

이를 극복하기 위해 ResNet 고안

ResNet: Skip connection을 이용한 residual learning을 통해

Layer가 깊어짐에 따른 gradient vanishing 문제를 해결

10 of 40

Mask R-CNN: Backbone-ResNet101

10

11 of 40

Mask R-CNN: Backbone-ResNet101

11

+

12 of 40

Mask R-CNN: Backbone-ResNet101

12

13 of 40

Mask R-CNN: FPN(Feature Pyramid Network)

13

  • 이전의 Faster R-CNN에서의 한계

backbone의 결과로 나온 1개의 feature map에서 RoI를 생성, classification 및 bbox regression을 진행

해당 feature map은 backbone 모델 최종 layer에서의 output, 이렇게 layer를 통과할수록 아주 중요한 feature만 남고 중간중간의 feature들은 모두 잃어버리게 됨

최종 layer에서 다양한 크기의 object를 검출해야 하므로 여러 scale 값으로 anchor를 생성

비효율적

  • 이를 극복하기 위한 방법 = FPN

14 of 40

Mask R-CNN: FPN(Feature Pyramid Network)

14

  • FPN 작동과정

마지막 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을 통해 이루어짐

15 of 40

Mask R-CNN: FPN(Feature Pyramid Network)

15

  • FPN 작동과정

먼저 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에 그대로 전달

16 of 40

Mask R-CNN: RPN

16

  • RPN 작동과정

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 개수의 차이만 존재

17 of 40

Mask R-CNN: RPN

17

  • RPN 작동과정

RPN을 통해 output으로 classification값, bbox regression값이 나옴

이때 bbox regression값은 delta값

아래의 그림에서의 t값들, 즉 delta값을 output으로 받게 됨

따라서 이 delta 값에 anchor정보를 연산해서 원래 이미지에 대응되는 anchor bounding

box 좌표값으로 바꿔주게 됨

18 of 40

Mask R-CNN: Non-max-suppression

18

NMS 전

NMS 후

  • 원래 이미지에 anchor좌표를 대응시킨 후, 각각 normalized coordinate로 대응시킴

→ FPN에서 이미 각기 다른 feature map크기를 갖고 있기에 모두 통일되게 정규 좌표계로 이동시키는 것.

이렇게 수천개의 anchor box가 생성되면 NMS알고리즘을 통해 anchor의 개수를 줄임

  • 각 object마다 대응되는 anchor가 수십 개 존재, 가장 classification score가 높은 anchor를 제외하고

주위에 다른 anchor들은 모두 지우는 것

  • NMS알고리즘: anchor bbox들을 score순 정렬 후, score가 높은 bbox부터 다른 bbox와 IoU를 계산

IoU가 해당 bbox와 0.7이 넘어가면 두 bbox는 동일 object를 detect한 것이라 간주,

score가 더 낮은 bbox는 지우는 식으로 동작

최종적으로 각 객체마다 score가 가장 큰 box만 남게 되고 나머지 box는 제거

19 of 40

Mask R-CNN: RoI align

19

  • 기존의 Faster R-CNN에서의 RoI pooling

RoI pooling → object detection을 위한 모델

정확한 위치 정보를 담는 것 중요 x

따라서 왼쪽의 그림과 같이 인접 픽셀들로 box를 이동시킨 후 pooling 진행

RoI가 소수점 좌표를 가지면 좌표를 반올림하는 방식으로 이동시킨 후 pooling 진행

20 of 40

Mask R-CNN: RoI align

20

  • 기존의 Faster R-CNN에서의 RoI pooling

RoI pooling → object detection을 위한 모델

정확한 위치 정보를 담는 것 중요 x

따라서 왼쪽의 그림과 같이 인접 픽셀들로 box를 이동시킨 후 pooling 진행

RoI가 소수점 좌표를 가지면 좌표를 반올림하는 방식으로 이동시킨 후 pooling 진행

문제점: input image의 위치정보가 왜곡

→ segmentation에서는 문제가 됨

21 of 40

Mask R-CNN: RoI align

21

  • Mask R-CNN에서의 RoI align

따라서 이러한 문제를 해결하기 위해 Bilinear interpolation을 이용해서 위치정보를 담는 RoI align을 이용

22 of 40

Mask R-CNN: Mask branch

22

  • Class, box branch는 공간정보가 필요 없음

→ FC layer를 사용하여 (channels 1,1) vector로 변환

  • Mask branch는 공간정보를 추출 해야함

→ convolution을 사용하여 pixel-to-pixel 정보를 추출

23 of 40

Mask R-CNN: Mask branch

23

  • Mask branch는 FCN을 사용하여 각 RoI에 대해 m x m 크기의 K개 mask를 예측
  • K = class 수
  • FC layer를 사용하지 않는 이유 : 공간정보를 활용하기 위함

24 of 40

U-Net

24

U 자 모양으로 생긴 U-Net은 의료 이미지 특성상 적은 수의 데이터로도 정확한 Segmentation이 가능

U-Net이 개선한 점

  1. 속도를 높임
  2. Context 인식과 localization간의 trade-off 해결

Context : 서로 이웃한 이미지 픽셀 간의 관계

→ 이미지의 일부를 보고 전반적인 이미지의 context를 파악하는 맥락으로 보면 됨

Trade-off : 넓은 범위의 이미지를 한꺼번에 인식하면 전반적인 context를 파악하기에 용이,

그러나 localization을 제대로 수행하지 못해 어떤 픽셀이 어떤 레이블인지 세밀하게 인식 x

반대로 범위를 좁히면 세밀한 localization이 가능하지만 context 인식률 ↓

25 of 40

U-Net

25

U-Net의 아이디어

  1. Sliding window가 아닌 patch 탐색 방식 사용

2. Contracting path에서는 이미지의 context를 포착

3. Expanding path에서는 feature map을 upsampling한 뒤, 이를 contracting path에서 포착한 (feature map의)context와 결합하여 localization의 정확도를 높임

속도 향상

trade-off 해결

26 of 40

U-Net

26

U-Net의 구조

  1. 수축 경로(Contracting Path)

- 점진적으로 넓은 범위의 이미지 픽셀을 보며 의미정보(Context information)을 추출

  1. 확장 경로(Expanding Path)

- 의미정보를 픽셀 위치정보와 결합(localization)하여 각 픽셀마다 어떤 객체에 속하는지 구분

  1. 전환 구간(Bottle Neck)

수축 경로에서 확장경로로 전환

27 of 40

U-Net: 수축 경로(Contracting Path)

27

수축 경로에서 아래와 같은 Downsampling 과정 반복하여 특징맵(Feature Map) 생성

  • 수축 경로는 주변 픽셀들을 참조하는 범위를 넓혀가며 이미지로부터 Contextual 정보를 추출하는 역할 수행
  • 3x3 convolution 수행할 때 패딩을 하지 않으므로, 특징맵(Feature Map)의 크기 감소
  • Downsampling 할 때마다 채널(Channel)의 수를 2배 증가시키면서 진행

→ 처음 input channel(1)을 64개로 증가시키는 부분을 제외하면

채널은 1 → 64 → 128 → 256 → 512 → 1024개로 Downsampling 진행할 때마다 증가

28 of 40

U-Net: 전환 구간(Bottle Neck)

28

수축 경로에서 확장 경로로 전환되는 구간

  • 마지막에 적용된 Dropout layer는 모델을 일반화하고 노이즈를 견고하게(Robust) 만드는 장치

29 of 40

U-Net: 확장 경로(Expanding Path)

29

확장 경로에서 아래와 같은 Upsampling 과정 반복하여 특징맵(Feature Map) 생성

  • 확장 경로는 2)Skip Connection을 통해 수축 경로에서 생성된 Contextual 정보와 위치정보를 결합하는 역할 수행
  • 동일한 Level에서 수축 경로의 특징맵과 확장 경로의 특징맵의 크기가 다른 이유

→ 여러 번 패딩이 없는 3x3 Convolution Layer를 지나면서 특징맵의 크기가 줄어들기 때문

  • 확장경로의 마지막에 Class의 개수만큼 필터를 갖고 있는 1x1 Convolution Layer가 존재
  • 1x1 Convolution Layer를 통과한 후 각 픽셀이 어떤 Class에 해당하는지에 대한 정보를 나타내는 3차원(Width x Height x class) 벡터 생성

30 of 40

U-Net: 학습 방법

30

본 논문에서 다양한 학습 장치들을 통해 모델의 성능을 향상시킴

  • Overlap-tile strategy

큰 이미지를 겹치는 부분이 있도록 일정크기로 나누고 모델의 Input으로 활용

  • Mirroring Extrapolate

이미지의 경계(Border) 부분을 거울이 반사된 것처럼 확장하여 Input으로 활용

  • Weight Loss

모델이 객체간 경계를 구분할 수 있도록 Weight Loss를 구성 및 학습

  • Data Augmentation

적은 데이터로 모델을 잘 학습할 수 있도록 데이터 증강 방법 활용

31 of 40

U-Net: Overlap-tile strategy

31

  • 이미지의 크기가 큰 경우 이미지를 자른 후 각 이미지에 해당하는 Segmentation을 진행 해야함
  • U-Net은 Input과 Output의 이미지 크기가 다름.
  • 아래 그림과 같이 파란색 영역을 Input으로 넣으면 노란색 영역이 Output으로 추출됨. 동일하게 초록색 영역을 Segmentation하기 위해서는 빨간색 영역을 모델의 Input으로 사용해야 함.
  • 즉 겹치는 부분이 존재하도록 이미지를 자르고 Segmentation하기 때문에 Overlap-tile strategy 라고 논문에서 지칭

32 of 40

U-Net: Mirroring Extrapolate

32

  • 이미지의 경계부분을 예측할 때, Padding을 넣어 활용하는 경우가 일반적
  • 본 논문에서는 이미지 경계에 위치한 이미지를 복사하고 좌우반전을 통해 Mirror 이미지를 생성한 후 원본 이미지를 붙여 Input으로 사용

33 of 40

U-Net: Weight Loss

33

  • 모델은 아래 그림처럼 작은 경계를 분리할 수 있도록 학습되어야 함
  • 따라서 논문에서는 각 픽셀이 경계와 얼마나 가까운지에 따른 Weight-Map에 비례하게 증가 시킴으로써 경계를 잘 학습하도록 설계

34 of 40

U-Net: Weight Loss

34

 

35 of 40

U-Net: Weight Loss

35

 

36 of 40

U-Net: Data Augmentation

36

Data Augmentation

  • 데이터의 양이 적기 때문에 데이터의 증강을 통해 모델이 Noise에 강건하도록 학습시킴
  • Data Augmentation이란 원래의 데이터를 부풀려서 더 좋은 성능을 만든다는 뜻으로써, 대표적인 케이스가 VGG Model에서 많이 사용되고 벤치마킹 함
  • Data Augmentation이 중요한 이유

1. Preprocessing & augmentation을 하면 대부분 성능이 좋아진다.

2. 원본에 추가되는 개념이니 성능이 떨어지지 않는다.

3. 쉽고 패턴이 정해져 있다.

  • 기본적인 예

1. 좌우반전을 해준다.

2. 이미지를 잘라준다.

3. 밝기 조절

37 of 40

U-Net: Data Augmentation

37

Data Augmentation

  • Data Augmentation에서 중요하게 사용된 것은 크게 2가지로 파악됨

1. Elastic Deformation

- 적은 수의 이미지를 가지고 효과적으로 학습하기 위해 이 방식을 사용했다고 함

- 티슈 조직 등의 실질적인 변형과 유사하다고 함

2. Weighted Cross Entropy + Data Augmentation

- 많은 cell을 Segmentation 해야 하는 문제에서의 도전 과제는 같은 클래스가 서로 인접해 있는

케이스

38 of 40

U-Net: Data Augmentation

38

  • 아래 그림의 a처럼 cell이 인접해 있으면 각 cell과 배경을 구분하는 것은 쉽지만, cell 각각을 서로 구분 하는 것(논문에서는 instance segmentation이라 표현)은 어려움
  • 그래서 이 논문에서는 각 instance의 테두리와 테두리 사이가 반드시 배경이 되도록 처리
  • 즉, 2개의 셀이 붙어있는 경우라고 하더라도 그 둘 사이에는 반드시 배경으로 인식되어야 할 틈을 만들겠다는 의미

39 of 40

U-Net 정리

39

  • U-net은 FCNs보다 확장된 개념의 Up-sampling과 Skip Architecture를 적용한 모델 제안

  • 결과적으로 U-Net의 구조는 아주 적은 양의 학습 데이터만으로 Data Augmentation을 활용하여

여러 Biomedical Image Segmentation문제에서 우수한 성능을 보여줌

40 of 40

Thank You!

40