# 场景参考解决方案 ## 整体概述 场景参考解决方案是在天工开物模型仓库(Model Zoo)中的产品算法之上,将地平线各种量产场景方案进行开放。下图是“天工开物”模型仓库(Model Zoo)产品算法开放列表。 ![模型仓库](./image/model-zoo.png "") 这些产品算法涉及人脸、人体、车辆等多种类别,具备极高的算法质量和精度,可有效避免合作伙伴“重复发明轮子”,大幅节省算法训练和开发的时间与成本。 当前版本我们选取人脸,人体,车辆部分核心算法模型,开放了**人脸结构化参考方案**,**人体结构化参考方案**,**车辆结构化参考方案**三个解决方案以及一个复合的**AI盒子场景参考方案**。 这些参考方案在地平线96board,2610面板机参考硬件板卡上都可以直接运行,未来会支持IPC等更多硬件板卡形态。 ![硬件板子](./image/n-boards.png "") 您也可以将这些参考方案轻松迁移到基于地平线芯片的其他硬件设备中。 ## 人脸结构化参考方案 我们选取**人脸检测**,**人脸5关键点**,**人脸姿态**三个产品模型,附加**MOT人脸跟踪,人脸打分以及人脸抓拍**三个业务策略,构建一个完整的人脸抓拍Workflow。 ![框架](./image/face_snapshot.png "") 其中使用XStream内置Method如下所示: |Method|类型|输入|输出| | -------- | ----- | ----- | ---- | |FasterRCNNMethod |算法|图像帧|人脸框、关键点、姿态| |MOTMethod|策略|人脸框|带有trackID的人脸框及消失目标集合| |GradingMethod|策略|人脸框、姿态、关键点|目标优选分值| |SnapshotMethod|策略|图像帧、人脸框、目标优选分值|抓拍图列表| * [FasterRCNNMethod](xstream_ai.md)算法方法,我们采用MultiTask多任务实现方式,同时挂载**人脸检测**,**人脸5关键点**,**人脸姿态**三个模型。它可以针对输入图片进行结构化,输出图片中每个目标的人脸框、关键点、姿态. * [MOTMethod](xstream_ai.md):采用了基于IOU策略的MOT跟踪算法【@todo待补充策略算法链接】,它对输入时序化的人脸框进行跟踪,输出带有trackID的人脸框和消失目标的集合。 * [GradingMethod](xstream_ai.md):是一个人脸框打分的策略模块,它综合考虑人脸框大小、关键点置信度,遮挡以及姿态等信息,输出单个目标的人脸框图片置信分数,用于后续优选抓拍。 * [SnapshotMethod](xstream_ai.md):是一个抓拍的策略模块,基于MotMethod输出Tacklet以及GradingMethod输出的人脸框打分信息,在内存维持一个优选帧序列,针对一个Tracklet输出它的的抓拍图。 在人脸抓拍workflow上,我们可以追加**人脸活体**,**性别/年龄属性识别**,**人脸识别**等模型,进而丰富整个人脸结构化数据流。 在人脸结构化参考方案中,我们也提供了一个人脸识别Workflow,通过在SnapshotMethod抓拍策略后,追加[CNNMethod](xstream_ai.md)来实现对抓拍人脸图的特征提取。 ![框架](./image/face_rego.png "") 关于人脸结构化参考方案,详细参考[README](../../xsdk/solution_zoo/face/README.md "")。 ## 人体结构化参考方案 人体结构化参考方案,我们核心目标是对人检测与跟踪。我们选取**人头检测**,**人脸检测**,**人体检测**,**人脸关键点**,**人脸姿态**,**人体关键点**等数个产品模型,并通过**MOT人头跟踪,MOT人体跟踪,MOT人体跟踪**实现对人体分别进行跟踪,随后通过融合策略,实现三框的融合,最终完成对一个人体目标跟踪。 ![框架](./image/body-solution.png "") 其中使用XStream内置Method如下所示: |模块|类型|输入|输出| | -------- | ----- | ----- | ---- | |FasteRCNNMethod |算法|图像帧|人脸人头人体框、人脸关键点和姿态、人体关键点| |MOTMethod|策略|人脸框|带有trackID的人脸框及消失目标集合| |MOTMethod|策略|人头框|带有trackID的人脸框及消失目标集合| |MOTMethod|策略|人体框|带有trackID的人脸框及消失目标集合| |MergeMethod|策略|人脸人头人体框、trackID|融合后的人员ID| * [FasterRCNNMethod](xstream_ai.md):算法方法,我们采用MultiTask多任务实现方式,同时挂载**人头检测**,**人脸检测**,**人体检测**,**人脸关键点**,**人脸姿态**,**人体关键点**六个模型。它可以针对输入图片进行结构化,输出图片中每个目标的人脸人头人体框、人脸关键点和姿态、人体关键点. * [MOTMethod](xstream_ai.md):采用了基于IOU策略的MOT跟踪算法【@todo待补充策略算法链接】,它对输入时序化的人脸框、人头框、人体框分别进行跟踪,输出带有trackID的人脸框、人头框、人体框和消失目标集合。 * [MergeMethod](xstream_ai.md):三框融合,它可以在跟踪过程中,考虑框之间遮挡,跳动,实现对单目标的人脸人头人体的融合,将独立跟踪的TrackID进行合并,为每个目标分配全局唯一的TrackID。 关于人体结构化参考方案,详细参考[README](../../xsdk/solution_zoo/body/README.md "")。 ## 车辆结构化参考方案 车辆结构化参考方案是地平线在[车路协同](https://mp.weixin.qq.com/s/zom_sJ6qNNXQaXc4kK_0tw)领域的交付沉淀,它支持功能如下: 1. 机动车相关检测:包括车辆,车牌,车前窗三种框检测,以及车体颜色,车牌颜色,车牌类型,车牌号的属性识别。 2. 非机动车的检测和行人检测 4. 机动车,非机动车,行人的跟踪以及框级别的融合 整体效果图如下所示: ![框架](./image/changsha.jpg "") 其中使用XStream内置Method如下所示: |模块|类型|输入|输出| | -------- | ----- | ----- | ---- | |FasteRCNNMethod |算法|图像帧|机动车、非机动车、行人、车牌、车前窗、车牌颜色、车牌类型检测| |MOTMethod|策略|机动车框、行人框、车前窗框|带有trackID的框及消失目标集合| |CNNMethod|算法|机动车、车牌框|车颜色、车型、车牌号识别| |VoteMethod|策略|待投票目标|按照Tracklet进行投票的结果| * [FasterRCNNMethod](xstream_ai.md):算法方法,我们采用MultiTask多任务实现方式。它可以针对输入图片进行结构化,输出图片中每个目标的机动车、非机动车、行人、车牌、车前窗、车牌颜色、车牌类型。 * [MOTMethod](xstream_ai.md):采用了基于IOU策略的MOT跟踪算法【@todo待补充策略算法链接】,它对输入时序化的机动车框、行人框、车前窗框分别进行跟踪,输出带有trackID的框和消失目标集合。 * [CNNMethod](xstream_ai.md):算法方法,挂载**车型识别**,**车颜色识别**,**车牌号识别**三个模型,实现对机动车进行车体颜色、车型的识别,针对车牌进行车牌号识别。 * [VoteMethod](xstream_ai.md):针对一个Tracklet里面的多张图片的属性进行投票,支持**多数投票**等投票策略。在车辆结构化方案中,我们对车辆类型,车辆颜色,车牌颜色进行众数投票,基于多帧数据,来提高最终识别的准确性。 该参考方案也自定义以下策略Method: |模块|类型|输入|输出| | -------- |----- | ----- | ---- | |FilterSkipFrameMethod|策略|机动车框|跳帧策略| |VehiclePlateMatchMethod|策略|机动车框、车牌框|机动车框与车牌框融合策略| |PlateVoteMethod|策略|车牌号|车牌号投票| 完整的Workflow结构图如下所示: ![框架](./image/vehicle.png "") 关于车辆结构化参考方案,详细参考[README](../../xsdk/solution_zoo/vehicle/README.md "")。 ## AI盒子场景参考方案 在一些AI盒子等复合应用场景,需要同时支持多路输入和多Workflow数据流,并可以通过配置文件来控制每一路输入与Workflow之间的映射关系。 如下实例: ![框架](./image/multiInput_multiworkflow.png "") 视频流1配置为进行人脸结构化和人体结构化,而视频流2仅配置进行人体结构化。 针对这种负责场景,AI Express支持灵活配置视频流的路数,workflow的个数以及视频流与workflow之间的映射关系。 注意:多路输入和多Workflow数据流方案,同一路视频在各个workflow中的智能化计算流程是完全独立。如果多个workflow有共同Method,会被同时计算多次,不支持Workflow间的计算结果共享。 关于多路输入和多Workflow数据流方案,详细参考[README](../../xsdk/solution_zoo/face_body_multisource/README.md "")。