Fast R-CNN
This paper proposes a Fast Region-based Convolutional Network method (Fast R-CNN) for object detection. Fast R-CNN builds on previous work to efficiently classify object proposals using deep convolutional networks. Compared to previous work, Fast R-CNN emp
arxiv.org
0. 핵심 요약
기존의 R-CNN 보다 train 시 약 9배, test 시 약 213배 빠른 속도를 가짐
SPPNet과 비교했을 때 train 시 약 3배, test 시 약 10배 빠른 속도를 가짐
Object Detection에서 최초로 Single-stage 모델인 Fast R-CNN 제안
1. BackGround
- Object Detection vs Classification
논문의 저자는 object detection이 classification에 비해 어려운 task라고 이야기 한다
그러한 이유로 총 2가지를 제시
1. region proposal이 반드시 있어야 한다
object detection은 classification과 다르게 해당 객체를 분류할 뿐만 아니라 객체의 위치를 찾아야 하기 때문에 더욱 어렵다고 언급
2. rough 한 지역을 정확하게 조정하는 과정이 필요하다
최초의 모델에 입력되는 region proposal은 객체의 위치를 정확하게 예측한 곳이 아닌 기존의 정의된 random한 위치
따라서 학습을 통해 해당 위치를 세밀하게 조정하는 것이 필요
본 논문에서는 이러한 이유로 오래 걸렸던 기존의 detection을 single-stage로 변경
- R-CNN의 문제점
1. multi-stage → 기존의 R-CNN은 object proposal, SVMs, bounding box regressor 로 총 3 단계로 구성
2. training expensive → 학습 시 모델의 크기나 학습 시간 모두 비효율적
3. object dtection is slow
더욱 자세한 내용은 이전 논문 리뷰를 참고
https://rltjq09.tistory.com/12
Rich feature hierarchies for accurate object detection and semantic segmentation(R-CNN) Review
0. 핵심 요약 localize와 segment objects를 위해 bottom-up region proposal을 수행하는 CNN 제안 labeled data 부족 시, 다른 task의 데이터를 활용하는 기법 사용 Region proposal + CNN → R-CNN 제안 1. BackGround - 기존의 Obj
rltjq09.tistory.com
- Selective Search
Selective Search란 모델이 bbox를 예측하기 전, 모델에 입력하는 RoI를 생성하는 알고리즘
이를 수행하는 과정은 다음과 같다
1. 입력 이미지에 대해 segmentation을 수행
2. 비슷한 영역은 점차 합쳐나가면서 segmentation된 부분을 줄여나감
3. 해당 부분을 기준으로 box 좌표를 생성
이렇게 하면 이미지의 정보를 어느정도 반영한 box를 생성할 수 있고 random하게 박스를 생성하는 것이 아니기 때문에 효율적으로 box를 생성해낼 수 있음
2. 논문 핵심 내용
- RoI Pooling Layer
RoI(Region of Interest)는 모두 다른 사이즈를 가지고 있음
하지만, ConvNet은 고정된 사이즈를 요구하므로 이를 동일하게 맞춰주는 작업이 필요
이를 수행하는 것이 RoI Pooling Layer
이를 수행하는 과정은 다음과 같다
우리는 해당 layer를 통해 우리가 사전에 정의한 크기인 (H, W)로 feature map을 변환하고자 한다
이때 RoI Projection을 통해 나온 feature map의 크기가 (h, w)라 할 때, 각 RoI 는 (r, c, h, w) 좌표로 표현
위 그림을 보면 이해가 쉬울텐데, (h, w)의 크기를 우리가 원하는 (H, W)로 만들기 위해 다음 그림과 같이 분할을 진행
그 후, 각 grid 마다 max pooling을 진행하여 grid의 값을 결정
- 기존 VGG16과의 차이점
해당 논문에서는 detection 데이터만으로는 학습이 불가능해서 ImageNet 데이터로 학습한 모델을 활용하고자 함
하지만 모델을 그대로 사용하는 것이 아닌 총 3가지 변형을 통해 활용
1. 기존 모델에서 사용된 마지막의 Max Pooling을 RoI Pooling으로 변경
2. 마지막 classification을 위한 fc layer를 class와 bbox를 예측하는 2개의 fc layer로 대체
3. input이 단일 이미지에서 이미지 + RoI set으로 변경
- parameter sharing
본 논문에서는 학습 속도 개선을 위해 sharing을 사용
해당 모델은 SGD 방식을 통해 모델을 학습하는데, 이때 미니 배치 구성을 할 때 image N개, RoI ${R \over N}$개로 sampling (이때 N은 2, R은 128로 설정)
이는 다르게 말해서 image는 같고 RoI는 다르게 하여 image 별로 computation을 공유해 cost를 줄이겠다는 것
다음과 같은 학습 방법으로 기존 R-CNN과 비교했을 때 약 64배 빠른 학습 속도를 보임
또한, 기존에는 multi-stage 였기에 각 stage마다 서로 다른 fine-tuning을 수행해야 했지만 해당 모델은 single-stage이기 때문에 1번의 fine-tuning만 수행하면 된다는 이점이 존재
다음과 같은 sampling 시 IoU 값이 0.5 이상인 것은 class, IoU가 0.1~0.5 사이인 것은 background로 사용
이때 0.1 미만인 것들은 오히려 학습에 방해가 된다 판단해 아예 제거하였다고 함
또한, 0.5의 확률로 horizontal flip를 적용
- Loss Function
해당 모델의 output은 다음과 같다
각 class 별 확률 : $p = (p_0, \cdots, p_k)$
각 class 별 bbox : $t^k = (t^k_x, t^k_y, t^k_w, t^k_h)$
$u$는 class의 ground-truth, $v$는 bbox의 ground-truth
전체 모델의 loss function은 다음과 같다
$L(p, u, t^u, v) = L_{cls}(p, u) + \lambda [u \geq 1] L_{loc}(t^u, v)$
해당 식에서 $[u \geq 1]$ 다음 부분은 iverson bracket indicator function으로써, u가 1 이상이면 1, 아니면 0을 출력하도록 한다
즉, box의 class가 background 라면 해당 box는 무시하도록 하는 것
위의 식을 두 개로 나누어 각각을 표시하면 다음과 같다
$L_{cls}(p,u) = -logp_u$
$L_{loc}(t^u, v) = \sum_{i \in {x, y, w, h}} smooth_{L_1}(t^u_i - v_i)$
각각의 역할을 설명하자면, class에 대한 loss는 실제 정답 class의 확률에 log 값을 취한 뒤 음수를 취한다
그렇게 되면 확률이 1에 가까울수록 점점 값이 작아지는 loss가 설정된다
다음으로 bbox에 대한 loss는 $smooth_{L_1}$을 통해 실제 정답 박스 위치와 예측한 박스 위치를 비교하게 된다
$smooth_{L_1}(x) = \begin{cases} 0.5x^2, & \mbox{if} \mbox{|x| < 1} \\ |x|-0.5, & \mbox{otherwise} \end{cases}$
해당 식은 기존 정규화 방식에 살짝 변형을 준 식인데, 해당 식을 활용하면 tuning 시 hyper parameter의 영향에 덜 민감하게 반응할 수 있다고 한다
3. Model Architecture
전체 모델 architecture는 다음과 같다
해당 모델은 입력 시 image와 object proposal의 집합을 입력
object proposal 집합 생성은 selective search 방법을 통해 수행
image는 ConvNet(VGG16)을 거쳐 feature를 생성하고 object proposal은 RoI projection 이후 feature와 함께 RoI pooling layer를 거쳐 feature vector를 생성, 해당 vector를 통해 class와 bounding box 좌표 값을 최종 예측
4. Experiment
해당 표는 다른 모델과 비교했을 때 속도 차이가 얼마나 나는 지를 비교한 표
이외에도 SVD에 대한 언급이 있는데, 이는 모델 내에 존재하는 fc layer에 대해 수행했다고 언급
해당 그래프는 SVD 전 후의 layer 당 걸린 시간의 비율을 시각화 한 그래프
fc layer에서 소모된 시간의 비율이 확연히 줄어든 것을 확인할 수 있다
5. Contribution
Fast R-CNN을 제안하는데, R-CNN과 SPPnet에 대한 빠르고 간결한 업데이트를 제시
이전에는 시간적으로 비용이 많이 드는 문제였지만 Fast R-CNN으로 실현 가능해짐
+ Comment
Fast R-CNN에서 처음 제시된 RoI Pooling 개념이 매우 독특했다
비록 현재에는 YOLO가 사실상 이 분야에서 top을 달리고 있지만 이러한 논문들이 있었기에 YOLO 역시 탄생할 수 있었다고 생각한다