前言
基于深度学习的人脸识别系统,一共用到了5个开源库:OpenCV(计算机视觉库)、Caffe(深度学习库)、Dlib(机器学习库)、libfacedetection(人脸检测库)、cudnn(gpu加速库)。
用到了一个开源的深度学习模型:VGG model。
最终的效果是很赞的,识别一张人脸的速度是0.039秒,而且最重要的是:精度高啊!!!
CPU:intel i5-4590
GPU:GTX 980
系统:Win 10
OpenCV版本:3.1(这个无所谓)
Caffe版本:Microsoft caffe (微软编译的Caffe,安装方便,在这里安利一波)
Dlib版本:19.0(也无所谓
CUDA版本:7.5
cudnn版本:4
libfacedetection:6月份之后的(这个有所谓,6月后出了64位版本的)
这个系列纯C++构成,有问题的各位朋同学可以直接在博客下留言,我们互相交流学习。
====================================================================
本篇是该系列的第四篇博客,介绍如何使用CUBLAS加速进行两个向量间余弦距离的计算。
思路
我们先来温习一下两个向量之间余弦距离的数学公式,大家自己可以回忆一下:
x,y均为同维度的向量,如果为6400维,那么我们可以将式子进行展开:
为什么这里我们要用余弦距离,而不用欧式距离?
余弦距离使用两个向量夹角的余弦值作为衡量两个个体间差异的大小。相比欧氏距离,余弦距离更加注重两个向量在方向上的差异。(摘自http://www.cnblogs.com/chaosimple/archive/2013/06/28/3160839.html)
我们使用余弦距离能够更好的反映两个人脸向量之间的相似度。
实现
这里我们可以先实现一个,不使用CUDA加速的版本。
ComputeDistance.h:
#include <vector>
#include <assert.h>
float cosine(const vector<float>& v1, const vector<