基于深度学习的视频检测(一)

2023-05-16

一、简介

图像目标检测任务在过去几年深度学习的发展背景下取得了巨大的进展,检测性能得到明显提升。但在视频监控、车辆辅助驾驶等领域,基于视频的目标检测有着更为广泛的需求。由于视频中存在运动模糊,遮挡,形态变化多样性,光照变化多样性等问题,仅利用图像目标检测技术检测视频中的目标并不能得到很好的检测结果。如何利用视频中目标时序信息和上下文等信息成为提升视频目标检测性能的关键。

对于视频目标检测来说,一个好的检测器不仅要保证在每帧图像上检测准确,还要保证检测结果具有一致性/连续性(即对于一个特定目标,优秀的检测器应持续检测此目标并且不会将其与其他目标混淆,称之为视频目标检测时序一致性)。

视频目标检测算法目前主要使用了如下的框架:

  • 将视频帧视为独立的图像,利用图像目标检测算法获取检测结果;
  • 利用视频的时序信息和上下文信息对检测结果进行修正;
  • 基于高质量检测窗口的跟踪轨迹对检测结果进一步进行修正。

二、单帧图像目标检测

此阶段通常将视频拆分成相互独立的视频帧来处理,通过选取优秀的图像目标检测框架以及各种提高图像检测精度的技巧来获取较为鲁棒的单帧检测结果。

1. 训练数据选取

需要注意,同一个视频片段背景单一,相邻多帧的图像差异较小。所以要训练现有目标检测模型,训练集可能存在大量数据冗余,并且数据多样性较差,有必要对其进行扩充。

2. 网络结构选取

不同的网络结构对于检测性能也有很大影响。同样的训练数据,基于 ResNet101 的 Faster R-CNN 模型的检测精度比基于 VGG16 的 Faster R-CNN 模型的检测精度高12%左右。今年比赛前几名的队伍基本上也是使用ResNet/Inception的基础网络。

三、改进分类损失

目标在某些视频帧上会存在运动模糊,分辨率较低,遮挡等问题,即便是目前最好的图像目标检算法也不能很好地检测目标。幸运的是,视频中的时序信息和上下文信息能够帮助我们处理这类问题。比较有代表性的方法有T-CNN中的运动指导传播(Motion-guided Propagation, MGP)和多上下文抑制(Multi-context suppression, MCS)。

1. MGP

单帧检测结果存在很多漏检目标,而相邻帧图像检测结果中可能包含这些漏检目标。所以我们可以借助光流信息将当前帧的检测结果前向后向传播,经过MGP处理可以提高目标的召回率。如图1所示将T时刻的检测窗口分别向前向后传播,可以很好地填补T-1和T+1时刻的漏检目标。

这里写图片描述

2. MCS

使用图像检测算法将视频帧当做独立的图像来处理并没有充分利用整个视频的上下文信息。虽然说视频中可能出现任意类别的目标,但对于单个视频片段,只会出现比较少的几个类别,而且这几个类别之间有共现关系(出现船只的视频段中可能会有鲸鱼,但基本不可能出现斑马)。所以,可以借助整个视频段上的检测结果进行统计分析:对所有检测窗口按得分排序,选出得分较高的类别,剩余那些得分较低的类别很可能是误检,需对其得分进行压制(如图2)。经过MCS处理后的检测结果中正确的类别靠前,错误的类别靠后,从而提升目标检测的精度。

这里写图片描述

四、利用跟踪信息修正

上文提到的MGP可以填补某些视频帧上漏检的目标,但对于多帧连续漏检的目标不是很有效,而目标跟踪可以很好地解决这个问题。

  • 使用图像目标检测算法获取较好的检测结果;
  • 从中选取检测得分最高的目标作为跟踪的起始锚点;
  • 基于选取的锚点向前向后在整个视频片段上进行跟踪,生成跟踪轨迹;
  • 从剩余目标中选择得分最高的进行跟踪,需要注意的是如果此窗口在之前的跟踪轨迹中出现过,那么直接跳过,选择下一个目标进行跟踪;
  • 算法迭代执行,可以使用得分阈值作为终止条件。

得到的跟踪轨迹既可以用来提高目标召回率,也可以作为长序列上下文信息对结果进行修正。

五、网络选择与训练技巧

对于视频目标检测,除了要保证每帧图像的检测精度,还应该保证长时间稳定地跟踪每个目标。

