SlideShare a Scribd company logo
1 of 44
OpenCV’s Built-in Trackers.
㈜알티솔루션 실습생 박권규
프로젝트 목표
• OpenCV에 내장된 Tracking 알고리즘과 외부 Tracking 알고리즘을
이용하여 Object Tracking 수행 후 결과를 비교.
• 사람, 자동차 등 특정 물체에 대해 Object Tracking 수행 및 성능 확인.
• Object Detection으로 검출한 객체에 대하여 Object Tracking 수행
OpenCV?
- Realtime Computer Vision Library
- Developed by Intel
- Cross-platform
- Tensorflow, Torch/PyTorch, Caffe supported
- Implemented by C/C++ but also wrapped in Python
Project Environment
- Windows 10 1909
- Python 3.8.2(virtualenv 권장)
- PyCharm Community 2019.3
- opencv-contrib-python 4.4.0.40(via pip)
- External libraries(dlib, bbox, etc)
- YOLOv3 by DarkNet
Object Tracking? Object Detection?
• Object Detection: CNN 모델이 이미지를 분류(Classification)하여 이것이
어떤 객체(Object)를 담고 있는 이미지인지 파악했다면 이를 다시 지역화
(Localization)하여 이미지 내의 객체들이 무엇인지 검출하는 것.
• Object Tracking: Video Tracking. 이미지에 객체가 나타났을 때 이를 검출,
이후 이전 프레임의 해당 물체의 위치와 비교하며 객체의 이동을 추적.
How to ‘detect’ and ‘track’?
• OpenCV 내장 Tracker들은 추적 영역을 지정 가능. 중간에 개입할 수 없음.
• 함수 selectROI()를 이용하여 추적 영역을 직접 지정할 수 있음
• 추적 영역을 자동으로 지정하기 위해 다음과 같은 방법 시도
1. Contour 계산
2. BackgroundSubstractor 활용
Trackers in OpenCV
Tracker 클래스를 상속받아 알고리즘을
적용하여 구현된 자식 Tracker 클래스를
인스턴스 생성, Object Tracking에 사용
How to use?
8가지 Tracker 공통
- create(): 인스턴스 생성
- init(): 추적 영역 지정
- update(): 추적 결과 반환
Tracking Algorithms
• 객체 추적을 위해 Classifier라는 생김새(appearance) 모델을 온라인, 실시간
으로 학습하거나 오프라인, 미리 학습시키는 방식이 있음.
• 해당 객체가 담긴 이미지 조각을 배경 이미지에 비교하면서 0 ~ 1점 사이의
점수를 매겨 가장 높은 점수가 나온 곳을 탐색하는 방식.
BOOSTING: 사용자가 지정한 영역을 긍정적인 샘플로, 나머지 영역을 부정적
인 샘플로 학습시켜 실행시간에 훈련. 매 프레임마다 Classifier는 이전 위치
주변에서 계산을 수행해서 가장 높은 점수를 가진 위치를 탐색.
1. 오래된 알고리즘이기 때문에 권장되지 않음.
2. 객체 추적에 실패해도 이를 보고하지 않기 때문에 사용하기 부적합.
Tracking Algorithms
MIL: Multiple Instance Learning. BOOSTING과 비슷하게 학습시키지만 객체
의 현재 위치만을 긍정적인 샘플로 받아들이던 것과 달리 해당 위치 주변의
몇몇 구역도 긍정적인 샘플로 받아들임.
1. 해당 객체가 샘플 위치의 정중앙에 항상 위치한 것은 아니란 것에서 착안.
2. 이 긍정적인 샘플들(sack)에서 단 하나의 샘플만 결정됨.
3. 객체 추적에 실패해도 이를 보고하지 않기 때문에 사용하기 부적합.
KCF: Kernelized Correlation Filter. BOOSTING, MIL에 기반. MIL에서 이미지
패치들이 겹치는 영역이 많다는 점을 활용하여 기존보다 빠른 수행 가능.
1. 이전 Tracker보다 빠른 속도.
2. 객체 추적에 실패하면 이를 보고함.
3. 추적 대상의 크기 변화를 반영하지 않음.
Tracking Algorithms
TLD: Tracking, Learning, Detection 과정을 통해 객체를 추적함. 내부적으로
Tracker와 Detector를 운용하여 Tracker로 찾은 객체 영역을 Detector의 학습
데이터로 활용함. Tracking에 실패했다면 Detector가 찾을 때까지 대기.
1. 사라진 객체가 다시 나타났을 때(Occlusion 등) 회복할 수 있다.
2. 근처에 비슷한 객체가 존재할 경우 다른 객체를 탐지하는 경향이 있음.
3. 추적 결과가 화면 상에서 여기저기 움직이는 경향이 있음.
MEDIANFLOW: 객체의 과거, 현재 위치를 추적하여 두 방향에서 일어나는 불
일치(discrepancy)를 탐지.
1. 안정적(smooth)이고 예측 가능한 객체를 추적하는 데 유용.
2. 움직임이 크고 빠른 객체를 추적하는 데 어려움이 있음.
3. 추적 대상의 크기 변화를 반영함.
Tracking Algorithms
GOTURN: Generic Object Tracking Using Regression Network. OpenCV에
내장된 Tracking 알고리즘 중 유일한 CNN 기반 Tracker. 오프라인으로 미리
학습된 모델을 활용하여 객체 추적.
1. 편향된 학습 데이터를 사용하여 모델을 학습시키면 좋은 결과를 얻을 수도 있음.
2. OpenCV에 내장된 GOTURN은 Caffe 모델을 활용.
3. 학습 데이터에 존재하지 않는 물체에 대해서는 효과가 미비할 수 있음.
 손가락을 추적하도록 했는데 점점 손을 추적
 자동차 후미의 특정 물체를 추적하도록 했는데 점점 자동차를 추적
