정확한 개체 탐지 및 Semantic segmentation을 위한 Rich feature 계층 구조

Summarize

  • Figure 1의 (1)에서 region proposal 2000개를 만든다.
  • region proposal의 사이즈가 랜덤해서, 입력 이미지의 크기가 고정되어있는 CNN에 쓰려면 transformation 해줘야한다.
  • 이 논문에서는 tightest square with context, warp 방법
  • 2000개 region proposal 각각에 대해 CNN feature vector 추출(N images * 2000)한다.
  1. CNN을 통한 feature vector 추출
  2. SVM Classfier를 통한 Image Classification
  3. Bounding Box Regression
  1. 이미지 분류 작업에 대한 CNN 네트워크 Pre-training: 예를 들어 ImageNet Dataset에서 교육된 VGG또는 ResNet, Classification task엔 N개의 Class가 포함된다.

    참고: Caffe Model Zoo에서 pre-trained AlexNet을 찾을 수 있다. Tensorflow에서 찾을수 없지만 Tensorflow-slim model library는 pre-trained RestNet, VGG 등을 제공한다.

  2. Selective search(이미지당 2k 후보)로 카테고리 독립적인 관심 영역을 제안한다. 이런 영역들엔 대상 객체가 포함될 수 있으며 크기가 다르다.

  3. 지역 후보들은 CNN이 요하는 고정 크기로 변형된다.

  4. K+1 클래스의 warped proposal region에서 CNN fine-tuning을 한다. 추가한 한 클래스는 배경(관심 있는 대상이 없음)을 의미한다. Fine-tuing 단계에서 훨씬 더 작은 학습률을 사용해야 한다. 대부분의 proposal region이 배경이기 때문에 mini-batch가 positive case들을 과도하게 오버샘플링 한다.

  5. 주어진 모든 이미지 영역에서, CNN을 통한 하나의 forward propagation는 feature vector를 생성한다. 이 feature vector는 각 class에 대해 독립적으로 훈련된 SVM에 의해 소비된다.
    Positive 표본은 IoU 중복 임계값이 0.3 이상인 proposed region이며 negative 표본은 다른 표본과 관련이 없다.

  6. Localization 오류를 줄이기 위해, regression 모델은 CNN feature를 사용하여 Bounding box correction offset의 예측된 detection window를 올바르게 잡기 위해 훈련된다.


Abstract

Canonical PASCAL VOC 데이터셋에서 측정한 바와 같이 Object Detection 성능이 지난 몇년동안 정체기에 있다. 가장 좋은 방법은 일반적으로 여러개의 low-level 이미지 feature와 high-level context를 결합하는 복잡한 emsemble 시스템이다. 이 논문에서는 평균 정확도(mAP)를 30% 이상 향상시켜 53.3% mAP를 달성하는 간단하고 확장 가능한 detection 알고리즘을 제안한다. 우리의 접근 방식은 두가지 key insight를 결합한다. 하나는 물체를 localize하고 분할하기 위해 bottom-up region proposal을 high-capacity CNN에 적용할 수 있는 것이고, 다른 하나는 label 되어있는 training data가 부족할때, 보조 작업을 위해 pre-training된 모델을 해당 도메인에 맞게 fine-tuning을 적용하는 것은 상당한 성능 향상을 가져온다는 것이다. Region proposal을 CNN과 합치기 때문에 우리는 이 방법을 R-CNN(Region-CNN)이라고 부른다. 우리는 R-CNN을 CNN 아키텍쳐를 기반으로 최근에 제안된 sliding-window detector인 OverFeat과 비교한다. 우리는 R-CNN이 OverFeat보다 200-class ILSVRC2013 detection 데이터셋에서 큰 차이를 보이는 성능을 가짐을 발견했다. 소스 코드는 http://www.cs.berkeley.edu/˜rbg/rcnn 에 있다.


목차

1. Introduction

