딥러닝의 분야별, Data Set 별 State-Of-the-Art 랭킹을 확인할 수 있는 사이트 의 Pascal VOC 2007 데이터 셋의
Object Detection 분야 1위인 "SNIPER" 논문을 리뷰하고자 한다.
Multi Scale 에 대해 학습할 때 효율적으로 쓰일 수 있다고 한다.
아주 최근의 논문은 아니고, 2018년 말에 나온 논문.
Youtube의 논문 review PR-199를 참고하였다.
논문의 도입은 RCNN과 Fast RCNN의 소개로 시작한다.
RCNN detector에서 진화된 Object Detection 알고리즘들은 비지도 (unsupervised) 알고리즘으로 Object Proposal을 생성했다. 이렇게 생성된 proposal들을 224 x 224 로 resize한 다음 CNN 으로 classify 한 것. Scale invarient 하지만 proposal이 많아질수록 연산량이 상당히 많아진다. 그러한 점을 보완한 것이 빨라진 Fast-RCNN 이다.
Fast RCNN에서는 RCNN에서 모든 proposal이 네트워크를 거쳐야 하는 단점을 개선한다.
전체 이미지에 대해 CNN을 딱 한번 거치는 것이다. 연산량이 대폭 줄어든다.
그 후 FC layer을 거치기 전 ROI pooling을 이용하여 크기를 일정하게 조정해 Feature map을 출력하고 이에 대해서만 객체 탐지를 수행한다.
이런 점에서 Fast RCNN은 RCNN 보다 더 빠르며, context를 잘 포착한다고 볼 수 있다.
한편, Fast RCNN 에서는 모든 proposal이 up & down sampling의 대상이다.
RCNN에서는 모든 proposal들이 224 x 224 로 resize 된다.
즉 large object는 not upsampled, small object는 not downsampled 되었다면
Fast RCNN은 모든 proposal에 대해서 up & down sampling을 모두 진행한다.
따라서 RCNN이 더 효율적으로 up & down sampling을 하는 것이다.
하지만 RCNN은 Fast RCNN과 다르게 연산을 공유하지 않기 때문에 훨씬 느린 단점이 있고, 저자는 이에 따라 둘의 장점을 서로 합쳤다는 SNIPER을 제안한다.
SNIPER는 scale specific context-regions (A.K.A chips) 를 생성한다.
그리고 Fast RCNN 처럼 칩 안의 모든 proposal을 분류한다. 이것이 다수의 proposal에 대한 효율적인 분류를 가능하게 한다.
또, RCNN 처럼 large object가 있는 이미지는 upsampling 하지 않고, 쉬운 Background region 도 processing을 따로 하지 않기 때문에 Fast rcnn detector 보다 빠르다고 한다.
SNIPER는 chips를 생성하기 때문에 보다 효율적으로 multi scale training을 가능하게 한다.
위와 같은 고양이 이미지가 있다고 생각해보자.
배경에 비해 상대적으로 고양이는 작고, 이 사진을 이용하여 작은 고양이부터 큰 고양이까지 모두 검출가능한 모델을 학습시키고자 할 때, 단순히 사진 전체를 Image Pyramid 처럼 resampling 하여 네트워크를 학습시키에는 무리가 있다.
FPN 포스팅을 할 때 쓴 Image Pyramid의 단점처럼 연산량이 심하게 늘어날 것이다.
빨간 박스를 chip이라고 생각하면 된다.
gt 가 포함되어있다고 유추되고 어느정도 context가 포함되어있는 region을 잘라 Chip으로 명명한다.
(paper에서 chip의 사이즈는 512 x 512로 고정) 그리고 이 chip을 네트워크 인풋으로 넣는다. 이렇게 해서 다양한 크기로 학습시키면 픽셀 관점의 연산량이 대폭 줄어든다는 것이 이 SNIPER의 기본이다.
다음은 SNIPER의 중요한 과정들이다.
1. CHIP generation
이미지 안의 multi-scale에 대해 칩들을 생성한다.
즉 하나의 image로 다양한 scale의 image를 먼저 만들고, 그 image들 안에서 stride를 돌면서 칩을 생성하는데 위에서 말했듯 chip의 사이즈는 512 x 512로 고정된다. 즉 작게 scale된 image에서의 칩은 보다 큰 object를 detection할 때 쓰일 것이고 크게 scale 된 image에서의 칩은 보다 작은 object를 detection 할 때 쓰일 수 있다.
각 chip은 equal interval을 두고 생성되는데 paper에서는 interval d = 32로 설정되었다.
2. Positive Chip selection
각 scale마다 desired area range R(i) (i = scale num) 이 존재한다.
따라서 어떤 gt bounding box가 각 scale i 의 학습에 참여할지 이 R(i)가 기준이 되는데, R(i)의 범위에 있는 gt bounding box는 유효한 gt 로써 G(i)에 포함되게 된다.
그리고 각 scale 별로 모든 G(i)가 반드시 어떤 한 chip에는 포함되도록, 그리고 최대한 많은 G(i)가 포함되도록 chip들을 고르고 이들이 바로 Positive Chip C(i)pos 이다.
chip들의 interval이 32이므로 gt bbox는 서로 다른 scale의 chips에 배정될수도 있고, 같은 scale의 다른 chip에 놓여지는 것도 물론 가능하다.
이런 식으로 모든 gt bbox가 적절한 scale의 칩에서 커버되고, image의 resolution보다 chip resolution 512 x 512 가 훨신 작으므로 대부분의 background 작업을 고해상도에서 하지 않아도 되니 연산량이 줄어든다.
3. Negative Chip selection
Positive Chips가 positive instances를 모두 커버하더라도, background의 대부분은 포함되지 않는다. 하지만 background를 잘못 분류하게 되면 false positive rate가 상승하므로, 이 부분 또한 개선해야 한다.
따라서 저자는 "대부분의 background가 classify하기 쉽다고 가정하고, 그러한 background들을 computation하지 않아도 된다" 라고 말한다. 즉 그러한 background를 제거한다는 것이다. 그럼 어떻게 easy to classification 한 region을 제거할까?
바로 object가 존재할 것 같은 영역을 indentify하기 위해 object proposal을 사용한다. 결국 Classifier가 region proposal을 진행하고, image의 어떤 부분이 no region proposal이면 걔를 easy to classification background로 판단한다. 즉, 이런 영역은 학습 중 computation에 넣지 않는다. (=즉, 무시한다.)
이렇게 negative chips mining을 하기 위해서 저자는 rpn을 대충 학습시킨다. 이 네트워크의 목적은 그냥 대략적으로 false positive 를 포함하는 거 같은 region을 골라내기 위한 것이므로 엄청 정확할 필요는 없다. 이 RPN은 전체 학습 중 proposal generate하기 위해 쓰이는데, 여기서 저자는 "만약 RPN으로 이미지의 대부분에서 아무런 proposal이 생성되지 않으면 그건 object instance를 포함 안할 확률이 높다는 뜻" 이라고 가정한다.
Negative chips selection을 하기 위해 먼저 paper에서는 각 scale i 마다 모든 C(i)pos (positive chips) 에 포함된 proposal들을 제거한다. 그런 다음 각 scale i에 대해 적어도 M개의 proposal을 포함하도록 칩들을 고른다. 이것이 바로 C(i) neg, 즉 image의 scale마다의 negative chips이다.
이렇게 생성된 negative chips는 학습 중 per epoch, per image로 랜덤하게 샘플된다.
위의 사진은 SNIPER에 의해 생성된 negative chips를 나타낸다. 윗 행의 green box들이 gt bbox, 밑의 사진의 orange box 는 chips, 그리고 그 안의 점들은 생성된 proposal들 중, C(i) pos에 포함되지 않은 것들의 center point를 나타낸다.
4. Label Assignment
SNIPER는 faster rcnn 처럼 end-to end training이다. 즉, 단일 네트워크로 proposal 생성부터 classification까지 이루어진다. 학습하면서 RPN에 의해 생성된 proposal들은 label이 배정되고, bbox target들은 chip 내부의 모든 gt box에 기반한다.
또한, range 범위 R (i) 자체로 gt들을 필터링하지는 않지만
R(i) 범위에 놓여져 있지 않은 proposal들은 해당 scale의 학습 중 무시된다.
Fast RCNN 처럼 저자는 gt bbox와 0.5 이상의 iou를 가지는 모든 proposal들을 positive로 mark하고 bbox target을 배정한다.
+ Experimental Details
paper에서는 Faster RCNN with Resnet and MobileNetV2 로 SNIPER를 evaluate했다.
끝.
'Computer Vision > Deep Learning' 카테고리의 다른 글
no module named 'tensorflow' error 해결 (0) | 2020.09.27 |
---|---|
Object Detection의 결과 성능 평가지표들 (0) | 2020.08.07 |
Gaussian Mixture Model - GMM (0) | 2020.07.09 |
Feature Pyramid Network - FPN (0) | 2020.02.18 |