评价指标:图像目标检测mAP评测对象是每个检测窗口是否精准,而视频时序一致性评测对象是目标跟踪轨迹是否精准;图像目标检测中如果检测窗口跟Ground Truth类别相同,窗口IoU大于0.5就认定为正例。而评价时序一致性时,如果检测得到的跟踪轨迹和Ground Truth(目标真实跟踪轨迹)是同一个目标(trackId相同),并且其中检测出的窗口与Ground Truth窗口的IoU大于0.5的数量超过一个比例,那么认为得到的跟踪轨迹是正例;跟踪轨迹的得分是序列上所有窗口得分的平均值。分析可知,如果一个目标的轨迹被分成多段或者一个目标的跟踪轨迹中混入其他的目标都会降低一致性。
那么如何保证视频检测中目标的时序一致性呢?

  • 保证图像检测阶段每帧图像检测的结果尽量精准;
  • 对高质量检测窗口进行跟踪并保证跟踪的质量(尽量降低跟踪中出现的漂移现象);
  • 前面两步获取到的跟踪结果会存在重叠或者临接的情况,需针对性地进行后处理。

ITLab-Inha团队提出了基于变换点检测的多目标跟踪算法,该算法首先检测出目标,然后对其进行跟踪,并在跟踪过程中对跟踪轨迹点进行分析处理,可以较好地缓解跟踪时的漂移现象,并能在轨迹异常时及时终止跟踪。

针对视频目标检测的一致性问题,提出了基于检测和跟踪的目标管道生成方法。

这里写图片描述
a.基于跟踪的目标管道/跟踪轨迹
这里写图片描述
b.基于检测的目标管道
这里写图片描述
c.基于检测和跟踪的融合管道

a 表示使用跟踪算法获取到的目标管道(红色包围框),绿色包围框代表目标的Ground Truth。可以看到随着时间推移,跟踪窗口逐渐偏移目标,最后甚至可能丢失目标。MCG-ICT-CAS提出了基于检测的目标管道生成方法,如 b 所示,基于检测的管道窗口(红色包围框)定位较为准确,但由于目标的运动模糊使检测器出现漏检。从上面分析可知:跟踪算法生成的目标管道召回率较高,但定位不准;而基于检测窗口生成的目标管道目标定位较为精准,但召回率相对前者较低。由于两者存在互补性,所以MCG-ICT-CAS进一步提出了管道融合算法,对检测管道和跟踪管道进行融合,融合重复出现的窗口并且拼接间断的管道。


基于深度学习的视频检测(二)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于深度学习的视频检测(一) 的相关文章

