图像
George Liu 刘刚
刘刚
Senior Manager
已发布: 2021年7月1日

在前两篇文章中我们分别介绍了如何使用RZ/A2M和它独有的DRP技术实现工业自动化中的目标物体检测与追踪以及如何实现二维码编码类型的快速检测。现在让我们看一下RZ/A2M的DRP与嵌入式AI结合实现口罩人脸检测。

在示例中我们通过MIPI接口连接Sony IMX219 CMOS传感器,输入一个1280x720分辨率的图像,通过RZ/A2M的DRP对输入图像做Simple ISP处理,图像缩放处理,然后运行一个轻量级且高效的口罩,人脸检测模型。它能够实现在人脸检测模式下30FPS的检测速度,在区分是否戴口罩的模式下实现20FPS的检测速度。下面让我们看一下它是如何实现的。

图像
通过RZ/A2M的DRP对输入图像做Simple ISP处理,图像缩放处理

下图是他的数据处理流程:
蓝色部分的处理由DRP硬件加速实现,其中Simple ISP库将CMOS传感器的Bayer格式数据转换为灰阶数据,并统计一帧图像中三个预设区域的平均亮度用于调整自动曝光参数。
第二个DRP库实现图像的缩放处理,将1280x720分辨率的灰阶图像压缩成640x360大小的图像,它将大大提高人脸的检测速度。
图中绿色部分是由Cortex A9处理器运行的轻量级口罩及人脸检测模型,用于标定出当前帧是否有人脸,是否带有口罩。

图像
RZ/A2M DRP data processing flow

在此示例中我们将不依赖外部RAM,只使用RZ/A2M的4MB片上高速RAM。

步骤1

由于人脸检测只需要使用灰阶图像,我们需要将CMOS传感器的Bayer格式图像转换成灰度图,此时我们载入一个simple_isp_2_tiles的DRP库,这个DRP库需要具有以下特性:

  • 占用2个Tile的DRP硬件资源
  • 实现Bayer转灰阶
  • 对3个独立的区域中所有像素的亮度值进行累加
  • 支持多Tile并行处理
图像
Convert Bayer format image into a grayscale image

由于这个库具有多Tile并行化(segmented)的处理特性,我们可以把它载入到3组DRP 的tile中。其中Tile0和1的simple_isp_2_tiles库处理顶部1/3的图像,Tile2和3的simple_isp_2_tiles库处理中间1/3的图像,Tile4和5的simple_isp_2_tiles库处理底部1/3的图像。且这三部分图像是同时并行化处理的,这让处理速度又增加了3倍。

图像
把它载入到3组DRP 的tile中

由于DRP库提供了非常便捷的API接口,实现以上功能只需要简单的编程操作即可实现。

图像
DRP库简单的编程操作

请根据DRP库的应用文档中关于 Number of tiles和Segmented Processing属性来决定如何加载DRP库

图像
DRP number of tiles: 1; segmented processing: supported
  • Number of tiles: 表示DRP库需要占用几个硬件Tile
  • Segmented processing:表示DRP任务十分可以拆分到多个tile中并行执行

DRP库在Tile中的摆放方式共有11种,可根据DRP的Number of tiles 和 Segmented属性灵活选择使用哪种加载方式,举例如下:

图像
可根据DRP的Number of tiles 和 Segmented属性灵活选择使用哪种加载方式

步骤2

在得到一帧灰阶图像后,我们载入一个resize_bilinear_fixed的DRP库将这一帧图像进行缩放。这个DRP库具有以下特性:

  • 输入8bpp灰阶图像
  • 支持 ⅛ ¼ ½ 1x 2x 4x 8x 16x 固定缩放比例
  • 水平和垂直缩放比例单独控制
  • 输入宽度范围128~1280,输入高度范围8~960
  • 占用4 tiles硬件资源,不支持segmented

经过步骤2的处理,我们将灰阶图像从Video RAM1读入,宽和高均缩小为原来的½,并将图像写入到Video RAM2,用于下一步的人脸检测。

图像
将灰阶图像从Video RAM1读入,宽和高均缩小为原来的½,并将图像写入到Video RAM2,用于下一步的人脸检测

这两步的执行时间约为4.6ms和8.2ms,采用并行化处理和小于1ms的DRP库加载速度极大优化了人脸识别之前图像预处理的执行速度。

图像
这两步的执行时间约为4.6ms和8.2ms

步骤3

我们移植了一个轻量级的开源人脸识别算法https://github.com/nenadmarkus/pico

在此基础上添加了口罩人脸的数据集,并对新数据集进行了训练,经过测试其识别速度和识别精度均比较理想。

首先需要准备数据集,可以直接通过我们示例包中的数据集训练或从网络下载.

图像
Download data set from network

此数据集包含7092张人脸图片及4283张口罩人脸图片,并对图片中的人脸关键特征进行了标定。

图像
The key features of the face in the pictures are calibrated
图像
人脸校准参数

AI模型并非普遍采用的神经元网络模型,而是使用了决策树模型,其具有执行速度快的特点,而且其模型大小只有几十KB到2百多KB,

以下是AI领域比较常用的算法:

图像
AI领域比较常用的算法

决策树是一种非参数化的监督学习模型,它能够让你跟随树状的决策分支结果一步一步从根节点到达顶端叶节点,从而根据顶端叶节点的结果来预测目标值,常用于目标分类(classification)和回归(regression)

图像
Decision tree

图片来源:机器之心《从基础概念到数学公式,这是一份520页的机器学习笔记》

在人脸检测过程中,我们使用一个滑动窗口一步一步的扫描步骤2生成的图像,先使用最小滑动窗口,然后逐步增大窗口的大小。使用决策树模型检测每一个滑动窗口内是否存在人脸。

图像
人脸检测过程中的滑动窗口

如下是一些关键参数的配置,我们可以通过参数调整在检测精度和性能之间进行平衡。

图像
人脸检测关键参数的配置

以下为1280x720分辨率输入,分别针对画面中1张人脸,3张人脸和7张人脸进行检测,在口罩人脸模式下可实现约15fps以上的检测速度。

图像
1280x720分辨率输入,分别针对画面中1张人脸,3张人脸和7张人脸进行检测

如下视频是针对快速切换的图像进行人脸检测的测试结果,可以看到RZ/A2M在经过了DRP加速及和运行轻量级高效AI算法后,能够实时捕获到图像中的人脸。