네이버 부스트캠프 🔗/⭐주간 학습 정리

2 Stage Detectors

Dobby98 2023. 5. 3. 18:30

본 글은 네이버 부스트 캠프 AI Tech 기간동안

개인적으로 배운 내용들을 주단위로 정리한 글입니다

 

본 글의 내용은 새롭게 알게 된 내용을 중심으로 정리하였고

복습 중요도를 선정해서 정리하였습니다

 

 

✅ Week 9

1. R-CNN

2. SPPNet

3. Fast R-CNN

4. Faster R-CNN

 


Intro.

이제 본격적으로 object detection 모델에 대해서 배워보자

우선 detection 모델에 대해서 자세히 알기 위해서는 1 Stage Detectors와 2 Stage Detectors의 개념을 알아야한다

 

두 방법의 차이점은 정확성과 속도의 trade off와 관련이 있다

 

숫자에서 알 수 있듯이 2 Stage의 경우 속도는 느리지만 정확성이 상대적으로 높은 편이고

1 Stage의 경우 속도는 빠르지만 정확성이 상대적으로 낮은 편이다

 

2 Stage의 모델로는 R-CNN계열이 대표적이고

1 Stage의 모델로는 YoLo 계열이 대표적이다

 

쉽게 두 방법을 분리하자면

2 Stage의 경우 이미지에서 먼저 Localization을 진행하고 이를 기반으로 Classification을 진행한다

즉, 판단의 과정이 2개의 단계로 구성되어 있는 것이다

 

반면에 1 Stage의 경우 Localization과 Classification을 동시에 진행한다

 

먼저 나온 모델은 2 Stage의 모델들로 정확성은 좋았으나 속도가 느렸기 때문에 Real-time으로 사용하기에는 한계점을 가졌다

 

반면 Yolo를 시작으로 등장한 1 Stage 모델들은 속도를 엄청나게 향상시켜서 Real-time에서도 사용할 수 있게 되었다

 

이번 시간에는 2 Stage에 모델에 대해서 자세히 살펴보자!!

deteiction 모델들


1. R-CNN - Region based Convolutional Neural Networks

R-CNN은 2013년도에 나온 object detection의 고전명작 같은 모델이다

R-CNN의 전체적인 과정을 살펴보면

1. Input image에서 Selective search를 통해서 객체가 있을것 같은 위치인 후보영역 - region proposal을 약 2000개 추출하고 이를 고정된 사이즈 - in paper : 227*227로 warp를 한다

2. 이렇게 변환된 모든 사진들을  backbone CNN 모델에 넣어 - in paper:Alexnet - 각각의 feature vector를 추출한다.

3. 이렇게 추출한 feature vector을 linear SVM에 넣어서 Class를 분류하고 Bounding box regressor에 넣어서 bbox를 조정한다

4. 그리고 Non maximum suppression 알고리즘을 적용해서 최적의 bbox를 출력하게 된다

 

쉽게 말해서 기존에 학습되어진 CNN과 bbox를 활용해서 객체의 위치와 클래스를 얻는 것이다

 

그럼이제 각 과정을 자세히 살펴보자

 

1.1 Selective search

selective search 방법을 사용하기 전에 사용된 방법은 sliding window 방법이다

쉽게 말해서 CNN 연산을 할때 kernel이 옆으로 이동하면서 사진의 모든 부분과 연산했던 것처럼

다양한 모양의 bbox를 이동시켜가면서 이미지 내에 객체가 있을 듯한 곳을 탐지하는 방법이다

 

하지만 이러한 방법은 많인 시간이 소요된다

만약 1000장의 이미지가 주어진다고 가정하더라도 1장에서 엄청 많은 sliding window 시간이 소요되기 때문이다

 

따라서 이러한 단점 때문에 새롭게 등장한 방법이 Selective search이다

쉽게 설명하자면 색, 무늬, 명암등의 다양한 기준으로 픽셀을 grouping가고 

이렇게 grouping된 이미지를 점차 통합시켜서 bbox 형태를 추정한다

논문에서는 이러한 방법으로 사진당 2000개의 후보 영역 - Region Proposal을 추출하였다

 

그리고 이렇게 만들어진 영역을 CNN의 input으로 넣기 위해서 고정된 크기로 resize = warp하여준다

 

1.2 Extraction feature vector by backbone CNN 

이 부분은 간단하다 2000개의 warp된 이미지를 input으로 받아서

CNN에 넣어 feature vector를 추출한다 

쉽게 말해서 CNN의 forward 과정을 주어지는 Region Proposal 수 만큼 반복하는 것이다

 

1.3 Classification by linear SVM

이렇게 추출된 feature 갖고 SVM에 넣어서

class를 예측하고 condience score를 반환하게 한다

linear SVM은 해당 위치가 특정 class에 해당하는지 이진 분류하는 분류기 이다

 

1.4 Bounding box regressor

또한 CNN에서 나온 feature을 regression하여서 bounding box를 예측한다

 

