本文介绍如何将基于深度学习的目标检测算法应用到具体的项目开发中,体现深度学习技术在实际生产中的价值,算是AI算法的一个落地实现。本文算法部分可以参见前面几篇博客:

[AI开发]Python+Tensorflow打造自己的计算机视觉API服务

[AI开发]基于深度学习的视频多目标跟踪实现

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

[AI开发]centOS7.5上基于keras/tensorflow深度学习环境搭建

背景

交通领域是深度学习技术可以发挥强大作用的一个领域。道路交通的安全性要求比较高,道路监控设备比较完备,这些设备每天可以产生无数的视频数据,而这些数据非常有利于深度学习模型的训练。网上也可以下载到非常多的交通数据集,包括行人、车辆、道路两旁的基础设施比如路灯、信号灯、公交站牌等等。

如何利用交通监控设备产生的视频数据,来进行视频的自动分析呢?显然这是一个深度学习的应用场景。下面介绍,如何利用深度学习技术自动检测车辆交通事件,比如高速路上违规停车、逆行、闯入行人、占用应急车道等等事件。下面是最终的一个效果图:

对于一台主机设备,可同时实时检测8路高清监控视频,若有异常事件,会实时发出警告。

业务流程

整个系统构成非常简单,业务流程也相对简单。下面是两个主要的业务分支:

视频流分支

如上图所示,直接将跟踪得到的轨迹叠加到视频帧中,然后编码将其推到Nginx服务器中,供web播放器播放。

数据流分支

如上图所示,根据跟踪得到的轨迹,检测每辆车的交通事件,将其结果写入mysql数据库。另外一个服务模块定期统计数据,供web模块进行数据显示。

系统结构

服务器环境

1)centOS 7.5 (3.10.0内核);

2)Python 3.6 + tensorflow-gpu 1.9 + keras 2.2.2 + 各种python库;

3)CUDA 9.0 + CUDNN 7.1 + Nvidia显卡驱动384.130;

4)Tomcat + Mysql + Java;

5)i7 8核 + Nvidia GTX 1080显卡;

以上是服务器软硬件环境。

系统组成

下图是软件系统组成:

上图中最上部分是核心算法在整个系统中的位置。

模型训练

模型训练最主要的是要收集高质量、各种天气、各种视频角度、各种道路状况下的素材。下面是素材的一个简单分类,数量大约为10W+张。

按场景:

1)外场

2)隧道

按天气:

1)晴天

2)阴天

3)雨天

4)夜晚(红外)

按摄像机角度:

1)正前方

2)正后方

3)侧前方

4)侧后方

按目标类型:

1)行人

2)汽车

3)客车

4)货车

(高速摄像机一般安装太远,其他目标太小,因此不考虑其他目标)

按路况:

1)流畅

2)拥堵

3)严重拥堵

素材标注是个体力活,找个好用的标注工具可以事半功倍。自己写了一个标注工具,体验不是特别好,但是适合本项目素材的标注。相关连接参见这里:-------link--------------

事件类型/功能

由跟踪得到的轨迹,可以分别检测出道路面的异常事件,包括:

1)行人闯入事件

2)异常停车事件

3)逆行/倒车事件

4)占用应急车道事件

5)货车占用超车道

6)非机动车闯入事件

7)拥堵级别告警

8)车型计数

9)平均车速统计

本文没有源码,思路仅供参考。

