在 2021 年,我们开始部署“EdgeX 智慧超市”解决方案,目的在于实现超市的全智能化运营,和连锁超市内用户数据实时同步。数据同步就是后台管理中心和接入的各个超市的 EdgeX 微服务平台,数据共享,不言而喻,分布式思维,我们是云边协同的新形态框架思维。超市的运营管理是这个解决方案的技术核心,也是业界一直在探索的焦点。目前的超市能称得上智能化的只有结算台,但通常也需要有客服在旁边指引监管,也没省下人力成本,所以我们把结算和管理流程紧密的结合在一起。那么运营就剩下秩序管理这一块了,也是全智能化的技术核心,用投资人的角度来说:“怎么去监管顾客在超市内行为,比如插队、破坏、攀爬、咋骗、争吵等行为”,其实就是 AI 深度学习的目标检测,行为分析和识别,这就是本文要介绍的地方。在音视频领域,AI 深度学习主要是做模型训练和推理引擎。不论是早期的人脸识别,还是后来的图像声音检测,都需要与模型做对比,所以模型训练至关重要,可以说是 AI 深度学习的基础。市面上各种运营 AI 深度学习框架的平台首先玩的就是他们训练的模型库,推理引擎则是实现目标的动作。目前全世界最流行的 AI 深度学习框架有 Google 的 TensorFlow 和 Keras、Microsoft 的 CNTK 和 ONNX、百度的 PaddlePaddle、FaceBook 的 PyTorch、BVLC 的 Caffe 等。
我不精通所有的框架,而国内市场目前的口号是“内容为王、数据为王...”,很难见到技术的精髓,也就是用几行 python 命令行就实现 AI 深度学习的完整过程,事实上只会在这个平台上跑这个流程,所有的技术都不会。甚至很多云平台开发上,日志都看不到,我就想,现在开发靠猜来判断吗?!声明下:这不能算喷,只是感慨下,与君共勉。这种虚有其表的技术显然没有前途的,根本不能满足我这种技术追求极致的人,所以我就选了另外一个从底层框架到场景应用完全开源的框架套件 openVINO,在中国主要是由 Intel 在运营,我选这个套件是还有商业目的,这里就不跑题了,openVINO 的框架如图 1 所示:从流程图上来看,左边支持大多数主流的其它 AI 深度学习框架,右边兼容各种算力插件,这很表面,就是装一堆的插件,然后几行代码跑全程的那种,这也是 Intel 的一种运营模式。
这个框架的开源里,直接明了的把模型训练 openCV 和推理引擎框架完整开放,开发者能基于 openCV 库写模型库和模型训练过程代码,也能基于 Inference Engine 库写推理过程代码,而其它的库用于写场景应用过程代码,也就是说这种情况下,想怎么发挥就怎么发挥,不受命令行或框架的约束。我在采用之前调研了下行业形势,各 AI 深度学习框架的短板除了客观的网络带宽的外部因素限制外,主要集中在模型训练精度低及识别和推理时间过长。造成这个问题的主要因素就是各套件广泛的去集成了各种插件,然后再用一个甚至是多个令行插件去把这些插件集成起来,达到低代码及 0 代码的目的,这里不发表评论,大家自己想。大家都知道每个插件和库文件,编译器都要去编译一遍才能识别出来,因此,时长就是这么增加的,性能损耗就是这样升高的,当然,这样同时也能提升通货膨胀,带动经济发展,计划经济的主要思想...。
至贸易战后,全球经济呈现衰退趋势...,各种坑也越演越烈,这里主要描述下开源的坑,华为曾旗帜鲜明的喊出了“不再使用开源”的口号。就拿这里来说吧,openCV 从此没有了 CV::face 的 namespace,官方说是因为不稳定,因此推出了另一个开源 contrib,然后 2 个开源源码重新编译成新的库文件,我以轻量级的方式重新编译了下,生成了 1G 多的新库文件。10 年技术我都没有调用过这么大内存的库文件,而目的只是为了去集成一个 namespace,一直以来的开源我们都是在维护 issue 后升级。再来说说代码,首先做模型库训练,openCV 是通过 csv 文件来读取模型库中的文件,模型库里存放的就是训练好的目标图片。有必要解释下训练好的概念,就是标记分类并处理好,用作对比的库存图片,比如人脸、物体和文字等,opencv 会把从摄像头采集来的图片转灰度化 cvtColor(fe, fe_gray, COLOR_BGR2GRAY),以减少运算,然后用一个循环来设定目标物体拍照的数量 for (int i = 0; i < faces.size(); i++),将其处理标记好。在 csv 中是用 2 个容器分别存储图像和标签 vector label,至此模型库就做好了,对目标识别时,摄像头采集到目标数据,通过读取 csv 文件的记录,就能找到训练库中的数据做对比,所以,识别的精度和时长就看图像数据和 csv 文件中的标签做的好不好。这个时候要注意,采集的图片也必须转化为灰度图做对比。对比的结果可以直接显示在测试图像界面中 putText(fm, str, text_lb, FONT_HERSHEY_COMPLEX, 1, Scalar(0, 0, 255)),如图 2 所示,图像上显示的结果就是标签中的标记。openCV 的整个过程只需要一个 xml 的分类器 CascadeClassifier,就能实现各个流程,至此,模型训练的库文件和 csv 文件就全完成了。openVINO 的推理引擎需要调用一对 xml 和 bin 模型文件,读取测试数据,读取网络权重和配置输入输出参数后,就可以启动 AI 推理计算设备进行推理了,openVINO 能实现同步推理和异步推理,通常采用异步推理 sync_infer_request->Infer()。推理就是对目标数据做分析或预测,比如通过人脸的特征来分析 zhe'g 这个人的年龄、健康、情绪等等。就目前的技术而言,AI 还是通过读取记忆来模仿人的思维的,是无自主意识行为,不会像大脑一样,在没有记忆的情况下能自主进行分析和判断。在代码中,我们会抛异常和出错终止程序的运行,如果没有,也不会像业外人士预测那样,产生新的意识,最后替代人类或毁灭世界。不论什么情况下,机器语言的最基本是不能有一点错误的,有错运行就会结束,甚至没有回光返照,机器终究是没有生命的。
最后,以介绍下我们公司结尾:绿视(上海)信息技术有限公司是音视频解决方案供应商,致力于流媒体和 AI 深度学习领域,助力从底层框架到场景应用的完整技术开发。欢迎关注下面公众号,持续关注关注我们的动态。