4. 추적 대상을 놓쳤을 경우 추적 영역의 크기가 극단적으로 늘어나 속도 저하
5. 추적 결과를 필터링하거나 적용하려는 환경에서 테스트 필요
Tracking Algorithms
MOSSE: Minimum Output Sum of Squared Error.
1. 속도가 빠르지만 정확도가 아쉬움.
2. 추적 대상의 크기 변화를 반영하지 않음.
CSRT: Discriminative Correlation Filter with Channel, Spatial Reliability 활용.
Histogram of Gradients와 Color Feature를 사용.
1. 속도는 느리지만 정확도가 높음.
2. VOT2018 Challenge에서 순위권에 든 알고리즘으로 구현됨.
Problems with OpenCV Trackers
• Object가 화면 내에 존재함에도 이를 추적하지 못함.
• Object가 화면을 벗어났을 때 이를 알아채지 못함.
• Occlusion이 발생했을 때 회복하지 못함.
• Object의 크기가 변할 때 추적 영역에 반영하지 못함.
• Object가 빠르게 움직일 경우 추적 대상에서 놓침.
Icons made by surang from www.flaticon.com
만능 Tracker는 존재하지 않으므로 추적 결과를
필터링 및 상황에 따라 다른 알고리즘 사용
Challenges in Object Tracking
1. Illumination Variation.
2. Scale Variation
3. Occlusion
4. Deformation
5. Motion Blur
6. Fast Motion
7. In-Plane Rotation
8. Out-of-Plane Rotation
9. Out-of-View
10. Background Clutters
11. Low Resolution
1st: MultiTracker
• OpenCV 숙달 목적으로 시작
• OpenCV 내장 Tracker들을 한번에 사용 및 비교하는 것이 목적
1. 여러 Tracker가 하나의 Object를 추적
2. 하나의 Tracker가 여러 Object를 추적
• 성능 측정을 위해 FPS, Tracking 상태를 출력
• Object는 selectROI() 함수로 직접 지정
• Tracking 결과를 직사각형으로 출력
Trials and Errors
• 여러 개의 Tracker와 여러 개의 Object
• 어떤 Tracker가 어떤 Object(s)를 추적할 지 지정하는 것은 CLI 상으로는 복잡
• 그렇기 때문에 하나의 Tracker가 여러 Object를, 또는 여러 Tracker가 하나의
Object를 추적하는 두 가지 모드로 제한하였음
• PyQt 등의 GUI 프레임워크를 사용하여 구현한다면 적합
• OpenCV MultiTracker 클래스 활용
• 여러 Tracker를 저장하여 한번에 호출할 수 있는 클래스
• 유용해 보였으나 반환 값이 하나의 Boolean 값과 여러 추적 영역 좌표로 구성
• 각 Tracker의 추적 성공/실패 여부를 파악할 수 없어 반려
• 별도의 자료구조를 사용
실행 결과
drone.mp4 car_chase_02.mp4 race.mp4
BOOSTING 10fps 17fps 20fps
CSRT 20fps 18fps 17fps
GOTURN 18fps 17fps 15fps
KCF 43fps 40fps 45fps
MEDIANFLOW 48fps 50fps 50fps
MOSSE 60fps 60fps 60fps
TLD 10fps 10fps 10fps
MIL 10fps 11fps 14fps
실행 결과
Mean FPS Scale Variation Out-of-View 비고
BOOSTING 16fps X X
느린 속도
사용 권장되지 않음
CSRT 19fps O △
약간 느린 속도
무난한 추적 성능
GOTURN 16fps O X
특정 패턴에 집중
실패 시 FPS 저하
KCF 43fps X △
추적 대상을 혼동하여
놓치는 경우가 있음
실행 결과
Mean FPS Scale Variation Out-of-View 비고
MEDIANFLOW 49fps O △
빠르게 움직이는 대상
추적 어려움
MOSSE 60fps X △
초점이 대상 외곽으로
이동하는 경향
TLD 10fps O △
잦은 Jumping
비슷한 대상과 혼동
MIL 12fps X X
대상과 비슷한 배경에
혼동하는 경향
구현 결과
• 실행 시 인자를 넘겨주는 방식으로 여러 Tracker 혹은 Object를 사용가능
• 하지만 Tracker 끼리 비교하기보다 Ground-truth를 활용하는 것이 바람직함
2nd: Benchmarking Trackers
• 한양대학교 데이터셋 활용
• 스크립트를 이용하여 제공된 Ground-truth와 이미지를 비디오로 변환
• 기하학 라이브러리(bbox)를 활용하여 IoU으로 Tracking 성공률을 계산
• 여러 Tracker를 Ground-truth와 동시에 비교할 수 있음
• 그래프 라이브러리(matplotlib)를 활용하여 알아보기 쉽게 출력
Dataset
실제로 Tracker와 사용할 때는 ground-truth가
그려지지 않은 영상으로 사용!
Intersection-over-Union?
교집합 영역(Intersection)
합집합 영역(Union)
Accuracy rate
0
10
20
30
40
50
60
70
80
90
mountainbike.avi human diving car
CSRT TLD KCF
Accuracy rate
구현 결과
• Tracker를 비교하는 데에는 효과적
• 하지만 이제 슬슬 자동으로 검출할 수는 없을까?
It’s YOLO time!
You-Only-Look-Once.
Why YOLO?
OpenCV Support
• 오픈소스 신경망 프레임워크
DarkNet 모델 사용 가능
Tutorials
• 인터넷 상에서 예제를 찾기 쉬움
• 학습 기간 단축
Pre-trained Model
• 홈페이지에서 모델 제공
• 80가지의 모델 검출 가능
기분?
• 긍정적인 결과를 볼 수 있었던
첫번째 딥 러닝 모델 활용 사례
• 얼른 사용해보고 싶었기 때문에…
Still…
아무리 딥 러닝 모델이라도 만능은 아님!
확률에 대한 임계 값 설정 필요
검출 결과를 어떻게 활용할 것인가?
3rd: detect_and_track
• YOLO로 검출한 객체에 대해 Tracker를 부착하여 자동으로 검출, 추적.
• 웹캠 입력이나 일반 동영상이 아닌 일반 도로 CCTV 영상을 활용.
• N번째 프레임마다 YOLO로 객체를 검출하여 해당 영역에 Tracker를 생성.
• 추적 결과를 개선하기 위해 여러 필터링 방법 사용
• 딥 러닝에 대한 이해 부족으로 아쉬운 결과
실행결과
Problems
N번째 프레임에서 검출된 객체 N+1번째 프레임에서 검출된 객체
이 둘을 어떻게 구분? 또는 이 둘이 같은 객체라는 것을 어떻게 확인?
Solutions
YOLO에 검출된 객체의 좌표는 사각형 영역(Bounding Box)으로 구성됨.
 N번째 프레임에서 객체 검출, Tracker 생성 후 부착, 사각형 영역 중심 좌표 계산, 저장.
 N+1번째 프레임에서 새로 객체 검출, 동일하게 중심 좌표 계산.
 두 프레임의 중심 좌표들을 비교하여 일정치 이상 가깝다면 이미 검출되고 Tracker에
