논문 : Rich feature hierarchies for accurate object detection and semantic segmentation
[Tips]
- 이미지 분류 task에 ImageNet이 있다면, 객체 탐지 task에는 PASCAL VOC이 있다. (Visual Object Classes)
- mAP : mean Average Precision : 객체별 AP의 평균값으로 객체 탐지 task에서 대표적으로 사용되는 metrics 중 하나
- 2012년 이미지넷 대회에서 CNN이 이미지 분류 task에서 우수한 성능을 보임
[Question]
"CNN으로 객체 탐지 task에서 좋은 성능을 낼 방법이 없을까?"
[ 위 문제를 해결하기 위한, 2가지 새끼 문제들]
(문제 1) 그 CNN으로 객체의 위치를 찾아내야 함 (localizing objects with a deep network)
(문제 2) 부족한 양의 annotated detection data로 높은 성능의 모델을 훈련시킬 수 있어야 함
(문제 1) : Localize objects with CNN
- 객체의 위치를 어떻게 찾을건데?
- 1st approach : 회귀 문제로 보자. ( x: mAP 개선 거의 없어서 탈락 )
- 2nd approach : sliding-window detector를 만들어보자. ( x : 그런데 R-CNN은 conv layer가 5개라, 수용 영역이 매우 크고, 이는 sliding-window paradigm으로 정확한 위치 찾기를 어렵게 만들기 때문에 탈락, R-CNN 전 sota model인 OverFeat은 이 방법을 이용함)
- 그럼 어떻게 할건데?
"We solve the CNN localization problem by operating within the "recognition using regions" paradigm."
- 도식은 아래와 같음
(문제 2) : labeled data insufficient for training
- 객체 위치를 탐지하는 모델이면 당연히 객체 위치를 bbox로 라벨해놓은 데이터가 필요하지. 근데 부족하단 말이다.
- 그럼 어떻게 할건데?
"supervised pre-training on alarge auxiliary dataset (ILSVRC), followed by domain specific fine-tuning on a small dataset (PASCAL), is an effective paradigm for learning high-capacity CNNs when data is scarce"
이제 R-CNN으로 어떻게 object detection task를 수행하는지 살펴보자.
Object detection with R-CNN
▶ R-CNN 모델 구조
- R-CNN은 3개의 모듈로 구성됨.
- Selective Search(region proposal) -- CNN(feature extraction) -- SVM + Regression
A. Selective Search
Sliding Window 방식은 계산량 너무 많음,
그래서 객체가 있을만한 후보 영역을 미리 찾고 그 영역 내에서만 객체를 찾는 방식인 Region Proposal (영역 추정) 방식을 이용.
R-CNN은 영역 추정 방식 중 하나인, 'Selective Search'를 이용함 (selective search에 대한 대략적 설명은 접은글에)
Q. Selective Search가 뭐임?
A. Selective Search is a region proposal algorithm for object detection tasks.
Exhaustive Search (객체가 있을 수 있는 모든 영역의 위치를 찾아냄)와 Segmentation (이미지 구조를 이용하여 샘플링에 가이드를 제공함) 의 장점을 합친 객체 탐지 알고리즘.
bottom up 방식
segmented parts에 대응하는 (후보) bbox를 모두 만든 다음에 유사도에 따라 비슷한 bbox끼리 그룹 지어주는 것, 계속 반복함.
∴ Selective Search를 이용하여 2,000개의 RoI (Region of Interest)를 생성함
B. Feature Extraction with CNN
①
먼저 CNN에 넣기 전에 'warping'을 수행한다.
(왜? : Pretrained된 feature extractor에는 입력받는 사이즈가 고정되어 있기 때문)
이는 서로 다른 크기의 RoI를 고정된 크기 ( 227 × 227 )로 모두 통일시켜주는 작업이다.
(논문에서는 bbox 주위에 16 픽셀 패딩을 준 다음에 warping을 수행함)
②
CNN architecture로, AlexNet을 이용함.
(VGG16 적용시, mAP의 개선이 관측되었으나, 연산속도가 너무 길다는 단점이 있음)
227 × 227 RGB 이미지로부터 ~ 5개의 Conv layer와 2개의 fc layer를 거쳐 ~ 4096차원의 feature vector를 추출한다.
C. SVM ( 객체의 클래스를 분류) + Regression (Bbox 위치 추정)
파인튜닝된 alexnet에 입력하여 추출된 피쳐 벡터를 linearSVM & Bounding Box regressor 모델에 입력하여 각각 confidence score와 bounding box 좌표를 얻는다.
?? 왜 기존의 AlexNet 마지막 softmax를 그대로 활용하지 않고 linear SVM 모델로 클래스를 분류하는 것일까?
softmax 함수를 이용해 클래스를 분류할 경우 mAP 수치가 떨어졌다고 한다.
알렉스넷 파인튜닝할 때, IOU 0.5 이상이면 positive sample로 분류하여 훈련을 시켰는데 이 과정에서 성능 하락의 원인을 찾을 수 있다.
<SVM>
input : CNN을 통과한, feature matrix : 2000×4096
linear SVM은 특정 클래스에 해당 하는지, 안하는지 분류해주는 이진 분류기이기 때문에
N개의 클래스에 대한 예측이 필요하다면, 배경까지 (N+1)개의 linear SVM 모델을 별도로 학습을 시킨다.
<Regression>
- predicted : bounding box coordinate p=(p_x,p_y,p_w,p_h) (중심(x,y)좌표, 너비, 높이)
- ground truth box coordinates g=(g_x,g_y,g_w,g_h)
위 그림에서 d_x(p), d_y(p), d_w(p), d_h(p) 를 학습하도록 훈련시킨다! (이 값들의 범위는 실수 전체)
이 4개의 값들이 아래의 식에서 t_i가 되도록, Loss Funtion L을 최소화시키는 방향으로 학습되는 것이다.
식을 보면 SSE + L2 norm (regularization term) 형태의 릿지 회귀식이다.
논문에서는 최적의 람다값을 cross validation으로 찾아내는데, 그 값은 1000이다.
(+) Non maximum suppression
non maximum suppression 알고리즘을 적용하여 최적의 bounding box를 출력한다.
학습된 모델이 하나의 물체에 대해 여러 개의 bounding box를 출력할 수 있기 때문이다.
1. 탐지된 bounding box별로 confidence threshold 이하인 bbox는 제거한다.
2. 특정 object category에 대한 여러 개의 bbox를 입력으로 받았을 때 :
- confidence score 내림차순으로 정렬
- 가장 confidence score가 높은 box와 나머지 box들의 IoU를 계산
- IoU threshold 이상인 IoU값이 계산된 bbox들을 제거한다. (동일 물체라고 판단할 수 있기 때문에 제거한다)
- 위 과정을 반복해서 남아 있는 bbox만 선택한다.
▶ R-CNN 모델 훈련
[AlexNet]
▼ Supervised pre-training
- ILSVRC2012 이미지 분류 데이터셋으로 CNN (Feature Extractor)을 사전훈련시킴
▼ Domain-specific fine-tuning
- 훈련 데이터 라벨링 방법 :
pascal voc 데이터셋에 selective search 알고리즘을 적용하여 후보 영역 선정
이때, Ground Truth box랑 0.5 IOU 이상인 후보 영역 = 해당 클래스(객체)로, 나머지는 background로 라벨링
- batch size = 128, lr = 0.001, SGD방식 훈련
[LinearSVM]
▼ Object category classifiers
- 훈련 데이터 라벨링 방법 :
(1) g.t box와 가까운 후보영역은 당연히 '객체(Positive sample)'
(2) 문제는 애매하게 걸친 후보영역들,
이 영역들에 대해서는 IOU 경계값을 {0, 0.1, 0.2, ..., 0.5}로 그리드 서치 결과 IOU = 0.3이하를 '배경(Negative sample)'이라고 보고 학습시 켰을 때 가장 성능이 높았다. (mAP높음)
- 클래스 하나 당 하나의 선형 SVM 훈련 : output은 그 클래스인지, 아닌지 (binary)
[ Hard Negative Mining ]
Negative(배경)인데 모델이 Positive(객체)로 인식한 케이스를 우리는 False Positive이라고 부르는데, 실제로 객체를 탐지할 때 객체보다 배경에 해당하는 샘플이 훨씬 많은 클래스의 불균형으로 인해 일어날 수 밖에 없다.
이 중에서도 그냥 진짜 배경이었는데 단순 오류이면 : "easy negative"
헷갈릴만한 노이즈, 또는 물체의 부분이 담겨있어서 생긴 오류 : "hard negative"
hard negative examples는 잘못 분류될 확률이 높다.
위와 같은 hard negative samples를 학습과정에 추가하여 재학습하면서 FP 오류를 낮추고 모델을 더 강건하게 만드는 기법이 바로 hard negative mining기법이다.
[Bounding box Regressor]
bounding box의 위치를 찾아내는 regressor도 마찬가지로
파스칼 이미지 세트에서 selective search를 통한 2000개의 region proposal의 bounding box를 학습데이터로 이용한다,
다만, 이 때 IoU 값이 0.6이상인 sample들만 선별하여 bounding box 좌표 (중심좌표, 너비, 높이)를 학습시킨다.
▶ R-CNN 모델 추론
▼ 추론 : 과정
- 추론단계에서도, input 테스트 이미지에 대하여 selective search를 통해 2,000개의 roi를 뽑아낸다.
- 제안된 각각의 영역마다 warping을 수행하고, CNN을 통과시켜서 특성을 뽑아낸다.
- 각 class (label)마다, 그 class에 맞게 훈련된 SVM을 이용하여 추출된 특성벡터에 대하여 점수를 매긴다.
- 수 많은 roi 중 일부는 떨궈내는 greedy non-maximum suppression (각 class에 대하여 각각)을 적용한다.
▼ 추론 : 시간 / 메모리
- ① 모든 분류 카테고리에 대하여 학습되는 파라미터가 공유된다는 점,
② CNN으로 계산된 feature vector가 저차원(4096차원)이라는 점에서 효율적인 추론이 가능함.
- 메모리도 덜 들고, latency도 적고, 그러면서 mAP도 높은 편
▶ R-CNN 모델 추론 결과 (성능)
▼ 결과 : PASCAL VOC 2010-12 데이터셋
- 2010 : 기존에 성능이 가장 좋던 SegDPM mAP 40.4%보다 개선 : mAP 53.7% 달성
- 2011-12 : 53.3% 달성
▼ 결과 : ILSVRC2013 데이터셋
- mAP 31.4% 달성 (2위 OverFeat : 24.3%)
참고자료 :
https://developer-lionhong.tistory.com/31
https://www.youtube.com/watch?v=jqNCdjOB15s
https://lilianweng.github.io/posts/2017-12-31-object-recognition-part-3/
'Study > 비전' 카테고리의 다른 글
[OCR] 광학 문자 인식 기술 (2) (2) | 2024.07.12 |
---|---|
[OCR] 광학 문자 인식 기술 (1) (2) | 2024.07.07 |
CV Tasks에 대하여 (2) | 2024.03.14 |