Feature는 중요하다. 다양한 시각적 인식 작업에 대한 지난 10년간의 연구는 SIFT[29]와 HOG[7]의 사용에 상당히 의존했다. 그러나 canonical 시각 인식 작업인 PASCAL VOC object detection[15]에서 성능을 살펴보면, 일반적으로 ensemble 시스템을 구축하고 성공적인 방법으로 얻은 작은 variant들을 사용함으로써 얻어지는 작은 이득은 2010-2012년 동안 진행 속도가 느린 것으로 알려져있다.

SIFT와 HOG는 블록 단위 방향 히스토그램으로, 영장류 시각 경로의 첫번째 피질 영역인 V1에서 복잡한 세포와 대략적으로 연관시킬 수 있는 표현이다. 그러나 우리는 인식이 여러 단계의 downstream에서 발생한다는 것을 알고 있다. 시각적 인식을 위해 더 유익한 기능을 계산하기 위한 다단계 프로세스가 계층적으로 있다는 것을 의미한다.

생물학적으로 영감을 받은 패턴 인식을 위한 계층적이고 shift-invariant 모델인 후쿠시마의 "neocognitron"[19]은 그러한 과정을 위한 초기 시도였다. 그러나 neocognitron에는 supervised training 알고리즘이 없었다. Rumelhart[33], LeCun[26]을 바탕으로 역전파(back propagation)를 활용한 확률적인 Gradient descent는 neocognitrond을 확장하는 모델인 CNN을 훈련하는데 효과적이었음을 보여줬다. CNN은 1990년대에 과도하게 사용되었다(e.g.[27]). 하지만 support vector machine의 등장으로 유행에서 벗어났다. 2012년에 Krizhevsky[25]는 ImageNet Large Scale Visual Recognition Challenge(ILSVRC)[9, 10]에 비해 훨씬 더 높은 이미지 classification 정확도를 가짐으로써 다시 CNN에 관심을 가졌다. 그들의 성공은 대형 CNN을 120만개의 label된 이미지와 함께 LeCun의 CNN(e.g.max(x, 0) 정류 비선형성 및 dropout 정규화)와 함께 몇가지 twists와 함께 교육한 결과이다.

Image

  • Figure 1. Object detion system overview
    • (1) input image.
    • (2) bottom-up region proposal 2000건 추출.
    • (3) 대형 CNN을 사용하여 각각의 proposal에 대한 feature 계산.
    • (4) class-specific 선형 SVM을 사용하여 각 region을 분류한다.

R-CNN은 PASCAL VOC 2010에서 53.7%의 mAP를 가진다. 비교를 위해 [39]는 동일한 region proposal을 사용하면서 35.1% mAP를 갖지만, 공간 피라미드와 시각적 단어 접근법을 사용한다. 인기 있는 변형 가능한 부품 모델은 33.4%로 수행한다. 200-클래스 ILSVRC2013 detection 데이터셋에서 R-CNN의 mAP는 31.4%로 OverFeat[34]보다 큰 개선이며 이전의 best는 24.3%이다.

ImageNet 결과의 중요성은 ILSVRC 2012 워크샵에서 활발하게 논의됐다. 중심 이슈는 다음과 같다. ImageNet에서의 CNN 분류 결과는 Pascal VOC Challenge에서 object detection 결과에 대해어느정도까지 일반화되는가? 우리는 이미지 분류와 물체 감지 사이의 간격을 메워 이 질문에 답한다. 이 논문은 CNN이 단순한 HOG와 유사한 특징을 기반으로 하는 시스템에 비해 Pascal VOC에서 훨씬 더 높은 Object detection 성능을 이끌 수 있다는 것을 보여주는 첫번째 논문이다. 이 결과를 달성하기 위해 우리는 두가지 문제에 초점을 맞춘다. 깊은 네트워크를 개체로 localizing하고 소량의 주석처리된 탐지 데이터로 대용량 모델을 교육한다. 이미지 분류와 달리, 이미지 내에서(많은 경우) 객체의 위치를 파악해야한다. 하나의 접근법은 Regression 문제로 localization frame을 씌우는 것이다. 그러나 Szegedy[38]의 연구 결과는 이 전략이 실제로 실행되지 않을수도 있음을 나타낸다. VOC 2007의 경우 우리의 방법은 58.5%를 가지지만 그것은 30.5%의 mAP를 가진다. 또 다른 방법은 sliding window detector를 만드는 것이다. CNN은 적어도 20년동안 얼굴과 보행자와 같이 제한된 개체 카테고리에서 일반적으로 사용됐다. 높은 공간 해상도를 유지하기 위해, 이 CNN들은 전형적으로 단지 2개의 Conv 및 Pooling 계층만을 갖는다. 우리는 sliding window 방식을 채택하는 것도 고려했다. 그러나 우리의 네트워크에서 5개의 Conv를 가지는 high unit은 입력 이미지에서 매우 많은 receptive field(195x195 픽셀)와 stride(32x32 픽셀)을 가지고 있다. 이것은 sliding window 패러다임 내에서 정확한 위치파악을 기술적인 도전이 된다.

