객체 인식 모델 평가

PyTorch로 배우는 이미지 딥러닝

Michal Oleszak

Machine Learning Engineer

분류와 위치 추정

객체 위치 지정

  • 출력 1: 분류(예: cat)
PyTorch로 배우는 이미지 딥러닝

분류와 위치 추정

객체 위치 지정

  • 출력 1: 분류(예: cat)
  • 출력 2: 바운딩 박스 회귀 [x1, y1, x2, y2]
PyTorch로 배우는 이미지 딥러닝

교집합/합집합 비율(IoU)

  • 관심 객체: 탐지하려는 이미지 속 객체(예: dog)
  • 정답 박스(ground truth): 관심 객체를 정확히 둘러싼 바운딩 박스
  • 교집합/합집합 비율: 두 박스의 겹침을 측정하는 지표

자카드

  • IoU = 교집합 면적 / 합집합 면적
    • IoU = 0 겹침 없음, IoU = 1 완전 일치
    • IoU >0.5면 좋은 예측
PyTorch로 배우는 이미지 딥러닝

PyTorch에서의 IoU

bbox1 = [50, 50, 150, 150]
bbox2 = [100, 100, 200, 200]


bbox1 = torch.tensor(bbox1).unsqueeze(0) bbox2 = torch.tensor(bbox2).unsqueeze(0)
from torchvision.ops import box_iou

iou = box_iou(bbox1, bbox2)
print(iou)
tensor([[0.1429]])
  • 두 박스 집합 (x1, y1, x2, y2)

2개 박스 집합

  • 벡터를 2차원 텐서로 변환
  • IoU 계산
PyTorch로 배우는 이미지 딥러닝

바운딩 박스 예측

model.eval()
with torch.no_grad():

output = model(input_image)
print(output)
[{'boxes': tensor([[ 42.8553, 271.9481, 180.6003, 346.7082],
                  [191.6016,  80.4759, 247.8009, 387.5475], ....),
'scores': tensor([1.0000, 1.0000, 0.9998, ... ]),
'labels': tensor([18,  1, 20, 18, 18, 18 ...])
}]
boxes = output[0]["boxes"]

scores = output[0]["scores"]
PyTorch로 배우는 이미지 딥러닝

비최대 억제(NMS)

여러 박스

PyTorch로 배우는 이미지 딥러닝

비최대 억제(NMS)

여러 박스

비최대 억제: 가장 관련성 높은 바운딩 박스를 선택하는 일반 기법

  • 비최대: 객체일 확률(신뢰도)이 낮은 박스 제거

  • 억제: IoU가 낮은 박스 제거

PyTorch로 배우는 이미지 딥러닝

PyTorch에서의 비최대 억제

from torchvision.ops import nms


box_indices = nms( boxes=boxes, scores=scores, iou_threshold=0.5, ) print(box_indices)
tensor([ 0,   1,   2,   8])
filtered_boxes = boxes[box_indices]
  • boxes: 형태 [N, 4]의 바운딩 박스 좌표 텐서

  • scores: 형태 [N]의 각 박스 신뢰도 점수 텐서

  • iou_threshold: 0.0~1.0 사이 임계값

  • 출력: 필터링된 박스의 인덱스

PyTorch로 배우는 이미지 딥러닝

Ayo berlatih!

PyTorch로 배우는 이미지 딥러닝

Preparing Video For Download...