의해 추적되고 있는 개체라 판단하여 해당 객체에는 새로운 Tracker를 생성하지 않는다.
 Tracker가 객체의 크기 변화(Scale Variation)를 인지할 수 있어야 함!(MEDIANFLOW 사용)
Solutions
단순히 중심 좌표를 비교하는 것 뿐 아니라 Intersection-over-Union 활용
 50% 이상 Intersection이 발생할 경우 같은 객체라고 판단하는 조건을 추가.
 두 사각형 영역이 2/3 정도 겹치면 약 50% 비율이 형성.
 높다고 항상 좋은 것은 아니기 때문에 적절한 조절이 필요.
Problems
N번째 프레임에서 검출된 객체 M번째 프레임에서 검출된 동일한 객체
같은 객체에 대해 중복 검출을 어떻게 제거? 중심 좌표 비교 기준치를 조정?
Solutions
YOLO에 검출된 객체의 사각형 영역은 항상 화면 내로 유지됨.
하지만 Tracker에 의해 추적되는 객체는 그렇지 않음.
 추적되는 객체의 사각형 영역을 화면 안으로 이동시켜 검출된 객체와 비교.
 일반 객체도 그 크기와 방향에 따라 검출이 제한될 수 있다는 잠재적 문제점.
Problems
1. Tracker 추적 실패로 인해 추적 결과가 화면 내에서 급격하게 이동
2. Tracker 추적 대상이 화면 밖으로 이동했음에도 불구하고
화면 밖 영역에 대하여 추적하며 추적 실패를 보고하지 않는 경우
3. Tracker 추적 실패로 인해 사각형 영역이 너무 작아지는 경우
Solutions
1. 앞서 계산한 중심 좌표를 이전 프레임과 현재 프레임 모두 기억하여 프레임
간 이동거리를 계산. 일정거리 이상 이동했다면 추적 실패로 판단.
2. 추적된 객체의 중심 좌표가 화면 밖에 있다면 객체가 화면 밖으로 이동하여
더 이상 추적할 필요가 없거나 추적이 실패한 것으로 판단.
3. 일정 크기 이하의 사각형 영역에 대해서는 무조건적으로 제거.
구현 결과
아쉬운 점
• OpenCV Tracker는 Tracking 도중에 개입할 수 없음
• 탐지 결과를 보강하거나 오류를 교정해줄 수 없음
• 추적 실패에서 회복하는 것은 알고리즘의 역할
• 객체를 추적하는데 실패했을 때 YOLO가 검출한 객체로 다시 추적?
• 객체의 이동속도를 기반으로 객체의 위치를 예측
• YOLO가 검출한 객체가 예측된 위치에 있으면 동일한 추적 정보의 Tracker를 생성
하여 해당 객체를 다시 추적하는 방식을 생각해볼 수 있음
• 구현이 복잡해서 추후 개선안으로…
• 중심 좌표 간 거리와 IoU를 활용하여 같은 객체를 여러 Tracker가 추적하고
있다면 하나만 제외하고 모두 삭제
• 임계치 이상의 IoU 비율을 가지는 추적 영역을 가지는 Tracker를 정리
• 각 Tracking에 대하여 가중치가 적용되어야 하는데…
참고자료
• https://89douner.tistory.com/75
• https://mickael-k.tistory.com/26
• https://www.learnopencv.com/
• https://www.pyimagesearch.com/
• https://rosia.tistory.com/259
• https://rosia.tistory.com/243