随机推荐

  • Nginx编译安装时常见错误分析

    本篇文章主要是关于Nginx在编译安装时 xff0c 可能出现的错误的解决方法 1 Nginx启动脚本错误 xff1a env etc init d nginx No such file or directory 明明上传了Nginx服务控
  • Pytorch模型如何查看每层输入维度输出维度

    在 PyTorch 中 xff0c 可以使用 torchsummary 库来实现对 PyTorch 模型的结构及参数统计的输出 xff0c 其可以方便我们查看每层输入 输出的维度以及参数数量等信息 安装 torchsummary 库 xff
  • ERROR: Cannot uninstall ‘xxx‘. It is a distutils installed project and thus we cannot accurately det

    ERROR Cannot uninstall TBB It is a distutils installed project and thus we cannot accurately determine which files belon
  • python装饰器的使用方法

    0 前言 装饰器在 python 中使用的频率非常高 xff0c 它可以在不改动原有函数的基础上对其进行增强功能 下面主要是介绍装饰器的各种用法 xff0c 并理解其运行过程 1 使用 1 1 在函数上添加装饰器 decro 是一个装饰器函
  • 【Linux operation 46】Centos 7.9中安装使用nmap

    1 nmap 介绍 nmap xff08 Network Mapper xff09 是一个开源的网络探测和安全扫描程序 nmap 的设计目标是快速地扫描大型网络 xff0c 当然用它扫描单个主机也没有问题 nmap 以新颖的方式使用原始 I
  • Nginx配置ssl证书

    1 下载证书 在ssl证书管理界面下载对应于Nginx的证书 下载的Nginx证书压缩文件解压后包含 xff1a pem xff1a 证书文件 PEM文件的扩展名为CRT格式 key xff1a 证书的密钥文件 申请证书时如果未选择自动创建
  • 0009基于51单片机智能门禁系统设计

    资料下载地址 单片机原理教程 初级 xff08 视频 xff0c 源仿真源代码 xff09 功能 60 可输入密码进行解锁 可以对IC卡进行注册或注销 可用已注册的IC卡解锁 可实现液晶显示当前时间 密码连续输错三次时能强制退出并报警 具有
  • 基于openstreetmap数据的SUMO路网生成路线

    一 一步到位 xff1a 基于SUMO自带工具smWebWizard py 使用SUMO自带的osmWebWizard py脚本 xff08 sumo tools xff09 进行下载 xff0c 脚本执行后会打开一个操作网页 xff0c
  • STM32烧写一次程序后,再次烧写识别不到单片机

    STM32cubeMX生成的程序 xff0c 编译后烧录一次后 xff0c 在次烧录会发现识别不到单片机了 xff0c 解决方案 xff1a 在STM32cubeMX工程中的SYS中 xff0c Debug中选择Serial Wire 使能
  • 百度超级链学院开课啦!第一讲教你《如何快速建链》

    百度超级链Xuperchain开源之后 xff0c 我们感受到了开发者伙伴们的热情关注 xff0c 其中有不少朋友提到希望进一步了解百度超级链网络的搭建方法 今天 xff0c 百度超级链小X姐姐和百度资深研发工程师静姐姐 xff0c 为大家
  • centos7操作/关闭防火墙

    前言 xff1a 测试环境部署不同端口的服务 xff0c 需要频繁使用防火墙放行端口 xff0c 比较麻烦 xff0c 所以需要彻底关闭防火墙 xff0c 整理了以下命令 xff0c 提供使用 systemctl status firewa
  • [kubernates]kube-flannel-ds 一直 CrashLoopBackOff

    使用 Kubeadm 安装 K8s 集群 xff0c 在安装 flannel 网络插件后 xff0c 发现 kube flannel ds 一直处于 CrashLoopBackOff 状态 xff1a span class token pu
  • Bottom-up And Top-down

    Bottom up 自下而上的处理可以理解为 xff1a 将感应器结果作为输入 xff0c 也就是激励 因此自下而上可以被描述为是数据驱动的 例如 xff0c 在一个人的花园正中有一朵花儿 xff0c 这个花儿的视觉和所有的激励信息都从视网
  • pyqt5在statusbar中不断的刷新显示不同的信息

    在PYQT5中不断的显示新的信息 需求 xff1a 需要在statusbar 上不断的显示新的测试数据 现在在测试例子中 xff0c 数据由numpy生成 总结如下 xff1a span class token comment coding
  • 如何在VS下调试自己写的dll

    一 准备资料 1 qt写的应用程序 test pro xff0c 编译程序可执行文件test exe 2 qt写的动态库程序 dll pro 二 调试步骤 1 用vs打开dll pro 2 dll工程右键属性如下图所示修改 3 编译运行dl
  • 通俗理解网络架构搜索(NAS)

    什么是NAS 我们假设模型必须是一个三层的全连接神经网络 xff08 一个输入层 一个隐层 一个输出层 xff09 xff0c 隐层可以有不同的激活函数和节点个数 xff0c 假设激活函数必须是relu或sigmoid中的一种 xff0c
  • GDB 的进入和退出

    进入和退出GDB 本节讨论如何启动和退出GDB 主要包括 xff1a 输入 39 gdb 进入GDB调试器输入quit或者按下Ctrl d退出调用GDB xff1a 如何启动GDB退出GDB xff1a 如何退出GDBShell脚本命令 x
  • OpenGL 矩阵变换GLM库的使用

    GLM和MVP矩阵操作速记 连续工作15小时 xff0c 累了 xff0c 睡觉 include glm glm hpp include glm gtc matrix transform hpp 若未特别说明 xff0c 以下示例均假设矩阵
  • 通俗理解RNN

    全连接神经网络和卷积神经网络他们都只能单独的取处理一个个的输入 xff0c 前一个输入和后一个输入是完全没有关系的 但是 xff0c 某些任务需要能够更好的处理序列的信息 xff0c 即前面的输入和后面的输入是有关系的 比如 xff0c 当
  • 基于深度学习的视频检测(一)

    一 简介 图像目标检测任务在过去几年深度学习的发展背景下取得了巨大的进展 xff0c 检测性能得到明显提升 但在视频监控 车辆辅助驾驶等领域 xff0c 基于视频的目标检测有着更为广泛的需求 由于视频中存在运动模糊 xff0c 遮挡 xff