使用素描图像识别人脸
说明
论文《Face Photo Recognition Using Sketch》(Xiaoou Tand and Xiaogang Wang)中提出了一种算法,实现人脸照片与素描图像之间的识别。测试数据集:(CUHK Face Sketch Database (CUFS))。依照此算法,实现的代码见github上corfox/FPRUS or csdn code or git oschina。
算法步骤
记
{Q1,Q2,…,QM} 是训练图像集,计算均值,其中Qu=1M∑i=1MQi M 是训练图像集中的图像数目。记训练集的素描图像(sketch)为{S1,S2,…,SM} 。将训练图像集中的每张图像减去均值
Pi=Qi−Qu ,得到去中心化的训练集{P1,P2,…,PM} 。将每张图像矩阵拉伸为一个列向量(或行向量)。假设每张图像都有
N 个元素,则得到N×M 的矩阵P=[P→1,P→2,…,P→M] 。得到训练集的协方差矩阵
W=PPT ,计算其特征向量。然而,由于一般图像的像素数目N 大于训练集的图像数M ,W 的秩数仅为M−1 (训练集图像中的图像有一定的相关性)。所以,计算PTP 的特征向量更为简便。推理如下:
(PTP)Vp=VpΛpP(PTP)Vp=PVpΛp(PPT)PVp=PVpΛpWPVp=PVpΛp
其中,Vp 是特征向量组成的矩阵;Λp 是特征值组成的对角矩阵。那么,W 的特征向量便是PVp ,特征值是Λp 。由步骤4,可以计算得到
W 的标准正交特征矩阵(orthonormal eigenvector matrix)为Ep=PVpΛ12p (N 行M 列)。对于一张新的人脸相片(face photo)
Qk ,去中心化得到P→k 。然后,计算其在特征空间上的投影系数b→p=ETpP→k ,将其作为用于分类的特征矢量。再用
b→p 反过来重构Qk 的重构图像P→r=Epb→p 。由Ep=PVpΛ12 ,得到重构系数如下:cp=VpΛ12pb→p=[cp1,cp2,…,cpM]
于是,重构图像可以表示为:P→r=Pcp=∑i=1McpiP→i 由步骤7,知可以通过训练集的线性组合来表示重构的图像,系数
cp 描述了每张训练图像的贡献权重。类比,描述其重构图像为S→r=∑i=1McpiS→i 通过以上步骤,便将不同模态(modality)的相片(Photo)与素描图(sketch)转换为同一模态下,即同为素描或同为相片来进行识别。理论上说,一般常用的识别算法都可以用来对此进行识别。
测试结果
下图是重构的效果图
识别率
下面是测试的识别率结果
原论文中的识别率如下,差别还是挺大的。
参考资料
- 《Face Photo Recognition Using Sketch》, Xiaoou Tang and Xiaogang Wang, 2002, ICIP.