前言

见惯了KCF、DCF、MEDIANFLOW这些常规追踪器,来看看基于神经网络的GOTURN吧。

首先,这个Tracker并不算慢,利用GPU能跑到100fps

论文原文:Learning to Track at 100 FPS with Deep Regression Networks

撇开原理,从工程的角度来看,算法输入前后两帧被裁剪过的图像,送入卷积神经网络(CNN),继而回归出物体的boudingbox,输出结果。

算法结构:

如下图所示,首先获取到上一帧的结果(第二行图),以中心为原点扩大一圈得到Rect,利用这个Rect裁剪当前帧,分别送入两个五层的卷积网络,再经过三个全连层回归出最终的结果。好了不扯原理了,来看看如何用OpenCV把这个Tracker跑起来。

====================利用OpenCV运行GOTURN==================

1.下载模型

首先,当然是要下载别人训练好的模型文件咯

下载地址:地址

如果上面的地址下载速度太慢,可以用这个  地址  或者Github地址(需要自己拼一下)

2.配置OpenCV_contrib环境

保证OpenCV版本在3.4.1以上,编译最新的contrib模型

可以参考我之前的博客:地址

3.简单粗暴的代码

记得把视频的路径换成自己的,一开始需要自己框选一下目标所在的位置。

/*
Copyright 2018 Satya Mallick (LearnOpenCV.com)
*/#include <opencv2/opencv.hpp>
#include <opencv2/tracking.hpp>using namespace cv;
using namespace std;#define SSTR( x ) static_cast< std::ostringstream & >( \
( std::ostringstream() << std::dec << x ) ).str()int main(int argc, char **argv)
{// Create trackerPtr<Tracker> tracker = TrackerGOTURN::create();// Read videoVideoCapture video("vtest.avi");// Exit if video is not openedif (!video.isOpened()){cout << "Could not read video file" << endl;return EXIT_FAILURE;}// Read first frameMat frame;if (!video.read(frame)){cout << "Cannot read video file" << endl;return EXIT_FAILURE;}// Define initial boundibg boxRect2d bbox = selectROI(frame, false);// (287, 23, 86, 320);// Uncomment the line below to select a different bounding box//bbox = selectROI(frame, false);// Initialize tracker with first frame and bounding boxtracker->init(frame, bbox);while (video.read(frame)){// Start timerdouble timer = (double)getTickCount();// Update the tracking resultbool ok = tracker->update(frame, bbox);// Calculate Frames per second (FPS)float fps = getTickFrequency() / ((double)getTickCount() - timer);if (ok){// Tracking success : Draw the tracked objectrectangle(frame, bbox, Scalar(255, 0, 0), 2, 1);}else{// Tracking failure detected.putText(frame, "Tracking failure detected", Point(100, 80), FONT_HERSHEY_SIMPLEX, 0.75, Scalar(0, 0, 255), 2);}// Display tracker type on frameputText(frame, "GOTURN Tracker", Point(100, 20), FONT_HERSHEY_SIMPLEX, 0.75, Scalar(50, 170, 50), 2);// Display FPS on frameputText(frame, "FPS : " + SSTR(int(fps)), Point(100, 50), FONT_HERSHEY_SIMPLEX, 0.75, Scalar(50, 170, 50), 2);// Display frame.imshow("Tracking", frame);// Exit if ESC pressed.if (waitKey(1) == 27) break;}return EXIT_SUCCESS;
}