대신 우리는 CNN 지역화 문제를 객체 인식과 의미론적 세분화에 성공적이었던 "인식을 사용하는 영역" 패러다임[21] 안에서 작동시킴으로써 해결한다. 테스트 시간에 우리의 방법은 입력 이미지에 대해 약 2000개의 카테고리 독립적인 region proposal을 생성하고 CNN을 사용하여 각 제안에서 고정 길이의 특징 벡터를 추출한 다음 각 영역을 카테고리별 선형 SVM으로 분류한다. 지역의 모양에 관계 없이 각 지역 제안에서 고정된 크기의 CNN 입력을 계산하는 간단한 기술을 사용한다. 그림 1은 우리의 방법에 대한 개요를 제시하고 일부 결과를 강조 표시한다. Google 시스템은 Region Proposal을 CNN과 결합하므로 R-CNN 이라는 제목을 붙였다.

OverFeat은 탐지를 위해 Sliding WindowCNN을 사용하며 지그까지 ILSVRC2013 탐지에서 가장 좋은 수행방법이었다. 우리는 R-CNN이 OverFeat을 능가하는 것으로 나타났으며 mAP는 31.4%였다. OverFeat은 24.3%이다.

Detection에 있어 두번째 과제는 labeled 데이터가부족하고 현재 사용가능한 양이 CNN을 교육하기에는 충분하지 않다는 것이다.
이 문제에 대한 해결책은 unsupervised pre-training을 사용하고 supervised fine-tuning을 사용하는 것이다[35]. 이 논문의 두번째 원칙은 데이터가 부족할 때 대규모 보조 데이터 세트(ILSVRC)에 대한 supervised pre-training과 작은 데이터 세트(Pascal)에 대해 도메인 특유의 미세 조정은 대용량 CNN을 학습하는 효과적인 패러다임을 보여준다. 우리의 실험에서 탐지를 위한 미세 조정은 mAP 성능을 8% 햐상시킨다. 미세 조정 후, 우리 시스템은 고도로 조율된 HOG 기반 변형 가능 부품 모델의 경우 33%와 비교하여 54%의 mAP를 달성한다(VOC 2010)[17,20]. 우리는 또한 Krizhevsky의 CNN이 블랙박스 feature 추출기로 사용될 수 있음을 보여주는 Donahue[12]의 동시 작업을 독자들에게 알려줌으로써 장면 분류, 세분화된 하위 카테고리화 및 도메인 적응을 포함한 여러 인식 작업에서 탁월한 성능을 제공한다.

우리 시스템은 또한 매우 효율적이다. Class별 계산은 합리적으로 작은 행렬-벡터 곱과 greedy non-maximum suppression이다. 이 계산 특성은 모든 범주에서 공유되고 이전에 사용된 영역 features보다 2차원 크기가 더 작은 피쳐에서 따른다([39]).

우리의 접근 방식의 실패 모드를 이해하는 것은 그것을 개선하는데 중요하다. 그래서 Hoiem[23]의 탐지 분석 도구의 결과를 쓴다. 이 분석의 즉각적인 결과로 간단한 경계 상자 회귀 방법이 우세한 오류 모드인 mis-localization을 상당히 감소시키는 것으로 나타났다.