More Related Content

Similar to OpenCV's Built-in Trackers

"simple does it weakly supervised instance and semantic segmentation" Paper r...
"simple does it weakly supervised instance and semantic segmentation" Paper r..."simple does it weakly supervised instance and semantic segmentation" Paper r...
"simple does it weakly supervised instance and semantic segmentation" Paper r...LEE HOSEONG
 
Nationality recognition
Nationality recognitionNationality recognition
Nationality recognition준영 박
 
[NEXT] Android Profiler 사용법
[NEXT] Android Profiler 사용법 [NEXT] Android Profiler 사용법
[NEXT] Android Profiler 사용법 YoungSu Son
 
딥러닝 세계에 입문하기 위반 분투
딥러닝 세계에 입문하기 위반 분투딥러닝 세계에 입문하기 위반 분투
딥러닝 세계에 입문하기 위반 분투Ubuntu Korea Community
 
Loss function discovery for object detection via convergence simulation drive...
Loss function discovery for object detection via convergence simulation drive...Loss function discovery for object detection via convergence simulation drive...
Loss function discovery for object detection via convergence simulation drive...taeseon ryu
 
Io t에서의 소프트웨어단위테스트_접근사례
Io t에서의 소프트웨어단위테스트_접근사례Io t에서의 소프트웨어단위테스트_접근사례
Io t에서의 소프트웨어단위테스트_접근사례SangIn Choung
 
AnoGAN을 이용한 철강 소재 결함 검출 AI
AnoGAN을 이용한 철강 소재 결함 검출 AIAnoGAN을 이용한 철강 소재 결함 검출 AI
AnoGAN을 이용한 철강 소재 결함 검출 AIHYEJINLIM10
 
Java performance and trouble shooting
Java performance and trouble shootingJava performance and trouble shooting
Java performance and trouble shootingAnna Choi
 
Imagination-Augmented Agents for Deep Reinforcement Learning
Imagination-Augmented Agents for Deep Reinforcement LearningImagination-Augmented Agents for Deep Reinforcement Learning
Imagination-Augmented Agents for Deep Reinforcement Learning성재 최
 
클린 코드 part2
클린 코드 part2클린 코드 part2
클린 코드 part2Minseok Jang
 
"From image level to pixel-level labeling with convolutional networks" Paper ...
"From image level to pixel-level labeling with convolutional networks" Paper ..."From image level to pixel-level labeling with convolutional networks" Paper ...
"From image level to pixel-level labeling with convolutional networks" Paper ...LEE HOSEONG
 
UE4 Garbage Collection
UE4 Garbage CollectionUE4 Garbage Collection
UE4 Garbage CollectionQooJuice
 
Chapter 11 Practical Methodology
Chapter 11 Practical MethodologyChapter 11 Practical Methodology
Chapter 11 Practical MethodologyKyeongUkJang
 
SonarQube 로 Unity 프로젝트 관리
SonarQube 로 Unity 프로젝트 관리SonarQube 로 Unity 프로젝트 관리
SonarQube 로 Unity 프로젝트 관리EG Lim
 
Real-time Object Detection with YOLO v5, Hands-on-Lab
Real-time Object Detection with YOLO v5, Hands-on-LabReal-time Object Detection with YOLO v5, Hands-on-Lab
Real-time Object Detection with YOLO v5, Hands-on-LabJongHyunKim78
 
퍼지 전문가 시스템을 이용한 상품 추천 알고리즘
퍼지 전문가 시스템을 이용한 상품 추천 알고리즘퍼지 전문가 시스템을 이용한 상품 추천 알고리즘
퍼지 전문가 시스템을 이용한 상품 추천 알고리즘Jong MIn Yu
 
[paper review] 손규빈 - Eye in the sky & 3D human pose estimation in video with ...
[paper review] 손규빈 - Eye in the sky & 3D human pose estimation in video with ...[paper review] 손규빈 - Eye in the sky & 3D human pose estimation in video with ...
[paper review] 손규빈 - Eye in the sky & 3D human pose estimation in video with ...Gyubin Son
 
Vip detection sensor
Vip detection sensorVip detection sensor
Vip detection sensorchs71
 
딥러닝을 이용한 사용자 선호도 기반 의상 추천 알고리즘 Ppt 선수강
딥러닝을 이용한 사용자 선호도 기반 의상 추천 알고리즘 Ppt 선수강딥러닝을 이용한 사용자 선호도 기반 의상 추천 알고리즘 Ppt 선수강
딥러닝을 이용한 사용자 선호도 기반 의상 추천 알고리즘 Ppt 선수강Minji Kang
 

