深度学习人脸识别实验---VGG模型

Posted Stay Hungry,Stay Foolish

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深度学习人脸识别实验---VGG模型相关的知识,希望对你有一定的参考价值。

特别说明:本次实验步骤大部分来源于http://blog.csdn.net/wjmishuai/article/details/50658670

1、caffe环境配置

  主要参考:《深度学习 21天实战Caffe》

2、VGG人脸识别模型资料(提供论文和以及训练完的人脸模型)

  http://www.robots.ox.ac.uk/~vgg/software/vgg_face/

3、LMDB数据集的获取

  • 数据集划分
    #保存图片的路径    
    PATH=/media/img  
    echo "start..."  
    #遍历文件夹  
    for name in $PATH/webface_img/*;do  
            var=0  
    #遍历文件夹中的图片  
            for file_name in $name/*;do    
                var=$(($var+1));    
                str=$file_name    
                #保存图片路径  
                str=${str#*img}    
                #保存图片lable    
                lable=${str#*/}    
                lable=${lable%%/*}    
                if [ "$var" = "1" ] || [ "$var" = "3" ] || [ "$var" = "5" ]; then    
                #验证集    
                echo $str" "$lable>>/home/gk/val.txt    
                else    
                #测试集    
                echo $str" "$lable>>/home/gk/train.txt    
                fi    
    done    
    done    
    echo "Done."  

     

      
  • 转换为LMDB格式
    #保存生成的lmdb的目录    
    EXAMPLE=/media/gk/img
        
    #train.txt和val.txt所在的目录  
    DATA=/home/gk  
        
    #转换图片的工具所在的目录    
    TOOLS=/home/gk/caffe-master/build/tools    
        
    #图片所在的目录  
    TRAIN_DATA_ROOT=/media/gk/img/webface_img  
    VAL_DATA_ROOT=/media/gk/img/webface_img  
        
    # 设置 RESIZE=true 可以把图片resize成想要的尺寸。  
    RESIZE=true  
    if $RESIZE; then  
      RESIZE_HEIGHT=227  
      RESIZE_WIDTH=227  
    else  
      RESIZE_HEIGHT=0  
      RESIZE_WIDTH=0  
    fi  
    
    echo "Creating train lmdb..."  
      
    GLOG_logtostderr=1 $TOOLS/convert_imageset \  
        --resize_height=$RESIZE_HEIGHT \  
        --resize_width=$RESIZE_WIDTH \  
        --shuffle \  
        $TRAIN_DATA_ROOT \  
        $DATA/train.txt \  
        $EXAMPLE/train_lmdb  
      
      
    echo "Creating val lmdb..."  
      
      
    GLOG_logtostderr=1 $TOOLS/convert_imageset \  
        --resize_height=$RESIZE_HEIGHT \  
        --resize_width=$RESIZE_WIDTH \  
        --shuffle \  
        $VAL_DATA_ROOT \  
        $DATA/val.txt \  
        $EXAMPLE/val_lmdb  
      
    echo "Done."  

4、mean文件,计算图像均值

#lmdb格式的文件所在的路径  
EXAMPLE=/media/gk/img/lmdb_webface  
#均值文件保存的路径  
DATA=/media/gk/44CA719BCA718A46    
#转换图片的工具所在的目录   
TOOLS=/home/gk/caffe-master/build/tools    
    
$TOOLS/compute_image_mean $EXAMPLE/train_lmdb \    
  $DATA/mean.binaryproto    
    
echo "Done."    

 

5、模型训练

./build/tools/caffe train --solver=models/bvlc_reference_caffenet/solver.prototxt
  • 主要是训练模型参数文件(slover.prototxt)和网络模型结构配置文件(tarin.prototxt)的编写。

6、模型的测试

  • 参考:

  http://nbviewer.jupyter.org/github/BVLC/caffe/tree/master/examples/

  http://blog.csdn.net/wjmishuai/article/details/50854168

  • 主要代码
    //模型加载
    net=caffe.Classifier(/home/gk/caffe-master/examples/VGG_net/deploy.prototxt,  
        /home/gk/caffe-master/examples/VGG_net/VGG_face.caffemodel) 
    
    def compar_pic(path1,path2):  
        global net  
        #加载验证图片  
        X=read_image(path1)  
        test_num=np.shape(X)[0]  
        #X  作为 模型的输入  
        out = net.forward_all(data = X)  
        #fc7是模型的输出,也就是特征值  
        feature1 = np.float64(out[fc7])  
        feature1=np.reshape(feature1,(test_num,4096))  
        #加载注册图片  
        X=read_image(path2)  
        #X  作为 模型的输入  
        out = net.forward_all(data=X)  
        #fc7是模型的输出,也就是特征值  
        feature2 = np.float64(out[fc7])  
        feature2=np.reshape(feature2,(test_num,4096))  
        #求两个特征向量的cos值,并作为是否相似的依据  
        predicts=pw.cosine_similarity(feature1,feature2)  
        return  predicts  
      
    def read_image(filelist):  
      
        averageImg = [129.1863,104.7624,93.5940]  
        X=np.empty((1,3,224,224))  
        word=filelist.split(\n)  
        filename=word[0]  
        im1=skimage.io.imread(filename,as_grey=False)  
        #归一化  
        image =skimage.transform.resize(im1,(224, 224))*255  
        X[0,0,:,:]=image[:,:,0]-averageImg[0]  
        X[0,1,:,:]=image[:,:,1]-averageImg[1]  
        X[0,2,:,:]=image[:,:,2]-averageImg[2]  
        return

7、模型的微调

  参考:http://blog.csdn.net/hlx371240/article/details/51388022  

 

以上是关于深度学习人脸识别实验---VGG模型的主要内容,如果未能解决你的问题,请参考以下文章

深度学习100例 | 第2例:人脸表情识别 - PyTorch实现

深度学习100例 | 第2例:人脸表情识别 - PyTorch实现

基于CNN卷积神经网络的TensorFlow+Keras深度学习的人脸识别

VGG卷积神经网络模型解析

VGG卷积神经网络模型解析

深度学习100例-卷积神经网络(VGG-19)识别灵笼中的人物 | 第7天