1、问题描述

dlib官方使用resnet训练人脸识别,训练了300万的数据,网络参数保存在dlib_face_recognition_resnet_model_v1.dat中。
测试中识别lfw数据时,准确率能达到99.13%,但是在识别自己的数据时,准确率有点低,想在此基础上使用自己的数据经行微调。
经过一番瞎搞,最终失败了(本人是个AI小白)。

2、原因分析

原因是训练网络和测试网络不一样,dlib_face_recognition_resnet_model_v1.dat中保存的是测试网络的序列化参数。
训练网络和测试网络的代码实现如下

template <template <int,template<typename>class,int,typename> class block, int N, template<typename>class BN, typename SUBNET>
using residual = add_prev1<block<N,BN,1,tag1<SUBNET>>>;template <template <int,template<typename>class,int,typename> class block, int N, template<typename>class BN, typename SUBNET>
using residual_down = add_prev2<avg_pool<2,2,2,2,skip1<tag2<block<N,BN,2,tag1<SUBNET>>>>>>;template <int N, template <typename> class BN, int stride, typename SUBNET>
using block  = BN<con<N,3,3,1,1,relu<BN<con<N,3,3,stride,stride,SUBNET>>>>>;template <int N, typename SUBNET> using res       = relu<residual<block,N,bn_con,SUBNET>>;
template <int N, typename SUBNET> using ares      = relu<residual<block,N,affine,SUBNET>>;
template <int N, typename SUBNET> using res_down  = relu<residual_down<block,N,bn_con,SUBNET>>;
template <int N, typename SUBNET> using ares_down = relu<residual_down<block,N,affine,SUBNET>>;// ----------------------------------------------------------------------------------------template <typename SUBNET> using level0 = res_down<256,SUBNET>;
template <typename SUBNET> using level1 = res<256,res<256,res_down<256,SUBNET>>>;
template <typename SUBNET> using level2 = res<128,res<128,res_down<128,SUBNET>>>;
template <typename SUBNET> using level3 = res<64,res<64,res<64,res_down<64,SUBNET>>>>;
template <typename SUBNET> using level4 = res<32,res<32,res<32,SUBNET>>>;template <typename SUBNET> using alevel0 = ares_down<256,SUBNET>;
template <typename SUBNET> using alevel1 = ares<256,ares<256,ares_down<256,SUBNET>>>;
template <typename SUBNET> using alevel2 = ares<128,ares<128,ares_down<128,SUBNET>>>;
template <typename SUBNET> using alevel3 = ares<64,ares<64,ares<64,ares_down<64,SUBNET>>>>;
template <typename SUBNET> using alevel4 = ares<32,ares<32,ares<32,SUBNET>>>;// training network type
using net_type = loss_metric<fc_no_bias<128,avg_pool_everything<level0<level1<level2<level3<level4<max_pool<3,3,2,2,relu<bn_con<con<32,7,7,2,2,input_rgb_image>>>>>>>>>>>>;// testing network type (replaced batch normalization with fixed affine transforms)
using anet_type = loss_metric<fc_no_bias<128,avg_pool_everything<alevel0<alevel1<alevel2<alevel3<alevel4<max_pool<3,3,2,2,relu<affine<con<32,7,7,2,2,input_rgb_image>>>>>>>>>>>>;

训练网络net_type和测试网络anet_type的主要却别是,affine代替了bn_con(用固定仿射变换代替批量标准化)

如果将dlib_face_recognition_resnet_model_v1.dat并行化到net_type上运行时会报错,然后崩溃

terminate called after throwing an instance of 'dlib::serialization_error'what():  An error occurred while trying to read the first object from the file dlib_face_recognition_resnet_model_v1.dat.
ERROR: Unexpected version 'affine_' found while deserializing dlib::bn_.Aborted (core dumped)

从错误打印可以看出dlib_face_recognition_resnet_model_v1.dat中保存的是affine_,即测试网络。

在dlib官方demo:dnn_metric_learning_on_images_ex.cpp中有

anet_type testing_net = net;