Similar to OpenCV's Built-in Trackers (20)

"simple does it weakly supervised instance and semantic segmentation" Paper r...
"simple does it weakly supervised instance and semantic segmentation" Paper r..."simple does it weakly supervised instance and semantic segmentation" Paper r...
"simple does it weakly supervised instance and semantic segmentation" Paper r...
 
Nationality recognition
Nationality recognitionNationality recognition
Nationality recognition
 
[NEXT] Android Profiler 사용법
[NEXT] Android Profiler 사용법 [NEXT] Android Profiler 사용법
[NEXT] Android Profiler 사용법
 
딥러닝 세계에 입문하기 위반 분투
딥러닝 세계에 입문하기 위반 분투딥러닝 세계에 입문하기 위반 분투
딥러닝 세계에 입문하기 위반 분투
 
Loss function discovery for object detection via convergence simulation drive...
Loss function discovery for object detection via convergence simulation drive...Loss function discovery for object detection via convergence simulation drive...
Loss function discovery for object detection via convergence simulation drive...
 
Io t에서의 소프트웨어단위테스트_접근사례
Io t에서의 소프트웨어단위테스트_접근사례Io t에서의 소프트웨어단위테스트_접근사례
Io t에서의 소프트웨어단위테스트_접근사례
 
AnoGAN을 이용한 철강 소재 결함 검출 AI
AnoGAN을 이용한 철강 소재 결함 검출 AIAnoGAN을 이용한 철강 소재 결함 검출 AI
AnoGAN을 이용한 철강 소재 결함 검출 AI
 
Java performance and trouble shooting
Java performance and trouble shootingJava performance and trouble shooting
Java performance and trouble shooting
 
Imagination-Augmented Agents for Deep Reinforcement Learning
Imagination-Augmented Agents for Deep Reinforcement LearningImagination-Augmented Agents for Deep Reinforcement Learning
Imagination-Augmented Agents for Deep Reinforcement Learning
 
클린 코드 part2
클린 코드 part2클린 코드 part2
클린 코드 part2
 
"From image level to pixel-level labeling with convolutional networks" Paper ...
"From image level to pixel-level labeling with convolutional networks" Paper ..."From image level to pixel-level labeling with convolutional networks" Paper ...
"From image level to pixel-level labeling with convolutional networks" Paper ...
 
UE4 Garbage Collection
UE4 Garbage CollectionUE4 Garbage Collection
UE4 Garbage Collection
 
Feature Pyramid Network, FPN
Feature Pyramid Network, FPNFeature Pyramid Network, FPN
Feature Pyramid Network, FPN
 
Chapter 11 Practical Methodology
Chapter 11 Practical MethodologyChapter 11 Practical Methodology
Chapter 11 Practical Methodology
 
SonarQube 로 Unity 프로젝트 관리
SonarQube 로 Unity 프로젝트 관리SonarQube 로 Unity 프로젝트 관리
SonarQube 로 Unity 프로젝트 관리
 
Real-time Object Detection with YOLO v5, Hands-on-Lab
Real-time Object Detection with YOLO v5, Hands-on-LabReal-time Object Detection with YOLO v5, Hands-on-Lab
Real-time Object Detection with YOLO v5, Hands-on-Lab
 
퍼지 전문가 시스템을 이용한 상품 추천 알고리즘
퍼지 전문가 시스템을 이용한 상품 추천 알고리즘퍼지 전문가 시스템을 이용한 상품 추천 알고리즘
퍼지 전문가 시스템을 이용한 상품 추천 알고리즘
 
[paper review] 손규빈 - Eye in the sky & 3D human pose estimation in video with ...
[paper review] 손규빈 - Eye in the sky & 3D human pose estimation in video with ...[paper review] 손규빈 - Eye in the sky & 3D human pose estimation in video with ...
[paper review] 손규빈 - Eye in the sky & 3D human pose estimation in video with ...
 
Vip detection sensor
Vip detection sensorVip detection sensor
Vip detection sensor
 
딥러닝을 이용한 사용자 선호도 기반 의상 추천 알고리즘 Ppt 선수강
딥러닝을 이용한 사용자 선호도 기반 의상 추천 알고리즘 Ppt 선수강딥러닝을 이용한 사용자 선호도 기반 의상 추천 알고리즘 Ppt 선수강
딥러닝을 이용한 사용자 선호도 기반 의상 추천 알고리즘 Ppt 선수강
 

