OpenCV 및 BoofCV 로 테스트 도중 Tracker를 하나 정해야하는 상황.
테스트와 자료를 검색하던 도중에 VOT2018 result를 읽어보고 현재 필요한 부분을 긁었다.
VOT2018 result에서는 총 71개의 Tracker를 비교하고 있는데, 이중에서 OpenCV와 BoofCV에서 제공하는 알고리즘은 별로 없었다. 그나마 나온 결과에서는 CSRT가 높게 나왔다는 점이었다.
이외에 OpenCV 전문가는 Object Tracking 관련하여 CSRT, KCF, MOSSE 3가지를 추천해줬는데 다음과 같이 설명하고 있다.
CSRT : 높은 정확도, 느린 FPS
KCF : 약간 낮은 정확도, 빠른 FPS
MOSSE : 순수 속도만을 위한 알고리즘
실 안드로이드 기기에서 테스트를 했을때 OpenCV Tracker (CSRT, TLC, MOSSE, MIL, KCF, MedianFlow)가 비교적으로 BoofCV Tracker (Circulant, Mean-Shift, Mean-Shift Scale, Mean-Shift likelihood, SparseFlow, TLD) 보다 느린 속도를 보여줬다.
테스트는 크게 2가지 방식으로 진행하였는데
준비된 영상 - FHD(1920x1080) 30FPS
요구 사항 - 30FPS 내에 동작해야 하기 때문에 33ms 이내로 결과값이 나와야함
첫번째는 동일한 비디오 인풋을 받아 첫 프레임에는 고정으로 타깃 위치를 설정하고 그 다음 프레임부터는 추적되도록 하여 비교했다.
두번째는 카메라를 통해서 최대한 비슷한 움직임을 Tracking 하도록 비교했다.
비교하는 것은 기기/해상도에 따른 속도 및 성공률이다.
(기기는 현재 사용하는 폰과 오래된 개발용 폰 2가지, 해상도는 FHD, HD, SD)
테스트 하는 도중 성능에 성공률보다는 정확도라는 값이 별도로 필요해 보였다.
성공률은 해당 프레임을 Tracker가 update 후 결과를 리턴해주는 것으로 사용자의 입장에서 정상적으로 추적했다는 것과는 거리가 멀었다.
따라서 VOT2018 Result를 통해서 정확도 측정 방법을 알아보기로 했다.
Ground Truth는 실측 자료로 위 고양이 Frame에 대한 수동입력된 값이다.
Predicted는 예측 자료로 Tracker의 예측결과로 보면 된다.
이 두가지의 교집합된 영역을 Overlap이라 하며, Tracking 동안 이 Overlap의 평균을 Accuracy(정확도)라고 한다.
따라서 위에서 정확도를 구하기 위해서는 Frame과 Ground Truth가 세트로 된 DataSet 집합들이 필요하다.
정확도를 구하기 위해서 DataSet 자체를 만드는게 엄청나게 큰 일이 되어버리는데.
(30FPS 5초짜리 영상만 하더라도 150개의 Frame과 Ground Truth가 필요)
다행히도 VOT2018 측에서 DataSet을 제공해주고 있었다.
Toolkit도 제공해주지만 Android 환경이 아닌 Python이라 활용하기에는 무리다.
따라서 제공해주는 DataSet을 가지고 테스트 및 정확도를 계산해주는 별도의 프로그램 개발이 필요해보인다.
+ VOT realtime에서는 ~20 FPS까지 사용을 realtime이라고 정의하고 있다.
따라서 50ms정도의 속도를 보여주는 알고리즘이라면 사용에 적합하다고 보면 될것같다.
'Android > opencv' 카테고리의 다른 글
Opencv Best Tracker (0) | 2019.07.01 |
---|---|
OpenCV Android용 Build 방법 정리2(+Extra) (0) | 2019.06.12 |
OpenCV Android용 Build 방법 정리(+Extra) (0) | 2019.06.11 |
OpenCV matchTemplate Test (0) | 2019.06.05 |
OpenCV + java + eclipse 개발 환경 (0) | 2019.06.05 |