天天看点

智慧城市交通系列之行人、车辆属性识别方案设计

序言

不知道大家是否还记得前几年网上流传着一个视频非常的火爆(如下),网友称之为“中国天网”,在它的面前,行人的特征直接暴露无遗,当时看到觉得非常的吃惊,惊讶于当前的监控技术达到了如此高的技术,正也应了那句非常经典的话:天网恢恢,疏而不漏。无奈当时只是学生身份,看完后只剩下震撼;而如今从事深度学习算法工作后,再回头看,发现原来这个是用的神经网络去实现的,实现起来也不是那么难嘛。既然不难,那有时间自己整一个?整!!说干就干。

智慧城市交通系列之行人、车辆属性识别方案设计

一、模型设计

在开始之前,要具体分析我们的需求,首先看上面那张图,简单的思考一下,你能想到应用了哪些技术嘛?如果看过我之前的车辆属性识别的文章,一眼就能看出实现的关键技术:

  • 目标检测;
  • 多属性识别。

在这两个技术的基础之上又能够细分为:

  1. 行人、车辆的目标检测;
  2. 行人的属性识别;
  3. 车辆的属性识别;

那好,把过程梳理一下,首先使用目标检测算法,将视频中的行人、车辆检测出来,得到人和车在视频中具体的坐标位置后将其裁剪,分别送入车辆属性识别、行人属性识别的网络中,经过推理后得到人、车的多种属性,然后将得到的信息在原视频中展示。是不是非常的esaily呢?那么接下来将逐一实现每个模块。

二、技术实现

2.1 目标检测

首先是最简单的目标检测模块,用于检测行人和车辆,目标检测算法相信大家都比较熟悉了,我这里直接选用了yolov5目标检测算法,并且开源的coco数据集上训练的权重是可以直接使用的,不需要我们单独去训练行人和车辆检测的模型,只需要在检测时,将其他类别注释掉,只保留人和车的类别即可。

在coco 80类中,人的类别为person,车的类别有car、 bus、 truck、bicycle,所以我们只需要管这五类的目标即可,其他的类别检测到了可以将其注释掉不予理会。

当然也可以用其他的检测算法,只要时实性能够满足即可,那么在这一步需要做的是,使用yolov5将行人、车辆检测并按照坐标将其裁剪出来,得到如下形式的图片,用于后面的属性识别:

智慧城市交通系列之行人、车辆属性识别方案设计

—————

智慧城市交通系列之行人、车辆属性识别方案设计

2.2 车辆属性识别

就如同前一篇车辆属性识别文章讲的,原理这里就不再重复了,直接看上一篇文章即可,但是因为我的权重是白嫖人家仓库的权重,没有自己去训练,所以只能使用resnet50去推理,相对来说,模型是大了一些,不过万幸速度还是挺快的,可能有同学会问:为什么自己不训练一个精度、速度更好的模型?问题的关键在于…没数据啊,上哪去找这么多标注好的车辆数据!!跑模型是不可能跑的,这辈子都不可能跑,只能靠白嫖人家的权重才能维持得了科研的样子。

智慧城市交通系列之行人、车辆属性识别方案设计

光说没用,先来看下这步的效果图:

智慧城市交通系列之行人、车辆属性识别方案设计

可以看到其实精度还是有优化空间的,当然如果你有数据的话。不过没关系,毕竟我们只是简单实现一下整个过程,不投入商用,精度看得过去就行了。

2.3 行人属性识别

其实行人属性识别和车辆属性识别原理差不多,同样是多标签分类,只不过在这里行人的属性标签要多一些,网上有相关的数据集:Market-1501以及DukeMTMC-reID,这两个数据集是可以用于训练的。这里呢又让我找到了一个可以白嫖的行人属性识别的仓库Person-Attribute-Recognition-MarketDuke,hub中提供了相关的训练代码以及基于上面两个数据集训练好的模型权重,很幸运,又可以直接拿来用,舒服:

智慧城市交通系列之行人、车辆属性识别方案设计

如果你要重新训练的话,按照教程训练即可,我这里训练了发现效果和作者给出的差不多,所以还是直接用好了,需要说明的是hub中的精度倒是很容易复现,只需要按照流程跑即可,但是因为数据集的原因,如果你仔细观察这两个数据集里的数据的话,行人基本上都是基于夏天短袖的照片,并且也基本上都是成年人,如果用于实际环境中的话精度是远远不够的,如果你想去优化精度的话就需要自己去采集收集相关的数据,并且标注,这个工作量是巨大的,不是真正的项目的话,建议不要去折腾,我们跑个demo版本的就可以了。

我重新封装了代码,默认输出的是英文,在解码部分的时候我换成了中文,并且只选择了其中五个属性作为最终视频上的展出,好了现在找张图片来测试一下:

智慧城市交通系列之行人、车辆属性识别方案设计

至于代码下载下来后如何封装成的接口,供检测模型调用,就自己去实现了,因为这两个属性识别仓库的权重都是基于resnet50的,所以在一般的平台上速度可能达不到实时(我在3070上勉强达到实时),如果想优化建议上轻量型的网络训练,并且在网络输出后的解码部分需要自己花点功夫研究一下,代码没整理,就不开源了,后续看有时间再说吧,思路已经讲的很明确,感兴趣的话自己去实现吧。你只需要做的是把这三个仓库的推理部分代码整理串联起来运行,并且根据你想要的效果将其可视化出来即可。

四、最终效果

最后还是要看下效果,不然你们说我吹牛皮。虽然精度稍微差了一点,但是效果相比于前面说的那段网上视频,是不是完全一致?超赞有木有?有内味了没?

智慧城市交通系列之行人、车辆属性识别方案设计
智慧城市交通系列之行人、车辆属性识别方案设计

继续阅读