[Paper Review] Rich feature hierarchies for accurate object detection and semantic segmentation (R-CNN)
카테고리: Paper
태그: Object Detection ML
Main Reference:
- Deep Learning for Computer Vision
- Life Time Study
Paper:
- Rich feature hierarchies for accurate object detection and semantic segmentation
Object Detection 배경지식 : 본 논문을 이해하는데 필요한 배경지식을 정리한 포스팅 입니다.
🚀 Abstract
(R-CNN 논문이 처음 나온 2013년 기준) 최근 몇 년 Object Detection의 성능은 정체기에 들어섰다. 가장 성능이 좋은 모델은 기존의 복잡한 모델들을 앙상블 한 것이다. 우리가 제안하는 모델은 기존 최고 성능의 모델보다 30% 향상된 53.3% mAP를 달성했다. 뿐만 아니라 비교적 간단하고, data set이 달라져도 확장이 쉽다. 우리 모델의 key point는 다음 두 가지이다.
- Detection 분야에 CNN 접목
- annotated data가 부족한 상황에서 기존의 패러다임을 전환
🚀 Introduction
샤라웃 CNN! Intro에서 저자들은 CNN의 발전 과정, Image Classification 분야의 성공을 짚어준다. 그러면서 CNN의 등장이 Detection 분야에 활력을 넣어주었다고 말한다. CNN을 어떻게 확장시켜야 detection에 접목할 수 있는지 많은 논의가 이루어졌고, 본 논문은 처음으로 CNN을 활용하여 드라마틱한 성능 향상을 이끌어냈다.
우리의 주요 관심사는 다음 두 가지였다.
- Localizing object
- Small quantity of annotated detection data
Localizing
Detection은 classify와 다르게 localizing이 필요하다. 우리는 localizing 방법으로 세 가지 접근을 고려했다.
- Localization as a regression problem
- 논문 하나를 reference로 두면서 현실적이지 않다고 한다.
- Sliding-window detector
- object detection의 Input은 high resolution Image이어야 함 (고해상도 이미지)
- Image size가 크기 때문에 conv, pool 과정을 여러 번 해야하는데, 그러면 receptive field가 너무 커지는 문제 발생
- Recognition using regions
- object가 존재할 만한 후보 영역을 제안해주는 region proposal 알고리즘 사용
- region proposal & cnn 궁합이 아주 좋음
- 본 논문 이전에 나온 overfeat 모델은 sliding-window 방식 (우리가 mAP 훨씬 높음)
- 논문 제목 나두고 왜 R-CNN이라 불러요?
- “We call our method R-CNN : Regions with CNN”
부족한 annotated data
하나의 사진. 수 많은 object들. 이 많은 data set을 누가 다 labeling 했을까.(대학원 가지 마?)
저자들은 training data가 부족할 때 전통적으로 해오던 방식과 다른 방식으로 접근했다고 한다.
- 기존의 모델들은 unsupervised pre-training → fine-tuning
- 하지만 우리는 패러다임을 전환했음
- classification에 사용된 data set으로 supervised pre-training
- 부족한 detecting data로 fine-tuning
- 즉, supervised pre-training → fine-tuning
- 이 방법을 사용하니 mAP가 8%나 향상되었다.
우리 모델의 장점
- CNN의 모든 parameters가 공유되기 때문에 기존 모델들 덕지덕지 붙인 앙상블보다 훨씬 가벼움
- Region-based라 segmatation하기도 좋음
- 간단한 box-regression 추가했더니 localizing도 아주 잘함
🚀 Model Architecture
R-CNN은 3가지 모듈로 구성되어 있다.
- Category-independent region proposals
- 최근 Region proposal에 관한 논문이 많이 나오지만 우리는 selective search 알고리즘을 사용했다.
- Convolutional Neural Networks
- Caffe Framework 사용 (버클리에서 만든 프레임워크, C++ 기반)
- AlexNet 사용
- A set of class-specific linear SVMs
- Region 별로 binary-classify
- Dog? no
- Cat? no
- Person? yes
- …
- Region 별로 binary-classify
Appendix A : object proposal transformation
Selective Search 알고리즘으로 region proposal을 받으면 제안받은 영역의 모양은 제멋대로일 것이다. 이 영역들로 CNN을 돌리려면 227x227로 사이즈를 맞춰줘야 하는데 이 과정을 ‘object proposal transformation’ 이라 한다. 우리는 여러 방법 중 가장 간단한 Warping 을 택했다. 다음 그림은 여러가지 transform에 대한 예시이다.
- (A) : 제안받은 영역
- (B) : tightest square with context
- 원본 이미지에서 영역을 포함하는 가장 작은 정사각형 선택
- 227x227로 resize
- (C) : (B)에서 배경 지우기
- (D) : Warping (영역 그대로 resize)
이때 그림의 아래 row는 테두리에 16 pixel씩 padding한 것이다. 패딩한 영역은 주변 pixel값의 평균으로 채웠다. Padding 추가시 mAP가 3-5% 증가하더라.
🚀 Training
- ImageNet 대회에서 쓰던 data set(ILSVRC2012 Classification)으로 CNN Supervised pre-training
- Annotated detection data로 fine-tuning
- 이때 (N+1) 개의 Category Classification
- N : number of object classes
- +1 : backgorund
- 즉, object가 아닌 영역이 들어오면 ‘이건 배경이야’ 라고 training
여기서 특이한 점은 CNN으로 feature vertor를 뽑은 후에 linear SVM으로 classify 한다는 것이다. 저자들도 softmax 쓰면 더 깔끔해지는 거 알고 있다고 말한다. 그런데도 SVM을 사용한 이유는 Appendix B에 적혀있다.
Appendix B : about positive & negative example
기존의 전략은 IoU 0.5값을 기준으로 positive, negative를 구분하는 것이다. 그 후 positivie example은 해당 class로, negative example은 background class로 training 한다. 하지만 이렇게 하니 문제가 발생하더라.
- 클래스 불균형 (background region이 훨씬 많음)
- 애매하게 겹친 region들이 오히려 훈련을 방해
Hard negative example
따라서 저자들은 IoU 0.5값을 기준으로 postive/negative를 나누지 않았다. 중간에 회색지대 (gray zone)를 만들고 이들을 훈련데이터에서 제외시켰다. softmax는 positive 아니면 무조건 negative이기 때문에 이러한 작업이 불가능하다.
- hard negative의 IoU 기준 값 0.3은 그리드 서치로 찾은 하이퍼 파라미터다.
- 이 값이 생각보다 중요하더라
- 0.5로 설정하면 mAP 5% 감소
- 0으로 설정하면 mAP 4% 감소
이렇게 뽑은 hard negative region 96개, positive region 32개 (총 128개) 로 minibatch 훈련시켰다. 결과적으로 mAP도 향상되고, 수렴 속도도 빨라졌다.
🚀 Bounding-box regression
우리는 이전 모델에서 영감을 받아 bounding box regression 모듈을 추가했다. 복잡한 수식으로 표현되어 있지만 내용은 다음과 같다.
- box는 x좌표, y좌표, 넓이, 높이로 주어짐
- selective search가 예측한 predict box
- x좌표, y좌표 : 평행이동 변환
- 넓이, 높이 : 원래 값 비례해서 변환
- 변환 후 box가 Ground-truth box (실제 box)와 같아지도록 training
- 변환 값들은 class 별로 4개씩 training
bounding-box regression은 왜 필요할까?
개인적인 생각입니다. 논문에 나오는 내용은 아니니 참고해주세요.
Appendix C : about box regression
- box regression term + lasso 규제 term
- 람다 값 1000으로 규제 굉장히 강하게 함
- 미세 조정
- 단순한 positive box가 아닌 진짜 가까운 box들로만 훈련
- IoU 0.6 이상
- box regression training하니 모델의 성능이 향상되었음
- 테스트 타임에서 box regression 반복은 의미 없었음. box 조정은 한 번만
🚀 Detection data set
본 논문에서 사용한 detection data set은 ILSVRC2013이다. 이 data set은 200가지 종류의 클래스들을 가지고 있고, train(395,918), val(20,121), test(40,152)개로 이루어져 있다. 근데 data set에 문제가 있었다.
- Training data의 annotation이 불완전하다
- 이러면 object를 background로 인식해버리기 때문에 불완전한 train data 들은 모두 제거함
- 결과적으로 training data가 부족하여 validation data로도 훈련을 진행함
- Input image의 size범위가 아주 작은 것부터 mega-pixel까지 매우 큼
- region proposal에 영향을 주어서 width를 500으로 비율 맞추고 시작했음
Data set에 따른 성능 비교
- training set 개수를 5000개 늘려주니 성능 향상
- training set 5000개 더 추가했더니 영향 없었음
- CNN fine-tuning 해주니 성능 향상
- fine tuning 할 때 training set 개수 늘려주니 성능 향상
- box regression하니 성능 향상
🚀 Conclusion
우리는 Computer Vision 분야에 Deep Learning 기술을 성공적으로 결합시켰다!
댓글 남기기