> ## Content Index
> Fetch the complete content index at: https://sudormrf.run/llms.txt
> Use this file to discover other available public pages before exploring further.

# Deep Learning based Detection
- URL: https://sudormrf.run/2016/01/13/deep-learning-based-detection/
- Published: 2016-01-13T07:26:13.000Z
- Updated: 2018-04-16T08:48:21.000Z
- Author: Junho Cho
- Tags: Detection, Computer Vision, Deep Learning, #Import 2026-10-24 03:36

Computer Vision에서 Detection 이란 image에서 물체를 탐지해서 대부분의 경우 Bounding Box로 물체위치를 표시하고 무엇인지 notation을 한다. 주로 VOC Pascal 데이터셋을 사용하는데, 영상에서 모든 물체를 다 표기하긴 어렵고, 대표적인 물체 20가지를 탐지하게 한다. Classification은 단순히 물체가 영상에 하나가 있다고 가정하고 그 물체가 무엇인지 분류하는 문제인데, 이제 성능이 saturate되었다. 반면 Detection은 물체위치도 찾고, 무엇인지도 맞춰야해서 더 어려운 문제이다.

**R-CNN - SPPnet - Fast-RCNN - Faster-RCNN** Framework 들을 요약해보려 한다. Faster 같은 경우는 아직 공부중이라 더 추가할 예정이다. 각 알고리즘의 장점을 설명하고 단점들은 어떻게 해결되었는지 설명하려 한다.

# R-CNN

*Rich feature hierarchies for accurate object detection and semantic segmentation*

### CVPR2014 [github](https://github.com/rbgirshick/rcnn?ref=sudormrf.run) [arxiv](http://arxiv.org/abs/1311.2524?ref=sudormrf.run)

