객체 인식을 위한 신경망
객체 인식(object detection) 은 이미지나 영상 내에 있는 객체를 식별하는 컴퓨터 비전 기술입니다. 즉, 객체 인식이란 이미지나 영상 내에 있는 여러 객체에 대해 각 객체가 무엇인지 분류하는 문제와 그 객체 위치가 어디인지 박스(bounding box)로 나타내는 위치 검출(localization) 문제를 다루는 분야입니다.
딥러닝을 이용한 객체 인식 알고리즘으로는 1단계 객체 인식(1-stage detector)와 2단계 객체 인식(2-stage detector)으로 나눌 수 있습니다. 1단계는 분류와 위치 검출을 동시에 하는 방법이고, 2단계는 순차적으로 하는 방법입니다. 이로인해 1단계 객체 인식은 빠르지만 정확도가 낮고, 2단계 객체 인식은 비교적 느리지만 정확도가 높습니다.
2단계 객체 인식은 CNN을 처음으로 적용시킨 R-CNN 계열이 대표적이며, 1단계 객체 인식에는 YOLO(You Only Look Once) 계열과 SSD 계열 등이 포함됩니다. 여기서는 R-CNN 이 무엇인지 논문을 읽으며 차근차근 알아보겠습니다.
Instance segmentation
참고로 위와같이 bounding box 를 사용하여 그 안의 인스턴스의 정보를 알려주었다면, Instance segmentation은 각각의 사물 인스턴스를 픽셀 단위로 분류하는 것을 말하는 것입니다. 즉, 해당 픽셀은 어떠한 인스턴스에 포함되어 있는 픽셀이다와 같이 말이죠. 이 논문 다음에 Fast-RCNN, Faster-RCNN, Mast-RCNN을 차례로 알아보고 이제 Segmentation에 대해 본격적으로 UNet과 같은 아키텍쳐를 살펴보도록 하겠습니다.
R-CNN (Region-based Convolutional Neural Networks)
우선 R-CNN은 OverFeat이라는 알고리즘의 성능을 뛰어넘었습니다. OverFeat은 슬라이딩 윈도우 검출기(Sliding-Window Detector) 기반의 객체 탐지 알고리즘으로, 본 논문을 발표하기 전까지 성능이 가장 좋았습니다.
CNN은 원래 SVM이 나타나면서 인기가 식었었습니다. 하지만 2012년 이미지넷(ImageNet) 대회에서 CNN이 우수한 분류 성능을 보여 다시 주목을 받기 시작했습니다. 레이블된 이미지 데이터 120만개를 사용해 깊은 CNN을 훈련했는데, LeCun 교수의 CNN 모델을 조금 바꾸어서 좋은 성능을 냈던 것이죠.
이미지넷에서 CNN이 좋은 성능을 내자, 이미지넷에서 CNN이 성공한 결과를 PASCAL VOC의 객체 탐지에 적용할 수 있을지 말이죠. 본 논문 저자는 말을 합니다. CNN이 PASCAL VOC에서도 우수한 객체 탐지 성능을 낼 수 있다고요. 다시 말해, 지금까지 CNN은 이미지 분류에서만 우수한 성능을 보였는데, 객체 탐지에서도 좋은 성능을 낼 수 있다고 본 논문을 통해서 증명해 냅니다.
이런 성과를 얻으려면 두 가지 문제를 해결해야 합니다. 1. CNN으로 객체 localization 하는 문제, 2. annotation 된 데이터가 부족한 상태에서 모델을 학습해야 하는 문제.
이제 1을 해결하기 위한 방법에 대해 간단히 살펴보겠습니다.
R-CNN의 동작 방식은 위와 같습니다.
- 이미지를 입력으로 받습니다.
- Selective search 알고리즘을 통해 객체가 있을 법한 위치인 후보 영역(region proposal, bounding box)을 2000개 추출한 후 잘라내고(cropping), CNN 모델에 넣기 위해 같은 크기(227x227 픽셀)로 통일합니다(warping).
- 크기가 동일한 이미지 2000개에 각각 CNN 모델을 적용합니다.
- 각각 분류를 진행하여 결과를 도출합니다.
Region proposal by Selective search
여기서 Selective search 란객체 인식이나 검출을 위한 가능한 후보 영역(객체가 있을 만한 위치, 영역)을 알아내는 방법입니다.이는 분할 방식을 이용하여 시드(seed)를 싱성하고, 그 시드에 대한 완전 탐색을 적용합니다. 이에 대한 간단한 순서는 아래와 같습니다. ( 기존의 Sliding window 방식은 너무 연산량도 많고, 실제 객체가 있을 확률이 Selective search보다 낮음 -> 비효율적이라는 소리)
- 초기 영역 생성(sub-segmentation): 각각의 객체가 영역 한 개에 할당될 수 있도록 많은 초기 영역을 생성합니다. 즉, 입력된 이미지를 영역 다수 개로 분할하는 과정이라고 할 수 있겠습니다.
- 작은 영역의 통합: 1단계에서 여러 개로 나눈 것들을 비슷한 영역으로 통합하는데, 이때 탐욕(greedy) 알고리즘을 사용하여 비슷한 영역이 하나로 통합될 때까지 반복합니다.
- 후보 영역 생성: 2단계에서 통합된 이미지들을 기반으로 위 그림과 같이 후보 영역(bounding box)를 추출합니다.
Selective Search
그리고 Selective search에서 무작위로 분할된 colour, texture, size, fill 4가지의 값을 통해 유사도를 계산하여 유사한 것끼리 merge하는 과정을 거친다는 소리입니다.
Warp Image
이는 Selective search에서 발견한 Regional 후보들을 Pre-trained 된 CNN구조 (AlexNet) 에 넣기 위해서는, 고정된 크기의 input 이 필요합니다. 그 이유는 우리가 고정된 크기의 output vector를 얻고 싶기 때문입니다. 이에 실제 Region 후보들의, 너비, 높이등의 값들이 고정된 값으로 줄어들기 때문에, 이러한 이미지 정보들이 일부분 왜곡될 수 어, 최종적인 성능에 문제가 발생할 수 있습니다.
Feature Extraction
논문에서는 다시한번 말하지만 Pre-trained된 CNN구조로 AlexNet을 사용하는데, 이를 위에서 만든 Warp Image를 통과시켜서 고정된 크기의 feature vector를 생성해 내게 됩니다.
그리고 제가 여기서 가장 의문이였던 점이 있습니다. 그럼 warp image에 대해서 추출된 고정된 크기의 이미지는 라벨이 없을텐데 이를 어떻게 fully-connected layer의 output unit의 사이즈만 바꿔서 SGD든 GD든을 통해서 모델을 학습시켜나가는거지?? 이에 대한 답은, 아래에서도 쭉 설명하겠지만, 실제 ground truth box(실제 우리가 이거이길 원하는, 수작업 라벨링일듯), 우리의 warp image의 IoU를 계산한 다음에 ground truth box 라벨을 취하는 것으로 학습시킨다고 합니다.
- IoU >= 0.5: 실제 ground truth box로 라벨링 (Positive sampling)
- IoU < 0.5: background로 라벨링 (Negative sampling)
그럼 2를 해결하려면 어떻게 해야 할까요?
객체 Localization 문제는 위와같이 Regional Proposal 기법으로 해결했습니다. 다음으로 해결해야 하는 문제는 레이블된 데이터가 부족하다는 점입니다. R-CNN은 깊은 CNN 구조를 가졌는데, 이렇게 큰 CNN을 제대로 훈련할 정도의 데이터가 부족합니다. 이 문제를 해결하려고 R-CNN 연구진은 ILSVRC의 많은 데이터로 사전 훈련(pre-training)을 한 뒤, 적은 수의 PASCAL 데이터로 원하는 도메인에 맞게(domain-specific) 파인 튜닝(fine-tunning)을 했습니다. ILSVRC의 보조 데이터를 활용해 사전 훈련을 하기 때문에, annotation된 PASCAL 데이터가 적어도 파인튜닝만으로 좋은 성능을 낼 수 있조. 실험 결과 실제로, 파인 튜닝을 적용해서 mAP가 8%올랐다고 합니다.
실제로 CNN의 완전 연결 레이어는 일반적으로 최종 분류 레이어에서 사용되며, 이 레이어의 출력 뉴런의 수는 분류하려는 클래스의 수와잋리하게 됩니다. 이 맥락에서 말하자면, 클래스의 수에 따라 완전 연결 레이어의 크기를 바꿀 수 있게 됩니다.
예를 들어 모델을 ImageNet 데이터 셋을 사용하여 사전 학습한 후에, 새로운 작업에 대해 미세조정을 수행하려는 경우, 새로운 작업의 클래스 수에 따라 완전 연결 레이어를 재조정할 수 있습니다. ImageNet의 경우 1000개의 클래스를 가지지만, 새로운 작업이 10개의 클래스만을 가지는 경우, 이 완전 연결 레이어의 출력 뉴런의 수를 10개로 재조정합니다.
Ground-Truth and IoU
먼저 다음 내용을 알아보기 전에 IoU, Ground Truth에 대해 알아보겠습니다. 먼저 Ground Truth는 기계학습에서 실제 값을 참조합니다. 이는 실제 데이터의 라벨 또는 어떤 문제에 대한 정답을 나타냅니다. 객체 탐지에서 Gound Truth는 이미지 내에 있는 실제 객체의 위치와 클래스를 정확하게 나타내는 바운딩 박스와 좌표 및 클래스 라벨을 의미하게 되는 것이죠(배경X). 그 후 각 후보 영역에 대해, 원본 이미지에서 해당 영역이 겹치는 Ground Truth 바운딩 박스와의 IoU를 계산합니다. IoU(Intersection over Union)은 두 영역간의 겹침 정도를 측정하는 방법입니다. IoU = (영역 A와 B의 교집합 영역) / (영역 A와 B의 합집합 영역) 으로 나타내지며 [0, 1]의 값을 가지며, 1에 가까울 수록 두 영역의 일치도가 높다는 것을 의미합니다. 즉 IoU값이 높을 수록 모델의 예측이 실제 Ground Truth와 더 잘 일치하고 있다는 것을 의미합니다.
예를 들어 맨 오른쪽에 있는 그림이 Ground-truth에 해당하여 실제 이미지에서 해당 객체의 정보를 나타낸 것입니다. 초록색은 자전거이고 분홍색은 자전거를 모는 사람으로 유추할 수 있는 것이죠. 왼쪽에 있는 사진들은 사진에서 객체 감지를 한 결과로 Ground-truth 이미지와 완전히 일치하지는 않지만 기계학습으로 학습된 딥러닝 모델에 의해 해당 위치의 물체가 존재함을 확인할 수 있습니다.
위 사진은 표지판을 감지하여 이를 경계 상자로 표현한 것으로 초록색 상자가 Ground-truth이고 빨간 상자가 딥러닝 모델이 예측하여 표시한 부분입니다. 객체를 잘 감지한 딥러닝 모델이라면 Ground-truth와 가장 가까운 경계 상자를 표현한 예측값이 좋은 성능을 가진 딥러닝 모델이라고 할 수 있겠습니다. 이를 위해 위에서 소개한 IoU를 계산했던 것이죠. 이 값이 1과 일치할 수록 우수한(Positive)인 것이라고 할 수 있습니다.
그리고 또 중요한 점이, 비최대 억제(non-maximum supprssion, NMS) 단계에서는, 각 객체에 대해 여러 개의 예측이 있는 경우 IoU를 사용하여 중복된 예측을 제거합니다. 이 때 IoU는 서로 다른 예측 bounding box 간의 IoU를 계산하는 데 사용됩니다. 이를 통해, 한 객체애 대한 촤종적인 '최적'의 bounding box를 선택하게 되는 것이죠. 여기서 또 IoU가 특정 임곗값 이상인 것만 취할 수도 있답니다.
Feature extraction by Fine tuned AlexNet
다음으로 이제 2000개의 후보영역을 Fine tune된 AlexNet에 입력하여 2000x4096(=feature vector의 차원) 크기의 feature vector를 추출합니다. 여기서 논문의 저자는 객체 탐지시, 특정 도메인에 맞는 class를 예측하기 위해서 기존의 ImageNet 데이터셋을 통해 pre-trained된 CNN 모델을 도메인에 맞게 fine tune하는 방식도 제안합니다. Fine tune된 모델을 사용하면 도메인에 맞게, 보다 적합한 feature vector를 추출하는 것이 가능해집니다!
먼저 PASCAL VOC 데이터 셋에 Selective search 알고리즘을 적용하여 후보 영역을 추출하고, 후보 영역(=grounding box)와 ground truth box와의 IoU 값을 구합니다. IoU 값이 0.5 이상인 경우, positive sample(=객체)로, 0.5 미만인 경우에는 negative sample(=배경)으로 저장합니다. 그리고 sample=32, negative sample=96로 mini batch(=128)을 구성하여 pre-trained 된 AlexNet에 입력하여 학습을 진행합니다. 위의 과정을 통해 fine tune된 AlexNet을 사용하여 R-CNN 모델은 추론 시, feature vector를 추출하게 됩니다. 이의 input, process, output을 정리하면 아래와 같을 것입니다.
- Input: 227x227(warped) 사이즈의 2000개의 후보군 샘플 이미지
- Process: 우리의 도메인에 맞게끔 fine tuned된 AlexNet을 통해 Feature vector를 뽑아내는것
- Output: 2000x4096 사이즈의 feature vector
당연히 R-CNN은 2-stage model로, SVM classification과 bounding box regression이 순차적으로 일어나게 됩니다. SVM classfication을 통해서 이미지에 대한 classification을 진행하고, bounding box regression을 통해서 localisation 문제를 해결하게 됩니다.
Classification by linear SVM
linear SVM(Support Vector Machine) 모델은 2000x4096 feature vector를 입력받아서 class를 예측하고 confidence score를 반환합니다. 이 때 linear SVM 모델은 특정 class에 해당하는지 여부만을 판단하는 이진 분류기(binary classifier)입니다. 따라서 N개의 class를 예측한다고 할 때, 배경을 포함한 (N + 1)개의 독립적인 linear SVM 모델을 학습시켜야 합니다.
SVM은 선형 분리가 가능한 문제에 사용하는 Hard Margin SVM, 선형 분리가 불가능하고, 에러를 일정부분 허용해도 될때 사용하는 Soft Margin SVM이 있습니다. SVM에 대해서는 추후에 포스팅하겠습니다. 이의 최종 목적은 에러의 허용도에 따라 margin을 최대화 하는 것이라고 생각하면 쉽습니다. 그리고 데이터를 선형으로 분류하기 위해 feature map의 차원을 높이는 방법도 사용하기도 합니다(PCA)
하지만 여기서 저는 의문이 하나 또 있었습니다. 기존에 AlexNet, VGGNet, GoogLeNet, ResNet,... 는 다 classifier로 softmax를 사용해주었었습니다. 하지만 왜 여기서는 classifier로 SVM을 사용하는지 조금 의문이였습니다. 이에 대한 답은 논문의 appendix부분에 있었습니다. PASCAL VOC 데이터를 기준으로 softmax보다 SVM을 사용하는 것이 성능이 더 좋았다고 하기 때문입니다. 즉 증명된 것은 아니라 경험적으로 선택된 것이라고 생각하면 되겠습니다.
그리고 여기서 주의해야 할점이 있습니다!!! 바로 이전에 fine-tuning된 CNN모델과 좀 다르다는 것입니다. 먼저 객체의 배경을 모두 학습하기 위해 PASCAL VOC 데이셋에 Selective search 알고리즘을 적용하여 region proposal을 추출하는 것까진 같습니다. 하지만 SVM model을 학습하는 과정에서는, 오직 ground truth box만을 positive sample로, IoU값이 0.3 미만인 예측 bounding box를 negative sample로 저장합니다. 여기서도 positive sample=32, negative sample=96이 되도록 mini batch(=128)을 구성한 뒤 fine tuned AlexNet에 입력하여 feature vector를 추출하고, 이를 linear SVM에 입력하여 학습시킵니다. 이 때 하나의 linear SVM 모델은 특정 class에 해당하는지 여부를 학습하기 때문에 output unit = 2입니다. 학습이 한 차례 끝난 후, hard negative mining 기법을 적용하여 재학습을 하는 것이죠.
AlexNet을 fine tune할때와 linear SVM을 학습시킬 때의 양성/음성의 정의가 다른 이유도 마찬가지 입니다. AlexNet을 fine tune할 시, 모델이 overfitting 되지 않도록 많은 데이터가 필요하다고 하고, IoU값이 0.5 이상인 경우를 positive sample로 정의할 경우, 오직 ground truth box만을 positive sample로 정의할 때보다 30배 많은 학습 데이터를 얻을 수 있다고 합니다!
즉 이렇게 다르게 샘플링된 값으로, fine-tuning된 AlexNet을 통과시킨다음 lienar SVM에 통과시키며 학습한다는 것입니다.
- Input: 2000x4096 사이즈의 feature vector
- Process: linear SVM을 통한 class prediction
- Output: 2000의 클래스에 대한 condifence scores
- 객체 탐지 모델이 이미지 내의 특정 영역에 대해 '개'라는 클래스를 예측하고, 이 예측에 대한 confidence score가 0.95라면, 이는 모델이 그 영역이 '개'라는 클래스에 속할 확률을 95%로 예측하고 있다는 겁니다.
그리고 첨언하자면, 피처 추출을 마친 뒤에는 선형 SVM으로 클래스를 분류한다고 했습니다. 하지만 훈련 데이터가 너무 커서 메모리 용량이 꽉 차는 문제가 생겨 연구진은 hard negative mining 기법을 적용했다고 합니다. 이는 Positive sample과 Negative 샘플의 개수를 균일하게 만드는 방법입니다. 신뢰도 점 (confidence score)를 활용해 Negative 샘플을 선정하는 것입니다. negative 샘플은 배경이라고 말했습니다. 이미지 안에서 배경영역은 매우 넓습니다. 곧 negative 샘플이 될 경계 박스도 많게 될 것이지요. negative 샘플이 지나치게 많으면 객체 탐지 모델의 성능이 떨어질 우려가 있으니, 신뢰도 점수가 가장 높은 경계 박스 순으로 negative 샘플을 선정한다는 의미입니다.
Detailed localization by Bounding Box Regressor
다음은 bounding box regressor입니다. 지역화 성능을 높이기 위하여 이를 이용하는 것이 R-CNN 모델의 핵심이라고 할 수 있겠습니다. Selective Search로 만들어낸 bounding box는 정확하지 않기 때문에, object를 조금 더 정확하게 감싸도록 bounding box regression과정을 거칩니다.
여기서 bounding box의 값은, N개의 좌표값으로 $(P^{i}, G^{i})$ 의 쌍이 될 것입니다. 그리고 예측위치 $P^{i}$는 예측 x, y좌표, width, height값이 됩니다. 실제 위치(Ground truth)도 동일합니다. 즉 선택된 P를 G에 맞추도록 Transform 하는 것이 Bounding Box Regression의 목표입니다.
위의 그림에서 초록색 box는 Selective search 알고리즘에 의해 예측된 bounding box이며, 노란색 box는 ground truth box입니다. Bounding box regressor는 예측한 bounding box의 좌표 p = ($p_{x}, p_{y}, p_{w}, p_{h}$)(center X, center Y, width, height)가 주어졌을 때, ground truth 좌표 g = ($g_{x}, g_{y}, g_{w}, g_{h}$)로 변환되도록 하는 Scale Invariant Transformation을 학습합니다.
- $d_{i}(P)$: Bounding box regressor 모델의 학습 대상입니다.
- $t_{i}$: Bounding box regressor 모델이 학습하고자 하는 목표(target)
- $\hat{g}_{i}$: 예측한 bounding box $p$가 주어졌을 때, Bounding box regressor 모델이 변환한 결과
- $L_{\text{reg}}$: Bounding box regressor 모델의 loss function으로 SSE. $\lambda = 1000$ -> L2 reg
즉, Bounding box regressor 모델은 $d_{i}(P)$가 $t_{i}$가 되도록 $L_{\text{reg}}$를 통해 학습시킵니다. 그리고 이에 대한 Bounding box regressor의 반환값은 그 다음의 Bound box의 값으로 갱신됩니다.
Experiments
우리의 R-CNN은 기존의 DPM v5, UVA, REgionlets보다 더 좋은 성능을 보입니다. 또한 그냥 R-CNN보다는 bounding box regression을 적용했을 때 성능이 더 좋았음을 확인할 수 있습니다.
그리고 ILSVRC2013 dataset에 대해 테스트 한 결과입니다. 이때, ILSVRC2013 dataset은 이미지의 size가 너무 광범위하여 고정된 픽셀로 Resize후 Selective search를 적용했다고 합니다. 이미지당 평균 2403개의 Region을 추출했고, 이때, PASCAL VOC에서 사용한 Parameter를 그대로 적용했다고 합니다. 그 결과 비슷한 시기에 나온 Object detection 모델인 Overfeat보다 성능(mAP)을 앞지른 것을 볼 수 있습니다.
그리고 이는 CNN이 어떤 것을 학습했는지 시각화를 간단히 한것입니다. 이는 Classification layer 이전 단에서의 feature map에 대해 특정 element를 기준으로 내림차순 정리하여 region들을 시각화 한 것입니다.
여기서는 T-Net(AlexNet, Toronto univ)을 통해 기본 CNN 네트워크 구조를 사용했었습니다. 하지만 실제 O-Net(VGG, Oxford univ)를 실제 사용하니 성능이 더 좋았다고 되어있습니다. 이는 VGGNet의 복잡도가 AlexNet보다 크기 때문에 CNN구조로부터 얻은 Feature가 본 image를 나타내는 Representation Power가 더 좋기 때문입니다.
마지막으로 Sementic Segmentation에 관련된 차트입니다. 관련 내용은 나중에 추가해보도록 하겠습니다.
Conclusion
- Object를 localize하고, 분할하기 위해서 Region proposal을 CNN에 적용하였습니다.
- 훈련 데이터가 부족하여도 Pre-trained에 이은 fine-tuning으로 큰 성능을 보여주었습니다.
- 결론적으로 Region proposal 에 대한 CNN학습, SVM Classification, Bounding box regression을 통하여 이전의 Object Detection 방법론들보다 큰 성능을 보였습니다.
- 이후 R-CNN을 수정, 보완하여 성능과 속도를 향상시킨 수많은 모델들이 탄생하는 등 다양한 모델의 기초가 되었다고 합니다.
하지만 R-CNN도 단점이 존재합니다.
- Fine-tuning된 CNN에 input으로 image를 넣기 위해 고정된 크기의 이미지로 만드는 warp과정을 통하여 image의 정보는 손상된다는 단점이 있습니다.
- 학습이 3단계 (Conv fine-tuning, SVM classification, Bounding box regression)으로 이루어져, 이 과정에서 긴 학습 시간과 대용량의 저장 공간이 요구됩니다.
- 전체 Framework를 end-to-end 방식으로 학습할 수 없어서 Global optimal solution을 찾기 어렵습니다.
- end-to-end 학습이란 입력에서 출력까지의 전체 과정을 하나의 모델로 학습하는 방식을 말합니다.
- 이 방식에서는 중간 단계의 별도의 모듈이나 핸드크래프트된 특징을 사용하지 않고, 원시 입력 데이터를 직접 모델에 전달하여, 모델은 출력 결과를 직접 예측합니다.