여기서 Loss는 MSE를 활용한다

 

1.5 Non maximum Suppression

앞에서 생성한 2000개의 Resion을 모두 출력하면 많은 출력이 있고 또한 겹치는 bbox가 많이 있을 것이다

따라서 이를 해결하기 위해서 Non maximum Suppression 알고리즘을 적용한다

 

과정은 다음과 같다

1. bbox 별로 지정한 confidence score threhold 이하의 box를 제거

2. 남은 bbox를 confidence score에 따라 내침차순 정렬, confidence score가 높은 순의 bounding box부터 다른 box와의 IoU 값을 조사하여 IoU threshold 이상인 box를 모두 제거

3. 남아 있는 box 선택 

 

즉, confidence score가 특정 threhold를 넘고 

이를 기준으로 다른 박스와 IoU를 계산했을때 특정 이상으로 겹치는 다른 박스들을 쳐내는 것이다

 

*추가적인 Detail

- 논문에서는 AlexNet을 CNN backbone으로 활용해서 모델을 구성하였다

이때 CNN에 들어가는 Dataset의 형태는

IoU가 0.5크면 Positive sample로 지정하였고 반대의 경우 Negative samples로 지정하였다

그리고 배치마다 Positive : 32, Negative 96으로 고정해주었다

 

-  Linear SVM의 경우

Dataset을 Ground True 값만을 Positive Sample로 지정하였고

IoU가 0.3보다 낮은 것을 negative samples로 지정하였다

그리고 CNN과 같이 Positive 32, Negative 96으로 지정해주었고

여기서 특별한 것은 Hard negative mining을 활용하였다는 것인다

이는 배경으로 식별하기 어려운 샘플들을 강제로 다음 배치에 negative sample로 mining하는 것이다

 

 - Bbox regressor의 경우

Dataset을 IoU가 0.6 보다 큰경우만 positive sample로 지정해주었고 

Loss는 MSE를 사용하였다

 

 

 

R-CNN 논문(Rich feature hierarchies for accurate object detection and semantic segmentation) 리뷰

이번 포스팅부터는 본격적으로 Object Detection 모델에 대해 살펴보도록 하겠습니다. 어떤 논문을, 어떤 순서에 따라 읽어야할지 고민하던 중, hoya님이 작성하신 2014~2019년도까지의 Object Detection 논

herbwood.tistory.com

단점:

R-CNN은 단점이 확실하다

1. 사진 한장당 2000개의 Region을 CNN에 통과시켜야하기 때문에 시간이 많이 소요된다

2. 또한 강제로 Size를 warping하기 때문에 성능이 하락된다

3. 그리고 CNN, SVM, bbox regressor를 따로 학습시켜야한다

4. End - to - end X

 


2. SPPNet

SPPNet은 R-CNN의 한계점을 보완하기 위해서 등장하였다

다시 위에 있는 R-CNN의 한계를 살펴보자

 

1. R-CNN의 경우 CNN에 input으로넣기 전에 고정된 사이즈로 Wraping을 했는데 이것 때문에 성능이 하락하였다 

2. 또한 Region Proposal된 모든 2000개의 RoI를 각각 CNN에 통과 시켰기 때문에 시간이 많이 소요되었다

핵심 아이디어

따라서 이러한 2개의 한계를 극복하기 위해서 SPPNet은 아래의 두가지 방법을 활용한다

 

1. 먼저 input image를 CNN을 통과 시켜서 feature map을 뽑은후 여기서 후보를 추출한다

2. Spatial Pyramid Pooling Layer를 통해서 추출된 RoI를 고정된 사이즈로 변환한다

 

 

갈아먹는 Object Detection [2] Spatial Pyramid Pooling Network

지난 글 갈아먹는 Object Detection [1] R-CNN 들어가며 지난 시간 R-CNN에 이어서 오늘은 SPP-Net[1]을 리뷰해보도록 하겠습니다. 저 역시 그랬고, 많은 분들이 R-CNN 다음으로 Fast R-CNN 논문을 보시는데요, 해

yeomko.tistory.com

이를 한줄로 요약하면

입력 이미지의 크기에 관계 없이 Conv Layer들을 통과시키고

FC layer 통과 전에 feature map들 동일한 크기로 조절해주는 pooling을 적용하자

 

1. 번 같은 경우에는 R-CNN의 순서만 변화 시킨 것이기 때문에 크게 어렵지 않을 것이다

2. 번 같은 경우를 조금더 자세히 살펴보자

 

2.1 Spatial Pyramind Pooling

Input으로 Conv Layer를 통과해서 추출된 feature map을 인풋으로 받는다

그런다음 미리 지정해 놓은 영역, 위의 사진은 3가지 4x4, 2x2, 1x1영역을 지정해 주었다,

따라서 해당 영역들을 기준으로 max pooling or average pooling을 진행해주고 

그결과를 flatten and concate해준다 

 

그런다음 R-CNN과 같은 방법으로 linear SVM, bbox regressor를 진행한다

 