기술적 세부사항을 개발하기 전에 R-CNN이 지역에서 운영되기 때문에 의미론적 세분화 작업으로 확장하는 것이 당연하다. 사소한 수정을 통해 VOC 2011 테스트 세트에서 평균 세분화 정확도가 47.9%인 파스칼 VOC 세분화 작업에 대한 경쟁력 있는 결과도 얻는다.

5. Semantic segmentation

지역 분류는 Semantic segmentation을 위한 표준 기법으로 Pascal VOC segmentation challenge에 R-CNN을 손쉽게 적용할 수 있다. 현재의 Semantic segmentation 시스템(O2P: second-order pooling이라고 불린다)[4]과 직접적인 비교를 돕기 위해 우리는 오픈 소스 framework 내에서 작업한다. O2P는 CPMC(Constrained Parametric Min-cuts)를 사용하여 이미지당 150개의 Region proposal을 생성한 다음 Support Vector Regression을 사용하여 각 클래스에 대해 각 지역의 품질을 예측한다. 그들의 접근 방식의 높은 성능은 CPMC 영역의 품질과 여러 feature 유형(SIFT와 LBP의 풍부한 변종)의 강력한 2차 순서 풀링으로 인한 것이다. 또한 Farabet[16]은 CNN을 다중 픽셀 단위의 분류 기준으로 사용하여 여러 조밀한 장면 labeling dataset(PASCAL을 포함하지 않은)에서 좋은 결과를 나타냈다.

##

AlexyAB의 YOLO github page 내용을 정리했습니다. 자세한 사항은 들어가셔서 보실 수 있습니다.

YOLO Training on Windows.

명령어 사용법

  • -ext_output : output coordinate of objects

  • -save_labels < data/test.txt : test.txt에 적힌 경로의 이미지에 label 적힌 txt 저장.(Marking 좌표 저장)

    • ex) darknet.exe detector test .data .cfg .weights -dont_show -ext_output -save_labels < data/train.txt
  • 이미지 예시

    • darknet.exe detector test datafile.data cfgfile.cfg weightsfile.weights -i 0(-thresh 0.25) (output.jpg -ext_output)
  • 동영상 예시

    • darknet.exe detector demo datafile.data cfgfile.cfg weightsfile.weights test.mp4 -i 0 (-out_filename output.avi)
  • net-videocam

    • darknet.exe detector demo datafile.data cfgfile.cfg weightsfile.weights http://192.168.0.80:8080/video?dummy=param.mjpg -i 0
  • WebCamera

    • darknet.exe detector demo datafile.data cfgfile.cfg weightsfile.weights -c 0
  • darknet.exe detector demo datafile.data cfgfile.cfg weightsfile.weights -dont_show -ext_output < data/train.txt > result.txt

  • webcam에 관한 내용

  1. Download for Android phone mjpeg-stream soft: IP Webcam / Smart WebCam

  2. Connect your Android phone to computer by WiFi (through a WiFi-router) or USB

  3. Start Smart WebCam on your phone

  4. Replace the address below, on shown in the phone application (Smart WebCam) and launch:

  • 194 MB COCO-model: darknet.exe detector demo data/coco.data yolo.cfg yolo.weights http://192.168.0.80:8080/video?dummy=param.mjpg -i 0
  • 194 MB VOC-model: darknet.exe detector demo data/voc.data yolo-voc.cfg yolo-voc.weights http://192.168.0.80:8080/video?dummy=param.mjpg -i 0

