"Fast RCNN"의 두 판 사이의 차이
잔글 |
잔글 |
||
1번째 줄: | 1번째 줄: | ||
Ross Girshick <ref>혼자 썼는데 본문의 모든 주어가 We. 관행인가봄. <br><span class=gray>아니 그럼 [https://ko.wikipedia.org/wiki/체스터_윌러드 체스터 윌러드]는 뭐야.</span></ref> | Ross Girshick <ref>혼자 썼는데 본문의 모든 주어가 We. 관행인가봄. <br><span class=gray>아니 그럼 [https://ko.wikipedia.org/wiki/체스터_윌러드 체스터 윌러드]는 뭐야.</span></ref> | ||
− | Microsoft Research | + | Microsoft Research |
[https://github.com/rbgirshick/fast-rcnn github] | [https://github.com/rbgirshick/fast-rcnn github] |
2017년 8월 7일 (월) 00:34 기준 최신판
Ross Girshick [1]
Microsoft Research
아래 논문내용중 등장하는 슬라이드 조각조각은 저자가 직접 작성해서 공개[2]한 것.
Slow R-CNN[3] : R-CNN first finetunes a ConvNet on object proposals using log loss. Then, it fits SVMs to ConvNet features. These SVMs act as object detectors, replacing the softmax classifier learnt by fine-tuning. In the third training stage, bounding-box regressors are learned. … Detection with VGG16 takes 47s / image (on a Nvidia K40 GPU overclocked to 875 MHz.). 엄청나게 느림
그냥 R-CNN은 object proposal마다 cnn forward하는데, SPPnets[4]가 미리 cnn돌려놓고 거기서부터 feature뽑아내는 식으로 test time은 10~100배, training time도 3배정도 개선했다. 단, SPPnets는 R-CNN과 달리 spatial pyramid pooling앞의 convolutional layers를 update할 수 없다.[5]
입력으로는 이미지와 object proposals를 받는다. 먼저 이미지가 convnet지나면서 feature map을 만들고 이 feature map과 앞의 object proposal로부터 RoI pooling layer가 일정한 길이의 feature vector들을 뽑아낸다. 이 feature vector들이 fc를 지나가면서 두가지 출력을 내는데 하나는 클래스정보(K object class + ‘background’의 softmax), 다른 하나는 영역(refined bounding box by category-specific bounding-box regressors. 각 클래스마다 네개의 좌표). [6]
이미지 하나당 RoI하나씩 해서 학습하는 것(SPPnet과 R-CNN은 이렇게 한다)보다 같은 RoI개수라도 적은 이미지 수를 사용하면 학습이 빠르다. 이미지 하나당 cnn한번만 통과하면 RoI마다 feature를 얻어내기 때문이다(cnn결과를 share함). 보통 이미지 전체가 RoI로 잡히는 일이 많기 때문에 이렇게 하면 계산속도 이득이 크다. 이미지당 중복된 RoI를 뽑을 때 서로간 correlation이 문제될 수 있지만, 실제 실험(이미지 당 64개씩 RoI, batch size=2)결과 괜찮았다.[7]
loss는 다음을 쓴다.
$$ L = L_\text{cls}(p,u) + \lambda[u \ge 1] L_\text{loc}(t^u, v) $$
\( L_\text{cls}(p,u) \) 는 log loss for true class \(u\),
\(v\)는 detection된 classs,
(bounding box의 차이를 L\(_1\) norm 한 값을 \(x\)라 하면,) L\(_\text{loc}\) 은 \(|x| \lt 1 \)일 때 \(0.5x^2\), 아니면 \(|x| -0.5\) 이다.
Iverson bracket은 조건을 만족할 때는 \(1\), 아니면 \(0\)이다.
background class는 bbox가 없으므로 \(u=0\)으로 bg class를 지정하면, 위 식대로 된다. 실험에서 \(\lambda\)는 \(1\)로 통일. L\(_1\) norm이 L\(_2\) norm보다 outliers에 덜 sensitive하다고 한다.진짜? 위에서 나온 좌표값은 모두 shift value이므로, mean, var로 정규화했다. 이와 비슷한 loss를 쓴 논문[8]이 있으나, 해당 논문은 localization과 classification을 아예 별개의 network을 썼고, Overfeat[9], R-CNN[3]나 SPPnet[4]은 stage-wise training을 주장했다.
학습할 때, RoI중 25%는 IoU(intersection over union) \(>0.5\)에서, 나머지는 IoU\(=[0.1, 0.5)\)에서 썼다. 구간 시작값 \(0.1\)은 heuristic하게 잡은 것이다. background는 IoU=\(0\)이다. 이미지는 \(0.5\)의 확률로 horizontally filp이고 이 외에 augmentation은 하지 않았다.
RoI pooling layer에서 back propagation은 다음과 같다. $$\frac{\partial L}{\partial x_i} = \sum_r \sum_j [ i = i^* (r,j)] \frac{\partial L}{\partial y_{rj}} $$ 그림을 보면 더 감이 잘 온다.
① max pooling해서 나온 후보군의 경우 오직 max값을 가진 pixel만 넘어오게 되어 있으므로, (unpooling switch를 사용하여) 해당 pixel에 대해서만 gradient를 계산할 것이고, ② roi를 뽑는 과정에서 computation을 share하게 되어 있으므로 한 픽셀이 여러곳으로 들어갈 수 있는데, bp되는 모든 값을 sum하겠다는 뜻. [10]
Scale invariance위해 두가지 방법을 해봄. 하나는 이미지 사이즈를 일정하게 고정하고 brutal force하게 RoI를 주는법, 하나는 이미지 피라미드에서 취하는 법. 첫번째 방법은 net이 모든 object size에 대해 학습해야 하고(대부분의 실험을 이렇게 함) 두번째 방법은 RoI가 거의 일정하게 유지된다. 실험할때는 \(224^2\) pixel에 최대한 가깝게 했다. 실험결과는 SPPnet과 일치하는데, multi-scale이 아주 약간 더 좋기는 하지만, 둘의 성능이 거의 동일하다. 따라서 다른 모든 실험은 single-scale로 이루어졌다.
Detection할 때, 더 빠르게 하기 위해 Truncated SVD[11][12] 쓸 수도 있다. weight vector \(W \approx U\Sigma_t V^T\), U는 \(u \times t\) matrix이고 \(W\)의 first \(t\) left-singular vectors. 이렇게 하면 parameter가 \(uv\)개 에서 \(t(u+v)\)로 줄어들어서 \(t < \min (u, v)\)일 때 효과가 좋다. VOC07대상으로 한 실험에서 FRCN은 VGG16보다 146배 빠른데, truncated SVD까지 하면 213배 빠르다. SPPnet과 비교하면 각 7, 10배. 정확도는 0.3%정도 저하된다.
많이 깊지 않은 net에 대해서는 마지막 fc nets만 fine-tuning하면 된다고 알려져 있고[4], deep한 net에 대해서는 그렇지 않음을 실험으로 확인했다. 곧, RoI pooling layer를 통한 학습이 중요하다는 뜻이다. 그렇다고 모든 conv layer가 fine-tune되어야 하는가 하면 그것도 아니다. 실험결과 conv-1은 generic해서, fine tune의 효과가 좋지 않았다. task-specific하게 결정하면 된다. 이 paper에서 VGG16은 모두 conv3_1 보다 이후의 layers(12개중 9개)만 학습시켰다. (적은 양을 update하면 GPU메모리문제를 피할 수 있다. )
클래스만 loss로 해서 학습시키는 것에 비해 multi-task training의 결과가 더 좋다.
맨 마지막 softmax를 SVM으로 바꾸어 보았는데 softmax가 조금 더 나았다. stagewise보다 one-shot learning이 더 낫다는 또 하나의 증거.
proposal을 엄청 늘려도 보았는데 별 도움 안되었다. 매우 과다하게 늘리면 오히려 mAP를 떨어트린다. “sparse object proposals are better” [13]
- ↑ 혼자 썼는데 본문의 모든 주어가 We. 관행인가봄.
아니 그럼 체스터 윌러드는 뭐야. - ↑ http://www.robots.ox.ac.uk/~tvg/publications/talks/fast-rcnn-slides.pdf
- ↑ 3.0 3.1 R. Girshick, J. Donahue, T. Darrell, and J. Malik. Rich feature hierarchies for accurate object detection and semantic segmentation. In CVPR, 2014.
- ↑ 4.0 4.1 4.2 K.He, X.Zhang, S.Ren, and J.Sun. Spatial pyramid pooling in deep convolutional networks for visual recognition. In ECCV,2014.
- ↑ pyramid pooling하기 때문임.
억지로 하려면 뭐 못할것도 없겠다만…
- ↑
- ↑
- ↑ D. Erhan, C. Szegedy, A. Toshev, and D. Anguelov. Scalable object detection using deep neural networks. In CVPR, 2014.
- ↑ P. Sermanet, D. Eigen, X. Zhang, M. Mathieu, R. Fergus, and Y. LeCun. OverFeat: Integrated Recognition, Localization and Detection using Convolutional Networks. In ICLR, 2014.
- ↑
제대로 이해한거 맞는지 자신이 없어서 원문을…Let \(x_i ∈ \R\) be the \(i\)-th activation input into the RoI pooling layer and let \(y_{rj}\) be the layer’s \(j\)-th output from the \(r\)-th RoI. The RoI pooling layer computes \(y_{rj} = x_{i^{∗}(r,j)}\), in which \(i^{∗}(r, j) = \text{argmax}_{ i'∈\mathcal{R}(r,j)} x_{i'}\) . \(\mathcal{R}(r, j) \) is the index set of inputs in the sub-window over which the output unit \(y_{rj}\) max pools. A single \(x_i\) may be assigned to several different outputs \(y_{rj}\) .
(중략)
In words, for each mini-batch RoI \(r\) and for each pooling output unit \(y_{rj}\), the partial derivative \(∂L/∂y_{rj}\) is accumulated if \(i\) is the argmax selected for \(y_{rj}\) by max pooling. - ↑ E. Denton, W. Zaremba, J. Bruna, Y. LeCun, and R. Fergus. Exploiting linear structure within convolutional networks for efficient evaluation. In NIPS, 2014.
- ↑ J. Xue, J. Li, and Y. Gong. Restructuring of deep neural network acoustic models with singular value decomposition. In Interspeech, 2013.
- ↑ 논문에서 주로 selective search사용하는 것으로 보였음. low-level feature사용해서 superpixel을 greedy하게 합하는 방법