논문: Rich feature hierarchies for accurate object detection and semantic segmentation,
Ross Girshick et al. CVPR. 2013
Referance: https://arxiv.org/pdf/1311.2524.pdf
궁금한 점은 댓글로 남겨주시면 감사하겠습니다. 😊
잠깐!! Object Detection이란..
- input: image
- ouput: bounding box(Regression), Classification
Regression(bouding box의 좌표값)을 통해 object가 어디에 있는지, object가 무엇인지(Classification) 예측하는 것이 Object Detection이다.
2013.11 R-CNN이 등장
- 기존의 object detection에서 처음으로 CNN을 적용시킨 model이다.
- 기존의 방법은 복잡한 앙상블 모델을 이용하였다. 그런데 2012년 ImageNet을 통해 우승한 AlexNet을 보고 CNN을 기반으로 한 Object Detection을 수행해 PASCAL VOC 2012의 성능 mAP를 30% 정도 향상시켜 큰 주목을 받았다.
부연설명
- PASCAL VOC dataset에서 Object Detection의 가장 좋은 성능을 냈던 것은 high-level contex의 복잡한 ensembl모델이었다.
- 2012년 ImageNet 에서 CNN을 이용해 높은 accuracy를 보여줌, 이를 통해 ImageNet 에 대한 CNN classification의 결과를 PASCAL VOC object detection에 일반화의 궁금증으로 본 논문에서는 이를 실현시킨 CNN이 기존의 HOG 기반 시스템들 보다 VOC 2012 데이터를 기준으로 이전 모델에 비해 mAP(mean average precision)이 30%이상 향상된 더 simple하고 확장 가능한 detection 알고리즘을 소개한다.
이미지 인식에 사용된 데이터 셋
- PASCAL VOC(object detection에 적합한 dataset): image bounding box, class값 존재/ 데이터 양이 적음(class N= 20)
- ILSVRC(classificaion에 적합한 dataset): class값 존재/ 데이터 양 많음(class N= 200)
이 당시 2013년 12월에 Overfeat(sliding-window detector을 적용)과 함께 등장했는데, ImageNet 대회에 참가해 주목을 받았지만, 대회에 참가 하지 않은 R-CNN이 mAP 성능이 더 좋아서 CNN 기반의 최초의 Object Detection 방법이 되었다.
실제로 ILSVRC 2013 detection dataset(200개의 class)에서 R-CNN이 성능이 더 높았다.
Region proposals X CNN
Absteact
최종 Ouput!!!
본 논문에서는 적은 labeling이 된 PASCAL VOC 2012 데이터 셋을 통해 obejct detection을 예측하고자 한다.
- Classification: 어떤 객체인가?(2개의 값)
- Regression: 어디에 있는 객체인가?(2개의 중심점의 위치 좌표, bounding box 크기 좌표 2개)
2가지의 insight (R-CNN 해결 과제)
- bottim-up region proposals를 CNN에 적용해 localiz, segment를 수행하였다.
- PASCAL VOC은 labeling이 붙은 데이터가 부족했다.(bounding box가 붙은 label) 이를 위해 기존의 AlexNet에서 사용했던 ILSVRC를 이용해 pre-trainig을 한 뒤에, VOC 2012 데이터셋에 맞게 fine-turning을 했다.
부연설명
2. PASCAL VOC 데이터셋의 경우 labeled된 training data가 부족했는데, 이를 해결하기 위해 fine-tuning거친 pre-trained을 이용해서 성능을 매우 높일 수 있다.
<그래서 본 논문에서는 2가지의 방향 제시>
1. 기존의 window sliding 방법이 아니라 selective search를 이용
2. 학습 방법의 경우 labeled된 training data가 부족할 때, domain 기반으로 fine-tuning거친 pre-trained을 이용해서 성능을 매우 높일 수 있다.
Introduction
Classfication의 CNN의 주목
기존의 이미지 Classfication은 CNN이 가장 성능이 좋았다. 하지만 1990년 SVM(support vector machine)의 등장으로 금새 CNN의 인기는 식었지만, 2012 AlextNet이 ILSVRC에서 우승을 차지에 CNN이 주목을 받게 되었다.
(AlextNet: CNN을 변형시킨 model로 병렬처리 연산이 가능,
e.g.,성공 계기: max(x:0) LeRu- 활성화 함수, dropout-규제)
그렇다면 Classification에서 Image Net의 성공으로 이끈 CNN을 PASCAL VOC에 Object Detection을 일반화할 수는 없을까?
R-CNN 구조
- 이미지를 입력 받는다.
- 2000개의 독립적인 region proposals을 추출해서 wrap 시킨 후 AlexNet(CNN)에 넣어준다. 이를 통해 각 proposal 마다 고정된 길이의 feature vector를 추출합니다.
- Classifiy regions 진행
- Classification/ Regression
- dataset의 label
-
더보기
label: bounding box(continous), class(discrete) 필요하기 때문에 linear SVM을 적용한 뒤, classification을 수행합니다.
- Classifiy regions
Rigions with CNN 좋은 성과를 얻기 위한 방법
- localizing을 실행하였다.
- regression problem 관점에서 바라본다
- sliding window detector- 기존의 object detection 문제
- recogniction using regions
- training dataset(pre-training→ fine turning)
- labeled data가 부족한 상황에서 large CNN을 만들기
- pre-trained된 AlexNet(CNN)을 이용, PASCAL VOC으로 목적에 맞게 fine turning을 한다.
- 적은 dataset에 fine turning 적용한 결과 mAP 성능이 8%가 높아져 효과적이라는 사실을 알 수 있다.
외에도, 효율적인 시스템
- greedy알고리즘을 사용한 non-maximum supperssion 방법을 통해 계산량을 줄였다.
- NMS(non-maximum supperssion): 중복되는 region proposals를 제거하는 방법,
RoI, IoU 사용 = 교집합/합집합 - * regions을 사용하기 때문에 semantic segmentation에도 적용할 수 있음
- NMS(non-maximum supperssion): 중복되는 region proposals를 제거하는 방법,
Object detection with R-CNN
3가지 module 사용
- category-independent region proposal: image classification에 넣을 region proposal
- large convolutional network: feature map 추출
- a set of class-specific linear SVM: image classification
1. region proposals
1) selective search vs sliding window
- Selective search 사용: R-CNN 추론시, Bounding Box Regression시 2번 사용된다.
- image에서 Selective search 알고리즘을 통해 class와 무관한 object로 추정되는 2000개의 Region을 추출 (Bounding Box 추출)
- ramdom하게 2000개의 region proposal을 추출
- selective search: 그래프 이론을 사용, 그룹핑을 통해 여러개로 만든 resion proposal을 제거하는 방식
- 기존의 sliding window: 동일한 크기의 bounding box를 그려 모든 이미지의 pixel을 훑어 지나가는 방식이었다. 이 방법은 배경과 object 모두 잡아내기 때문에 object를 못 잡아낼 확률이 높으며, 속도가 느리다.
-
목표: traininng: P를 G에 맞춰가며 transform, 객체를 더 잘 인식하기 위해 bounding box 조절(마지막에 수행됨)
Selective Search로 만들어낸 Bounding Box는 아무래도 완전히 정확하지는 않기 때문에 물체를 정확히 감싸도록 조정해주는 선형회귀 모델(Bounding Box Regression)을 넣습니다.
Bounding Box regression은 지역화(localization) 성능을 높이기 위해 사용되므로 Bounding Box를 도출하는 수식을 살펴보겠습니다.
본 논문에서 보면, (1), (2), (3), (4) 식에서 G hat들은 G(Ground Truth)와 최대한 가까워질 변수, (1), (2), (3), (4) 식에서 G hat을 G(Ground Truth)로 바꾸고 d를 t로 치환하여 t에 대해 나타낸 것이 (6), (7), (8), (9) 식입니다.
- (Ridge)L2 loss regularization 연산, t와 d의 차이인 Loss를 줄이며 학습
- W(Parameter): Ramda: 1000
본 논문에서는 람다를 1000으로 설정해 L2 loss 형태에 regularization이 연산되어 해당 loss를 최소로 만드는 w(parameter)를 학습을 통해 찾습니다. 그러면 최종적으로 (6), (7), (8), (9) 는 실제 bounding box가 됩니다.
2) Feature extraction : image -> Warpings -> feature vector
- selective search로 region proposal을 추출한 후에 227x227 크기로 warping(=resize)된다.(fc layer는 고정된 input을 갖기 때문에 wrap해줘야 함)
- Caffe를 통해서 pre-training된 AlexNet(CNN)을 통해 각 region proposal에 대해 순전파 연산으로 4096차원의 feature vector을 추출한다.
wrap(확대)= padding(p=16)을 넣고, (227*227)으로 팽창시킴 (p=16일 때, mAP이 3-5 정도 더 좋았음)
3) CNN Claaifier: linear SVM
Input: 2000x4096 feature vector
Output: class를 예측/ SVM을 이용해 confidence score 계산
- 추출한 feature map을 통해 classification을 수행
- 얻은 boundin box들은 여러개 존재, 이때 나온 score를 통해 NMS를 수행해 1개의 bounding box를 만든다.
- greedy NMS(Non-Maximum Suppression) 사용함
- 더보기
boundin box 중 가장 큰 값을 선택, 주변에 있는 region proposals과 IoU를 확인해서 특정 IoU의 threshod 값을 넘으면 greedy한 방법으로 region을 제거 하는 방식으로 수행
- IoU(Intersection over Union): 추출된 bounding box(region)의 전 영역 중 겹치는 region -> 겹치는 부분이 클수록 IoU가 크다.
- 더보기
2. Test-time detection
seletive search에서도 여러가지 mode가 있는데, 그 중에서도 fast mode를 사용해서 2000개의 region proposals를 추출했다.
Run Time 분석
- CNN의 parameter는 모든 category에서 공유된다.
- CNN을 통해 계산되는 특징 벡터는 저차원이다. (CNN: 노드에 연결되는 가중치가 적어서)
- test set:이미지 당 GPU의 속도가 13초 걸린다. (당시 굉장히 빠른 시간)
- class- specific의 연산: features, SVM weight, NMS
3.Training
- Supervised pre-training: ILSVRC2012(dataset) (ILSVRC2013, 예측해야 할 class N=1000개 )
- Domain-specific fine-turning: SGD(stochastic gradient descent) (VOC, class N=20: 21개 넣음)
ILSVRC2012을 통해 이미지 분류만 미리 학습(pre-trained)한다.
자신의 Domain에 맞게 fine-turning으로 prameter를 학습시킨다.
fine-turning: CNN prameter에 warp한 region proposals을 이용해 SGD를 수행
(ILSVRC2012의 class 수와 VOC의 class의 수가 맞지 않기 때문에 이를 맞춰줘야 한다.)
SVM의 경우 0,1로 되어있기 때문에 background 1개를 추가 시킨다.
즉, N+1개(N개의 class와 1개의 background)의 classfication layer를 구성한다.
feature map: 4096차원
fine-turning하면: 4096 x 1000 -> 4096 x 21 로 바꾼다
SVM: 특정 class에 해당하는지 여부만을 판단하는 이진 분류기(binary classifier)
: N개의 class를 예측한다고 할 때, 배경을 포함한 (N+1)개의 독립적인 linear SVM 모델을 학습시켜야 한다.
- image(positive:class / negative: background)
- Positive sample : ground truth box
- SVM Negative sample: IoU < 0.3 로 예측한 bounding box
- fine-turning Negative sample: IoU < 0.5 로 예측한 bounding box
- 32개 positive windows, 96개 negative windows (negative가 많은 이유: object가 포함된 영역이 작기 때문)
- 수행
- ground truth box, wraped proposed bounding box사이의 IoU로 이를 구분한다.
- positive/ negative 분류
- SGD 수행한다.
- mini batch size: 128(P:32, N:96)개
- learning rate: 0.001
- Validation 실험: SVM을 할 때는, positive sample이 ground truth box, negative sample의 경우 IoU의 threshod가 0.3 미만인 예측 bounding box로 할 때가 가장 좋았음- (배경과 같이 학습되기 때문인 듯)
- N,P 뽑을 때 overfitting을 방지하기 위해 hard negative mining을 사용한다.
✅ 여기서 잠깐!!!!!!!!! Positive vs Negative Example and Softmax
Why?
Q. fine-turning할 때의 positive & negative example와 SVM의 object detection을 training할 때의 IoU의 threshod값이 다를까?
A. mAP, 학습할 때의 배경 학습 정도에 따라 성능이 좌우됨
+ SVM 모델은 특정 class에 해당하는지 여부만을 판단하는 이진 분류기(binary classifier)입니다. 따라서 N개의 class를 예측한다고 할 때, 배경을 포함한 (N+1)개의 독립적인 linear SVM 모델을 학습시켜야 합니다.
- fine-turning threshod: 0.5
- SVM threshod: 0.3
4. Results on PASCAL VOC 2010-12
mAP: 35.1% -> 53.7%
VOC 2011/12 test에서는 53.3%
- R-CNN은 DMP: 기존의 objection model과, selective search를 사용한 UVA보다 R-CNN의 성능이 확연히 높으며,
- Bouding Box regression을 사용시 성능이 더 향상된다.
5. Results on ILSVRC2013 detection
class가 200개로 VOC보다 많기 때문에 mAP 성능은 더 떨어지지만, 그래도 다른 모델들보다는 성능이 제일 좋은 모습을 보임(mAP: 31.4%, Overfeat과 비교시에도 높음)
Visualization, ablation, and modes of error
1. Visualizing learned features
어떠한 layer가 detection performance에 영향을 미치는지 보기 위해 pool5 layer, fc6 layer, fc7 layer(마지막) 3개의 layer을 가지고 실험한다.
fine tuned된 CNN 모델(마지막 pooling layer- pool5)
- 그림은 ploo5의 layer 모습인데, 두번째 행을 봤을 때 강아지가 점으로 인식되는 등 적은 네트워크 수의 모양, 질감을 학습하고 FC layer에서 이들을 조합한 모델을 학습하는 것으로 보여진다.
- 학습된 결과를 보니 분류를 할 때 (색, 질감)의 정보를 통해서 객체를 분류한다는 사실을 알 수 있다.
2. Ablation studies
이미지 분류는 FC(Fully Connected) layer을 거치고 최종적으로 linear SVM을 거쳐서 output을 산출한다.
FT을 하지 않았을 경우: mAP으로 성능 비교한 결과 fc layer 와 pool5의 성능이 비슷하다. 이는 모델의 paramer 수가 줄어들기 때문. 즉, gpu 메모리에서 자유로워진다.
FT 수행(X) / 수행(O): pool5만 보면, 성능이 비슷하다. fc layer의 경우 FT 했을 때 상당히 높아진( 7-10%) 성능을 볼 수 있는데, 이는 FT를 수행하지 않고 pre-training만 하고 넣어주게 된다면, 기존의 ILSVRC의 dataset의 class의 수가 굉장히 많은데, FT하면 class의 수를 맞추고 넣어주게 되어서 fc layer가에서 성능이 많이 높아진 것을 확인해 볼 수 있다.
BB(bounding box)를 적용하면 더 좋아진다는 것을 다시 한번 확인해 볼 수 있다.
3. Network architectures
O-Net(VGGNet): conv layer 16개
T-Net(AlexNet): conv layer 5개
layer를 더 추가한 O-Net의 성능이 더 좋지만, 문제는 7배정도 느리다.
4. Detection error analysis
error가 발생하는 주 원인이 Loc: localization의 문제다. 1행의 3번째 BB를 한 경우를 보면 error가 확실히 줄어든 것을 확인해 볼 수 있다.
따라서 localization error를 줄이기 위해 Bounding-box regression를 고안했다.(위에 수식 참고)
Conclusion
- region proposal
- region proposal + large CNN을 적용해 30%의 mAP을 올리며 높은 성능 달성
- (Bounding Box 적용시 성능 향상)
- fine-tuning
- Training data가 적어도 large CNN을 학습을 통한 높은 성능 달성
Discussion
- Complexity
- Model: fine tuned AlexNet(CNN), linear SVM, Bounding box regressor 사용
- Model: data에 대한 positive/negative가 상이하며, dataset도 각각 구함 (Dataset 구축 후 load 과정도 상당히 복잡)
- Learning speed
- 2000개의 region을 추출 후 CNN에서 연산
- Selective search library- CPU에서 진행되었음. GPU보다 느릴 것
- Code
- 짧은 시기에 많은 발전을 이뤘기 때문에 Faster-RCNN 보다 code가 별로 없음
- Caffe 설치 (가장 복잡한 부분), R-CNN 설치, pre-computed models 다운, … 매우 복잡함