OpenCV's Built-in Trackers

  • 2. 프로젝트 목표 • OpenCV에 내장된 Tracking 알고리즘과 외부 Tracking 알고리즘을 이용하여 Object Tracking 수행 후 결과를 비교. • 사람, 자동차 등 특정 물체에 대해 Object Tracking 수행 및 성능 확인. • Object Detection으로 검출한 객체에 대하여 Object Tracking 수행
  • 3. OpenCV? - Realtime Computer Vision Library - Developed by Intel - Cross-platform - Tensorflow, Torch/PyTorch, Caffe supported - Implemented by C/C++ but also wrapped in Python
  • 4. Project Environment - Windows 10 1909 - Python 3.8.2(virtualenv 권장) - PyCharm Community 2019.3 - opencv-contrib-python 4.4.0.40(via pip) - External libraries(dlib, bbox, etc) - YOLOv3 by DarkNet
  • 5. Object Tracking? Object Detection? • Object Detection: CNN 모델이 이미지를 분류(Classification)하여 이것이 어떤 객체(Object)를 담고 있는 이미지인지 파악했다면 이를 다시 지역화 (Localization)하여 이미지 내의 객체들이 무엇인지 검출하는 것. • Object Tracking: Video Tracking. 이미지에 객체가 나타났을 때 이를 검출, 이후 이전 프레임의 해당 물체의 위치와 비교하며 객체의 이동을 추적.
  • 6. How to ‘detect’ and ‘track’? • OpenCV 내장 Tracker들은 추적 영역을 지정 가능. 중간에 개입할 수 없음. • 함수 selectROI()를 이용하여 추적 영역을 직접 지정할 수 있음 • 추적 영역을 자동으로 지정하기 위해 다음과 같은 방법 시도 1. Contour 계산 2. BackgroundSubstractor 활용
  • 7. Trackers in OpenCV Tracker 클래스를 상속받아 알고리즘을 적용하여 구현된 자식 Tracker 클래스를 인스턴스 생성, Object Tracking에 사용
  • 8. How to use? 8가지 Tracker 공통 - create(): 인스턴스 생성 - init(): 추적 영역 지정 - update(): 추적 결과 반환
  • 9. Tracking Algorithms • 객체 추적을 위해 Classifier라는 생김새(appearance) 모델을 온라인, 실시간 으로 학습하거나 오프라인, 미리 학습시키는 방식이 있음. • 해당 객체가 담긴 이미지 조각을 배경 이미지에 비교하면서 0 ~ 1점 사이의 점수를 매겨 가장 높은 점수가 나온 곳을 탐색하는 방식. BOOSTING: 사용자가 지정한 영역을 긍정적인 샘플로, 나머지 영역을 부정적 인 샘플로 학습시켜 실행시간에 훈련. 매 프레임마다 Classifier는 이전 위치 주변에서 계산을 수행해서 가장 높은 점수를 가진 위치를 탐색. 1. 오래된 알고리즘이기 때문에 권장되지 않음. 2. 객체 추적에 실패해도 이를 보고하지 않기 때문에 사용하기 부적합.
  • 10. Tracking Algorithms MIL: Multiple Instance Learning. BOOSTING과 비슷하게 학습시키지만 객체 의 현재 위치만을 긍정적인 샘플로 받아들이던 것과 달리 해당 위치 주변의 몇몇 구역도 긍정적인 샘플로 받아들임. 1. 해당 객체가 샘플 위치의 정중앙에 항상 위치한 것은 아니란 것에서 착안. 2. 이 긍정적인 샘플들(sack)에서 단 하나의 샘플만 결정됨. 3. 객체 추적에 실패해도 이를 보고하지 않기 때문에 사용하기 부적합. KCF: Kernelized Correlation Filter. BOOSTING, MIL에 기반. MIL에서 이미지 패치들이 겹치는 영역이 많다는 점을 활용하여 기존보다 빠른 수행 가능. 1. 이전 Tracker보다 빠른 속도. 2. 객체 추적에 실패하면 이를 보고함. 3. 추적 대상의 크기 변화를 반영하지 않음.
  • 11. Tracking Algorithms TLD: Tracking, Learning, Detection 과정을 통해 객체를 추적함. 내부적으로 Tracker와 Detector를 운용하여 Tracker로 찾은 객체 영역을 Detector의 학습 데이터로 활용함. Tracking에 실패했다면 Detector가 찾을 때까지 대기. 1. 사라진 객체가 다시 나타났을 때(Occlusion 등) 회복할 수 있다. 2. 근처에 비슷한 객체가 존재할 경우 다른 객체를 탐지하는 경향이 있음. 3. 추적 결과가 화면 상에서 여기저기 움직이는 경향이 있음. MEDIANFLOW: 객체의 과거, 현재 위치를 추적하여 두 방향에서 일어나는 불 일치(discrepancy)를 탐지. 1. 안정적(smooth)이고 예측 가능한 객체를 추적하는 데 유용. 2. 움직임이 크고 빠른 객체를 추적하는 데 어려움이 있음. 3. 추적 대상의 크기 변화를 반영함.
  • 12. Tracking Algorithms GOTURN: Generic Object Tracking Using Regression Network. OpenCV에 내장된 Tracking 알고리즘 중 유일한 CNN 기반 Tracker. 오프라인으로 미리 학습된 모델을 활용하여 객체 추적. 1. 편향된 학습 데이터를 사용하여 모델을 학습시키면 좋은 결과를 얻을 수도 있음. 2. OpenCV에 내장된 GOTURN은 Caffe 모델을 활용. 3. 학습 데이터에 존재하지 않는 물체에 대해서는 효과가 미비할 수 있음.  손가락을 추적하도록 했는데 점점 손을 추적  자동차 후미의 특정 물체를 추적하도록 했는데 점점 자동차를 추적 4. 추적 대상을 놓쳤을 경우 추적 영역의 크기가 극단적으로 늘어나 속도 저하 5. 추적 결과를 필터링하거나 적용하려는 환경에서 테스트 필요
  • 13. Tracking Algorithms MOSSE: Minimum Output Sum of Squared Error. 1. 속도가 빠르지만 정확도가 아쉬움. 2. 추적 대상의 크기 변화를 반영하지 않음. CSRT: Discriminative Correlation Filter with Channel, Spatial Reliability 활용. Histogram of Gradients와 Color Feature를 사용. 1. 속도는 느리지만 정확도가 높음. 2. VOT2018 Challenge에서 순위권에 든 알고리즘으로 구현됨.
  • 14.
  • 15. Problems with OpenCV Trackers • Object가 화면 내에 존재함에도 이를 추적하지 못함. • Object가 화면을 벗어났을 때 이를 알아채지 못함. • Occlusion이 발생했을 때 회복하지 못함. • Object의 크기가 변할 때 추적 영역에 반영하지 못함. • Object가 빠르게 움직일 경우 추적 대상에서 놓침. Icons made by surang from www.flaticon.com 만능 Tracker는 존재하지 않으므로 추적 결과를 필터링 및 상황에 따라 다른 알고리즘 사용
  • 16. Challenges in Object Tracking 1. Illumination Variation. 2. Scale Variation 3. Occlusion 4. Deformation 5. Motion Blur 6. Fast Motion 7. In-Plane Rotation 8. Out-of-Plane Rotation 9. Out-of-View 10. Background Clutters 11. Low Resolution
  • 17. 1st: MultiTracker • OpenCV 숙달 목적으로 시작 • OpenCV 내장 Tracker들을 한번에 사용 및 비교하는 것이 목적 1. 여러 Tracker가 하나의 Object를 추적 2. 하나의 Tracker가 여러 Object를 추적 • 성능 측정을 위해 FPS, Tracking 상태를 출력 • Object는 selectROI() 함수로 직접 지정 • Tracking 결과를 직사각형으로 출력
  • 18. Trials and Errors • 여러 개의 Tracker와 여러 개의 Object • 어떤 Tracker가 어떤 Object(s)를 추적할 지 지정하는 것은 CLI 상으로는 복잡 • 그렇기 때문에 하나의 Tracker가 여러 Object를, 또는 여러 Tracker가 하나의 Object를 추적하는 두 가지 모드로 제한하였음 • PyQt 등의 GUI 프레임워크를 사용하여 구현한다면 적합 • OpenCV MultiTracker 클래스 활용 • 여러 Tracker를 저장하여 한번에 호출할 수 있는 클래스 • 유용해 보였으나 반환 값이 하나의 Boolean 값과 여러 추적 영역 좌표로 구성 • 각 Tracker의 추적 성공/실패 여부를 파악할 수 없어 반려 • 별도의 자료구조를 사용
  • 19. 실행 결과 drone.mp4 car_chase_02.mp4 race.mp4 BOOSTING 10fps 17fps 20fps CSRT 20fps 18fps 17fps GOTURN 18fps 17fps 15fps KCF 43fps 40fps 45fps MEDIANFLOW 48fps 50fps 50fps MOSSE 60fps 60fps 60fps TLD 10fps 10fps 10fps MIL 10fps 11fps 14fps
  • 20. 실행 결과 Mean FPS Scale Variation Out-of-View 비고 BOOSTING 16fps X X 느린 속도 사용 권장되지 않음 CSRT 19fps O △ 약간 느린 속도 무난한 추적 성능 GOTURN 16fps O X 특정 패턴에 집중 실패 시 FPS 저하 KCF 43fps X △ 추적 대상을 혼동하여 놓치는 경우가 있음
  • 21. 실행 결과 Mean FPS Scale Variation Out-of-View 비고 MEDIANFLOW 49fps O △ 빠르게 움직이는 대상 추적 어려움 MOSSE 60fps X △ 초점이 대상 외곽으로 이동하는 경향 TLD 10fps O △ 잦은 Jumping 비슷한 대상과 혼동 MIL 12fps X X 대상과 비슷한 배경에 혼동하는 경향
  • 22. 구현 결과 • 실행 시 인자를 넘겨주는 방식으로 여러 Tracker 혹은 Object를 사용가능 • 하지만 Tracker 끼리 비교하기보다 Ground-truth를 활용하는 것이 바람직함
  • 23. 2nd: Benchmarking Trackers • 한양대학교 데이터셋 활용 • 스크립트를 이용하여 제공된 Ground-truth와 이미지를 비디오로 변환 • 기하학 라이브러리(bbox)를 활용하여 IoU으로 Tracking 성공률을 계산 • 여러 Tracker를 Ground-truth와 동시에 비교할 수 있음 • 그래프 라이브러리(matplotlib)를 활용하여 알아보기 쉽게 출력
  • 24. Dataset 실제로 Tracker와 사용할 때는 ground-truth가 그려지지 않은 영상으로 사용!
  • 28. 구현 결과 • Tracker를 비교하는 데에는 효과적 • 하지만 이제 슬슬 자동으로 검출할 수는 없을까?
  • 30. Why YOLO? OpenCV Support • 오픈소스 신경망 프레임워크 DarkNet 모델 사용 가능 Tutorials • 인터넷 상에서 예제를 찾기 쉬움 • 학습 기간 단축 Pre-trained Model • 홈페이지에서 모델 제공 • 80가지의 모델 검출 가능 기분? • 긍정적인 결과를 볼 수 있었던 첫번째 딥 러닝 모델 활용 사례 • 얼른 사용해보고 싶었기 때문에…
  • 31.
  • 32. Still… 아무리 딥 러닝 모델이라도 만능은 아님! 확률에 대한 임계 값 설정 필요 검출 결과를 어떻게 활용할 것인가?
  • 33. 3rd: detect_and_track • YOLO로 검출한 객체에 대해 Tracker를 부착하여 자동으로 검출, 추적. • 웹캠 입력이나 일반 동영상이 아닌 일반 도로 CCTV 영상을 활용. • N번째 프레임마다 YOLO로 객체를 검출하여 해당 영역에 Tracker를 생성. • 추적 결과를 개선하기 위해 여러 필터링 방법 사용 • 딥 러닝에 대한 이해 부족으로 아쉬운 결과
  • 35. Problems N번째 프레임에서 검출된 객체 N+1번째 프레임에서 검출된 객체 이 둘을 어떻게 구분? 또는 이 둘이 같은 객체라는 것을 어떻게 확인?
  • 36. Solutions YOLO에 검출된 객체의 좌표는 사각형 영역(Bounding Box)으로 구성됨.  N번째 프레임에서 객체 검출, Tracker 생성 후 부착, 사각형 영역 중심 좌표 계산, 저장.  N+1번째 프레임에서 새로 객체 검출, 동일하게 중심 좌표 계산.  두 프레임의 중심 좌표들을 비교하여 일정치 이상 가깝다면 이미 검출되고 Tracker에 의해 추적되고 있는 개체라 판단하여 해당 객체에는 새로운 Tracker를 생성하지 않는다.  Tracker가 객체의 크기 변화(Scale Variation)를 인지할 수 있어야 함!(MEDIANFLOW 사용)
  • 37. Solutions 단순히 중심 좌표를 비교하는 것 뿐 아니라 Intersection-over-Union 활용  50% 이상 Intersection이 발생할 경우 같은 객체라고 판단하는 조건을 추가.  두 사각형 영역이 2/3 정도 겹치면 약 50% 비율이 형성.  높다고 항상 좋은 것은 아니기 때문에 적절한 조절이 필요.
  • 38. Problems N번째 프레임에서 검출된 객체 M번째 프레임에서 검출된 동일한 객체 같은 객체에 대해 중복 검출을 어떻게 제거? 중심 좌표 비교 기준치를 조정?
  • 39. Solutions YOLO에 검출된 객체의 사각형 영역은 항상 화면 내로 유지됨. 하지만 Tracker에 의해 추적되는 객체는 그렇지 않음.  추적되는 객체의 사각형 영역을 화면 안으로 이동시켜 검출된 객체와 비교.  일반 객체도 그 크기와 방향에 따라 검출이 제한될 수 있다는 잠재적 문제점.
  • 40. Problems 1. Tracker 추적 실패로 인해 추적 결과가 화면 내에서 급격하게 이동 2. Tracker 추적 대상이 화면 밖으로 이동했음에도 불구하고 화면 밖 영역에 대하여 추적하며 추적 실패를 보고하지 않는 경우 3. Tracker 추적 실패로 인해 사각형 영역이 너무 작아지는 경우
  • 41. Solutions 1. 앞서 계산한 중심 좌표를 이전 프레임과 현재 프레임 모두 기억하여 프레임 간 이동거리를 계산. 일정거리 이상 이동했다면 추적 실패로 판단. 2. 추적된 객체의 중심 좌표가 화면 밖에 있다면 객체가 화면 밖으로 이동하여 더 이상 추적할 필요가 없거나 추적이 실패한 것으로 판단. 3. 일정 크기 이하의 사각형 영역에 대해서는 무조건적으로 제거.
  • 43. 아쉬운 점 • OpenCV Tracker는 Tracking 도중에 개입할 수 없음 • 탐지 결과를 보강하거나 오류를 교정해줄 수 없음 • 추적 실패에서 회복하는 것은 알고리즘의 역할 • 객체를 추적하는데 실패했을 때 YOLO가 검출한 객체로 다시 추적? • 객체의 이동속도를 기반으로 객체의 위치를 예측 • YOLO가 검출한 객체가 예측된 위치에 있으면 동일한 추적 정보의 Tracker를 생성 하여 해당 객체를 다시 추적하는 방식을 생각해볼 수 있음 • 구현이 복잡해서 추후 개선안으로… • 중심 좌표 간 거리와 IoU를 활용하여 같은 객체를 여러 Tracker가 추적하고 있다면 하나만 제외하고 모두 삭제 • 임계치 이상의 IoU 비율을 가지는 추적 영역을 가지는 Tracker를 정리 • 각 Tracking에 대하여 가중치가 적용되어야 하는데…
  • 44. 참고자료 • https://89douner.tistory.com/75 • https://mickael-k.tistory.com/26 • https://www.learnopencv.com/ • https://www.pyimagesearch.com/ • https://rosia.tistory.com/259 • https://rosia.tistory.com/243