Object Detection의 이해 - 정리

Hwangbo Gyeom·2023년 4월 17일
1

[Study] Object Detection

목록 보기
1/5

Localization / Detection / Segmentation

Classification : 각 이미지가 어떤 이미지인지 예측하는 것
Localization : 이미지 내에 있는 하나의 object의 위치를 bounding box로 지정하여 찾음
Detection : 이미지 내에 있는 하나 이상의 object의 위치를 bounding box로 지정하여 찾음
Segmentation : 이미지 내에 있는 하나 이상의 object들을 pixel level detection으로 찾음

object detection의 주요 구성 요소

Region Proposal(영역 추정) : object가 있을만한 영역에 대한 힌트를 모델에게 주는 것.

Feature Extraction & FPN & Network Prediction : Detection을 위한 deep learning network. feature extraction의 경우 classification layer이 사용되며, network prediction의 경우, regression layer이 사용된다.

IOU/NMS/mAP/Anchor box : Detection을 구성하는 기타 요소들.

일반적인 object detection model

위의 사진에서 ResNet은 Backbone이고, ResNet을 통해 얻은 feature map을 확장하는 feature pyramid network가 있다. Head는 feature pyramid를 통해 얻은 class+box subnet들으로 classification과 regression을 진행한다.

Object Detection의 난제

1) Classification + Regression을 동시에
이미지에서 여러 개의 물체를 classification함과 동시에 위치를 찾아야함.
Classification과 regression의 loss 함수들에서 모두 loss가 낮게 나와야하는 것.

2) 다양한 크기와 유형의 object가 섞여 있음
크기가 서로 다르고, 생김새가 다양한 object가 섞여있는 이미지에서 이들을 detect 해야함.

3) detect 속도
detect의 속도가 중요한 실시간 영상 기반에서 detect해야하는 요구사항이 증대함

4) 명확하지 않은 이미지
object 이미지가 명확하지 않은 경우가 많음. 전체 이미지에서 object가 차지하는 비중이 높지 않은 경우도 있음.(배경이 대부분을 차지하는 경우가 많음.)

5) 데이터 세트의 부족
훈련 가능한 데이터 세트가 부족(MS COCO Dataset 80개, Google Open Image 500개)하며, annotation을 만들어야 하기 때문에 훈련 데이터 세트를 생성하기가 상대적으로 어려움.

object detection - 어느 위치에서 object 찾아야?

Bounding Box의 정보로만 학습을 진행하면 object가 어디있는지 추론하는 것이 어렵다. 그래서 이미지 내에서 object가 어디에 있을만한지 먼저 찾은 후에 해당 정보를 가지고 detection을 진행해야한다(Region Proposal).

Sliding Window 방식

Sliding Window 방식이란?

  • Window를 왼쪽 상단에서부터 오른쪽 하단으로 이동시키면서 object를 detect하는 방식. 이미지가 있을만한 위치를 무작정 찾아나서는 기법으로, Object detection의 초기 기법으로 활용됨.
  • 2가지 option이 있음.
    1) 다양한 형태의 window를 각각 slide 시키는 방식
    2) window scale은 고정하고 scale을 변경한 여러 이비지를 사용하는 방식
  • object 없는 영역도 무조건 슬라이딩 하여야 하며, 여러 형태의 window와 여러 scale을 가진 이미지를 스캔해서 검출해야 하므로 수행 시간이 오래 걸리고 검출 성능이 상대적으로 낮음.

Region Proposal(영역 추정) 방식

원본 이미지에서 후보 bounding box를 선택하여 최종 후보를 도출하고, 이를 바탕으로 object detection 진행. object가 있을만한 후보 영역을 찾는 것.

Selective Search

  • Region Proposal의 대표적인 방법.
  • 빠른 detection과 높은 recall 예측 성능을 동시에 만족하는 알고리즘.
  • 컬러, texture, shape에 따라 유사한 region을 계층적 그룹핑 방법으로 계산.
  • 최초에는 pixtel intensity 기반한 graph-based segment 기법에 따라 over segmentation을 수행(각각의 object들이 1개의 개별 영역에 담길 수 있도록 많은 초기 영역을 생성하는 것)

Selective Search 수행 프로세스
1) 개별 segement된 모든 부분들을 bounding box로 만들어서 region proposal 리스트로 추가
2) 컬러, texture, shape에 따라 유사도가 비슷한 segement들을 그룹핑함.
3) 다시 1)과 같이 region proposal 리스트에 추가하고, 2)와 같이 유사도가 비슷한 segment들을 그룹핑을 하는 것을 반복.

Selective Search Code

import selectivesearch

_, regions = selectivesearch.selective_search(img, scale = 100, min_size = 2000)

selectivesearch의 반환 값이 2개인데, 첫 번째는 중요하지 않은 값이다. 2번째 값(regions)은 object가 있을만한 곳이 담긴 list이다.
scale의 값이 커지면 큰 object들을 찾고, 작아지면 작은 object들을 위주로 찾는다.
min_size로 찾을 object의 최소 사이즈를 정할 수 있다.

반환된 regions
반환된 regions 변수는 리스트 타입으로 세부 원소로 딕셔너리를 가지고 있음.

  • rect : x, y 시작 좌표와 너비, 높이 값을 가지며 이 값이 detected object 후보를 나타내는 bounding box임.
  • size : segment로 선정된 object의 크기
  • labels : 해당 rect로 지정된 bounding box 내에 있는 object들의 고유 ID

