자습용으로 공부하기 위해 정리한 자료 입니다. 출처는 맨 밑에 있습니다.
1. 복습
Fast R-CNN 과 Faster R-CNN
– 처음에는 Selective Search를 사용해서 물체의 위치를 검출
– Faster RCNN은 Region Proposal Network를 사용하여 모든 픽셀에 박스가 있다는 것을 가정하고 RPN을 훈련시켜서 Bounding Box를 뽑아낸다음 RCNN을 태우는 네트워크
Fully Convolutional Networks
– 마지막을 Fully Convolution 으로 바꿔서(1 by 1) 이라던지 마지막을 Heatmap같은 나오게 만든 네트워크
– 추후에 다시 공부가 필요함
2. Instance Segmentation
– Instance Segmentation(객체를 개별적을 Segmentation) 을 하기 위해 의식의 흐름대로 방법을 생각해보자.
– 첫번째 : Object Detection은 각각의 객체를 분류가능하지만 Segmentation은 안됨(Faster R-CNN)
– 두번째 : Sementic Segmentaion은 Segment는 가능하지만 각각분류 불가능(FCN)
– 세번째 : 두개를 더해서 Segmentation 과 분류를 동시에 할수 있지 않을까?
– Faster R-CNN에 FCN을 태운것이 바로 Mask R-CNN이다.
3. 유명한 Dataset들
– http://cocodataset.org/#home
– https://www.cityscapes-dataset.com/
4. MASK RCNN
큰 틀은 Faster RCNN의 ROI에 FCN을 돌린것이다.
Mask Head on Faster RCNN
– Mask RCNN은 Faster RCNN의 Classfication + Bbox regression 에다가 FCN을 추가로 브랜치 한것임
– Multitask Learning을 통해 Mask를 예측하는 Branch를 추가
우선 FCN이 무엇인지를 살펴 보면.
– Pixel Level Classification
– Per Pixel Sofmax
– Multi Instance
인데 여기서 Faster RCNN을 고민해보면
– Faster RCNN은 이미 Classification을 하고 있어서 FCN에서 필요 없음
– Faster RCNN은 개별단위로 ROI를 추출하고 있고 분류가 되기 때문에 그냥 Mask로 물체가 있느냐 없느냐 만 판단 하면됨
– Faster RCNN에서 이미 Multi Instance가 가능함
LOSS Function?
– 간단하게 Faster RCNN의 loss 2개에 Lmask Binary Cross Entropy를 더해주면 됩니다.
Mask를 어떻게 학습시키는가?
– 결국 마스크는 class1의 마스크, class2의 마스크, class k의 마스크 이렇게 학습시켜야 하는데
– 만약 예제처럼 말이 3번째 클래스 라면 Class1없어지고, Class2없어지고 ClassK도 없어지고 class3만 남게됨
– 이는 class의 Mask 형태만 훈련하지, class가 무엇인지 학습할 필요가 없음
어떻게 테스트 하는가?
– Mask는 사람도 예측하고, 말도 예측하고, 자동차도 예측해서 마스크를 따오는데
– Mask는 이것을 모르니 classification에서 나온 결과(말)를 가지고 말 Mask를 선택함
Softmax 기반의 FCN보다, independant Mask가 성능이 훨씬 좋음
그러면 Mask Branch가 어떻게 되어 있는가?
Invariance와 Equivariance를 이해하기 위핸 Max Pooling의 문제
Max pooling 은 feature map의 spatial size를 줄여주어서 higher layer의 시야각을 넓혀주는 역할을 함.
그러나 가장 활성화 되는 feature detector의 위치 정보들은 버림
아래 그림은 CNN에서 둘다 얼굴로 인지함
Invariance : 불변, Equivariance : 등가
– Equivariance : Input이 바뀌면 Output도 바뀐다.
– capsule net 논문에서 나옴
– 힌튼이 맥스플링은 잘못된 방법이며 Invariance가 아닌 Equivariance가 필요하다고 주장
– Convolution은 위치의 변환에 따라 Equivariant하다.(위치가 바뀌면 바뀐 위치에 따라 Feature Map이 나옴)
– FCN도 위치의 변화에 따라 Equivariant하다.
– Pooling과 Fully Connect를 쓰면 Equivariant가 깨진다.
그럼 전 구간이 Equivariant 해야 하는데
– 앞부분인 Faster RCNN은 두개의 모듈로 되어 있고 첫번째인 RPN은 Fully-Conv Net이다.(논문참조)
– Mask Branch부분은 애초에 FCN이다.(Fully Conv Net)
– 그래서 전 구간이 Equivariant라고 할수 있다.
Mask Branch에서 MLP를 쓰는것보다 FCN을 쓰는게 효과가 더 좋음
ROI Align?
ROI Pooling의 한계
– 다양한 사이즈의 ROI를 고정size ( 7 x 7)로 변환 시켜주는것을 ROI Pooling
– 그러나 7 x 7 Feature는 Segment 하기에는 너무 작아서
– 좀더 정확하게 ROI를 뽑을 필요가 있다.
ROI Pooling의 부정확한 예
– RPN에서는 ROI를 실수로 값을 예측하는데 이것을 가지고 ROI Pooling을 2 x 2로 뽑을려면
– 일단 반올림을 해서 칸에 맞추고 Pooling을 한다.
– 그러며 원본과 다르게 약간 어긋나게 됨( Align이 되지 않은 결과가 나오게됨)
ROI Align이란?
– 최대한 정확하게 FeatureMap에서 픽셀값을 정확하게 가져가보자라는 사상
– 정확하게 4등분하고, 그것을 또 4등분 한다(subset)
– 이것을 가지고 Interpolation(보간) Linear Interpolation(선형보간)을 실시한다.
– 한 Subset을 놓고 보면 검은색은 0.15 정도이고, 파란색은 0.35정도이고, 나머지는 0.25정도로 하고 Weight Sum을 해서 한개의 Subset의 값을 정한다
– 그러면 이런 작은 Subset이 16개가 생기고, 이것을 4개씩 Max Pooling을 해서 2 x 2 Feature를 뽑아낸다.
– 이것이 ROI Align 임
– 그래서 종합하면 아래와 같은 그림이 됨
– ROI Align이 가운데에 들어가게 되고,
– Binary Mask를 예측하게 되고,
– ROI에 Mask를 Upscaling을 해서 집어 넣게 되면 원래 이미지에 Mask대로 색깔을 바꿔서 보여줄수 있음
ROI Align을 하면 성능이 좋아진다.
– 성능이 Pooling 보다 4%정도 좋아짐, Object detection도 좋아짐
Network Architecture
ResNet사용
– resnet는 res5 피쳐에서 7 by 7 2048 채널에서 Fully Conv를 통과시켜 MASK예측을 하고
Feature Pyramid Network사용
– feature pyramid는 14 x 14에서 뽑아서 사용한다고 함
– 깊을수록 좋아진다. ResNext라는 Network도 있음!!!
Mask R CNN결과
– 단점은 ? faster RCNN에소 박스가 예측되지 않으면 Masking도 할수 없음
출처 :
https://www.slideshare.net/windmdk/mask-rcnnhttps://blog.athelas.com/a-brief-history-of-cnns-in-image-segmentation-from-r-cnn-to-mask-r-cnn-34ea83205de4https://blog.naver.com/sogangori/221012300995https://github.com/MagmaTart/Paper-Reading/blob/master/summarys/MaskRCNN.mdhttps://www.slideshare.net/TaeohKim4/pr057-mask-rcnnhttps://jayhey.github.io/deep%20learning/2017/11/28/CapsNet_1/
끝.