학습하는 법

  1. yolov3.cfg를 복사해서 yolo-obj.cfg 이름으로 바꾼 뒤 다음 내용으로 수정한다.

    • batch=64
    • subdivision=8
    • Line 610, 696, 783에서 class=N(N은 내 클래스 수)
    • Line 603, 689, 776에서 filters=(N+5)x3
  2. obj.names 파일을 만든 후 build\darkent\x64\data\에 저장한다.

    • 내용은 내 클래스 이름들을 각 줄에 적는다.
  3. obj.data 파일을 build\darknet\x64\data\에 다음과 같은 내용을 입력후 저장한다.

    classes = 1 train = data/train.txt valid = data/test.txt names = data/obj.names backup = backup/

  4. 학습시킬 이미지 파일들을 build\darknet\x64\data\obj\에 저장한다.

  5. 이미지 파일들은 Yolo_mark를 통해 bounding box marking을 해줘야한다.

  6. train.txt 파일을 build\darknet\x64\data\에 넣는다. 내용은 이미지 파일의 상대경로를 적어주어야한다.

    data/obj/img1.jpg data/obj/img2.jpg data/obj/img3.jpg ...

  7. 미리 학습된 weights를 다운로드 받는다.

  8. 학습을 시작한다.

    darknet.exe detector train mydata.data mycfg.cfg darknet53.conv.74

  9. 학습이 끝나면 build\darknet\x64\backup\에서 yolo-obj_final.weights를 얻을 수 있다. 또 backup\에 100번째 반복마다 저장이 된다.

  10. 주의사항

    • cfg 파일에 width와 height는 32로 나누어 떨어지는 수가 들어가야 한다.
    • 학습 후 사용 방법 darknet.exe detector test data/obj.data yolo-obj.cfg yolo-obj_8000.weights
    • Out of memory 오류가 발생할 경우 cfg 파일에서 subdivision16, 3264로 고친다.

학습을 멈추는 시점

보통 class 마다 2000번의 반복정도가 적당하다. 구체적인 학습 중단 시점은 아래와 같다.

  1. 학습 도중, 0.XXXXXXX avg가 감소하지 않는다면 중단해야한다.

    여러번을 반복해도 avg loss가 감소하지 않으면 중단해야한다.

  2. 학습을 중단시키고, darknet\build\darknet\x64\backup 폴더에서 .weights 파일을 얻을 수 있는데, 그 중 가장 좋은 것을 골라야한다.

    예를 들어 9000번의 반복을 했을때, 가장 좋은 것(Overfitting이 덜한 것)은 7000, 8000번째에 있을 수 있다. (Early Stopping Point로부터 얻어낸다.)

Image

2.1. Early Stopping Point로부터 weights를 얻어내려면 obj.data에서 validation dataset을 명시해줘야한다. valid 경로를 지정해준다. validation 이미지가 따로 없다면, train과 같은 파일을 사용한다.

2.2 아래 명령어로 어떤 weights가 더 좋은 성능을 보이는지 알 수 있다.

darknet.exe detector map data/obj.data yolo-obj.cfg backup\\yolo-obj\_7000.weights

darknet.exe detector map data/obj.data yolo-obj.cfg backup\\yolo-obj\_8000.weights

darknet.exe detector map data/obj.data yolo-obj.cfg backup\\yolo-obj\_9000.weights

  • -map flag를 통해 train 시킬수도 있다.

darknet.exe detector train data/obj.data yolo-obj.cfg darknet53.conv.74 -map

학습 효과 올리기

  • 학습 전
    • cfg 파일 맨 아래 random=1로 수정. (다른 해상도에 대해 정확도를 높여준다.)
    • 작은 객체 탐지를 위해서 cfg 파일 Line 717 stride=4, Line 720 layers=-1,11로 수정.
    • 좌우 구별 감지를 원하면 Line 17에서 flip=0 입력.
    • 빠른 학습을 위해서 Line 548 stopbackward=1 입력.
    • anchors 크기 재계산해서 더 정확하게 계산하기 : darknet.exe detector calc_anchors data/obj.data -num_of_clusters 9 -width 416 -height 416
  • 학습 후
    • cfg 파일에서 heightwidth608 혹은 832로 수정.
    • Out of Memory 오류가 생기면 subdivision16, 32, 64로 수정.

이 페이지를 번역했습니다

Single Shot Detectors

Faster R-CNN은 전용 Region Proposal 네트워크에 이어 Classifier가 있다.

Region-based Detector는 정확하지만 Cost가 있다.

Faster R-CNN은 PASCAL VOC 2007 테스트 세트를 7 FPS로 처리한다.

