到了2021年,人们普遍认为,通过学习算法和人工智能研究,机器在很多方面都优于人类。长期以来,机器一直主导着制造业和供应链领域,甚至开始涉足更复杂的任务,比如自动驾驶,甚至撰写高难度综合类文章。但是,在面部识别方面,机器的发展真的已经超过人类大脑了吗?13年前,当我的同卵双胞胎儿子出生时,我和妻子很容易认出哪一个是Nicolas,哪一个是Alexander。
在旧金山加利福尼亚太平洋医学中心的新生儿重症监护室(NICU)陪伴了他们8周后,我们知道如何将他们的个人行为与名字相匹配。我们很早就学到了大多数同卵双胞胎父母都会掌握的东西:一个人是谁,不仅取决于他的长相,还取决于他走路、说话的方式,以及在与世界互动时的各种行为举止的差异。处理这个广泛的数据集使人类能够立即识别出我们所认识的人,包括同卵双胞胎。
随着从识别罪犯到帮助我们购物等各个方面的广泛应用,面部识别在新闻中被称为“矩阵式的银弹”(Matrix-like silver bullet),我一直在想,当数据集只呈现出非常微小的差异时,机器在辨别人脸方面能够做到什么地步?比如识别同卵双胞胎。随着儿子们一天天长大,我们详细地讨论了他们基因组成的独特性质——本质上说,他们是从同一个受精卵中克隆而来的。
对他们来说,他们是完全相同的人,从相同的蓝图中创造出来。当然,它们之间是有区别的,这些区别使得我偶尔会将他们弄混淆,而且我猜测,机器也会分不清。相同的DNA是一回事,但是基因的内在表现和所处环境的影响,在人类随着时间变化和发展中起着重要作用。举个例子,我最近购买了一部带有指纹识别器的手机,我问我的儿子们是否想做一个小实验:一个将指纹录入,然后另一个用自己的手指去解锁,这显然是行不通的。
事实证明,多种环境因素(其中只有一种是基因)驱使了子宫内的“指纹”形成,因此双胞胎通常具有不同的指纹。为了帮助回答有关“人类或机器谁更擅长识别同卵双胞胎”的问题,我决定设计一个比指纹读取器稍微复杂的实验,并邀请我的“小科学家们”(我的儿子)接受培训以提供帮助。对于这个项目,我想构建一个尽可能便宜的计算机系统,该系统能够运行执行和训练机器学习与面部识别模型所需的所有软件。
我选择树莓派(Raspberry Pi)是因为它具有极高的成本效益,其外围支持并且能够运行标准的Linux发行版以及所有编译软件所必需的工具。我现在已经拥有一些用于其他项目的Raspberry Pi,因此我测试了三个,看哪种最适合该应用程序。Pi Zero可以正常工作,但在分析视频提要的帧并编译所有必需的软件时,它耗时48小时(是的,编译该软件需要2天)。
对于任何想要运行类似环境的人,我强烈推荐Pi 4b(8GB型号),因为它具有更快的处理器,多个内核和扩展内存。这个项目还需要一个网络摄像头。我已经有一个Logitech USB网络摄像头,该摄像头运行良好,无需安装驱动程序。任何现代的Logitech或类似的网络摄像头都可以使用。设置Pi的第一步是将Raspberry Pi OS闪存到micro SD卡上并进行一些基本配置。
为此,将Raspberry Pi成像器下载并安装到工作站上。安装完成后,插入micro SD卡(通常使用适配器),启动成像仪,选择操作系统和SD卡,然后选择“写入(Write)”。对于OS(操作系统),请选择Raspberry PI OS(32位),这是Debian Linux的端口,具有设置机器学习环境所需的一切要素。Pi现在已经准备好拍照和训练面部识别模型。
面部识别过程涉及3个步骤:拍照,训练模型,然后分析实时视频。这三个任务都可以使用face-req.py Python程序执行,该程序已从上面的Github存储库中弹出。完全设置好环境后,我拍摄了3张自己的头像,3张Nicolas的头像和3张Alexander的头像,然后用这些照片训练面部识别机器学习系统(一张正面,一张向左,另一张向右)。
在执行这些测试的当天,除了当前照片外,没有对任何照片进行任何修正。训练完系统后,我们轮流站在镜头前确定机器是否可以识别。结果:测试1是我本人和Alexander,机器识别正确。结果:测试2是我和Nicolas。机器再次正确识别了。我开始思考自己最开始的猜测是错误的——也许机器会胜利。结果:测试3是我们三个人一起。然后机器故障了!显然,没有两个Nicolas。
我们发现,如果孩子们四处走动,识别会来回切换,但是机器很少能同时识别双胞胎。不科学的是,大约有5%的时间,它能同时正确识别双胞胎和我自己。结果:测试4我想看看机器学习模型对3岁时的双胞胎照片的识别效果如何——照片被举到镜头前。
我必须给这台机器一些肯定,它确实在照片中(第一次)正确地识别了Nicolas(虽然没有识别出Alexander),我把照片的方向和距离在镜头上稍微移动了一下,然后它错误地识别了Alexander,无法识别Nicolas。不过,这已经是很好的结果,毕竟从3-10岁,孩子们的脸已经发生了很多变化。结果:测试5我尝试了一张较新的彩色照片(孩子可能已经4岁),机器再次出现故障。
它错误地识别出两个Nicolas。对于最后的测试,我想看看这些照片的年龄限制在机器完全无法识别之前应该为多少。我用了一张双胞胎一岁左右的照片。机器正确地识别了我,但没有识别出双胞胎。这里的第一个结论是显而易见的。一个人花75美元就能构建一个能够运行现代面部识别和机器学习算法的功能完备的计算机系统(如果你不介意有点慢,有的甚至只需10美元)。
暂且不提更复杂的识别双胞胎的任务,这台机器在现场视频中识别非双胞胎的成功率为100%。该系统训练的每一个非双胞胎都能获得100%的识别成功率。同时,出于个人隐私方面的考虑,这确实让我踌躇不前。这项技术功能强大,非常容易使用,而且很可能部署在我们日常生活中无法预料的地方——我们需要确保这项技术不会被滥用。
第二个结论是,在我们生命的前13年中,我们的面部特征会持续发生巨大变化,这使得年轻人的面部识别变得困难。该机器能够从旧照片中识别双胞胎,即使他们还在“蹒跚学步”,也给我留下了深刻的印象。老实说,这太棒了!除了我和我的妻子,没有人可以看我们孩子的旧照片并确定谁是谁。最后,最重要的是,我观察到机器很难识别同卵双胞胎,即使是像我孩子这样有明显差异的双胞胎。
该系统识别时确实很费劲,尤其是当一对双胞胎或一个在视频帧内移动时–经常出现标识错误。从这些简单的测试中,我们得出结论:就目前而言,人类在面部识别方面比机器要好得多。这不足为奇,因为600万年来我们一直在进化和完善我们的感官。我不能告诉你为什么我能轻易地分辨出我的孩子之间的区别,我只知道这很容易。机器或许终将赶上我们,但不是现在。
我的儿子们想在Pi上内置一些其他功能,以控制门上的锁,或在他们进入卧室时打招呼,但是根据我们的结果,我们首先需要提高Pi的能力来区分他们(以免一方接触到另一方的宝藏)。为了提高系统的准确性,我想尝试一些不同的面部识别技术,比如利用Dlib支持的卷积神经网络(CNN)(尽管Raspberry Pi受其计算能力的限制),或者让Pi调用GCP、AWS或Azure中的公共服务进行面部识别。