단점 :

1. CNN, SVM, bbox등 따로 학습진행

2. End-to-end X


3. Fast R-CNN

Fast R-CNN은 기존 R-CNN의 단점과 SPPNet의 단점을 보완하였다

우선 

1. 이미지를 먼저 CNN에 넣어서 Feature map을 추출하였다 - 논문에서 VGG 16을 사용

2. 그리고 이렇게 뽑은 Feature map에 RoI Projection을 통해서 RoI를 계산하였다 고정된 크기로 고정

 

그리고 나머지 과정은 R-CNN과 같다

 

앞에 모델들과 차이가 있다면

2.번이다

 

3.1 RoI Pooling

이 부분 SPP의 영역 1인 부분과 같다고 할 수 있다

CNN에서 추출된 feature map에서 기존 이미지에서 찾은 RoI를 영역으로 지정하고

여기서 max pooling or Average pooling을 진행한다음 flatten 하여서 고정된 vector로 구성해준다

 

그렇다면 여기서 의문이 생길 수 있는데

feature map과 input image의 크기가 다른데

어떻게 같은 RoI의 영역으로 자를 수 있을까?

 

이는 이름에서 확인할 수 있듯이 Projection 해주어서 

feature map 사이즈에 맞게 RoI를 비율 조절 해주면 해결이 된다

 

Fast R-CNN의 장점은 명확하다 CNN, SVM, bbox Regressor를 한번에 학습할 수 있다는 것이다

이를 위해서 Multi task loss를 활용하였는데

classification loss + bounding box resgression의 loss를 합해서 backforward 해주면된다

 

학습에서 조금 특별한 특징이 있다면

Hierarchical sampling을 활용했다는 것이다

이는 기준 R-CNN의 경우 이미지에 존재하난 RoI를 전부 저장해 사용했던 것과 다르게

한 배치에 같은 이미지의 RoI만 포함되게 하는 방법이다

따라서 이를 통해서 한 배치 안에서 연산과 메모리를 공유할 수 있게 되었다

 

하지만 아직까지

End - to End가 아니라는 단점이 존재한다


4. Faster R-CNN

이름은 Fast R-CNN과 매우 비슷하다

역시 이름에서 알 수 있듯이 R-CNN 계열의 모델이다

 

차이점은 드디어 등장하는 Anchor boxRPN이다

 

Faster R-CNN 논문(Faster R-CNN: Towards Real-Time ObjectDetection with Region Proposal Networks) 리뷰

이번 포스팅에서는 Faster R-CNN 논문(Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks)을 읽고 정리해봤습니다. 기존 Fast R-CNN 모델은 여전히 Selective search 알고리즘을 통해 region proposals

herbwood.tistory.com

 

[Object Detection] Anchor Box 설명과 pytorch 구현

안녕하세요 pulluper 입니다 😊 오늘은 object detection에서 많이 쓰이는 anchor box 에 대하여 알아보겠습니다. Anchor 란 "닻"을 의미합니다. 배를 움직이지 않게 하고 배가 어느 위치에 있는지 확인하는

csm-kr.tistory.com

 

 

기존 R-CNN 계열은 후보 영역 추출을 위해 사용되는 Selective search 알고리즘을 사용했는데 이는 CPU 상에서 동작하고 이로 인해 네트워크에서 병목현상이 발생하게 되었다 

따라서 Faster R-CNN은 이를 해결하기 위해서 Region Proposal Network인 RPN을 활용한다

 

4.1 RPN

RPN은 보다 정교한 RoI를 추출하기 위해서 Anchor Box를 도입한다

 

Anchor Box

쉽게 말해서 다양한 종회비 aspect ratio와 크기 scale을 활용해서 feature map의 grid 기준으로 여러개의 bbox를 생성한다

하지만 이렇게 bbox를 생성하게 되면 너무많은 bbox가 만들어 질 것이다

 

따라서 RPN이 Anchor box가 객체를 포함하고 있는지 없는 지를 확인하게 된다

 

RPN은 먼저 CNN의 feature map을 input으로 받아서 3x3 conv를 수행하여 intermediate layer를 생성해준다

그런다음 1x1 conv를 수행하여 binary classification을 수행하여

객체가 있는지 없는지에 대해서 판단을 한다

그리고 다시한번 intermediate layer가 1x1 conv를 수행하여서 bbox regression을 수행해준다

이를 한번에 표현하면 다음과 같다

 

RPN의 Loss는 다음과 같은  Multi task Loss가 사용된다

그 다음에 오는 과정은 앞의 모델들과 동일하다

 

'네이버 부스트캠프 🔗 > ⭐주간 학습 정리' 카테고리의 다른 글

1 Stage Detectors  (0) 2023.05.09
Neck  (0) 2023.05.08
mAP - Mean Average Precision  (0) 2023.05.03
[부스트 캠프]Week 8 회고 및 Week 9 목표정리  (0) 2023.05.03
Docker  (0) 2023.04.27