算法不是通用的,基于深度学习的应用系统不但做不到通用,即使对于同一类业务场景,还需要为每个场景做定制、特殊处理,这样才能有可能到达实用标准。这种局限性在计算机视觉领域的应用中表现得尤其突出,本文介绍基于深度学习的交通行业视频结构化类应用在实际使用场景中遇到的一些问题。计算机视觉处理的目标是图片,因此图片直接影响最终算法的效果,实际场景中碰到的问题基本都是由于各种原因导致视频图片发生变化最后影响系统的使用效果。

露天天气环境影响

由于天气变化、光照季节性变化等各种原因,视频画面经常出现干扰性噪声,直接影响到最终目标检测算法的准确性。大致分为以下几类:

(1)光照阴影。道路两旁树木、路牌等投影在路面上的阴影造成的误检。这种情况不是时刻都发生,受太阳光照射角度、强度影响。

(2)路面反光。路面不平偶尔出现反光偏暗的情况,被误检成抛洒物、车辆。这种情况不是时刻都发生,受太阳光照射角度影响。

(3)镜头光晕。受太阳逆光照射,镜头上产生光晕,最终会影响视频画面,产生各种误检。

(4)镜头雨点。下雨天气摄像机镜头沾雨水,最终会影响视频画面,产生各种误检。

(5)大雨大雾。碰到大雨大雾时,直接遮挡路面上的目标,影响检测效果,造成漏检。

(6)风吹导致镜头偏移。交通类视频结构化应用要求摄像机视角不能异常移动(程序控制除外),原因有两个,一是交通类应用需要测速、计数,这两个功能要求事先在视频画面中做一些描点配置,视角偏移会影响该项功能;二是交通类应用只需要检测路面上的目标(其他场景其实也只需要检测特定区域中的目标),如果摄像机偏移,非路面目标容易进入事先配置的检测区域,容易造成误报,比如路牌进入检测区域,容易误检成车辆。

受外在环境影响,算法的检出率大大降低,误报率上升,同时还会影响目标跟踪效果,因为目标的跟踪效果严重依赖于目标检测效果,如果目标锁定不稳定,跟踪就会很差,目标行为分析结果就很差。

——红色箭头处光影和地面箭头一起造成的误检——

外场缺少亮度照明

外场道路夜间没有灯光照明时,人眼分辨目标就比较困难,再加上车辆远光灯照射镜头,系统基本无法工作:

(1)夜间完全无灯光照明时,行驶车辆即使打开近光灯,算法检出率也不高,尤其当摄像机正对车头位置时(正对车尾效果还好)。

(2)夜间完全无灯光照明时,行驶车辆打开远光灯,当摄像机角度偏平(平视姿态),远光灯会直射镜头,画面完全无法分辨。

部分道路夜间有灯光照明时,系统工作效果非常好,几乎跟白天效果接近。目标检测的前提是目标轮廓清晰,如果由于灯光等原因,目标轮廓无法与环境有明显区分,那么系统效果非常差。

——夜间无灯光照明——

三维场景到二维画面的信息丢失

现实世界是三维的,视频画面是二维的,三维到二维的映射会造成一些场景信息的丢失,比如由于透视造成的坐标映射刻度不可知或者需要相当复杂的配置过程,这就导致在进行目标行为分析时会碰到非常多的困难:

(1)停车误检。道路尽头的大卡车由于行驶速度比较慢,车型体积又比较大,从二维画面中观察,人眼很难判断目标是否静止不动,行为分析算法逻辑同样会出现这种情况。

(2)车辆测速配置过程复杂。汽车在平面上匀速行驶,但是通过摄像机画面看到的目标并非如此,画面中观察到的结果是“远慢近快”,目标在画面中的“像素速度”与“实际物理速度”不能简单一一映射,需要复杂的配置过程。

检测区域配置复杂

如果需要进行目标行为分析,系统使用之前需要对每个场景(摄像机视角)进行单独的区域配置、参数标定,这个过程非常复杂,如果场景数目多,这个工作量非常大:

(1)人工标定检测区域。只有在检测区域内部的目标才会被处理,忽略其余检测目标。这样做的好处是可以避免一些误检,因为我们只对道路范围内的目标感兴趣。可以自动识别感兴趣区域,但是这个增加了复杂度,并且识别结果准确性不高。

(2)人工标定计数线和测速参照物。交通类应用需要测速和计数,由于二维画面透视成像的原因,需要事先标定各种参照物,这个工作量不仅大还不太好做,因为现实中可能没有合适的参照物给你去标。

这些事先的配置参数跟场景关联密切,一旦场景变化(比如摄像机转动导致画面变化)这些参数统统失效。

前端视频采集设备不可掌控

在算法、模型固定的前提下,系统准确性严重依赖于视频画面中目标的分布情况,如果前端摄像机安装位置不理想,太低或太高、拍摄距离太远、角度太偏横对道路行车方向等等,都不利于目标的检出率:

(1)摄像机安装太高、拍摄距离太远。就算在高清画面中(1920*1080),道路上的目标依然非常小,只有近处的车辆才能被算法准确检测到,远处的车辆要么不能被稳定锁定、要么不能识别出正确的车型或者其他属性。

(2)摄像机安装太低。车辆经过视频画面中的时间非常短,大车甚至完全将画面遮挡,导致其他目标无法被即使检测到。

(3)摄像机安装角度太偏。由于安装条件有限,大部分摄像机只能安装在道路两侧,车辆车身遮挡、绿化带遮挡,导致对向车道车辆经过时无法准确检测。

现实场景中大部分前端设备都已提前安装完毕,客户无法根据视频结构化的需求去调整前端视频采集设备,成本太高。

——摄像机角度太偏,对向车道被大车遮挡、绿化带遮挡——

摄像机人为干扰

前面提到过,摄像机角度偏移会造成各种问题,比如配置失效,误检增多、计数测速不准。监控类摄像机大部分都可以人为切换视角,焦距变化、云台变化等等:

(1)出现剐蹭等交通事件时监控员人为变焦。当出现交通事故导致车辆停止,行车道出现行人时,监控员通常会拉近镜头查看具体交通事件详细。

(2)出现拥堵等路况时监控员人为切换预置位。当出现拥堵等路况时,监控员移动云台摄像机360度移动查看拥堵程度。

现实场景中,出于各种原因,摄像机会被人为移动,导致事先配置参数失效、误检增加等问题,这时候需要及时通过视频画面发现场景变化、及时停止检测,等场景恢复之后再恢复检测,但是这种“偏移停检”的算法也做不到100%准确。

——监控员人为操控摄像机,场景变化——