가장 먼저 나온 framework.  
Region Proposal. 그니까 물체인 듯 한 것들을 먼저 찾아낸다. 이때 쓰는 알고리즘은 Selective Search, EdgeBox 등이 있음. 그리고 그 proposal에 classification에 쓰는 CNN으로 분류시킴.  
![](https://ww3.sinaimg.cn/large/006tKfTcgy1fcgzlx2ibxj30d904rmxw.jpg)

장점은 성능이 좋았던 것. 하지만 단점으로

- region proposal을 CNN에서 classification할 때 image를 warp/crop을 하기 때문에 이미지 변형/손실이 일어나서 성능이 저하함.
- 약 2000개 region proposal을 뽑고 다 CNN computation을 돌리기 때문에 속도 저하.
- Region Proposal에 쓰는 알고리즘들은 GPU의 빠른 연산에서 이득을 못보는 CPU연산이었고 속도에서 Bottleneck으로 작용함.[\[1\]](#fn1)

이 3개가 R-CNN의 대표적인 단점이었는데 1,2 번째 단점이 다음에 소개될 SPPnet에서 해결되었다. 2번째 단점은 소개되는 Fast-RCNN에서, 3번째 단점은 Faster-RCNN에서 해결된다.

---

# SPPnet

*Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition*

### ECCV2014 [github](https://github.com/ShaoqingRen/SPP%5Fnet?ref=sudormrf.run) [arxiv](http://arxiv.org/abs/1406.4729?ref=sudormrf.run)

어떤 input size의 image도 fixed size의 vector output으로 나오게 함.  
기존 AlexNet같은 경우 227x227 사이즈의 이미지만 input으로 가능했다. (한 2년 전 얘기.)  
그 이유는 **CNN에서 Convolution은 input size에 상관이 없으나, Fully Connected(FC) layer에서 input size가 반드시 고정되어야하니까**.  
Convolution은 filter로 convolution 계산만 하는 개념, FC는 fixed input size에서 fixed output size로 transformation을 하는 개념이다.

![](https://ww3.sinaimg.cn/large/006tNc79gy1fcgzkkvnttj30o3082jsz.jpg)  
위의 AlexNet을 보면 마지막 layer에서 1000개가 나와야해서 결국 input image가 227x227이어야만 했음.  
FC는 데이터를 transformation하는 개념이었는데 이는 사실 1x1 convolution layer라고 할 수 있음.  
실제로 Yann Lecun은 본인 페이스북 계정으로

> In Convolutional Nets, there is no such thing as "fully-connected layers".

라고 [주장](https://www.facebook.com/yann.lecun/posts/10152820758292143) 하심.  
하지만 이때는 예전이니까,  
SPPnet의 장점은 국문으로 [여기에](http://funmv2013.blogspot.kr/2015/06/spp-net.html?ref=sudormrf.run) 잘정리되어있음.  
이를 요약하자면  
![](https://ww1.sinaimg.cn/large/006tNc79gy1fcgzkmhjvuj30me09675k.jpg)  
본래 SPPnet 이전에 예를 들어 R-CNN은 정해진 사이즈로 input image를 만들어줘야해서 crop/warp을 하였는데 이때 이미지 정보가 손실되거나 변형되는 단점이 있다(위 image 첫번째 framework, 즉 기존 R-CNN). SPP가 들어감에 따라(두번째 framework)에서 어느 사이즈 이미지든 input으로 받을 수 있게 되었다. 아래 사진이 SPP layer인데 이를 Detection으로 사용하려면  
![](https://ww3.sinaimg.cn/large/006tNc79gy1fcgzl3antkj30la0g03zy.jpg)  
Image에서 Selective Search 등으로 Region Proposal한 영역을 CNN Forward computation 결과인 Feature map에서 pooling하고 SPP layer를 통과시킨다. RCNN은 2000개의 Region에 CNN을 모두 돌렸는데, 이번엔 image 전체에 CNN을 **한번만** 돌리고 나온 결과물인 feature map으로 detection을 수행한다. 그 결과 RCNN과 성능은 비슷하면서도 training/test 속도가 몇배로 빠르다.

---

# Fast-RCNN (FRCN)

### ICCV2015 [github](https://github.com/rbgirshick/fast-rcnn?ref=sudormrf.run) [arxiv](http://arxiv.org/abs/1504.08083?ref=sudormrf.run)

RoI pooling layer라고 SPP layer의 간단 버전. single level scale만 받음. 그래서 여기선  
SPPnet은 (예를 들어, VGG16 모델을 사용했을때) 3-layer softmax classifer만 fine-tuning이 가능한데, 그이유는 convoulutional features가 offline으로 작동함. 그래서 Back-propagation이 안되서 첫 l3 layers만 초기값으로 고정되고, 마지막 3 layer만 업데이트.  
그래서 SPPnet은 R-CNN에서 개발한 ROI-centric하게 training가능함.  
RoI에 대해서 계산하는데 보통 RoI 크기가 원본 image 만함. 그래서 느리고 메모리도 너무 많이든다. 하지만 FRCN에서는 image-centric임. mini-batches들이 hierarchically 샘플되는데, 이미지 그다음 그 이미지의 RoI들에 대해서. 한 image에 대한 RoI들은 computation, memory 공유함.

> 개인적으로 전체적인 아이디어는 SPPnet과 비슷한데, 더 나은 방식으로 Back Propogation 알고리즘을 설계해서 기존의 SPPnet이 Conv layers들을 학습시키지 못한 단점을 보완한 것으로 보인다.

### BP thourough RoI pooling layer.

우선 RoI pooling layer를 다시 설명하자면 이미지 input size가 다양해도 output vector size를 고정시켜주기 위해 쓴다.  
![](https://ww2.sinaimg.cn/large/006tNc79gy1fcgzl4rh44j30oo0ddq49.jpg)

> image credit from [caffe-cvpr150-detection](http://tutorial.caffe.berkeleyvision.org/caffe-cvpr15-detection.pdf?ref=sudormrf.run)

S: 이미지 scale이라서 1 또는 5  
그래서 RoI pooling layer 전에 `Conv5 feature map blob size`가 어떻게 생기던 `Pool5`의 blob size는 항상 2000x500x6x6가 됨.

무튼 요지는 SPPnet의 input size에 상관없는 장점을 살린 것과, CNN computation을 단 한번으로 detection을 해내서 속도를 빠르게 해냈다는 것. 하지만 여전히 Region Proposal을 필요로 하기때문에 여기서 bottleneck으로 작용한다.

---

# *Faster*\-RCNN (Region Proposal Network)

### NIPS2015 [python-github](https://github.com/rbgirshick/py-faster-rcnn?ref=sudormrf.run) [official-matlab-github](https://github.com/ShaoqingRen/faster%5Frcnn?ref=sudormrf.run)

[arxiv](http://arxiv.org/abs/1506.01497?ref=sudormrf.run)  
Region Proposal의 bottleneck을 해결했는데 이를 기발하게 Classification에서 사용되는 CNN weight를 재사용했다. 그리고 그 결과를 논문에서 제시한 Region Proposal Network에서 Region을 추론한다. 더 자세한 내용은 다음에 다루겠다.

## review and comment

여기서 소개한 모든 알고리즘들이 코드를 공개해오는데, 딥러닝의 장점을 살린 Detection 연구가 불과 2014년도에 시작(R-CNN)했음에도 엄청난 속도로 알고리즘이 보완되고 있다. 요번에 발표한 ILSVRC2015의 순위권들이 Faster-RCNN을 기반인데, 오픈소스가 확실히 기술을 빠르게 발전시키는 것 같다.

---

1. Selective Search로 2000개 proposal 뽑을 때 image 크기에 따라 다르지만 2초 정도 걸린다. edgebox는 약 0.2초. 그런데 AlexNet의 Forward 속도는 이보다 빠름. [↩︎](#fnref1)