深度学习在人脸识别中的应用

人脸识别是人工智能(AI)领域中,深度学习(DL)在过去十年里取得巨大成功的一个分支。最优秀的人脸识别系统能够在图像和视频中以与人类相同甚至更高的精度识别人脸。人脸识别的两个主要基础阶段是人脸验证和识别。

在本系列文章的前半部分,将:

  • 讨论现有的AI人脸检测方法,并开发一个运行预训练DNN模型的程序
  • 考虑人脸对齐,并使用人脸标志点实现一些对齐算法
  • 在Raspberry Pi设备上运行人脸检测DNN,探索其性能,并考虑可能的加速方式,以及实时检测人脸
  • 创建一个简单的人脸数据库,并用从图像或视频中提取的人脸填充它

假设熟悉DNN、Python、Keras和TensorFlow。欢迎下载这个项目的代码。

在Raspberry Pi上安装组件

将在Raspberry Pi3B设备上测试应用程序,该设备具有1GB RAM,运行32位Raspbian操作系统。首先,需要在设备上安装MTCNN库。可以按照以下步骤进行:

python $ pip install mtcnn

运行上述命令后,它产生了以下输出:

可以看到,还需要安装NumPy 1.16.5或更高版本。MTCNN库使用Keras框架,因此需要安装TensorFlow后端2.0.0或更高版本。以下是安装命令:

# get a fresh start $ sudo apt-get update $ sudo apt-get upgrade # remove old versions, if not placed in a virtual environment (let pip search for them) $ sudo pip uninstall tensorflow $ sudo pip3 uninstall tensorflow # install the dependencies (if not already onboard) $ sudo apt-get install gfortran $ sudo apt-get install libhdf5-dev libc-ares-dev libeigen3-dev $ sudo apt-get install libatlas-base-dev libopenblas-dev libblas-dev $ sudo apt-get install openmpi-bin libopenmpi-dev $ sudo apt-get install liblapack-dev cython $ sudo pip3 install keras_applications==1.0.8 --no-deps $ sudo pip3 install keras_preprocessing==1.1.0 --no-deps $ sudo pip3 install -U --user six wheel mock $ sudo -H pip3 install pybind11 $ sudo -H pip3 install h5py==2.10.0 # upgrade setuptools 40.8.0 -> 52.0.0 $ sudo -H pip3 install --upgrade setuptools # install gdown to download from Google drive $ pip install gdown # copy binairy $ sudo cp ~/.local/bin/gdown /usr/local/bin/gdown # download the wheel $ gdown https://drive.google.com/uc?id=11mujzVaFqa7R1_lB7q0kVPW22Ol51MPg # install TensorFlow $ sudo -H pip3 install tensorflow-2.2.0-cp37-cp37m-linux_armv7l.whl # and complete the installation by rebooting $ sudo reboot

按照说明,安装了最新版本的TensorFlow。

在Raspberry Pi上运行检测器

现在可以在Raspberry Pi上针对视频文件运行人脸检测器。代码与PC上的相同。只需要根据设备的设置设置适当的文件夹:

python d = MTCNN_Detector( 60, 0.95 ) vd = VideoFD(d) v_file = r" /home/pi/Desktop/PI_FR/video/5_2.mp4" save_path = r" /home/pi/Desktop/PI_FR/detect" (f_count, fps) = vd.detect(v_file, save_path, True, False ) print( " Face detections: " + str(f_count)) print( " FPS: " + str(fps))

这是在Raspberry Pi3设备上运行的实验产生的视频。

正如所见,检测器在具有低内存和CPU的边缘设备上工作。MTCNN检测器成功地在视频中找到了人脸,并且信心度是可以接受的。但是……处理速度非常低。检测限制在0.4 FPS。这意味着需要大约2.5秒来处理单个视频帧。

性能考虑

0.4 FPS对于人脸识别系统来说足够了吗?这取决于将如何以及在何处使用这个软件。如果需要识别移动非常快的人,答案可能是否定的,因为没有足够的时间来检测所有的人脸。然而,如果一个人的脸部在相机视野中至少停留五秒钟,那么很有可能会检测到脸部。在五秒钟内,可以处理两帧 - 所以对每个脸部有两次尝试。

假设系统将在“五秒钟”条件下工作,仍然需要将其转换为实时模式 - 使其处理来自实时摄像头的视频流。看看这个实时运行AI模型的方法。这个想法很简单:在单独的线程中运行AI模型,而在它处理时,跳过视频帧。这种方法非常适用于系统,因为不需要在相机捕捉到的那一刻就识别出脸部。相反,将其发送到中央处理服务器进行识别。

可以建议另一种提高处理速度的方法。MTCNN模型的速度直接取决于视频帧的大小。可以使用运动检测器来选择帧中的兴趣区域。由于运动区域比整个帧小,处理时间将减少。这里是在Raspberry Pi上实现运动检测器的一个例子。

显然,也可以更高性能的边缘设备。例如,为什么不使用Raspberry Pi 4呢?

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485