说明 训练网络net_type 可以自动转换成 测试网络anet_type
原因是dlib源码中有bn_转affine_的代码

    class affine_{public:template <layer_mode bnmode>affine_(const bn_<bnmode>& item)...

将dlib_face_recognition_resnet_model_v1.dat并行化到测试网络anet_type上可以正常运行,如果能将测试网络anet_type转化成训练网络net_type,就可以实现了。
本人小白,还没有找到方法。。。

【Dlib】使用dlib_face_recognition_resnet_model_v1.dat无法实现微调fune-tuning相关推荐

  1. dlib重新训练dlib_face_recognition_resnet_model_v1.dat

    dlib重新训练dlib_face_recognition_resnet_model_v1.dat 一.训练方法说明 二.windows环境训练 1.安装运行环境 2.编译与运行 三.linux环境训 ...

  2. 计算机视觉之迁移学习中的微调(fine tuning)

    现在的数据集越来越大,都是大模型的训练,参数都早已超过亿级,面对如此大的训练集,绝大部分用户的硬件配置达不到,那有没有一种方法让这些训练好的大型数据集的参数,迁移到自己的一个目标训练数据集当中呢?比如 ...

  3. caffe训练模型微调(fune tuning)

    由于从零训练自己的网络需要很大的数据集和运算时间,并且效果不敢保证,因此很多时候我们采用已经训练好的模型caffemodel,对其进行微调,从而得到我们需要的模型. 以caffe中examples自带 ...

  4. dlibdotnet 人脸相似度源代码_使用dlib中的深度残差网络(ResNet)实现实时人脸识别 - supersayajin - 博客园...

    opencv中提供的基于haar特征级联进行人脸检测的方法效果非常不好,本文使用dlib中提供的人脸检测方法(使用HOG特征或卷积神经网方法),并使用提供的深度残差网络(ResNet)实现实时人脸识别 ...

  5. 【Dlib】人脸检测、特征点检测、人脸对齐、人脸识别

    本文是利用dlib库,进行人脸检测.特征点检测.人脸对齐.所有前提是假设已经安装了dlib. 参考链接: 1.http://developer.51cto.com/art/201801/564529. ...

  6. opencv联合dlib视频人脸识别例子

    本篇文章是在上一篇文章opencv联合dlib人脸识别例子 的基础上做了一个实时视频人脸识别功能. 原理是利用opencv实时提取视频中的视频流,然后进入人脸检测步骤,步骤类似上篇文章. 本篇文章中的 ...

  7. 精通 Python OpenCV4:第三、四部分

    原文:Mastering OpenCV 4 with Python 协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自[ApacheCN 计算机视觉 译文集],采用译后编辑(MTPE)流程来尽 ...

  8. 【人工智能】人脸识别系统【实验报告与全部代码】(QDU)

    写在前面,防止有傻乎乎的同学直接全文复制出现问题. 说实话,实现的比较水,就是调用了 dlib 库的函数实现的人脸检测和人脸识别: 唯一的难点,也确实比较难,就是实现双线程控制,详见报告: ResNe ...

  9. python--合影照片中多人脸检测、分离、存储、识别综合应用

    一时对人脸识别发生了兴趣,这几天踩了不少坑,主要坑是在dlib的安装和参考网上代码时遇到或多或少代码错误.网上关于人脸检测.识别的代码很多,我采用了其中之一的方法,并综合应用,适合初学者入门学习,欢迎 ...

最新文章

  1. 第六届全国大学生智能汽车竞赛获奖名单
  2. linux之xargs详解
  3. VTK:几何对象之Quad
  4. Educational Codeforces Round 106 (Rated for Div. 2) D. The Number of Pairs 数论gcd
  5. 鸟类的视力很惊人,如何从高空中发现食物
  6. 芝麻HTTP:TensorFlow LSTM MNIST分类
  7. 全国大学生数学建模竞赛2018A题高温作业专用服装设计MATLAB程序
  8. 怎么把多个pdf文件合并成一个?
  9. AM3352 uboot中对NandFlash坏块的处理
  10. NOIP2002 产生数
  11. 绘画系统——P5.js
  12. 从淘宝 UWP 的新功能 -- 比较页面来谈谈 UWP 的窗口多开功能(转)
  13. 破解网页文字无法复制的方法
  14. 大连BI工具大连BI软件哪家好
  15. ZOJ1217 Numerically Speaking (进制转换,大整数除法,字符串处理,较难而且坑)
  16. MySQL空间函数度量换算——距离计算,度数换算成公里海里
  17. 潘爱民:Windows系统程序员的“内功”修炼
  18. DNN(全连接神经网络)
  19. JAVA· chatAt()方法
  20. 如何打开windows的服务services.msc

热门文章

  1. autoware源码安装与运行ROSBAG示例(二)
  2. c++中的public,protected,private
  3. C语言局部搜索算法(爬山法,模拟退火法,遗传算法)求解八皇后问题
  4. mysql版本不一致会导致uuid_MySQL性能优化和高可用架构建议
  5. kd-tree理论以及在PCL 中的代码的实现
  6. 【实现手机端上滑滚动加载列表】判断页面是否滚动到底部或者指定元素位置
  7. 【免费软件测试视频-0013】——Loadrunner9.0 SLA Analysis
  8. 怎样对拍、如何对拍、对拍模板
  9. 水平,垂直居中的15种方法
  10. http 权威指南 目录