如今,新基建的浪潮已经席卷了几乎所有社会经济领域。各行各业都希望借助新基建普及的东风,搭上数字化经济的帆船。AI 作为推动社会科技进步的原动力,一直受到社会各界的普遍关注,而机器视觉作为人工智能发展的重要分支,尤其在安防领域发展飞速。两年前,华为就提出了“软件定义”的概念,提出了机器视觉前端智能化的几点优势,如今,软件定义摄像机的出现将这一切变成了现实。
8 月 26 日,华为机器视觉与 InfoQ 联合举办的 DevRun 开发者沙龙·华为机器视觉技术开放日 - 杭州专场,在华为杭州研究所成功举办。本次沙龙邀请到华为机器视觉多位资深技术专家对摄像机 App 开发、摄像机 AI 模型转换与精度分析、摄像机 AI 模型部署与推理等几个议题做了深度分享,沙龙介绍了 AI 算法实践以及软件定义摄像机的特点和功能。华为机器视觉专家们还通过实操环节为与会开发者们进行了演示。
什么是软件定义摄像机?
华为机器视觉营销专家孟杭理就华为软件定义摄像机(Software-Defined Camera,简称 SDC)进行了介绍。面向不同的行业和不同的算法性能要求,华为 X、M、C、D 四大系列软件定义摄像机提供了开放的接口和强劲的算力,开放者基于软件定义摄像机开放接口既可直接调用摄像机算法能力进行应用开发,也可以开发自己的算法和应用并加载到摄像机中。HoloSens Store 是华为机器视觉推出的一站式智能视频算法商城,商城集合了可运行于华为软件定义摄像机和智能视频云平台的优秀第三方算法,满足金融、能源、教育、园区等诸多行业智能化诉求。HoloSens Store 致力于让开发者从“算法”到“应用”不再空中楼阁;让使用者从“想法”到“算法”,不再遥不可及。
如何玩转摄像机 App 软件开发?
机器视觉 SDC OS 首席架构师韩霆军谈到了软件定义摄像机的软件架构设计理念。虽然该平台属于端侧产品,但大量引用了微服务设计理念来实现软硬件之间、软件和业务特性之间,以及应用之间的解耦。华为软件定义摄像机的很多特性都能通过微服务来按需加载和任意组合,从而提供多种功能。开发者在摄像机上可以不受任何干扰地使用底层资源,也可以像手机一样限制应用的权限,满足安全性等需求。
华为还提供界面的通用配置功能,帮助开发者方便地自动生成简单的 web 页面。开发者只需简单地对接通用配置的查询接口,就可以生成自己的应用。
华为软件定义摄像机定义了二进制消息头,可以把它理解为是 HTTP 协议 2.0 版本,软件定义摄像机对外提供的接口规则和 RESTFUL 里面定义的很多约定俗成的规则也是类似的。这里还可定义扩展头,希望通过扩展头的机制实现接口的持续演进,保持前向和后向的兼容。为了提升效率,客户端可以把请求批量一次性发到服务端。每一个使用者可以给自己的每一个请求设置 Transaction-ID,服务端会保证这个请求或响应跟 Transaction-ID 是一致的,从而实现灵活的编程或业务处理。
韩霆军就 App 开发后的发布方式做了讲解。华为提供的服务接口类似于消息接口,所以并不会给开发者提供任何动态库。支持文件操作的编程语言都可以和华为的服务交互。韩老师还展示了基础的安装操作,演示了 App Demo 在摄像机上运行的画面。
摄像机 AI 模型转换与精度分析华为机器视觉智能算法专家马俊凯博士做了题为《摄像机 AI 模型转换与精度分析》的分享。华为软件定义摄像机依托于华为的芯片算力,可以很容易地将算法落地在应用场景中。马俊凯详细介绍了开发者如何将自身开发的深度学习算法模型跑在软件定义摄像机上。
软件定义摄像机有很好的算法移植能力,以 Caffe 模型为例,将 Caffe 模型通过模型转换工具转化为可在软件定义摄像机上加载的 NNIE 模型,该文件模型以 wk 为后缀,开发者可以在软件定义摄像机上调用 NNIE 接口做模型推理。
马俊凯还解答了开发者关心的精度损失问题。
RuyiStudio 模型转换工具同时也提供了精度损失分析的功能。该工具读入模型文件(prototxt、caffemodel 文件),选定一个测试集,利用测试集做前向推理,得到 GPU 模型每一层 Feature Map 的输出,再用同样一张测试图片和 WK 模型做前向推理,得到转化完成之后 WK 每一层的 Feature Map 输出,用两层 Feature Map 的输出,就可以计算出每一层 Feature Map 的相似度水平。如果量化误差很小,那么相似度就会很高。
马俊凯还分析了掉点问题,对于模型的优化问题,也提出了一些建议。
摄像机 AI 模型部署与推理实践
华为机器视觉智能算法软件架构设计师杨磊就摄像机 AI 模型部署与推理实践做了分析与解读。
基于 SDC OS 架构实现板端推理,首选应初始化 SDC 服务,处理好 YUV 数据帧队列,对数据流 YUV 数据进行通道设置,比如设置分辨率和通道号。其次进行模型加载和初始化,需要初始化 NNIE 参数,如 anchor、类别、阈值,还要分配输入和输出的 blob。然后可订阅 YUV 数据,继而做前向处理。前向处理后可做算法的后处理。最后要发送到 web 或后端服务器,把算法结果发送出去。如果要实现算法 App,需要关注加载模型、卸载模型,然后做前向处理和订阅 YUV 数据,用这四个服务就可以实现 App 的主体流程。
加载模型关注两个字段,第一个是 url,第二个是 method。url 是 SDC_URL_NNIE MODEL,而 method 就是 SDC_METHOD_CREATE。
卸载模型类似,url 类型就是 SDC_URL_NNIE MODEL,method 就是 SDC_METHOD_DELETE。
前向处理的 url 是 SDC_URL_NNIE_FORWARD,而它的 method 是 SDC_METHOD_GET 过程,要从内存中 GET 到 Feature Map。
订阅 YUV 数据,url 是 SDC_URL_YUV_DATA,method 也是 SDC_METHOD_GET,因为我们要从之前分配好的内存队列中 GET 到 YUV 数据。加载模型可以使用输入字符串或者输入文件字符串的加载方式,也可以通过内存加载。文件只需要输入模型字符串就可以实现加载;而内存加载时要先 open 模型,传入模型地址后才可加载。订阅 YUV 数据的扩展头就可以获取当前队列里面的 MAX,就是我们已有的 YUV 个数。
杨磊还就 YUV 处理问题给予了解答。因为输入输出的 blob 是三维的,而不同的模型输出的 blob 个数不一样。NNIE 输出的内存排布格式也不一样,它首先排布坐标框,接着排前景概率、类概率,然后按照不同 Anchor 来排布,直到最后回归。可以按照这样的编译地址取到相应的值,回归出坐标框。
机器视觉开发者社区介绍
华为机器视觉开发者社区运营经理谭义鑫从社区论坛、生态开放实验室、赋能培训、职业认证、开发者活动五个方面对华为机器视觉开发者社区进行了详细的介绍。开发者社区既是知识分享和技术交流平台,也是开发者求助的通道,开发者遇到机器视觉技术问题,都可以在社区论坛或通过工单进行求助。
机器视觉生态开放实验室在杭州、北京、成都、深圳均有布局,有低门槛、使用便捷、在线申请、设备多样化等特点,实验室提供包括 HoloSens IVS3800、 HoloSens IVS1800、HoloSens SDC 等多种机器视觉相关产品,开发者可在线申请。
小结
本次 DevRun 开发者沙龙 华为机器视觉技术开放日 - 杭州专场内容丰富,精彩纷呈,解构了“软件定义摄像机”,也为关注机器视觉的开发者们带来了一场技术盛宴。今年华为机器视觉还将在各地开办各类技术沙龙活动,持续展开技术布道,感兴趣的开发者可以持续关注。
评论