무냐의 개발일지

[3/14] 컴퓨터비전4 _Object detection, Segmentation 본문

Data Scientist Bootcamp

[3/14] 컴퓨터비전4 _Object detection, Segmentation

무냐코드 2024. 3. 14. 17:00

앞까지는 image classification 문제를 했는데, 이제부터는 다른 task를 보자

 

 

1. Object Detection

(복습)

 

- 하나의 객체 : Classification, Localization (Bounding Box ; 위치를 지정해준다)

- 여러개의 객체 : Object Detection (Classification + Localization(BBOX) + Multiple), Segmentation (픽셀 단위로 Class 분류하는 semantic)

 

Classification에서 풀었던 RNN모델을 Multiple 문제에서 쓰면, feature는 잘 잡겠지만, 위치를 못 잡을 것이다. 그래서 새로운 모델이 필요하다.

 | Object Detection 발전 과정

 

 

출처 : https://arxiv.org/pdf/1905.05055.pdf

- YOLO 구조인 R-CNN 이 생겨났다. (아래쪽 가지)

 

1. Region Proposal

2. Classification + Bounding Box Regression

- 이 두개를 따로하느냐, 같이하느냐에 따라 아래와 같이 나뉨

 

| Two - Stage Detector

- Region Proposal을 먼저 진행하면서 이미지 내에 대상이 있을 법한 영역인 RoI(Region of Interest)를 찾아냅니다. 그 찾아낸 RoI 안에 있는 이미지를 classification 합니다.

- Region proposal (1st) -> Classification/ Bounding Box (2nd) => 두개 합쳐서 하는 게 Two-stage detector

 

 

* proposals : Region proposal을 먼저 진행하는 1st 작업을 통해, RoI Pooing (이미지가 있을 법한 영역 ; Region of Interest)를 찾아낸다. 여기 RoI  안에 있는 이미지를 classification 한다

 

* 두 단계로 나눠져서 느리지만, 정확도가 더 높다

 

* Region 찾아내는 단계가 따로 있다

 

 

 

 

 

 

 

 

 

 

 

| One - Stage Detector

* Region 찾는 단계가 따로 있지 않고 합쳐져 있다.

 

* Region Proposal + Classification 동시 수행

 

* RoI를 찾아내는 대신, 이미지 전체를 대상으로 Classification 수행

 

* 셀 안에 object 있다고 판단되면, 그 셀에 대해 classification을 시행한다. 

 

*YOLO v1의 경우, 전체 이미지를 특정 크기의 그리드로 분할 후, 특정 cell에 대해 classification 수행

 

 

ex) Real-time processing이 필요한 자율주행자동차, 움직이는 영상 같은 경우에는 one-stage detector를 이용하는 게 좋다. 빠르니까!

 

 

2. R-CNN (2-stage Detetor의 대표적인 모델 ;  Region-based CNN)

 

 

(1번에서는, 미리 train된 CNN을 통해 feature extraction 수행)

(2000개중에 상당 수를 떨어트린다) 

 

 

| 순서 

이미지에 있는 대상 찾기 - Region proposal을 통해 RoI (대상이 있을법한 위치) 찾기 - Warped region(모양 변경) -Feature extractor - Classification 수행

 

CNN : Feature extractor + Classification 두 파트로 나뉘었지.
R-CNN에서는 이 Feature exractor 에 해당되는 부분만 떼와서 3번에 넣는다.

 

 

| R-CNN의 전체 구조

 

 

1. Selective Search 알고리즘 : 딥러닝을 기반으로 한 알고리즘

이거 말고도, 딥러닝 활용한 다양한 알고리즘을 적용하여 Region proposal을 수행하고 있다. 2000개 추출

 

 

| Selective Search ? 

 

Input -> Region proposal 해서 2000개의 RoI 후보 추출 -> CNN 에 돌린다 -> SVM, Bounding Box Regression으로 localization

 

* End-to-End learning : 인풋이 한 번 들어가면 끝까지 output까지 들어간다.

- 근데 R-CNN의 경우에는 끊긴다. Region 하고 한번 끊고, 그 다음 단계로 넘어가므로.

 

 

| Region proposal 이후 Classification 의 진행 과정

 

- RoI를 동일한 사이즈로 맞춘 후, Pre-trained된 Convolutional Neural Network 모델을 통해서 feature extraction(4,096차원)을 수행합니다.

- 앞의 Feature Extraction 결과 바탕으로 학습한 SVM을 이용해서 feature extraction 결과를 분류합니다.
- 그 후, 2,000개의 proposed region 중에서 IoU 값을 이용해 "non-maximum suppression"을 적용해 적합하지 않은 것을 탈락시킵니다.

- 마지막으로 Bounding box의 위치를 맞추기 위해서 bounding box regression을 실행합니다.

 

 

| Object Detection과 관련된 개념들

Sliding window

-Object Detection은 이미지의 “어느 위치”에 Object가 있는지 알아보는 태스크입니다.

