Information Security ˗ˋˏ ♡ ˎˊ˗

AI/deep learning

Object Detection: Faster-RCNN Model

토오쓰 2020. 5. 7. 21:11

<딥러닝 객체 탐지 알고리즘 구분>

객체 탐지(Object detection): 영상 속의 어떤 객체(Label)가 어디에(x, y) 어느 크기로(w, h) 존재하는지를 찾는 Task를 말한다.

콘볼루션 신경망(CNN) 기술을 활용하면 제한된 객체 탐지에 대한 회귀 분류 가능 = 제한된 객체 탐지(정해진 수의 대상을 처리)

l  이미지 인식(Image Recognition)

l  핵심 포인트 탐지(Key Points Detection)

l  시맨틱 분할(Semantic Segmentation)

다수의 사각형 상자 위치와 크기를 가정해 콘볼루션 신경망을 변형한 후 이를 객체 분류(Object Classification)에 활용 가능하다. 여기서 사각형 상자들이 ‘윈도우(Window)’라고 한다.

한계: 많은 객체를 탐지하는 것

 

객체 탐지를 효율적으로 하는 알고리즘

1. 영역 제안을 하는 것=이 단계 방식(Two-Stage Methods)

- 객체를 포함할 가능성이 높은 영역을 선택적 탐색한다.

- 딥러닝 기반의 영역 제안 네트워크(RPN)를 통해 선택한다.

예) Faster R-CNN, R_FCN, FPN_FRCN

=> 단일 단계 방식(single-stage)보다 정확도 높지만, 처리 속도 느리다.

 

2. 정해진 위치와 정해진 크기의 객체만 찾기 = 단일 단계 방식(single-stage)

- 고정된 사이즈 그리드 영역으로 나눈다.

- 각 영역에 대해 형태와 크기가 미리 결정된 객체의 고정 개수를 예측한다.

예) yolo, SSD, RetinaNet

=> 정확도가 떨어지지만, 빠른 처리가 가능/실시간 탐지를 요구하는 애플리케이션에 활용한다. 

 

<딥러닝 객체 탐지 알고리즘_RCNN>

 

 

R-CNN 개념: Image classification을 수행하는 CNN과 이미지에서 물체가 존재할 영역을 제안해주는 region proposal 알고리즘을 연결하여 높은 성능의 object detection을 수행할 수 있다.

1) Hypothesize Bounding Boxes (Proposals)

- Image로부터 Object가 존재할 적절한 위치에 Bounding Box Proposal (Region proposal 알고리즘의 Selective Search)

=> Region proposal: 물체가 있을 법한 영역을 빠른 속도로 찾아내는 알고리즘

=> 이미지로부터 약 2000개의 Region Proposal이 생성된다(Selective Search 활용)

2) Resampling pixels / features for each boxes

- 모든 region proposal 영역을 이미지로부터 잘라내고(=Crop) 동일한 크기로 만든다(=warping).

- CNN을 활용해 feature 추출한다.

3) Classifier / Bounding Box Regressor

- 각 region proposal feature에 대한 classification을 수행한다.

- 위의 영상을 Classifier와 Bounding Box Regressor로 처리한다.

=> Bounding Box Regressor: 그림에서 보면 region proposal P와 정답 위치 G가 존재할 때, P를 G로 mapping 할 수 있는 변환을 학습하는 것이다.

한계: R-CNN은 이미지 1장 당 region proposal의 개수만큼 CNN 연산이 필요하기 때문에 inference 속도가 매우 느리고(R-CNN의 비효율성), Localization 성능이 취약하다. 학습 과정이 복합하게 여러 stage를 거쳐야 하는 등의 단점이 있다.

 

<딥러닝 객체 탐지 알고리즘_Fast RCNN>

보완점: R-CNN의 단점 중 하나인 ‘속도’ 대폭 개선

 

 

R-CNN의 비효율성을 개선하기 위해, cropping 하는 과정을 image level이 아닌 feature map level에서 수행하면 2,000번의 CNN 연산이 1번의 CNN 연산으로 줄어듦으로 연산량 측면에서 훨씬 좋다.

하지만, classification을 수행하기 위해서는 보통 feature 크기가 각 example마다 동일해야 한다.

R-CNN에서는 다른 크기의 region들을 모두 동일하게 만들기 위해 warping을 통해 같은 크기의 이미지로 변환한 뒤 CNN 연산을 진행하였지만, warping은 사이즈를 줄이고 ratio를 변경하는 과정에서 정보의 손실이 일어나므로 좋은 방법이 아니다. 따라서 feature map의 다양한 크기의 region으로부터 정보의 손실 없이 일정한 길이의 feature를 추출해 낼 방법이 필요하다.

1) Bag-of-words (BoW)

- 이미지가 지닌 특징들의 위치 정보를 모두 잃어버린다는 단점이 존재한다.

2) Spatial Pyramid Pooling(SPP)

- 방법: SPP layer는 feature map 상의 특정 영역에 대해 일정한 고정된 개수의 bin으로 영역을 나눈 뒤, 각 bin에 대해 max pooling 또는 average pooling을 취함으로써 고정된 길이의 feature vector를 가져올 수 있다.

- 이미지를 여러 개의 일정 개수의 지역으로 나눈 뒤, 각 지역에 BoW를 적용하여 지역적인 정보를 어느 정도 유지할 수 있다.

