当前位置: 首页 > news >正文

毕业设计项目 基于机器视觉的目标跟踪算法

文章目录

  • 0 前言
  • 2 目标跟踪效果
  • 3 目标跟踪的两种方法
    • 3.1 方法1
    • 3.2 方法2
  • 4 Tracking By Detecting的跟踪过程
    • 4.1 存在的问题
    • 4.2 基于轨迹预测的跟踪方式
  • 5 训练代码
  • 6 最后

0 前言

🔥今天学长向大家分享一个毕业设计项目

为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的是

🚩毕业设计 深度学习多目标跟踪 实时检测

🥇学长这里给一个题目综合评分(每项满分5分)

  • 难度系数:3分
  • 工作量:3分
  • 创新点:4分

项目运行效果:

毕业设计 机器视觉的目标跟踪算法

🧿 项目分享:见文末!

2 目标跟踪效果

3 目标跟踪的两种方法

3.1 方法1

基于初始化帧的跟踪,在视频第一帧中选择你的目标,之后交给跟踪算法去实现目标的跟踪。这种方式基本上只能跟踪你第一帧选中的目标,如果后续帧中出现了新的物体目标,算法是跟踪不到的。这种方式的优点是速度相对较快。缺点很明显,不能跟踪新出现的目标。

3.2 方法2

基于目标检测的跟踪,在视频每帧中先检测出来所有感兴趣的目标物体,然后将其与前一帧中检测出来的目标进行关联来实现跟踪的效果。这种方式的优点是可以在整个视频中跟踪随时出现的新目标,当然这种方式要求你前提得有一个好的“目标检测”算法。

学长主要分享Option2的实现原理,也就是Tracking By Detecting的跟踪方式。

4 Tracking By Detecting的跟踪过程

**Step1:**使用目标检测算法将每帧中感兴趣的目标检测出来,得到对应的(位置坐标, 分类, 可信度),假设检测到的目标数量为M;

**Step2:**通过某种方式将Step1中的检测结果与上一帧中的检测目标(假设上一帧检测目标数量为N)一一关联起来。换句话说,就是在M*N个Pair中找出最像似的Pair。

对于Step2中的“某种方式”,其实有多种方式可以实现目标的关联,比如常见的计算两帧中两个目标之间的欧几里得距离(平面两点之间的直线距离),距离最短就认为是同一个目标,然后通过匈牙利算法找出最匹配的Pair。当让,你还可以加上其他的判断条件,比如我用到的IOU,计算两个目标Box(位置大小方框)的交并比,该值越接近1就代表是同一个目标。还有其他的比如判断两个目标的外观是否相似,这就需要用到一种外观模型去做比较了,可能耗时更长。

在关联的过程中,会出现三种情况:

1)在上一帧中的N个目标中找到了本次检测到的目标,说明正常跟踪到了;

2)在上一帧中的N个目标中没有找到本次检测到的目标,说明这个目标是这一帧中新出现的,所以我们需要把它记录下来,用于下下一次的跟踪关联;

3)在上一帧中存在某个目标,这一帧中并没有与之关联的目标,那么说明该目标可能从视野中消失了,我们需要将其移除。(注意这里的可能,因为有可能由于检测误差,在这一帧中该目标并没有被检测到)

4.1 存在的问题

上面提到的跟踪方法在正常情况下都能够很好的工作,但是如果视频中目标运动得很快,前后两帧中同一个目标运动的距离很远,那么这种跟踪方式就会出现问题。


如上图,实线框表示目标在第一帧的位置,虚线框表示目标在第二帧的位置。当目标运行速度比较慢的时候,通过之前的跟踪方式可以很准确的关联(A, A’)和(B, B’)。但是当目标运行速度很快(或者隔帧检测)时,在第二帧中,A就会运动到第一帧中B的位置,而B则运动到其他位置。这个时候使用上面的关联方法就会得到错误的结果。

那么怎样才能更加准确地进行跟踪呢?

4.2 基于轨迹预测的跟踪方式

既然通过第二帧的位置与第一帧的位置进行对比关联会出现误差,那么我们可以想办法在对比之前,先预测目标的下一帧会出现的位置,然后与该预测的位置来进行对比关联。这样的话,只要预测足够精确,那么几乎不会出现前面提到的由于速度太快而存在的误差

如上图,我们在对比关联之前,先预测出A和B在下一帧中的位置,然后再使用实际的检测位置与预测的位置进行对比关联,可以完美地解决上面提到的问题。理论上,不管目标速度多么快,都能关联上。那么问题来了,怎么预测目标在下一帧的位置?

方法有很多,可以使用卡尔曼滤波来根据目标前面几帧的轨迹来预测它下一帧的位置,还可以使用自己拟合出来的函数来预测下一帧的位置。实际过程中,我是使用拟合函数来预测目标在下一帧中的位置。


