본문 바로가기
머신러닝_딥러닝

object detection - 욜로v3 with OpenCV(inference test) 설명

by 가오가이거 2021. 6. 3.

learnopencv.com/deep-learning-based-object-detection-using-yolov3-with-opencv-python-c/   :간략 요약

 

(예시)

 

object detector = object locator + object recognizer

 

- 원리: 입력 이미지를 가로13x세로13으로 나눈다. 즉, 총 169개의 셀로 나눈다.(하나의 셀크기는 이미지크기에 따라 다르다.)

각 셀이 이미지를 찾는 바운딩박스를 만드는데, 욜로는 그 바운딩박스가 실제로 하나의 물체를 포함하는지의 신뢰도와 그 감싸진 물체가 특정 클래스에 속할 확률을 예측한다.

이 바운딩박스의 대부분은 제거되는데, 이유는 그 신뢰도 점수가 낮거나, 같은 물체에 대해 매우 높은 신뢰도점수를 가진 다른 바운딩박스가 감싸고 있기 때문으로, 이를 non-maximum suppression 이라고 한다.

 

-  YOLO를 OpenCV와 함께 사용할 이유:

1. 이미 코드에서 opencv를 사용한다면, 별도로 Darknet code가 필요없다.

2. OpenCV CPU version 이 다크넷 cpu버전보다 최대 9배 더 빠르다.

3. OpenCV는 공식적으로 파이썬을 지원한다.(다크넷은 비공식적지원)

 

Step 0 : 여기서 다운로드.

cd learnopencv/ObjectDetection-YOLO/

 

Step 1 : Download the models

https://pjreddie.com/media/files/yolov3.weights

github.com/pjreddie/darknet/blob/master/cfg/yolov3.cfg?raw=true

github.com/pjreddie/darknet/blob/master/data/coco.names?raw=true

 

Step 2 : Initialize the parameters(object_detection_yolo.py 소스 상.)

신뢰도점수가 confidence threshold parameter(confThreshold)보다 낮은  모든 바운딩 박스가 무시된다.

나머지 바운딩박스들은 non-maximum suppression에 의해 중복박스가 제거되고, 이것은 nmsThreshold 파라미터로 조절된다.

input width (inpWidth) and height (inpHeight) : 더 빠른 결과 위해선 둘다 320으로 하거나, 더 정확한 결과위해 둘다 608로 세팅할수 있다.

 

Step 3 : Load the model and classes

 

Step 4 : Read the input

python object_detection_yolo.py --image 이미지파일명

python object_detection_yolo.py --video 동영상파일명

python object_detection_yolo.py #카메라입력받는경우

 

Step 4 : Process each frame

입력이미지는 blob포맷이어야 함.

blobFromImage() : 입력픽셀값을 255로 나눠, 0~1로 만듦/ (inpWidth, inpHeight)크기로 리사이즈

 

Step 4a : Getting the names of output layers

 

Step 4b : Post-processing the network’s output

네트워크출력인 바운딩박스들은 클래스의 수+ 5 개요소의 벡터로 표현된다.

처음 4개요소는 center_x, center_y, width,  height이다. 다섯번째 요소는 바운딩박스가 물체를 포함하는 신뢰도점수다.

나머지요소는 각클래스(물체유형)과 관련될 신뢰도다.

그중 가장높은 신뢰도가 주어진 신뢰도 threshold보다 낮은 값일때 그 바운딩박스는 무시되고, 같거나 더 높은 값인경우 중복박스를 제거하기위해, Non Maximum Suppression 과정을 거친다.

 

Step 4c : Draw the predicted boxes