比较好的效果:(大概脸是在训练样本里的,所以效果会好一些

图片转载自   地址

比较差的效果:(而行人估计是没有的,所以想效果好还是需要自己训练一下模型

体验感觉不是很好,用自己的数据训练下肯定会好很多的吧。。。


参考:

1.learnopencv博客  地址

2.Github:  地址

GOTURN——基于深度学习的物体追踪 (OpenCV contrib)相关推荐

  1. 物体抓取位姿估計算法綜述_基于深度学习的物体抓取位置估计

    主讲题目:基于深度学习的物体抓取位置估计 主要内容:机械臂抓取技术简介与入门方法 主讲嘉宾:东北大学研究生,主要研究物体六自由度位姿估计,机械臂抓取. 知乎视频​www.zhihu.com 往期干货资 ...

  2. 1.基于深度学习的知识追踪研究进展_刘铁园

    基于深度学习的知识追踪研究进展_刘铁园 1.知识追踪改进方向 针对可解释问题的改进 针对长期依赖问题的改进 针对缺少学习特征问题的改进 2.基于深度学习的知识追踪 DLKT 2.1 符号定义 2.2 ...

  3. 目标跟踪(2)GOTURN:基于深度学习的目标跟踪

    在这篇文章中,我们将了解一种名为 GOTURN 的基于深度学习的对象跟踪算法. GOTURN 的原始实现是在 Caffe 中,但它已被移植到 OpenCV 跟踪 API,我们将使用这个 API 在 C ...

  4. 基于深度学习的物体图像识别

    介 绍 基于深度学习的图像识别,最终实现的是对海量图片数据的学习和准确的识别,不仅如此,我们测试了几种不同的分类模型,并比较预测结果,计算预测准确率,对预测方法进行优化,希望得到一种最高效的预测方法, ...

  5. 基于深度学习的物体抓取位置估计

    主讲嘉宾: 东北大学研究生,主要研究物体六自由度位姿估计,机械臂抓取. 主要内容: 机械臂抓取技术简介与入门方法 [3D视觉工坊]第一期公开课:机械臂抓取技术简介与入门方法 课件获取:在公众号「3D视 ...

  6. 基于深度学习的物体识别系统

    1)enhance from PIL import Image, ImageEnhance import os def turn_left_rigth(img):     return img.tra ...

  7. 中科院张士峰:基于深度学习的通用物体检测算法对比探索

    https://www.toutiao.com/a6674792954369933838/ 人工智能论坛如今浩如烟海,有硬货.有干货的讲座却百里挑一.由中国科学院大学主办,中国科学院大学学生会承办,读 ...

  8. 物体识别_深度学习在物体识别中的应用探讨:以ImageNet和人脸识别为例

    ImageNet图像分类 深度学习在物体识别中最重要的进展体现在ImageNet ILSVRC挑战中的图像分类任务.传统计算机视觉方法在此测试集上最低的错误率是26.172%.2012年,欣顿的研究小 ...

  9. 基于深度学习的细粒度分类调研1

    细粒度分类: 细粒度分类(识别)的概念其实非常简单,即模型需要识别非常精细的子类别.一般识别出物体的大类别(比如:计算机.手机.水杯等)较易,但如果进一步去判断更为精细化的物体分类名称,则难度极大. ...

最新文章

  1. java 初始化顺序_Java中对象初始化顺序的详细介绍
  2. 不挡脸,放肆看!揭秘B站黑科技蒙版弹幕
  3. Vue-resource中post请求将data数据以request payload转换为form data的形式
  4. 浅析三层架构与MVC模式的区别
  5. VTK:PolyData之PointSource
  6. Pots (BFS ➕ 输出路径)
  7. 论文浅尝 - ACL2021 | 探讨跨句事件联合抽取问题
  8. 未为dll加载任何符号_专家发现aspersky 和Trend Micro安全性解决方案中的DLL劫持问题...
  9. python网课阿里云_阿里云大牛用过的680集Python视频教程无偿分享,学完万物皆可爬...
  10. Linux多线程同步
  11. [sqlite] db-journal文件产生原因及说明
  12. 一款很好看的个人主页简单源码
  13. LaTeX简介及其在Mardown中的用法
  14. 一类Chen混沌系统的混沌吸引子——MATLAB实现
  15. dcos universe
  16. #荣耀双十一# 就是耀免单,年度旗舰任性送
  17. day15-正则表达式
  18. 推荐系统常用数据集介绍
  19. Modelsim软件仿真出错:Modelsim is exiting with code 7.
  20. 《Java SE实战指南》05-07:分隔符(Separators)

热门文章

  1. 易语言远程查询oracle数据库连接,易语言如何连接远程服务器上的数据库,并读取数据...
  2. 修改telnet提示并非_iPhone修改微信提示音,iOS12可用,无需越狱详细教程
  3. [禅悟人生]鹰和蜗牛都能登上金字塔尖
  4. Python使用线性回归简单预测数据
  5. java 如何取01 zz_java中synchronized用法(zz)
  6. Maya中操作普通DG节点和Dag节点的区别
  7. 使用“swap技巧”除去多余的容量
  8. ORM框架之Spring Data JPA(二)spring data jpa方式的基础增删改查
  9. 保护你的眼睛,把电脑屏幕由白色改为淡绿
  10. GDAL库中WFS服务中含有中文不能获取数据的问题