如上图,通过前面6帧的位置,我可以拟合出来一条(T->XY)的曲线(注意不是图中的直线),然后预测目标在T+1帧的位置。具体实现很简单,Python中的numpy库中有类似功能的方法。

5 训练代码

这里记录一下训练代码,来日更新

ifFLAGS.mode=='eager_tf':# Eager mode is great for debugging# Non eager graph mode is recommended for real trainingavg_loss=tf.keras.metrics.Mean('loss',dtype=tf.float32)avg_val_loss=tf.keras.metrics.Mean('val_loss',dtype=tf.float32)forepochinrange(1,FLAGS.epochs+1):forbatch,(images,labels)inenumerate(train_dataset):withtf.GradientTape()astape:outputs=model(images,training=True)regularization_loss=tf.reduce_sum(model.losses)pred_loss=[]foroutput,label,loss_fninzip(outputs,labels,loss):pred_loss.append(loss_fn(label,output))total_loss=tf.reduce_sum(pred_loss)+regularization_loss grads=tape.gradient(total_loss,model.trainable_variables)optimizer.apply_gradients(zip(grads,model.trainable_variables))logging.info("{}_train_{}, {}, {}".format(epoch,batch,total_loss.numpy(),list(map(lambdax:np.sum(x.numpy()),pred_loss))))avg_loss.update_state(total_loss)forbatch,(images,labels)inenumerate(val_dataset):outputs=model(images)regularization_loss=tf.reduce_sum(model.losses)pred_loss=[]foroutput,label,loss_fninzip(outputs,labels,loss):pred_loss.append(loss_fn(label,output))total_loss=tf.reduce_sum(pred_loss)+regularization_loss logging.info("{}_val_{}, {}, {}".format(epoch,batch,total_loss.numpy(),list(map(lambdax:np.sum(x.numpy()),pred_loss))))avg_val_loss.update_state(total_loss)logging.info("{}, train: {}, val: {}".format(epoch,avg_loss.result().numpy(),avg_val_loss.result().numpy()))avg_loss.reset_states()avg_val_loss.reset_states()model.save_weights('checkpoints/yolov3_train_{}.tf'.format(epoch))

6 最后

项目运行效果:

毕业设计 机器视觉的目标跟踪算法

🧿 项目分享:见文末!

http://www.jsqmd.com/news/88454/

相关文章:

  • AI视频创作三步合规法:从风险规避到版权保护实战指南
  • 用了3个月PandaWiki,我终于和知识管理和解了|超省心使用心得
  • 入门C语言学习---从零开始
  • 中高端路由器选购指南:Wi-Fi 7与硬件配置全解析
  • mustache.js实战精通:从入门到高级应用的完整指南
  • Nginx核心架构设计
  • 2025最新数码前置仓/数码外卖仓/数码外卖店品牌合作首选——六米生活,轻创业优选/美团闪购/淘宝闪购/即时零售/小时达加盟领航者值得信赖 - 全局中转站
  • 【Git原理与使用】(五)Git 多人协作:从分支协作到冲突解决,团队开发效率翻倍秘籍
  • 2025年年终全自动洗车机厂家推荐:专家严选,不同运营场景下的5款高可靠性品牌清单 - 品牌推荐
  • Ansible-Playbook
  • 【Git原理与使用】(六)Git 企业级开发模型实战:从分支规范到 DevOps 全流程落地
  • 教程 32 - 几何体系统
  • ChanlunX缠论插件:让技术分析变得简单直观的智能助手
  • 【学习记录】第六周
  • 2025 年全国小学生统一考试 数学
  • Ursa.Avalonia中文显示终极解决方案:告别乱码,打造完美跨平台界面
  • 雷达原理笔记 第一章 雷达的基本原理
  • 2025年年终出国留学机构推荐:聚焦英美澳加等主流国家申请,专家严选10家高成功率服务商案例解析 - 品牌推荐
  • 全网最全 Cursor 配置指南:从入门到高效工作流!建议收藏
  • 日拱一卒之最小二乘法
  • 实用指南:在Linux系统上使用nmcli命令配置各种网络(有线、无线、vlan、vxlan、路由、网桥等)
  • Cursor + MCP:冲击的不仅是前端,而是整个软件开发范式!
  • CF2109C1 Hacking Numbers (Easy Version) 解题报告
  • 一文了解AOSP是什么?
  • “改进滑膜控制与传统控制的永磁同步电机PMSM仿真模型”之理论与实践对比
  • 九尾狐AI赋能传统企业转型白皮书:从“听懂”到“做到”的AI获客实战指南
  • 光伏储能系统搭上虚拟同步发电机(VSG)这趟车,简直像是给新能源装了个智能大脑。今儿咱们直接上硬菜,拆解这个能跑出完美波形的并网仿真模型
  • 门槛低、含金量高!2026大专计算机专业必考8大证书
  • 重构智慧书-第10条:名声与好运
  • 智能中控屏,点亮未来的智能生活