R-FCN과 같이 연구자들은 각 ROI의 작업량을 줄여 프로세스를 간소화하고 있다.

feature_maps = process(image)
ROIs = region_proposal(feature_maps)
for ROI in ROIs
    patch = roi_align(feature_maps, ROI)
    results = detector2(patch)    
    # Reduce the amount of work here!

대안으로 우리는 별도의 Region Proposal 단계가 필요한가? Boundary boxes 및 Classes를 Feature Map에서 한번에 직접 추출할 수 있습니까?

feature_maps = process(image)
results = detector3(feature_maps) 
# No more separate step for ROIs

슬라이딩 윈도우 감지기를 다시 살펴보겠습니다.

Feature Map 위로 윈도우를 밀어 물체를 감지할 수 있다.

서로 다른 개체 유형에 대해 서로 다른 윈도우 모양을 사용한다.

이전 슬라이딩 윈도우의 치명적인 오점은 창을 최종 Boundary box로 사용한다는 것이다.

그 부분에서 대부분의 물체를 cover하기 위해 너무 많은 모양이 필요하다.

좀 더 효과적인 해결책은 윈도우를 초기 추측으로 정하는 것이다.

그러면 현재 슬라이딩 윈도우로부터 class와 boundary box를 동시에 예측하는 탐지기를 갖는다.

Image

  • 슬라이딩 윈도우에 상대적인 예측을 한다.

이 개념은 R-CNN의 anchor와 매우 유사하다.

단, Single Shot Detector는 Boundary box와 class를 동시에 예측한다.

간단히 요약해보자. 예를 들어 8x8 Feature Map이 있으며 각 위치에서 K 예측을 한다. 즉 8x8xK 예측을 한다.

Image

각각의 위치마다 K개의 anchors(anchor: 고정된 초기의 추측 boundary box)가 있다. 우리는 anchors를 신중히 결정하고 모든 장소에 같은 anchor 모양들을 사용한다.

Image

  • location마다 4개의 예측을 하기 위해 4개의 anchor를 사용한다.

여기에 각각 하나의 특정한 anchor와 관련된 4개의 예측(파란색)과 4개의 anchor(초록색)가 있다.

Image

  • anchor에 관련된 4개의 예측.

Faster R-CNN에서 우리는 5개의 매개변수를 예측하기 위해 하나의 Convolution filter를 사용한다.(anchor와 관련된 예측된 box에 대한 4개의 매개변수와 objectness confidence에 대한 1개의 매개변수)

따라서 3x3xDx5 Conv fitler는 8x8xD에서 8x8x5까지 Feature map을 변환한다.

Single Shot Detector에서 Conv filter는 분류에 대한 C 클래스의 확률도 예측한다.(클래스당 1개)

따라서 Feature map을 3x3xDx25 Conv filter를 적용하여 C=20일때 8x8xD에서 8x8x25으로 변환한다.

Image

  • 각 위치에서 k개의 예측에 각각 25개의 매개변수가 있다.

Single Shot Detector는 보통 실시간 처리 속도로 정확성을 교환한다.

또한 너무 가깝거나 너무 작은 물체를 감지하는데 문제가 있는 경향이 있다.

아래 그림의 경우 왼쪽 하단에 9개의 산타가 있지만 SSD는 5개만 감지합니다.

Image

SSD

SSD는 VGG19 네트워크를 Feature 추출기로 사용하는 Single Shot Detector이다.(Faster R-CNN의 CNN과 동일)

그런 다음 나중에 사용자 정의 Conv Layer(청색)를 나중에 추가하고 Conv filter(녹색)을 사용하여 예측한다.

Image

  • 분류와 위치 모두에 대한 Single Shot 예측

그러나 Conv Layer는 공간 차원과 해상도를 줄인다.

따라서 위의 모델은 대형 객체만 탐지할 수 있다.

이를 해결하기 위해 우리는 Multiple Feature map에서 독립적인 개체 탐지를 한다.

Image

  • 탐지를 위해 multi-scale Feature map을 사용한다.

다음은 Feature map의 크기를 보여주는 다이어그램이다.

