Object Detection
- 이미지 내에서 사물을 인식하는 방법에는 다양한 유형이 존재함
- Object Detection은 다수의 사물이 존재하는 상황에서 각 사물의 위치와 클래스를 찾는 작업임
- Classification → 하나의 이미지를 입력으로 받으면 해당 이미지가 어떤 클래스인지 맞추는 문제
- Classification + Localization → 이미지 내에 존재하는 물체가 어떤 물체인지, 그리고 해당 물체가 어디에 존재하는지 bounding box로 localization 해줌
- Object Detection → 이미지 내에 하나의 사물이 존재하는 것이 아닌 다수의 사물이 존재하는 상황에서 각각의 사물의 위치와 클래스를 분류하는 작업
- Instance Segmentation → 각각의 사물 단위를 픽셀 단위로 구분하는 것
Object Detection 방식: 2-Stage, 1-Stage 방식
- 2-Stage Detector
- 물체의 ⓛ위치를 찾는 문제(localization)와 ②분류(classification) 문제를 순차적으로 해결
- 하나의 이미지가 주어졌을 때 → 물체가 있을법한 위치를 찾아 나열(region proposal) → 각각의 위치에 대해서 feature를 추출하여 클래스 부여(classification) + 물체에 대한 위치를 정확하게 조절(regression ▶ 이미지 내에 사물이 존재하는 bounding box의 좌표 예측)
- ex) R-CNN, Fast R-CNN, Faster R-CNN, ...
- 1-Stage Detector
- 물체의 위치를 찾는 문제(localization)와 분류(classification) 문제를 한 번에 해결
- 일반적으로 2-stage 모델보다는 빠르게 동작하지만 정확도는 더 낮음
- ex) YOLO, RetinaNet, ...
2-Stage 방식 예시 (R-CNN / Fast R-CNN / Faster R-CNN)
▶ 요약
▷ R-CNN
- 이미지에 대해서 CPU 상에 Selective Search를 진행함
- Selective Search를 진행하면 물체가 존재할 법한 위치 → 약 2,000개를 찾음
- 물체가 존재할 법한 2,000개의 물체를 개별적으로 CNN Network에 넣어서 feature vector를 추출함
- feature vector들에 대해 SVM을 이용해서 classification을 진행하고, regressor를 이용해서 정확한 물체의 위치가 어디인지 bounding box를 조절해서 예측할 수 있도록함
▷ Fast R-CNN
- 기존의 R-CNN을 개선함
- 이름에서부터 알 수 있듯이 속도적인 면에서 많이 향상됨
- R-CNN과 동일하게 Selective Search를 통해 2,000개의 region proposal을 찾음
- feature map을 추출하기 위해 CNN을 한번만 거침
- ROI pooling을 통해 각각의 region들에 대해서 feature에 대한 정보를 추출함 (CNN의 구조를 생각해보면 feature map은 input image에 대해서 각각의 위치에 대한 정보를 어느정도 보존하고 있기 때문에 이러한 작업이 가능한것임, 또한 기본적인 R-CNN은 여러 개의 클래스가 존재하는 상황에서 각각의 클래스에 대해서 binary SVM을 사용하고, Faster R-CNN 부터는 기본적인 CNN network를 이용해서 softmax layer를 거쳐서 각각의 클래스에 대한 확률(probability)을 구하게됨)
▷ Faster R-CNN
- R-CNN과 Fast R-CNN은 모두 CPU에서 region proposal을 진행함 → 이러한 과정에서 속도가 매우 느리기 때문에 region proposal을 위한 모든 연산을 GPU 상에서 수행할 수 있도록하는 Region Proposal Network(RPN) 네트워크를 제안함
- RPN 모델도 딥러닝 모델이기 때문에 GPU에 올려서 진행할 수 있음
- RPN → feature map을 보고 어느 곳에 물체가 있을 법 한지 예측할 수 있도록함, 즉, Selective Search의 시간적인 단점을 해결하는 대안임
- 학습이 이루어지고 난 다음에는 GPU 상에서 한번에 forwarding만 수행하면 바로 어느 곳에 물체가 있을 법 한지 예측할 수 있기 때문에 시간적 장점이 있음
- 이후 Fast R-CNN에서 사용하는 Detection network의 architecture를 사용하여 실질적으로 각각의 물체가 존재할 법한 위치에 대해서 classification과 regression을 진행함
→ Faster R-CNN은 기존의 Fast R-CNN에서 region proposal을 진행하는 selective search를 RPN network로 바꿔서 모든 과정 자체를 end-to-end 방식으로 학습될 수 있도록 architecture를 바꾼 구조임
[end-to-end 참고 링크] https://infoinhere.tistory.com/8
→ Faster R-CNN = Fast R-CNN + RPN
▶ R-CNN 계열 기법들의 발전 방향 및 장단점 분석표
1. R-CNN
- Input 이미지를 가지고 CPU 상에서 selective search를 진행하여 물체가 존재할 것 같은 지역(ROI)을 2,000개 정도 추출 (= Selective Search를 이용해서 2,000개의 Region Proposal을 생성)
- 이렇게 추출한 ROI(Refine Of Interest)들은 각각 다른 크기와 위치를 가지기 때문에 이를 crop&warp하여 CNN에 들어가기 좋은 정사각 형태로 만듦
- 각각의 ROI들을 ConvNet으로 돌려 feature vector 추출
- 추출된 feature vector들을 SVMs을 이용하여 어떤 클래스에 해당되는지, 그리고 Regressor를 이용하여 정확한 물체의 위치가 어디인지 bounding box 조절
각 단계를 더 자세히 보면...
① Selective Search를 이용하면 이미지 상에 존재하는 물체가 존재할 법한 위치를 찾을 수 있음
② region proposal 각각에 대하여 크기를 동일하게 잘라낸다 (crop & warp)
그 잘라낸 이미지를 CNN에 넣어 feature vector를 추출한다
③ feature vector는 클래스 별로 존재하는 binary SVMs에 넣어서 어떤 클래스에 해당하는지 계산할 수 있고, 또한 물체가 정확히 어떤 위치에 존재하는지 조금 더 정확히 예측하기 위해 bounding box regression을 사용한다
★ R-CNN의 동작 과정 총 정리 ★
- Selective Search를 이용해 2,000개의 RoI(Region of Interest)를 추출한다
- 각 RoI에 대하여 warping을 수행하여 동일한 크기의 입력 이미지로 변경한다
- Warped image를 CNN에 넣어서(forward) 이미지 feature를 추출한다
- 해당 feature를 SVM에 넣어 클래스(class) 분류 결과를 얻는다 (이때 각 클래스에 대해 독립적으로 훈련된 이진(binary) SVM을 사용한다)
- 해당 feature를 regressor에 넣어 위치(bounding box)를 예측한다
** Bounding Box Regression
- 지역화(localization) 성능을 높이기 위해 bounding-box regression을 사용한다
→ Selective Search를 이용하면 물체가 존재할 법한 위치가 나온다고 했는데, 실제 물체가 존재하는 위치를 학습 데이터에서 가져와서 적용할 수 있다. 그러면 regression을 위한 학습 데이터셋이 구성이 된 것임
참고로, regression은 이미지 내에 좌표를 예측해야하기 때문에 실수 값이 결과로 나옴. 이때, 예측된 위치 정보가 주어졌을 때 실제 위치를 맞추도록 조정시켜야 하는데, 4개의 데이터를 예측할 수 있도록 해야함 (바로, bounding box가 있을 때 그 박스의 중간 지점에 대한 x와 y의 좌표, 그리고 너비와 높이가 된다
★ R-CNN의 한계점 ★
- 입력 이미지에 대하여 CPU 기반의 Selective Search를 진행해야 하므로 많은 시간이 소요된다
- 전체 architecture에서 SVM, Regressor 모듈이 CNN과 분리되어 있음
- CNN은 고정되므로 SVM과 Bounding Box Regression 결과로 CNN을 업데이트할 수 없음
- 다시 말해 end-to-end 방식으로 학습할 수 없음
- 모든 RoI(Region of Interest)를 CNN에 넣어야 하기 때문에 2,000번의 CNN 연산이 필요함
- 학습(training)과 평가(testing) 과정에서 많은 시간이 필요함
2. Fast R-CNN
- 동일한 Region proposal을 이용하되 이미지를 한 번만 CNN에 넣어 Feature Map을 생성함
- input 이미지에 대해 ConvNet을 돌린다
- 생성된 feature map을 가지고 region proposal method를 통해 ROI를 추출한다
- 추출된 ROI를 가지고 ROI pooling 기법을 이용하여 각각의 region들에 대해 feature에 대한 정보를 추출한다
- fully connected layer로 넘어간다
- 마지막으로 classification과 regression을 진행한다
- R-CNN에서는 여러 개의 클래스가 존재하는 상황에서 각각의 클래스에 대해 binary SVMs을 사용했지만, Fast R-CNN은 기본적인 CNN network를 이용해서 Softmax layer를 거쳐 각 클래스에 대한 확률 값을 구한다는 점에서 차이가 있음
** ROI Pooling
- 각 영역에 대하여 맥스 풀링(max pooling)을 이용해 고정된 크기의 벡터(vector)를 생성함
→ Fast R-CNN에서는 ROI pooling 개념이 나온다. 기본적으로 분류를 위해 Fully-connected layer를 이용해야하고, Fully-connected layer의 input으로는 고정된 크기의 vector가 들어가야 한다.
- RoI Pooling: 항상 고정된 크기의 feature vector를 추출하기 위해 각 RoI 영역에 Max Pooling을 적용하는 것
3. Faster R-CNN
- 병목(bottleneck)에 해당하던 Region Proposal 작업을 GPU 장치에서 수행하도록 함 (RPN 적용)
- 전체 architecture를 end-to-end로 학습 가능함
- input 이미지를 VGG 기반의 network로 feature를 추출한다
- 그렇게 얻은 feature map에 RPN을 적용하여 물체가 있을 법한 위치를 찾는다
- 그렇게 RPN이 알려준 위치 정보를 가지고 detector는 기존의 Fast R-CNN의 구조를 따르면서 RPN network가 알려준 위치를 중심으로 classification과 regression을 진행한다
- 이렇게 되면 물체가 있을 법한 위치를 구하는 과정을 GPU에서 수행할 수 있기 때문에 속도가 빨라질 뿐만 아니라 feature map을 공유한다는 점에서는 성능 향상되고, end-to-end 방식(output 부터 input 까지 back propagationb을 통해 gradient를 계산)으로 학습이 가능하다는 장점이 있다
* Region Proposal Networks (RPN)
- RPN 네트워크는 feature map이 주어졌을 대 물체가 있을 법한 위치를 예측한다
- k개의 앵커 박스(anchor box)를 이용한다
- 슬라이딩 윈도우(sliding window)를 거쳐 각 위치에 대해 Regression과 Classification을 수행한다
- feature map에 sliding window 를 이용해 각 위치에 대한 intermdiate feature를 추출한다
- 그것을 가지고 regression과 classification을 수행한다
- 단, RPN은 단순히 물체가 있을 법한 위치를 proposal 하는 목적으로 사용되기 때문에 전체 클래스의 결과가 아닌, 물체가 있는지 없는지에 대한 여부를 출력한다.
- ex) 이건 자동차고, 사람이고, 고양이고 가 아니라 물체가 있는지 없는지의 여부!!
Region Proposals
- Sliding Window (물체가 있을 법한 위치 찾기)
- 이미지에서 다양한 형태의 윈도우(window)를 슬라이딩(sliding)하며 물체가 존재하는지 확인
- 너무 많은 영역에 대하여 확인해야 한다는 단점이 있음
- [참고 링크1] https://ji-musclecode.tistory.com/37
- [참고 링크2] https://developer-lionhong.tistory.com/35
- 이미지에서 다양한 형태의 윈도우(window)를 슬라이딩(sliding)하며 물체가 존재하는지 확인
- Selective Search
- 인접한 영역(region)끼리 유사성을 측정해 큰 영역으로 차례대로 통합해 나감 (R-CNN / Fast R-CNN)
- 어떠한 이미지에서 색상/텍스쳐가 유사한 픽셀끼리 묶어주는 것부터 시작하며, 그 다음 픽셀 단위보다 조금 더 크게 덩어리 짓고, 또 한 번 merge하여 더 큰 덩어리로 만들어주어 region proposal하는 것임. 즉, 이미지 전체를 convolution으로 검사하는 것이 아니라 아래의 이미지에서 초록색 네모 부분만 가지고 검사하도록 하여 훨씬 효율적으로 처리할 수 있게 됨
- [참고 링크] https://bigdaheta.tistory.com/59
Object Detection 정확도 측정 방법
- 성능 평가 지표: 정확도(Precision)와 재현율(Recall)
- Average Precision
- Intersection over Union (IoU)
- NMS (Non Maximum Suppression)
[참고문헌]
[딥러닝] Object detection (2)(R-CNN / Fast R-CNN / Faster R-CNN 총정리)
01. R-CNN ➰ R-CNN의 작동원리 1️⃣ Input 이미지를 가지고 CPU상에서 selective search를 진행하여 물체가 존재할 것 같은 지역(ROI)을 2000개 정도 뽑아낸다. 2️⃣ 이렇게 뽑아낸 ROI(Refions Of Interest)들은 각
bigdaheta.tistory.com
Object Detection(객체 검출): R-CNN, Fast R-CNN, Faster R-CNN
Object Detection(객체 검출): R-CNN, Fast R-CNN, Faster R-CNN
velog.io
Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
State-of-the-art object detection networks depend on region proposal algorithms to hypothesize object locations. Advances like SPPnet and Fast R-CNN have reduced the running time of these detection networks, exposing region proposal computation as a bottle
arxiv.org
[딥러닝] Object detection(Region proposal / Sliding window / Selective search)
1. Object detection 이미지 내에서 사물을 인식하는 방법에는 다양한 유형이 존재하는데, 그중 Object detection에 대해 정리하고자 한다. Object detection은 이미지내에 불특정 다수의 object가 있을때, 각 obje
bigdaheta.tistory.com
'Concepts > ML & DL' 카테고리의 다른 글
[ML] Mini Batch / Batch Size / Iteration / Epoch (1) | 2024.01.12 |
---|---|
Few-Shot Learning (1) | 2023.12.10 |
Convolutional Neural Network(CNN or ConvNet) (1) | 2023.11.20 |