Sliding window는 일정 크기의 window를 이미지 위에서 조금씩 옮겨가며 전수조사를 하는 것입니다. Window 사이즈를 바꿔 가면서 Object가 있는 위치를 찾고, 효율적으로 Object 위치를 찾기 위해서 stride를 변경할 수 있습니다. 그러나 계산 비용이 많이 들고 학습 속도가 느리다는 단점이 있습니다.

 

 

IoU (Intersection over Union)

IoU는 모델이 예측한 bounding box와 실제 정답인 ground truth box가 얼마나 겹치는 지를 측정하는 지표입니다. 만약 100%로 겹치게 되면 IoU 값은 1이 됩니다.

  • Area of Union: predicted bounding box와 ground-truth bounding box를 모두 포함하는 영역
  • Area of Overlap: predicted bounding box와 ground-truth bounding box가 겹치는 부분

 

NMS (Non Maximum/maximal Suppression)

 

NMS은 수많은 bounding box 중 가장 적합한 box를 선택하는 기법입니다.

  • NMS의 과정
  1. 모든 bounding box에 대하여 threshold 이하의 confidence score를 가지는 bounding box는 제거합니다.
  2. 남은 bounding box들을 confidence score 기준으로 내림차순 정렬합니다.
  3. 정렬 후 가장 confidence score가 높은 bounding box를 기준으로 다른 bounding box와 IoU를 구합니다.
  4. IoU가 특정 기준 값보다 높으면, confidence score가 낮은 bounding box를 제거합니다.
  5. 해당 과정을 순차적으로 반복합니다.

 

 

mAP (mean Average Precision)

  • Precision-Recall Curve: confidence threshold의 변화에 따른 정밀도와 재현율의 변화 곡선입니다.
  • AP: Precision-Recall Curve의 아래 부분 면적을 의미합니다.
  • mAP: AP는 하나의 object에 대한 성능 수치이며, mAP는 여러 object들의 AP를 평균한 값을 의미합니다. 따라서 Object Detection 모델의 성능 평가에 사용합니다.

Bounding Box Regression

 

 

참고 사이트 : https://lilianweng.github.io/posts/2017-12-31-object-recognition-part-3/

 


 

3. Segmentation

: 이미지를 픽셀 단위로 나눠서 특정 픽셀이 무엇을 지징하는지 파악하는 태스크

 

1) Semantic Segmantation  : 하나의 이미지 안에 들어있는 객체의 종류 (Object category)를 픽셀단위로 찾는다

2) Instance Segmentation : 하나의 이미지 안에 들어있는 객체의 개체 (Object instance)를 픽셀단위로 찾는다

 

Chair 라는 한개의 클래스 안에 9개의 의자가 있다. 각각의 다른 9개의 의자는 각각의 instance이다. 

 

즉, Instance Segmentation이 더 세부적인 것 = Semantic Segmentation + 'distinguising instances'

 

 

단, 각각의 픽셀 하나하나에 다 라벨링이 필요해. 그래서 데이터 구축이 매우 어렵고, 그래서 적은 양의 데이터를 가지고 데이터를 불리는 Data augmentation 이 매우 중요하다.

 

 

| U-Net 모델을 통해 Semantic Segmentation 이해하기

 

 

Semantic segmentation의 목표는, 픽셀 단위로 Classification을 수행하여  이미지와 동일한 높이, 너비 가진 segmentation map 생성하는 것이다

 

이런 식으로 Binary Encoding이 되어있을거다. 총 5개의 다른 채널이 있을 것.

 

 

앞쪽에선 Convolution -> Low resolution -> Transposed Convolution -> High resolution

 

U-Net : 원본이미지를 고대로 복원하는 Transposed convolution(Encoder + Decoder) Skip Connection만 추가하면 된다 

* Skip connection = Gradient Highway

 

 

| U-Net 모델의 구조

전형적 CNN구조 ->

 

인풋이 들어와 572x572x1 에 3x3 convolution + relu 을 2번 해준다. 이런 식으로 연달아 3x3 convolution을 2번씩 해주고 있다.

padding을 사용해주지 않아서 사이즈가 줄어들고 있다.

앞쪽에서는 CNN (다양, 복잡한 패턴 추출)

 

 

 

원본 이미지에 있는 pattern 정보를 추출한다. low resolution으로 근데 계속 정보가 압축되어가고 있잖나. 그러면 위치 정보도 사라지겠지. 그걸 다시 복원해 high resolution으로 복원해주는게 Expanding(Expansive) path

 

 

 

 

- 전 차원에서 바로 concat 한 정보를 바로 사용하기 때문에 정보손실을 보충해준다. 

- Encoding 과정에서의 정보 손실을 보충하기 위해 skip connection을 사용합니다. 이것은 Decoding 단계에서, 저차원의 정보와 고차원의 정보도 함께 이용하기 위한 방법입니다.