如何做AI狗脸识别
🐶

如何做AI狗脸识别

Published
May 20, 2024
Author
daleewong

Intro

💡
人脸识别很多,狗脸如何做识别?
notion image
notion image

人脸识别原理

要做狗脸识别,现看一下类似的人脸识别如何做。人脸识别研究的历史比较长了,如今主要是用深度学习算法进行人脸识别。主要分为如下的步骤。

人脸检测

搭建人脸识别系统的第一步是人脸检测,也就是在图片中找到人脸的位置。在这个过程中,系统的输入是一张可能含有人脸的图片,输出是人脸位置的矩形框。并将人脸部分的图像切割出来,给下一步使用。
notion image

人脸对齐(Face Alignment)

获得包含人脸的矩形框后,第二步要做的就是人脸对齐(Face Alignment)。原始图片中人脸的姿态、位置可能较大的区别,为了之后统一处理,要把人脸“摆正”。为此,需要检测人脸中的关键点(Landmark),如眼睛的位置、鼻子的位置、嘴巴的位置、脸的轮廓点等。根据这些关键点可以使用仿射变换将人脸统一校准,以尽量消除姿势不同带来的误差,人脸对齐的过程如下图所示
notion image

人脸编码

notion image
训练一个神经网络,将输入的脸部图像生成为高维值比如(128维)。
训练的大致过程为:将同一人的两张不同照片和另一人的照片一起喂入神经网络,不断迭代训练,使同一人的两张照片输出的接近,不同人的照片输出距离远。也就是减小类内距离,增大类间距离。
距离可以是欧式距离,cos距离等等
notion image
超高维向量,可能不容易直观理解。我举个直观的例子,假如输出的是三维向量。
同一只狗的输出向量距离很小
同一只狗的输出向量距离很小
不同狗的输出向量距离非常大
不同狗的输出向量距离非常大

狗脸识别

狗脸识别比人脸识别要难。不同人种的人类面部特征区别不大,但是犬种之间区别相当大。犬的毛发,过长的鼻子,也给摄像对焦带来困难。

图片收集

专门做了拍照手机小程序收集犬面部图片。一只狗需要拍上下左右不同角度的图片。拍摄的照片会直接存储到服务器。
notion image
notion image
notion image

标注

需要标注脸,鼻子,脸部关键点。
notion image
 

训练调优

模型综合和狗脸对比,狗鼻纹对比,犬种对比。最终确定两张图是否为同一只狗。
骨干模型是resnet,loss选用arcface。
用pytorch框架,训练和调优过程和普通的cv模型训练差别不大。
notion image

工程化和部署

模型训练好了之后,就可以进行工程化部署了。
后端主要用pytorch 和 Python flask。flask是我用的最多的框架,小巧,可扩展性强,非常pyhonic。
模型推理(把输入图片给训练好的模型,模型输出结果的过程叫模型推理),一般是放到GPU中运行的。GPU具有并发计算能力。拿下图为例,假设这个模型一个batch是8,也就是说可以同时输入给模型八个图片,模型会并行计算出八个结果。
batch一般来说越大越好,但是batch的大小受限于GPU的显存大小和计算能力。
notion image

并发优化

如果在这台服务器中模型一个batch=8,那么输入给它1个图片和输入给它8个图片,所需的计算时间几乎是一样的。
举个例子,如果推理需要1s,那么8个图片输入一个等待结果,然后再输入第二个等待结果,最后需要8s完成推理。如果一次性输入8个图片,只需要1s就可以计算出结果。
所以要最大化利用GPU服务器的性能,就要一次性把尽量多的图片输入给模型。但是服务器请求是随机来的,如何解决这个问题?
  • 设置一个图片池,请求图片进来了,先缓存到图片池
  • 如果达到一个batch,且上次计算已经结束,那么立刻送去模型进行推理
  • 设置一个timeout,比如500ms,即使没有凑满一个batch,当timeout且上次计算已经结束,也把池子中的图片送去推理
  • 图片池,要设置一个大小,也要设置一个timeout,如果请求过多,后面的请求长期得不到响应,只能放弃。
notion image
notion image
可以类比于公交车,公交车从a到b用时10分钟。无论拉一个人还是满载(例子中是4人)都是10分钟。如何让公交车运营的最好?
notion image
notion image
  • 设置一个发车间隔,比如5分钟一趟,无论是否满载,都发车。因为不能让车上的乘客等的太久。
  • 如果在发车间隔之内已经满载了,那么无论是否到5分钟,都立刻发车。
notion image

测试使用

使用场景大致可以分为两种
  • 1:1比对
可以类比于支付宝刷脸支付。支付宝首次使用需要先录入我们的脸。之后支付的时候拍照,和我们之前数据库中的照片做对比,返回相似概率。如果概率高于阈值,则认为是同一人。
notion image
 
notion image
录入接口 POST/recognition/record response {   "status": 0,   "contents": {     "uid": "fdasjou23r2hdahfkdsajiop43fdsfdsaljkl"   } } ------------------------------------------------------------------- 1比1鉴别接口 POST/recognition/verify response {   "status": 0,   "contents": {     "identity": false /*不是同一只狗*/   } } 或者 {     "status": 0,           "contents": {         "identity": true,         "confidence": 0.959 /* 是同一只狗的可能性 */     } }
notion image
notion image
  • 1:N 检索
拍摄一张狗的图片,和数据库中每个录入的狗做对比。返回相似度最高的n个狗的id和信息。
类比于演唱会抓逃犯系统。演唱会摄像头拍摄人的照片,和数据库中每个逃犯的照片做对比 ,如果相似度大于阈值,则返回结果。

实际应用场景

  • 保险 宠物保险领域可以利用狗脸识别进行录入,识别,进行理赔。
  • 信息检索 宠物医院,宠物店等需要宠物录入的场景,可以快速办理业务。
  • 城市管理 城管可以用来办理狗证,录入狗的照片。在执法时,识别路上的狗是否是注册犬
  • 宠物防丢 如果在网站注册且录入了狗脸,之后发生了宠物丢失。如果其他网友路遇小狗,可以进行拍照识别检索,有助于找到走失小狗。
  • 智能家居 狗笼狗门识别,自动开门等。

结尾

还上了一次小时候最看不懂的电视节目《经济半小时》
notion image