투기행위 검출률 저조

기존 1, 4번 모델 블렌딩을 통해 객체 검출에 대한 평가 기준은 맞추었지만, 투기 행위에 대한 평가 기준은 여전히 맞추지 못하고 있는 상황이다. 우선, 투기행위를 인식하지 못하는 경우는 다음과 같이 크게 2가지로 나누어 진다.

  1. 모델이 predict한 confidence값이 Threshold를 모두 넘지 못해서 검출 x
  2. 애초에 객체 자체를 탐지 x

CUDA에서 연산 된 output값 중, Threshold를 넘는 값이 하나도 없으면 투기행위를 인식하지 못한다. 또한, 애초에 객체가 탐지되지 않아서 CUDA에 input값으로 아무것도 넘어가지 않아, 투기 행위에 대한 연산 자체가 이루어 지지 않는 경우도 있다.



해결책

Threshold 재조정

따라서 일단 기존에 설정되어 있던 투기 행위 및 객체 검출에 대한 Threshold를 모두 제거해주고, 각각에 대한 confidence가 사진에 찍히도록 하였다. 그 후, 옥상에서 찍은 테스트셋에 대해서 확실하게 투기행위로 판단되는 프레임만 따로 정제하여주고, 이 프레임에 대해서만 모델에 넣고 돌려보는 것이다. 이를 통해 confidence의 평균값이 어느정도인지 확인하여 Threshold를 재조정하기로 하였다.

...

CONF_THRESH = 0 # Dumping에 대한 Threshold

...

ENGINE_FILE_PATH = "model_1.engine" #model1 ~ model5까지 있음

...

OBJ_THRESH1 = 0 # 객체 검출 1차 threshold
OBJ_THRESH2 = 0.35 # 객체 검출 최종 threshold

...

text = '{}: {}'.format('obj_conf', confidences[idx])
text_size, baseline = cv2.getTextSize(text, cv2.FONT_HERSHEY_SIMPLEX, 0.8, 2)
cv2.putText(
    image,text, (x1, y1+text_size[1]+baseline//2),
    cv2.FONT_HERSHEY_SIMPLEX, 0.8, (255,0,0), 2
) 

image


모델별 최적의 화각 찾기

또한 우리의 목표는, 가장 좋은 시나리오를 찾아 그 시나리오를 테스트 기관에 넘겨주는 것이라고 하셨다. 가장 좋은 시나리오란, 각 모델별 최적의 화각을 찾아서 그에 맞는 테스트셋을 만들어내는 것이다. 따라서 각 모델별로 어떤 화각에 대해서 최적의 결과를 도출해내는지 찾아내야한다. 각 모델별로 여러 각에서 찍은 사진을 넣어보고, 각각 어떤 화각에서 가장 confidence가 출력되는지 판단하여 최적의 화각을 찾기로 하였다.



테스트셋 생성

다음주부터 일주일간은 위 조건을 만족하는 테스트셋을 계속 생성할 것 같다. 실제 현장에 설치되어 있는 cctv의 화각과 맞추기 위해서 카메라를 위 사진처럼 높은 곳에 올려두고 동영상을 촬영하고 있다. 촬영된 동영상은 OpenCV를 사용하여 프레임으로 변환해주고, 적당히 정제작업을 거쳐서 모델에 넣어주고 있다. 테스트셋은 적어도 5000셋 이상이 필요하다고 하셨다. 한 세트 당 5프레임씩만 찍는다고 해도 총 25000프레임 정도를 찍어야 할 것 같다.

댓글남기기