[AI开发]视频结构化类应用的局限性的更多相关文章

  1. [AI开发]零代码分析视频结构化类应用结构设计

    视频结构化类应用涉及到的技术栈比较多,而且每种技术入门门槛都较高,比如视频接入存储.编解码.深度学习推理.rtmp流媒体等等.每个环节的水都非常深,单独拿出来可以写好几篇文章,如果没有个几年经验基本很 ...

  2. [AI开发]基于DeepStream的视频结构化解决方案

    视频结构化的定义 利用深度学习技术实时分析视频中有价值的内容,并输出结构化数据.相比数据库中每条结构化数据记录,视频.图片.音频等属于非结构化数据,计算机程序不能直接识别非结构化数据,因此需要先将这些 ...

  3. 视频结构化 AI 推理流程

    「视频结构化」是一种 AI 落地的工程化实现,目的是把 AI 模型推理流程能够一般化.它输入视频,输出结构化数据,将结果给到业务系统去形成某些行业的解决方案. 换个角度,如果你想用摄像头来实现某些智能 ...

  4. VP视频结构化框架

    完成多路视频并行接入.解码.多级推理.结构化数据分析.上报.编码推流等过程,插件式/pipe式编程风格,功能上类似英伟达的deepstream和华为的mxvision,但底层核心不依赖复杂难懂的gst ...

  5. VideoPipe可视化视频结构化框架开源了!

    完成多路视频并行接入.解码.多级推理.结构化数据分析.上报.编码推流等过程,插件式/pipe式编程风格,功能上类似英伟达的deepstream和华为的mxvision,但底层核心不依赖复杂难懂的gst ...

  6. .NET Core开发日志——结构化日志

    在.NET生态圈中,最早被广泛使用的日志库可能是派生自Java世界里的Apache log4net.而其后来者,莫过于NLog.Nlog与log4net相比,有一项较显著的优势,它支持结构化日志. 结 ...

  7. [AI开发]视频多目标跟踪高级版(离自动驾驶又‘近’了一点点)

    **本文恐怕不是完全的标题党** 视频多目标跟踪需要解决的关键点是前后两帧之间的Target Association,这是最难的环节(没有之一).第T帧检测到M个目标,第T+S(S>=1)帧检测 ...

  8. VideoPipe可视化视频结构化框架新增功能详解(2022-11-4)

    VideoPipe从国庆节上线源代码到现在经历过了一个月时间,期间吸引了若干小伙伴的参与,现将本阶段新增内容总结如下,有兴趣的朋友可以加微信拉群交流. 项目地址:https://github.com/ ...

  9. Deeplearning.ai课程笔记-结构化机器学习项目

    目录 一. 正交化 二. 指标 1. 单一数字评估指标 2. 优化指标.满足指标 三. 训练集.验证集.测试集 1. 数据集划分 2. 验证集.测试集分布 3. 验证集.测试集大小 四. 比较人类表现 ...

随机推荐

  1. 【编程之美】用C语言实现状态机(实用)

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://www.cnblogs.com/lihuidashen/p/115105 ...

  2. 我的JS文件

    {  "squadName" : "林宥嘉",  "homeTown" : "1987年7月1日(农历六月初六)",  ...

  3. Winform中怎样根据Name获取同窗体的控件

    场景 在同一个Winform窗体中,点击一个Button按钮时, 获取同窗体的其他控件的属性. 首先需要对要获取的控件赋予Name属性,然后就可以通过Name进行获取. 实现 在Button的点击事件 ...

  4. charles 代理设置

    本文参考:charles 代理设置 charles的代理身份配置区域 这里应该没啥好说的了, window/MAXCos proxy 是charles的代理启用开关: 如果你选中,则表示电脑使用cha ...

  5. [Spark] 06 - What is Spark Streaming

    前言 Ref: 一文读懂 Spark 和 Spark Streaming[简明扼要的概览] 在讲解 "流计算" 之前,先做一个简单的回顾,亲! 一.MapReduce 的问题所在 ...

  6. odoo Botton标签属性详解

    按钮属性 1)icon 按钮图标名,可用的按钮图标在 addons/web/static/src/img/下. 2)string 按钮的显示文字 3)type 动作执行类型.可能值是:workflow ...

  7. maven 3.6的安装

    呵呵,按网上的步骤不能安装maven3.6,所以降低版本.因为3.6的没有bin文件夹. 下载地址:https://archive.apache.org/dist/maven/maven-3/3.5. ...

  8. uni-app实现滑动切换效果

    在对于uni-app框架了解之后,今天就实现一个滚动切换tab效果,这个很常见的一个效果,最后封装成一个组件,便于以后使用,写这个需要引入uni官方提供的uni.css样式,用到了写好的样式,就不需要 ...

  9. Java中Synchronized的优化原理

    我们知道,从 JDK1.6 开始,Java 对 Synchronized 同步锁做了充分的优化,甚至在某些场景下,它的性能已经超越了 Lock 同步锁.那么就让我们来看看,它究竟是如何优化的. 原本的 ...

  10. JavaScript是如何工作的:事件循环和异步编程的崛起+ 5种使用 async/await 更好地编码方式!

    为什么单线程是一个限制? 在发布的第一篇文章中,思考了这样一个问题:当调用堆栈中有函数调用需要花费大量时间来处理时会发生什么? 例如,假设在浏览器中运行一个复杂的图像转换算法. 当调用堆栈有函数要执行 ...