5个课时完成智慧社区AI实战项目!
欢迎大家来到AidLux零基础边缘端智慧社区训练营~
本次训练营课程,将会从智慧社区的定义、算法场景、开发流程、项目指标等多个角度入手,带大家了解算法工程师在AI开发过程中需要考虑的方方面面。
除了分享经验之外,我们也会带大家一步步进行实战,利用边缘设备AidLux完成智慧社区里面的两个典型场景——高空抛物和车牌识别的算法开发,及其在边缘设备上的部署。
希望通过对智慧社区和AidLux部署上的一些分享、学习,更多开发者能够从整个算法开发全局的角度,思考算法和设计算法,并应用到项目实战。
同时,我们也希望训练营课程能让更多的开发者掌握AI应用落地相关的实战经验,真正实现AidLux降门槛的价值。
智慧社区实战训练营Lesson 1 的内容框架如下:
- 智慧社区各类场景算法划分
- 智慧社区项目落地方式
- 边缘设备在智慧社区中的应用场景
- AI实战训练营课程流程
1. 智慧社区的各类场景算法划分
1.1 智慧社区的各类场景划分
智慧社区作为智慧城市的最小单元,麻雀虽小五脏俱全。
一般来说智慧社区主要分成以下三个方面:住房安全管控、社区环境管控以及物业服务管控三个部分。
(1)住房安全管控,主要包括消防安全的监管和入侵安全之类。
其中消防安全主要指对可能出现的消防隐患实时检测,并对存在的隐患实时预警,如社区楼道里的烟火检测、电梯里的电动车检测。
入侵安全主要为人为地闯入社区和楼栋,对可能的入侵加强检测,如人脸识别、车牌识别、周界入侵,楼宇对讲,入户指纹解锁等。
(2)社区环境管控,主要是对小区内的公共环境实时监测,如智能垃圾分类,高空抛物以及遛狗牵绳等的实时管理,对人车分流的小区,对闯入的车辆实时报警,对楼栋下禁止停放电动车、自行车,以及电动车、自行车等分区管理实时监管,对在公共区域摔倒的老人检测等。
(3)物业服务管控,主要是包括提升物业效率的智能化管控,如智能巡检,实时检查每个服务人员日常工作完成情况;对小区门口物业脱岗、睡觉等情况实时检测等。
以上为智慧社区的主要场景,除此之外智慧社区还有更广义的定义,如社区内解放人的场景,如小区用电的实时监测、异常点的报警以及物业任务的线上监督等,这些均可认为是智慧社区的一部分。
1.2 智慧社区的各类场景的算法划分
在智慧社区的场景中,每个场景都对应着不同的算法业务功能,每个算法业务功能则是由不同的算法框架如:目标检测、图像分类、人脸检索等组合而成。
应用场景,AI算法功能,AI算法模型这三者有机结合,形成了面对不同需求的整体算法解决方案。
而在上图的AI算法功能中:比如遛狗牵绳功能的底层算法技术,主要是人的检测+人手的分类+狗的检测+绳子的检测+视频分类+业务逻辑等组成。
那么在遛狗牵绳功能中,可以有两个算法方案:
(1)第一种方案,是对截取视频做视频的分类,主要分成三类,一类是画面内无遛狗,第二类是画面内有遛狗并牵绳场景,第三类是画面内有遛狗但不牵绳的场景。
(2)第二种方案,是抽取视频帧,对截帧图像完成狗的检测。
当检测到狗后,触发人的检测和绳子的检测,对检测到的人,完成人手区域的分类。
而人手有三种分类:一类是人手遮挡,一类是人手牵绳,一类是人手不牵绳的分类;
通过以上检测到的人、绳子、狗的的相对距离等约束信息,完成业务层面的过滤和判断,再与视频分类的判断相结合,通过业务逻辑,完成遛狗牵绳的应用场景的算法支持。
当然该算法方案的确定,主要在于其使用场景为社区快捷取证,对实时性的要求不高,同时因考虑取证场景,所以算法在设计时尽量提升召回率,如在实时性高的报警场景中,需对算法方案做筛减;
再比如智能垃圾分类场景,如果直接做垃圾分类,因为同一类的垃圾,如可回收垃圾之间的差异过大,如作为同一类的特征提取难以聚合。同时如果使用图像分类,则每次新增一个类别,需要重新训练分类模型:
所以这里一般会采用先对垃圾区域做检测,对检测到的垃圾做垃圾检索,与算法入库中的垃圾特征对比后,确认垃圾名称后,通过垃圾名称与垃圾分类类别之间的映射关系,完成垃圾的分类。
2. 智慧社区的项目落地方式
在明确了智慧社区的场景,以及算法的解决方案和算法功能后,接下来我们来看看AI项目整体的开发流程,以及与AI产品的开发在思路上的区别。
2.1 智慧社区的算法开发流程
首先一般的项目算法开发流程:
(1)前期配合
整个算法的开发流程从项目开始商机时,算法侧就开始接入,在售前工程师开始评估商机时,算法侧开始对项目提供需求分析,其中主要的点主要包括需求规格和评审、准确性、实时性以及硬件资源目标与验收指标,出具需求分析报告。
(该部分在有些公司是售前工程师的工作、有些是算法侧配合输出)
(2)可行性分析
在需求分析后,算法侧会先做算法的调研,并基于前期的小样本数据完成PR,进行算法方案的可行性验证,梳理主要的风险点以及时间规划。
这里的算法方案一般是前期的方案,后期在项目立项后,做进一步的方案变更和确认;如果可行性分析后没有问题,会正式通过立项会,开始项目立项。
(3)数据工程
在项目开始后,首先算法侧要制定数据采集方案,数据是算法的天花板。
数据采集要尽可能地贴近业务场景并囊括所有的业务场景,如车牌识别项目中,在智慧社区中对于双层车牌的场景很少,在采集过程中就可以将侧重点放在单排车牌上。
同时因为开发项目的周期短节奏快,所以数据采集方案会分批采集,以保证算法的快速迭代。
采集工程师根据采集方案采集数据后交由标注工程师,完成算法标注,这里算法工程师需要根据自己的算法方案,出具标注规范,交由标注工程师标注。
同时这里会有算法测试工程师的加入,算法测试工程师会与算法工程师一起制定数据采集方案,在标注工程师将整个数据完成后,会抽出一部分数据隔离到测试端,后期用于对算法模型结果的测试。
(4)算法设计
算法工程师自己要在数据标注完成前完成算法的设计,主要是算法的选型、部署平台要求、算法接口的对接。
首先算法的设计,主要是算法方案的设计,算法方案的设计涉及到算法需求的定义,一般来说考虑硬件的部署要求以及算法的准确性要求,对于在服务器端部署的算法,一般对实时性要求不高,尽量往效果好上靠;
对于在嵌入式端部署的算法,一般对实时性要求高,考虑到嵌入式平台对于不同框架和算法支持力度不同,建议在开始选择模型前,问下所选嵌入式平台对一些常用算法的支持力度,会在部署的时候避免掉很多坑。
在算法调研时,对于不太熟的领域不知道如何下手时,可以去paperwithcode上找相似的任务,看下排名前几的算法,一般会有思路。
同时算法侧与系统侧(如果需要系统侧介入的话)之间,需要先定义好算法输入输出接口、错误码等信息,需要明确是以服务的方式还是以dll等将算法结果传给系统侧,出具接口规范,以方便系统侧同步开发。
(5)算法开发与移植
有了数据过后,我们根据算法方案,进行模型的训练与自测试。
在遛狗牵绳场景中,其底层涉及算法是狗检测 + 人检测 + 人手分类 + 绳检测 + 视频分类等一系列的算法功能组成。
在每个算法完成训练测试后,完成整个算法的pipeline编写。如果算法工程师也负责移植的工作,则需要算法侧对模型转换,做模型部署相关的工作,如模型的量化、模型剪枝等工作。
(6)算法集成
算法集成主要是算法侧与系统侧的对接与联调,这部分内容如果系统侧介入的话会涉及到,主要是将算法侧的内容,以打包成服务等方式供系统调用,让算法嵌入到系统中,完成系统整个流程的打通。
(7)算法优化
在完成算法集成后,后续基于数据版本的迭代,算法会根据项目周期完成多轮迭代优化。
(8)算法测试
算法工程师在提交模型后,由算法测试工程师对算法模型测试,测试结果通过后,模型发版,同时系统测试也会通过整个系统的测试,测试算法接口。
(9)算法试运行
在算法完成多轮迭代后,在项目交付前,会让系统在部署场景中试运行一段时间。
(10)算法交付
在算法试运行没有问题后,算法项目就可以交付了,以达到验收指标。
(11)算法售后
算法售后这块不同的公司分工不同,有的也由算法工程师兼职售后,即对后面可能出现的一些问题做一些优化和微调。
整理上算法工程师在算法开发项目中的整个职责相对主载。同时各个公司对算法工程师的要求不同,不过基本上都属于上述的某个环节。
2.2 产品算法开发的区别
产品的开发流程,相对于项目的开发流程在整体上差不多,产品需求的明确性相对与项目稍差,同时涉及到投入市场后的用户反应等因素,所以需求变更稍频繁,同时考虑后期的拓展性等问题,在算法方案和算法接口上会考虑更多。
如市场上某类别物体的分类,可以选择物体分类和物体检索两种方式,如果考虑拓展性,选用物体检索的方式可能更好些。
同时产品算法一开始的时候会考虑通用性,会在算法功能上相对解耦,使得后期产品在落地等情况时,能快速定制开发。
2.3 项目开发中算法的评价
算法在开发完成后,如何去评价该算法的效果呢,如果是算法项目,会有验收指标,但是如果有的客户对算法了解不多,需要算法参与指导制定验收指标。
算法的评价分为两种:一种是算法模型的评价,另外一种是项目业务的评价。
(1)算法模型的评价
对于算法模型评价,如图像类有:召回率、精确率、TPR@FPR0.1、F1、AUC、MAP、DICE系数等。
因模型在推理时会选择某个单点的score阈值,而AUC和MAP是计算全域score下的结果,在工业场景中一般不作为指标依据。
因Precision和Recall受阈值相互影响,在工业场景中会固定某个值去提升另外一个值,如P@R90%即在允许10%漏检的情况下精确率,TPR@FPR0.1指的是在允许10%阴性误检成阳性的情况下,阳性的召回率。
(2)项目业务的评价
业务场景中的评价与算法侧也会稍有不同,如在烟火报警业务场景中,如选用目标检测,算法侧会以目标级别检测的结果做为模型效果的评价。
在业务上,会更关注整张图片上是否有烟火,即图片级的目标,这样在业务场景上评价即在整张图片上有检测到烟火,该方法适用于各类报警机制的方案。
3. 边缘设备在智慧社区中的应用场景
现在外界很流行端边云协同系统,即指把简单的、需要实时计算和分析的过程放到离终端设备更近的地方,以保证数据数据处理的实时性,同时也减少数据传输的风险。
整体上说是边缘负责局部的数据分析和推理,而云端则汇集所有边缘的感知数据、业务数据以及互联网数据,完成对行业以及跨行业的态势感知和分析,而端指的是终端设备,如手机、智能家电、摄像头等。
在智慧社区场景中,我们一般使用的是边缘的设备算力来支持算法的运行和分析,以达到实时性的要求,如烟火报警、人脸识别等,而云端主要用于社区的大数据分析,以及端侧用户和任务的管理。
边缘设备选择,目前一种是公司对于特定产品的自研,选择Jeton NX , RK3399,高通QCS8250等NPU协处理器+海思、ARM等CPU处理器以及考虑内存、相机编解码、软件适配等,集成边缘设备,或选择市面上已经集成好的主流的边缘设备。
算法工程师对于边缘设备的参与,主要在硬件评估和算法移植部署两块。
项目开始阶段,考虑实时性和精度以及价格成本(还有个重要的是设备对算法的支持力度,这个可以看各个边缘设备的开发者社区,以及官网上的技术文档),选择满足要求的设备。
算法的移植则很考验算法工程师的工程能力,一般边缘设备为榨干每一点性能,底层会选择c/c++推理。
这样移植过程需要做两个事儿:
第一个是将python的pipeline转写成c++方式;
第二个是将模型转成在适配该NPU的模型。
而有的芯片如瑞芯微RV1109不支持在设备端编译,需要PC端交叉编译好后,通过adb移植到边缘设备上运行。这样在算法开发过程中会增加很多工作量。
为了减少开发工作量,让大家更轻松地获得强劲的AI性能和优质的开发体验,在本次的训练营中我们选择了PC端+AidLux边缘设备+平板/手机的方式。
AidLux软件可以在各大安卓应用商店中找到并下载,为大家提供了一个可以在安卓手机/平板上开发和部署的环境,并且内置了各种AI案例参考,这个环境和现实中的边缘计算设备基本一致。
学会熟悉了之后,以后在真实项目中使用边缘设备就能够事半功倍。
不过需要注意的是,这里的AidLux因为是安装在ARM架构下的,跨生态(Android/鸿蒙+Linux)一站式开发和部署平台APP。
必须要在安卓手机或者安卓的平板上或ARM板卡才能下载运行,大家在第二节课之前最好准备一种安卓设备,设备需要满足ARM64位,安卓6.0以上。
4. AI实战训练营课程分布
为了带大家整体学习与实现各个功能,本次训练营的课程主要分成5节课。
第一节课,主要讲解智慧社区行业的算法的切入点,并从AI项目的整体开发流程、算法业务的评价,边缘设备等内容进行讲解。
第二节课,主要从智慧社区的场景高空抛物展开,高空抛物算法的选型、算法的构建和Aidlux上的移植等方面进行讲解。
第三节课,主要从智慧社区的另外一个场景车牌识别开始讲解,主要从车牌识别算法分析、以及训练和推理等方面进行讲解。
第四节课,主要基于第三节课,手把手交大家对车牌识别在PC端模型转换、推理以及在Aidlux端进行部署与测试。
第五节课举办结营活动。
参加训练营的开发者还可以参加AI应用案例悬赏征集活动。
AI应用悬赏库是AidLux推出的AI应用案例项目合作模式,开发者可以基于选题库提供的选题,结合自己的专业开发能力,将选题内容实现,并成功部署运行在使用AidLux的设备上,按照规范提交效果展示视频(录屏)和项目代码包并通过检验即可获得最高千元以上现金奖励!