- Fast R-CNN에서는 이러한 SPP layer의 single level pyramid만을 사용하며, 이를 RoI Pooling layer라고 명칭 한다.

 

<R-CNN과 Fast R-CNN 차이점>

: Fast R-CNN에서는 R-CNN의 복잡한 학습 단계 대신, 한 번의 학습으로 Object detection을 위한 CNN을 구축할 수 있도록 개선

 

R-CNN

Fast R-CNN

사용 함수

Softmax classifier와 linear bounding-box regressor를 따로 학습

 

Softmax classifier와 linear bounding-box regressor 두 함수의 loss를 더한 multi-task loss를 기반으로 동시에 두 가지 task를 학습

학습 진행 방법

여러 장의 이미지에서 랜덤 하게 N개의 영역을 샘플링한 mini-batch를 구성하여 학습을 진행

(region-wise sampling)

1장 또는 2장 이내의 이미지에서 N개의 영역을 샘플링한 mini-batch를 사용함으로써 Fast R-CNN 학습에 필요한 CNN 연산량을 효율적으로 줄임

(image-centric sampling)

Fast R-CNN의 한계: region proposal 알고리즘의 비효율성

 

 

<딥러닝 객체 탐지 알고리즘_Faster RCNN>

Faster RCNN: 이 단계 방식(Two-Stage Methods)의 객체 탐지 알고리즘

방법: region proposal 생성을 CNN 외부의 알고리즘이 아닌, CNN 내부에 region proposal을 생성할 수 있는 network(RPN)를 설계함으로써 더욱 빠르면서도 정확한 region proposal을 생성한다.

+ 각 관심 영역(RoI: Region of Interest)에 대한 피쳐 추출의 계산을 공유하고 딥러닝 기반의 RPN(=Region Proposal Network)을 도입해 구현 가능하다.

1) 많은 CNN 레이어를 사용해 feature map을 추출하고 나면 RPN을 통해 개체를 포함하고 있을 가능성이 높은 윈도우가 다량으로 생성한다.

2) 각 윈도우(사각형 상자)에 있는 feature map을 검색하고, 고정 크기로 조정한 뒤(RoI 풀링) 클래스 확률과 해당 객체에 대한 더욱 정확한 경계 박스를 예측한다.

 

+고려해야 할 점

- RPN이 윈도우(사각형 상자)를 생성하는 방법

=> RPN은 YOLO와 마찬가지로 앵커 박스를 사용하지만 다른 점은 데이터로부터 생성되는 것이 아니라 고정된 크기와 형태로 생성, 이 앵커 박스는 이미지를 보다 더 조밀하게 커버 가능하다.

=> RPN은 여러 객체 카테고리에 대한 분류 대신 윈도우의 객체 포함 유무에 대한 이진 분류(Binary Classification)만 수행한다.

 

RPN의 loss function과 Fast R-CNN의 loss function을 모두 합쳐 multi-task loss로 둔 뒤, 한 번에 학습을 진행해도 위 alternating optimization 방법과 거의 동일하거나 높은 성능이 나올 수 있음을 실험적으로 증명한다.

 

<참고 개념_ RPN>

RPN(=Region Proposal Network)

개념: feature map 정보를 활용해 물체가 존재하는 위치를 출력으로 가지는 네트워크

 

작동 방식

1) feature map 위의 N X N 크기의 작은 window 영역을 입력으로 받는다.

해당 영역에 물체가 존재하는지/존재하지 않는지에 대한 binary classification을 수행하는 작은 classification network를 만들어 볼 수 있다.

2) bounding-box regression 또한 위치를 보정해주기 위해 추가로 사용된다.

3) 하나의 feature map에서 모든 영역에 대해 물체의 존재 여부를 확인하기 위해서는 앞서 설계한 작은 N X N 영역을 sliding window 방식으로 탐색한다.

 

발생할 문제: 고정된 N X N 크기의 입력만으로 다양한 크기와 비율을 수용하기에는 부족하다.

l  해결 방안: 미리 정의된 여러 크기와 비율의 reference box k를 정해놓고 각각의 sliding-window 위치마다 k개의 box를 출력하도록 설계하고 이러한 방식을 anchor라고 명칭 한다.

l  RPN의 출력 값: 모든 anchor 위치에 대해 각각 물체/배경을 판단하는 2k 개의 classification 출력과 x, y, w, h 위치 보정 값을 위한 4k 개의 regression 출력을 지닌다.

l  Feature map의 크기가 W * H라면 하나의 feature map에 총 W * H * k개의 anchor가 존재한다.

 

 

출처

https://medium.com/object-detection-using-tensorflow-and-coco-pre/object-detection-using-tensorflow-and-coco-pre-trained-models-5d8386019a8

 

Object Detection using TensorFlow and COCO Pre-Trained Models

Introduction:

medium.com

https://blogs.sas.com/content/saskorea/2018/12/21/%EB%94%A5%EB%9F%AC%EB%8B%9D%EC%9D%84-%ED%99%9C%EC%9A%A9%ED%95%9C-%EA%B0%9D%EC%B2%B4-%ED%83%90%EC%A7%80-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0/

https://blog.lunit.io/2017/06/01/r-cnns-tutorial/