paper
: Fast R-CNNauthor
: Ross Girshicksubject
: Girshick, Ross. "Fast r-cnn." Proceedings of the IEEE international conference on computer vision. 2015.Fast R-CNN
➡️ Faster R-CNNR-CNN
simple review : https://velog.io/@hseop/Simple-Review-Region-based-Convolutional-Networks-for-Accurate-Object-Detection-and-SegmentationSPPnet
내용 파악을 위해 읽은 paper review :요약) R-CNN의 단점
1. 한 image에 대해서 selective search로 2,000개의 proposal(candidate)를 뽑고 나서
각각의 candidate마다 CNN model을 적용하기 때문에 시간이 매우 오래 걸림
2. CNN, SVM, Bounding Box Regression을 총 세가지 model이 multi-stage pipeline이고,
또한 SVM, Bounding Box Regression이 CNN을 학습시키지 못하기 때문에 end-to-end 학습이 되지 않음.
➡️ R-CNN의 주요한 두가지 단점을 극복하기 위해 RoI pooling을 사용한 Fast R-CNN이 나옴
Fast R-CNN은 deep convolutional networks를 사용하여
previous work에 대해 효율적으로 object proposal을 classify하는 model로 만듦.
previous work와 비교하여,
Fast R-CNN은 detection accuracy를 상승시키면서
training and testing speed를 향상시킨
몇 가지 innovations를 사용했다.
Fast R-CNN은 R-CNN보다 9배 빠른 VGG16을 train시키고,
test-time에는 213배 빨랐다.
그리고 PASCAL VOC 2012에 대해 더 높은 mAP를 달성했다.
최근 deep ConvNet은 image classification과 object detection 분야에 엄청난 발전을 일으키고 있다.
image classification과 비교하여 object detection은
해결하기 위해 더욱 complex methods가 필요하기 때문에 더욱 challenging task라고 할 수 있다.
detection은 object에 대한 정확한 localization이 필요하기 때문에 complexity가 상승한다.
또한 두 가지 주요한 challenge가 있다.
이 논문에서, 우리는 state-of-the-art ConvNet based의 object detector의 training process를 간소화했다.
우리는 object proposals(=candidates)를 classification하고, proposals의 spatial locations을 refine(정제)하는 것을
함께 학습할 수 있는 a single-stage training algorithm
을 제안할 것이다.
Fast R-CNN
이라고 부른다.Fast R-CNN
method는 여러가지 장점이 있다 : several conv layer
를 거치고,max pooling layer
를 통해 conv feature map을 생성한다.a region of interest(RoI) pooling layer
는The RoI pooling layer는 max pooling을 사용하여
유효한 RoI 내의 feature를 a small feature map으로 convert한다.
이 feature map은 고정된 spatial 크기인 H x W (e.g., 7 x 7)를 가지며,
여기서 H와 W는 특정 RoI와 독립적인 layer hyper-parameter이다.
이 논문에서,
RoI는 conv feature map에 대한 rectangular window이다.
rectangular window는 4개의 tuple 에 의해 정의된다.
는 top-left corner, 는 그것의 height와 width를 나타낸다.
우선 input image를 CNN에 통과시켜 feature map을 추출하고,
이전에 미리 selective search로 만들어놨던 RoI를 feature map에 projection시킨다.
아래 그림의 가장 좌측 그림이 feature map이고, 그 안에 x 는 RoI가 projection된 window이다.
그리고 미리 설정한 sub-windows의 grid 크기인 x 로 만들어 주기 위해,
x 를 x 로 나누어,
x 로 만든 다음,
각 sub window를 max-pooling한다.
이제 feature map에 projection했던 x size의 RoI는 고정된 x size의 a small feature map이 되고,
이를 feature vector로 convert한다.
우리는 5개의 max pooling layer와 5~13개의 conv layer를 가지는 3가지 pre-trained ImageNet network에 대해서 실험을 진행했다.
(see Section 4.1. for network details) ➡️ 1. CaffetNet(S for "Small"), 2. VGG_CNN_M_1024(M for "Medium"), 3. VGG16(L for "Large"))
pre-trained network가 Fast R-CNN network를 초기화할 때, 3가지 transformation을 적용했다.
back-propagation으로 모든 network의 weight를 training시키는 것은 Fast R-CNN의 중요한 능력이다.
첫번째로, 왜 SPPnet이 spatial pyramid pooling layer에서 weight를 update할 수 없는지 밝혀보겠다.
우리는 training 동안 feature sharing의 장점을 갖는 더 효율적인 training method를 제안한다.
이 방법의 한가지 우려는 같은 image로부터 RoI가 연관되어있기 때문에 training convergence가 느려질 것이라는 것이다.
하지만 실제로 이 우려는 발생하지 않았고,
우리는 R-CCN보다 더 적은 SGD iterations과 and 을 이용하여 좋은 결과를 달성했다.
hierarchical sampling을 추가하여,
Fast R-CNN은
R-CNN과 SPPnet에서의 3가지 단계(softmax classifier, SVNs, regressors)를 training하는 것보다
softmax classifier와 bounding-box regressors를 함께 optimize하는 one fine-tuning stage로 간략화된 training process를 사용한다.
이 과정의 구성요소는 아래에 설명되어 있다.
fine-tuning 동안에,
각각의 SGD mini-bath들은 uniformly random하게 선택된 images에서 구성된다.
우리는 크기가 인 mini-batch를 사용하여, 각 image에 대해서 64개의 RoI를 sampling한다.
우리는 ground truth bounding box와 IoU(Intersection over Union)이 적어도 0.5 이상인 object proposals에서부터 25%의 RoI를 취했다.
이러한 RoI들은 인 foregournd object class로 label되어지는 example들을 형성한다.
RoI가 인 구간에서 ground truth와 maximum IoU를 갖는 object proposals에서 sampling된다.
이러한 RoI들은 인 background example이다.
The lower thhreshold of 0.1 appears to act as a heuristic for hard example mining
training 동안에,
image들은 probability 0.5로 horizontally flipped되어졌고,
더 이상의 data augmentation은 없었다.
(skip했음...)
Let be the -th activation input into the RoI pooling layer and let be the layer's -th output from the -tg RoI.
The RoI pooling layer computes ,in which .
is the index set of inputs in the sub-window over which the output unit max pools.
A single may be assigned to several different outputs .
The RoI pooling layer's backwards function computes partial derivative of the loss function with respect to each input variable by following the argmax switches :
brute force
:by using image pyramids
Fast R-CNN network가 fine-tune되었다면,
detection은 forward pass를 실행하는 것과 다를게 없다.
network는 입력으로 image와 점수 매겨질 R개의 object proposal list를 받는다.
Test time에, R은 일반적으로 약 2000이지만 더 큰 경우도 고려했다.
image pyramid를 사용할 때,
각 RoI는 pixel과 가장 근접한 크기로 scaled RoI로 할당되었다.
각각의 test RoI 애 대해서, forward pass는
class posterior probability distribution 와
에 의해 예측된 a set of predicted bounding-box offsets을 출력한다.
우리는 각 object class 에 대해 에 대한 object confidence를 할당하는데,
estimated probability 를 사용했다.
그리고나서 R-CNN의 algorithm과 setting을 사용하여 각 class에 대해 독립적으로
non-maximum suppression을 수행했다.
whole-image classification에서,
fc layer를 computing하는 데에 드는 시간은 conv layer에 비교하여 매우 적습니다.
반면에 detection에서, 처리하기 위한 RoI의 개수는 매우 많고 fc layer를 computing하기 위해 걸리는 시간은 forward pass에 거의 절반을 차지합니다.
Large fc layer에서는 truncated SVD를 사용하여 compressing함으로써 쉽게 가속화할 수 있습니다.
이 기법에서,
x weight matrix 로 parameterized된 layer는
SVD를 이용하여 대략적으로 factorize시킬 수 있습니다.
는 의 처음부터 t번째 left-singular vector로 이루어진 x matrix이다.
는 의 top singular value로 이루어진 x diagonal matrix이다.
는 의 처음부터 t번째 right-singular vector로 이루어진 x matrix이다.
Truncated SVD는 parameter 개수를 개에서 개로 줄일 수 있고,
만약 가 min()보다 훨씬 작다면 중요해질 수 있다.
이렇게 network를 압축시키기 위해,
W에 해당하는 single fc layer는 2개의 fc layer로 대체될 수 있고,
그 2개의 layer 사이에는 non-linearity가 없다.
이 간단한 compression method는 RoI 개수가 많을 때 좋은 속도 향상을 가져다준다.
(생략)
R-CNN
:
만약 2k개의 region proposal을 생성해야 한다면,
R-CNN에서는 selective search로 2k개의 region proposal을 만든 후,
2k개 각각에 CNN을 적용해야 함.
➡️ 2k번 CNN을 해야 함.
Fast R-CNN
:
만약 2k개의 region proposal을 생성해야 한다면,
우선 한 image에 대해서 CNN을 한 번 적용한 후,
selective search로 2개의 region proposal을 만든 후,
2k개 각각의 RoI에 RoI pooling 해야 함.
➡️ 1번 CNN, 2k번 RoI pooling.