지난번에 이어 계속 작성하겠습니다.
객체 탐지 모델은 총 두 가지 출력이 있습니다.
1. 분류 결과에 대한 확률 분포
2. 경계 상자
모델의 손실 함수는 경계 상자의 회귀 손실을 분류의 교차 엔트로피 손실에 추가하며, 일반적으로 '평균 제곱 오차(MSE)'를 사용합니다. 이를 코드로 작성하면
# 모델 예측
class_pred, bbox_pred = model(image)
# 손실값 계산
class_loss = cross_entropy_loss(class_pred, class_true)
bbox_loss = mse_loss(bbox_pred, bbox_true)
loss = class_loss + bbox_loss
# 옵티마이즈
optimize(loss)
이렇게 예측한 결과는 다음 이미지로 나타납니다.
빨간 상자가 실제 상자고, 파란 상자가 예측 상자입니다.
이 예측된 경계 상자가 실제 경계 상자와 얼마나 잘 일치하는지에 대한 점수는 IOU 를 계산해 알 수 있습니다.
위에서 본 이미지 처럼 하나의 이미지에 하나의 객체만 있을 때 모델이 잘 작동을 하지만, 탐지하고자 하는 객체가 두 개 이상일 때 모델이 잘 작동하지 않을 수 있습니다.
위 이미지처럼 모델은 하나의 경계 상자만 예측 할 수 있어, 두 객체 사이 어딘가에 경계 상자가 그려집니다. 아직 우리가 구현한 모델은 두 객체가 있음을 알지만, 그릴 수 있는 경계상자는 하나이므로 두 객체 중간에 그리게 된 것입니다.
그렇다면 모델에 경계 상자를 그리는 감지기의 수를 늘리면 되지 않은가 하지만, 다음 그림처럼 됩니다.
이에 대한 문제의 이유는, 모델이 각 경계 상자를 각각에 맞는 어떤 객체에 할당해야 하는지 모르고 안전을 위해 두 경계 상자 모두 객체 중간에 배치한 겁니다...