regions는 아래로 내려갈수록 너비와 높이 값이 큰 bounding box이며, 하나의 bounding box에 여러개의 object가 있을 확률이 커진다.

위와 같이 유사한 object는 뒤로 갈수록 합쳐진다.

bounding box 시각화

#rect 정보만 cand_rects 객체에 저장
cand_rects = [cand['rect'] for cand in regions]

#opencv의 rectangle()을 이용하여 시각화
green_rgb = (125, 255, 51)
for rect in cand_rects:
	
    left = rect[0]
    top = rect[1]
    #rect[2], rect[3]는 너비와 높이임.
    right = left + rect[2]
    bottom = top + rect[3]
    
    img = cv2.rectangle(img, (left, top), (right, bottom), color = green_rgb, thickness = 2)

plt.figure(figsize = (8,8))
plt.imshow(img)
plt.show()

Object Detection 성능 평가 Metric

IOU

IOU : Intersection Over Union, 모델이 예측한 결과와 실측(ground truth) box가 얼마나 정확하게 겹치는가를 나타내는 지표. IOU는 개별 box가 서로 겹치는 영역 / 전체 box의 합집합 영역으로 계산.

IOU Code

import numpy as np

def compute_iou(cand_box, gt_box):
	
    #intersection area 계산
    x1 = np.maximum(cand_box[0], gt_box[0])
    y1 = np.maximum(cand_box[1], gt_box[1])
    x2 = np.maximum(cand_box[2], gt_box[2])
    y2 = np.maximum(cand_box[3], gt_box[3])
    
    intersection = np.maximum(x2 - x1, 0) * np.maximum(y2 - y1, 0)
    cand_box_area = (cand_box[2] - cand_box[0]) * (cand_box[3] - cand_box[1])
    gt_box_area = (gt_box[2] - gt_box[0]) * (gt_box[3] - gt_box[1])
    union = cand_box_area + gt_box_area - intersection
    
    iou = intersection / union
    return iou

NMS

NMS : Non Max Suppresion.

  • Object Detection 알고리즘은 object가 있을만한 위치에 많은 detection을 수행하는 경향이 강함. NMS는 detected 된 object의 bounding box 중에 비슷한 위치에 있는 box를 제거하고 가장 적합한 box를 선택하는 기법임.

    NMS 수행로직
    2개의 threshold, 1) confidence score 2) IOU Score를 받는다.

1) Detected된 bounding box별로 특정 confidence threshold 이하 bounding box는 먼저 제거한다.
2) 가장 높은 confidence score을 가진 box 순으로 내림차순 정렬하고, 아래 로직을 모든 box에 순차적으로 적용.

  • 높은 confidence score을 가진 box와 겹치는 다른 box를 모두 조사하여 IOU가 특정 threshold 이상인 box를 모두 제거

3) 남아있는 box만 선택

Confidence Score이 높을수록, IOU Threshold가 낮을수록 더 많은 box가 제거된다.

mAP

mAP : mean Average Precision.
실제 object가 detected된 재현율(recall)의 변화에 따른 정밀고(precision)의 값을 평균한 성능의 수치이다.

정밀도와 재현율
정밀도(precision)은 예측을 positive로 한 대상 중에 예측과 실제 값이 positive로 일치한 데이터의 비율을 의미. 검출 알고리즘이 검출 예측한 결과가 실제 object들과 얼마나 일치하는지를 나타내는 지표임.

재현율(recall)은 실제 값이 positive인 대상 중에 예측과 실제 값이 positive로 일치한 데이터의 비율을 뜻함. 검출 알고리즘이 실제 object들을 빠뜨리지 않고 얼마나 정확히 검출 예측하는지를 나타내는 지표임.

좋은 알고리즘이라면 정밀도와 재현을 모두 결과가 좋아야함.

오차 행렬(confusion matrix)
오차 행렬 : 이진 분류의 예측 오류가 얼마인지, 그리고 어떠한 유형의 예측 오류가 발생하고 있는지 함께 나타내는 지표.

여기서 False Positive는 잘못 예측한 것이고, False Negative는 아예 예측을 하지 않은 것이다.

Object Detection에서 정밀도와 재현율

  • 정밀도 : TP / (FP + TP)
  • 재현율 : TP / (FN + TP)

confidence score에 따른 정밀도-재현율 변화

  • confidence score이 낮을수록 더 많은 예측 bounding box를 만들게 되어 정밀도는 낮아지고 재현율은 높아짐.
  • confidence score이 높아질수록 예측 bounding box를 만드는데 더 신중하게 되어 정밀도는 높아지고 재현율은 낮아짐.

정밀도와 재현율의 trade-off

confidence threshold를 조정하면 정밀도 또는 재현율의 수치를 높을 수 있다. 그러나 정밀도와 재현율은 상호 보완적인 평가 지표이기 때문에 어느 한쪽을 강제로 높이면 다른 하나의 수치는 떨어지기 쉽다.

정밀도 재현율 곡선

recall값의 변화(confidence 값의 조정)에 따른 precision 값을 나타낸 곡선. 이렇게 얻어진 precision 값의 평균을 AP라고 하며, 일반적으로 정밀도 재현율 곡선의 면적 값으로 계산됨.

0개의 댓글