Object Detection 정리 2. Objectness 혹은 Confidence Score

2022. 11. 30. 23:45개발

AI 딥러닝을 통한 Object Detection에 대해서 간단하게 정리해보자.

지난 정리 1에서는 딥러닝 분류모델의 Head를 변경하여 Localization 모델을 완성했다. 그 결과 Bounding Box를 표시할 수 있는 위치 정보를 얻을 수 있었다.

문제. 오브젝트가 없다면?

현재 완성한 모델에 학습한 Object가 없는 이미지를 Input으로 넣으면 어떻게 될까? 모델은 무조건 위치 정보를 Output으로 return해야 하므로 임의의 위치 정보를 return할 것이다. 이는 우리의 프로그램 또는 어플리케이션이 의도하는 바가 아니다.

해결. Objectness 혹은 Confidence Score을 도입하자.

이 문제를 해결하기 위해서 우리는 Output Dimension을 하나 더 늘릴 것이다. 이제 output은 [confidence score, cx, cy, w, h]로 구성된다. 데이터셋을 구성할 때 오브젝트가 있다면 confidence score = 1.0, 없다면 0.0으로 전처리할 것이다. (있으면 100% 없으면 0% 개념)

# jupyter notebook

import cv2
import tensorflow as tf

backbone = tf.keras.applications.mobilenet.MobileNet(
    include_top=False,
    weights=None,
    pooling='avg',
)

head = tf.keras.layers.Dense(
    units=5,
    activation='sigmoid',
)

model = tf.keras.Model(
    inputs=backbone.input,
    outputs=head(backbone.output)
)
model.summary()

# 마지막 레이어 : dense (Dense)               (None, 5)
# None은 아직 정해지지 않은 Batch Size, 5는 Output Dimension.

thresh = 0.5
pred = model.predict(inputs)
conf, x, y, w, h = pred
if conf > thresh: # thresh 0.5보다 confidence score가 크면 BBOX를 그리고 score를 표시
	x1, y1, x2, y2 = x-w//2, y-h//2, x+w//2, y+h//2
	cv2.rectangle(img, (x1,y1), (x2,y2), (255,0,0), 3)
    cv2.putText(img, f'{conf:.2f}', (x,y), cv2.FONT_HERSHEY_SIMPLEX, 1, (255,0,0), 3)

Confidence Score가 Thresh보다 크면 BBOX를 그리고(left), 아니면 그리지 않는다(mid). 그리지 않는 경우에도 BBOX를 그리면 그림과 같을 것이다(right).

 이제 모델이 오브젝트가 없는 경우에는 박스를 그리지 않도록 했다. 이것으로 단일 오브젝트를 찾는 모델은 완성했다고 할 수 있다. 오브젝트가 하나인 문제는 충분히 해결할 수 있다는 뜻이다. 이런 문제만 있었다면 세상이 이렇게 복잡하지 않았을텐데...

 다음 정리에서는 반대로 여러 오브젝트(Multiple Objects)가 있을 경우의 문제와 그 해결을 다뤄보자.

728x90
반응형

'개발' 카테고리의 다른 글

tf.where  (0) 2022.12.21
tf.squeeze  (0) 2022.12.14
SQLite3로 Database 공부 시작!  (0) 2022.11.30
Object Detection 정리 1. Localization과 Bounding Box  (0) 2022.11.29
Poetry  (0) 2022.09.25