前言

见惯了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. linux 文件系统 启动,linux kernel文件系统启动部分
  2. python中turtle画酷炫图案-酷炫的动态可视化交互大屏,用Excel就能做!
  3. linux中往sed命令,Linux中Sed命令怎么用?
  4. 【易网库】周年庆幸运大抽奖, 有机会获3年免费主机空间
  5. CA AutoSys Workload Automation r11 Quick Resource Guide
  6. 路飞学城-python爬虫密训-第三章
  7. linux脚本启三个tomcat,linux 重写Tomcat启停脚本
  8. vant自动按需引入组件 (推荐)
  9. (54)FPGA条件选择有优先级(if-else)
  10. html div画圆有什么用,圆形div栏,用于评级html5 js(Circle div bar for rating html5 js)
  11. 特朗普前竞选经理犯罪证据曝光,竟是因不会 PDF 转换!
  12. work summary(3)
  13. Unix 网络编程 I/O 模型 第六章
  14. 初学者使用HTML简单做一个自我介绍
  15. LiveQing流媒体RTMP推流服务-如何获直播流地址 HLS/HTTP-FLV/WS-FLV/WebRTC/RTMP视频流地址
  16. getPhoneNumber 响应 416
  17. “宝万之争”惊动三会 300亿资金如何越过监管边界
  18. Linux下如何拷贝隐藏文件
  19. CE修改器下载、安装和汉化(必会版)
  20. 【数据来源】如何选择合适的第三方数据源

热门文章

  1. 【Linux】Windows 10 安装应用商店 ubuntu 终端后访问本地文件
  2. linux命令行 正则,Linux shell基础(四)正则表达式与grep命令 beta
  3. python 多线程笔记(2)-- 锁
  4. html类名定义规则_好程序员分享Java语言中的标识符规则
  5. 几种常用设计模式的简单示例
  6. 关联与依赖区别理解(原)
  7. vue中常用的事件修饰符
  8. Python数据结构与算法(二)栈和队列
  9. 《SOA In the real world》第一章译稿(含下载)
  10. 3.指定IP地址抓包