[AI开发]将深度学习技术应用到实际项目的更多相关文章

  1. [AI开发]基于深度学习的视频多目标跟踪实现

    据我目前了解掌握,多目标跟踪大概有两种方式: Option1 基于初始化帧的跟踪,在视频第一帧中选择你的目标,之后交给跟踪算法去实现目标的跟踪.这种方式基本上只能跟踪你第一帧选中的目标,如果后续帧中出 ...

  2. AI面试必备/深度学习100问1-50题答案解析

    AI面试必备/深度学习100问1-50题答案解析 2018年09月04日 15:42:07 刀客123 阅读数 2020更多 分类专栏: 机器学习   转载:https://blog.csdn.net ...

  3. Mol Cell Proteomics. | Prediction of LC-MS/MS properties of peptides from sequence by deep learning (通过深度学习技术根据肽段序列预测其LC-MS/MS谱特征) (解读人:梅占龙)

    通过深度学习技术根据肽段序列预测其LC-MS/MS谱特征 解读人:梅占龙  质谱平台 文献名:Prediction of LC-MS/MS properties of peptides from se ...

  4. 认识:人工智能AI 机器学习 ML 深度学习DL

    人工智能 人工智能(Artificial Intelligence),英文缩写为AI.它是研究.开发用于模拟.延伸和扩展人的智能的理论.方法.技术及应用系统的一门新的技术科学. 人工智能是对人的意识. ...

  5. 【转载】如何自学深度学习技术,大神Yann LeCun亲授建议

    编者按:Quora 上有网友提问:自学机器学习技术,你有哪些建议?(What are your recommendations for self-studying machine learning), ...

  6. deeplearning.ai 神经网络和深度学习 week4 深层神经网络 听课笔记

    1. 计算深度神经网络的时候,尽量向量化数据,不要用for循环.唯一用for循环的地方是依次在每一层做计算. 2. 最常用的检查代码是否有错的方法是检查算法中矩阵的维度. 正向传播: 对于单个样本,第 ...

  7. 用深度学习技术FCN自动生成口红

    1 这个是什么?        基于全卷积神经网络(FCN)的自动生成口红Python程序. 图1 FCN生成口红的效果(注:此两张人脸图来自人脸公开数据库LFW) 2 怎么使用了?        首 ...

  8. deeplearning.ai 神经网络和深度学习 week4 深层神经网络

    1. 计算深度神经网络的时候,尽量向量化数据,不要用for循环.唯一用for循环的地方是依次在每一层做计算. 2. 最常用的检查代码是否有错的方法是检查算法中矩阵的维度. 正向传播: 对于单个样本,第 ...

  9. 【C/C++开发】值得学习的C语言开源项目

    值得学习的C语言开源项目 - 1. Webbench Webbench是一个在Linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的 ...

随机推荐

  1. C++的反思[转]

    最近两年 C++又有很多人出来追捧,并且追捧者充满了各种优越感,似乎不写 C++你就一辈子是低端程序员了,面对这种现象,要不要出来适时的黑一下 C++呢?呵呵呵. 咱们要有点娱乐精神,关于 C++的笑 ...

  2. Hbase中HMaster作用

    HMaster在功能上主要负责Table表和HRegion的管理工作,具体包括: 1.管理用户对Table表的增.删.改.查操作: 2.管理HRegion服务器的负载均衡,调整HRegion分布: 3 ...

  3. 有趣的toggleClass实现交替样式

    addClass和removeClass进行样式类型的修改相信比较容易学习和接受 但是用这两个方法去实现交替样式,像一些<li>列表的样式,还有同类型数据的呈现, 当然很多框架都给出了封装 ...

  4. .Net core Web API导出数据到Excel

    前言 产品经理有一个需求,就是将cosmosDB里的数据,导出到Excel中. 1.新建一个.net core web api controller 添加引用:EPPlus.Core Install- ...

  5. Instrumentation(3)

    摘要: Instrumentation  类加载过程  Instrumentation与Transformer  Instrumentation与Transformer的关系  Instrumenta ...

  6. nsq topic和channel的区别

    topic:一个可供订阅的话题.channel:属于topic的下一级,一个topic可以有多个channel.二者关系可以再参考下面两文章:http://www.cnblogs.com/forres ...

  7. go语言 nsq源码解读四 nsqlookupd源码options.go、context.go和wait_group_wrapper.go

    本节会解读nsqlookupd.go文件中涉及到的其中三个文件:options.go.context.go和wait_group_wrapper.go. options.go 123456789101 ...

  8. TiDB show processlist命令源码分析

    背景 因为丰巢自去年年底开始在推送平台上尝试了TiDB,最近又要将承接丰巢所有交易的支付平台切到TiDB上.我本人一直没有抽出时间对TiDB的源码进行学习,最近准备开始一系列的学习和分享.由于我本人没 ...

  9. 【原】js数组对象去重最简单的方法

    简单的数组去重是比较简单的,方法也特别多,如给下面的数组去重: let arr = [1,2,2,4,9,6,7,5,2,3,5,6,5] 最常用的可以用for循环套for循环,再用splice删除重 ...

  10. 【STM32H7教程】第12章 STM32H7的HAL库框架设计学习

    完整教程下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=86980 第12章       STM32H7的HAL库框架设计学 ...