基于MAX78000的无障碍化视障系统
在本项目中,我们初步打算帮助视障人士甄别在路上的遇到的行人,判断是“熟人”还是“陌生人”,并做出相应的提示,方便他们打招呼。后期会逐步增加判断路况、识别物品、风景等功能。
标签
嵌入式系统
一个默默无闻的小程序员
更新2023-01-31
西北民族大学
683

一、项目介绍

      视觉是我们获取环境信息的基本途径,然而视障人士由于视觉功能受限,不仅在环境感知中遇到了障碍,也面临着社会交际、工作学习、生活娱乐等诸多方面的困扰。在基本社会交际中,无法准确辨识他人面容成给视障人士带来了尴尬与不便。综合运用CV技术、影像采集技术、AR技术等科技成果,打造无障碍化视障产品,成为视障人士看清世界的外部力量。

      我们设想的无障碍化视障系统可以把眼前的场景“翻译”成语言,告诉人们眼前有人、有物、有风景。不管最终技术如何呈现,技术路径是相似的,通过计算机视觉来帮助人们看清世界。而人脸恰恰也是人类情感交流最直接、最重要的载体,它是人类视觉中最为普遍的模式,所反映的视觉信息在人与人的交流和交往中有着重要的意义。 

      在本项目中,我们初步打算帮助视障人士甄别在路上的遇到的行人,判断是“熟人”还是“陌生人”,并做出相应的提示,方便他们打招呼。后期会逐步增加判断路况,识别物品、风景等功能。

二、项目设计思路

1.搭建开发环境(Windows SDK 模型部署环境 + WSL 模型训练及量化环境)

      由于该板卡仅支持在Windows中进行AI模型部署,模型训练和量化还需在Linux环境下进行。因此我们需要搭建Linux环境(双系统、虚拟机、WSL),考虑到双系统切换比较麻烦、虚拟机占用电脑资源太多等原因,最终我选择了WSL。WSL(Windows Subsystem for Linux),它是适用于 Linux 的 Windows 子系统,使用它可以省去很多麻烦,并且安装步骤也比较简单,还可以使用 Vscode 链接进行开发。对于WSL的安装我在CSDN上写了一篇博客来记录,下面把文章的链接附上。

https://blog.csdn.net/m0_52529907/article/details/127136072?spm=1001.2014.3001.5501

      准备好了WSL那么接下来就要搭建FTHR板卡的开发环境了,搭建环境的过程主要是参考官方的文档,过程较为繁琐就不在这儿一一列出了,搭建环境的过程以及遇到的一些问题我也写了几篇文章来记录。

Q1qHIAiCIIh+hrQOQRAEQRD9zP8PoxITGBpPNHYAAAAASUVORK5CYII=

2.准备数据集(YALE和YALEB)

3.搭建人脸识别模型

      搭建模型前我们首先要分析一下如何对人脸进行识别,美信的官方技术文档中有提到,对于人脸识别问题的解决分为三个主要步骤:

  • 人脸提取:检测图像中的人脸以提取仅包含一张人脸的矩形子图像。
  • 人脸对齐:确定子图像中人脸的旋转角度(3D)以通过仿射变换补偿其效果。
  • 人脸识别:使用提取和对齐的子图像识别人。

      在三个步骤中,人脸检测与对齐已经被多任务级联卷积神经网络 (MTCNN)解决了。我们主要研究的是如何识别人脸,即判断摄像头拍到的人脸是否为我们样本中的人脸。对于这个问题,我们采用基于相似度的方法来学习每个面部图像的embedding,计算其与参考图像的嵌入相似度距离,可以观察到同一个人的面部嵌入向量之间的距离小,而不同人面部嵌入向量之间的距离大。

IMG_256

      比较方便的是官方也提供了相应模型的思路,即FaceNet(如上图),它是目前最流行的基于嵌入的人脸识别的 CNN 模型之一。The Triplet Loss是其成功背后的关键。该损失函数采用三个输入样本:锚点、来自与锚点相同身份的正样本和来自不同身份的负样本。当锚点的距离接近正样本而远离负样本时,Triplet Loss函数给出较低的值。

      但是,FaceNet的模型有约750万个参数,对于MAX78000来说太大了。它还需要 1.6G 浮点运算,这使得该模型很难在许多移动或物联网设备上运行。因此,需要设计一种新的模型架构,其参数少于 450k,以适应 MAX78000。因此知识蒸馏是一种很好的解决方法。 采用知识蒸馏方法从 FaceNet 开发更小的 CNN 模型,这也是 FaceNet 用于应用程序广受赞赏的原因。

4.模型量化(量化感知训练和训练后量化)

5.模型评估及优化

6.模型转换

7.模型部署

三、搜集素材的思路

      对于人脸样本素材的搜集,我们初步打算寻找两套数据集,一套作为“熟人”进行训练,一套作为“陌生人”进行训练。

      目前,我们决定采用美国耶鲁大学计算视觉与控制中心创建的 YALE 人脸数据库与YALE 人脸数据库B。 YALE人脸数据库包含的是15位志愿者在不同光照下以及不同表情和姿态变化的165张图片,相比较ORL人脸数据库YALE数据库中的每个对象采集的样本包含更明显的光照、表情和姿态以及遮挡变化。而 YALE人脸数据库B包含了10个人的5850幅在9种姿态,64种光照条件下的图像,其中的姿态和光照变化的图像都是在严格控制的条件下采集的。

四、预训练实现过程

1.数据集预处理

1)整理与切分样本数据

      下载好 YALE 和 YALEB 数据集后,我将同一人脸数据放在一个文件夹内,总计整理出25种数据集,然后将其中 YALE 的数据集作为“熟人”来训练,YALEB 数据集作为“陌生人”来训练。在所有数据集中,我打算拿90%的数据集用于训练,10%用于测试训练结果。

IMG_256IMG_257

2)将数据集转换为.npy格式

2.准备训练

1)搭建模型前,初步搭建用于训练的迭代器

2)搭建人脸识别神经网络模型

3)逐步修改学习率,调整策略

4)开始训练

备注:原理部分与代码部分参考于微信公众号“AI研修 潜水摸大鱼”、官网的技术文档(使用MAX78000进行人脸识别)与项目“用于人脸检测的无电池远程智能摄像头”

 

 

软硬件
电路图
团队介绍
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号