Image

SSD는 개체를 감지하기 위해 Conv 네트워크에 이미 있는 레이어를 사용한다.

다이어그램을 scale에 가깝게 다시 그리면 공간 해상도가 크게 떨어졌고, 저해상도에서 감지하기에는 너무 어려운 작은 물체를 찾는 기회를 놓치고 있다는 것을 알아야 한다.

이런 문제가 있으면 입력 이미지의 해상도를 높여야 한다.

Image

YOLO

YOLO는 DarkNet을 사용하여 Feature 감지를 수행한 다음 Conv Layer를 만든다.

Image

그러나 Multi-scale feature map을 사용하여 독립적으로 탐지하지는 않는다.

대신 부분적으로 평평하게 만들고(flatten) 다른 저해상도 map과 연결한다.

예를 들어 YOLO는 28x28x512 Layer를 14x14x2048로 reshape한다.

그런 다음 14x14x1024 Feature map과 연결된다.

그 후에 YOLO는 새로운 14x14x3072 Layer에 Conv filter를 적용하여 예측한다.

YOLO(v2)는 첫번째 release의 경우 mAP를 63.4에서 78.6까지 구현을 향상시켜줬다.

YOLO9000은 9000개의 다른 범주의 개체를 탐지할 수 있다.

Image

다음은 YOLO 논문에서 보고한 다양한 detector에 대한 mAP와 FPS 비교이다.

YOLOv2는 다른 입력 이미지 해상도를 가질 수 있다.

해상도가 낮은 입력 이미지는 더 높은 FPS를 갖지만 mAP는 더 낮다.

Image

YOLOv3

YOLOv3는 Feature 추출을 위해 더 복잡한 백본으로 변경된다.

Darknet-53은 주로 ResNet의 잔여 네트워크와 같이 건너뛰는 연결을 사용하는 3x31x1 필터로 구성된다.

Darknet-53은 ResNet-152보다 BFLOP(Billion Floating Point OPerations)이 적지만 2배 빠른 속도로 같은 분류 정확도를 갖는다.

Image

YOLOv3는 작은 피사체를 더 잘 감지하기 위해 Feature Pyramid를 추가했다.

서로 다른 감지기에 대한 정확도와 속도간의 tradeoff가 있다.

Image

FPN(Feature Pyramid Networks)

특히 작은 Object에서 다른 scale일때 object를 탐지하는 것이 어렵다.

FPN은 정확성과 속도를 향상시키기 위해 피라미드 개념으로 설계된 Feature 추출기이다.

Faster R-CNN과 같은 감지기의 Feature 추출기를 대체하고 고품질 Feature map pyramid를 생성한다.

Data Flow

Image

FPN은 Bottom-up과 Top-down 경로로 구성된다. Bottom-up은 Feature 추출을 위한 일반적인 Conv Network이다. 올라갈수록 공간 해상도는 떨어진다. 더 높은 수준의 구조가 감지되면 각 계층의 semantic value가 증가한다.

Image

SSD는 여러 Feature map에서 탐지한다.

그러나 Object detection에 대해서는 bottom layers는 선택되지 않는다.

그것들은 해상도가 높지만 속도가 느려지기 때문에 의미적 가치가 높지 않다.

따라서 SSD는 상위 계층만 감지하기 때문에 작은 개체에 대해서는 성능이 훨씬 떨어진다.

Image

FPN은 Semantic rich layer로부터 더 높은 해상도를 생성하는 Top-down 방식을 제공한다.

Image

재구성된 레이어는 큰 의미가 있지만 Object의 위치는 모든 다운샘플링 및 업샘플링 후에 정확하지 않다.

재구성된 레이어와 해당 feature map 사이에 측면 연결을 추가하여 detector가 위치를 더 잘 예측할수 있게 도와준다.

Image

다음은 bottom-up 및 top-down 경로에 대한 세부 다이어그램이다. P2, P3, P4, P5는 물체 감지를 위한 feature map의 피라미드이다.

Image

FPN with RPN

FPN은 자체적으로 Object Detector가 아니다.

+ Recent posts