본문 바로가기

Data Science/ML & DL

Object Detection | 개요 + 성능평가

컴퓨터 비전 분야 3가지

- 인간의 시각과 관련된 부분을 컴퓨터 알고리즘을 이용해 구현하는 방법 연구 -> 최근엔 딥러닝 이용

 

 

1.  Object Detection의 원리

Object Detection = Localization + Classification

Object Detection : 물체들을 boundig box로 위치를 찾아냄  localization + class를 분류 (classification)g 하는 작업

 

단계

1. 하나의 이미지안에서 N개의 Object를 검출(찾으려는 object 수 지정)

2. Object가 있을 최대의 개수를 정하고 모델은 무조건 그 개수만큼 bounding box(위치+분류)를 추론(출력)

3. 추론한 결과에서 후처리를 통해 최종 추론결과를 낸다.
- box안에 물체가 있을 확률(confidence score)을 모델이 찾도록 하여 낮은 확률의 box는 후처리에서 제거한다.

 

 

 방식 

방식1. One stage detector

 localization과 classification을 하나의 네트워크에서 처리 , 속도는 빠르지만 정확도가 낮음. 실시간 검출이 중요하므로 속도가 중요

방식2. Two stage detector

Localization과 classification을 나눠서 순차적으로 실행 처리, 속도는 느리지만 정확도가 높음

 

 

 

출력값 

1. Bounding box(BBOX)의 위치

- 위치값 4개가 가리키는 것은 3가지 중 1개(모델별)

    1) X좌표, Y좌표, width(너비), hight(높이)

            X좌표 , Y과표가

           1. Bounding Box 중심점의 좌표인 경우
            2. Bounding Box 좌상단 좌표인 경

   2) x_min, y_min(좌상단), x_max, y_max(우하단)

 좌표와 크기 : 실제값 또는 이미지의 width, height 대비 비율로 지정함(알고리즘에 따라 달라짐)
- 비율로 했을 때 장점은 원본 이미지의 크기가 resize되어도 영향을 받지 않음 
    ex) (X좌표/이미지 width, Y좌표/이미지 height, bbox width/이미지 width, bbox height/이미지 height)

 

 

2.  Object Detection 성능 평가 

1) IOU(Intersection Over Union, Jaccard overlap)

2) mAP (mean Average Precision)

- 여러개의 실제 Object가 검출된 재현율(Recall)의 변화에 따른 정밀도(Precision) 값을 평균화 한 것
- mAP를 이해하기 위해선 precision, recall, precision-recall curve, AP(Average Precision)을 이해 해야 한다.
> precision-recall curve, AP(Average Precision)는 Object Detection(물체 검출) 알고리즘 성능 평가를 위해 사용되는 방법중 하나이다.
 
### confusion matrix 계산 -> scikit-learn이용
import numpy as np
from sklearn.metrics import confusion_matrix

## class : 0,1(이진분류)
y = np.array([0,1,1,1,0]) #정답
pred = np.array([0,0,1,1,1]) #예측
cm = confusion_matrix(y, pred) # 평가지표함수(정답, 모델예측값)
print(cm)

# 0,1 -> 모델 예측 class
# [[1 1]   0
#  [1 2]]  1
#         정답 class
# 행렬의 값 : 개수
from sklearn.metrics import accuracy_score, recall_score, precision_score

#accuracy 계산
print(f"정확도:{accuracy_score(y,pred)}",(3/5))
print(f"재현율(recall):{recall_score(y,pred)}",(2/3))
print(f"정밀도(precision):{precision_score(y,pred)}",(2/3))