본 글은 네이버 부스트 캠프 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에 모델에 대해서 자세히 살펴보자!!
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은 단점이 확실하다
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를 고정된 사이즈로 변환한다
이를 한줄로 요약하면
입력 이미지의 크기에 관계 없이 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 box와 RPN이다
기존 R-CNN 계열은 후보 영역 추출을 위해 사용되는 Selective search 알고리즘을 사용했는데 이는 CPU 상에서 동작하고 이로 인해 네트워크에서 병목현상이 발생하게 되었다
따라서 Faster R-CNN은 이를 해결하기 위해서 Region Proposal Network인 RPN을 활용한다
4.1 RPN
RPN은 보다 정교한 RoI를 추출하기 위해서 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 |