ncnn 载入insightface训练好的性别年龄识别模型 - sinat_31425585的博客 - CSDN博客

标签: | 发表时间:2019-05-15 18:12 | 作者:
出处:https://blog.csdn.net

1、模型转换

从insightface项目中下载mxnet模型: https://github.com/deepinsight/insightface/tree/master/gender-age/model

2、使用ncnn的模型转换工具mxnet2ncnn进行模型转换

      ./mxnet2ncnn model-symbol.json model-0000.params ag.param ag.bin

3、使用下面代码测试:

      #include "ncnn/net.h"
#include "opencv2/core.hpp"
#include "opencv2/imgproc.hpp"
#include "opencv2/highgui.hpp"

#include <iostream>
#include <vector>

int main(int argc, char* argv[]) {
    cv::Mat img_src = cv::imread("test.png");
    if (img_src.empty()) {
        std::cout << "input image is empty." << std::endl;
        return -1;
    }
    ncnn::Net net;
    if (net.load_param("ag.param") == -1 ||
        net.load_model("ag.bin") == -1) {
        std::cout << "load ga model failed." << std::endl;
        return -1;
    }

    ncnn::Extractor ex = net.create_extractor();
    ncnn::Mat img_ncnn = ncnn::Mat::from_pixels_resize(img_src.data,
        ncnn::Mat::PIXEL_BGR, img_src.cols, img_src.rows, 112, 112);
    ex.input("data", img_ncnn);
    ncnn::Mat img_out;
    ex.extract("fc1", img_out);
    std::vector<float> out;
    for (int i = 0; i < img_out.w; ++i) {
        out.push_back(img_out[i]);
    }
    if (out[0] > out[1]) {
        std::cout << "female" << std::endl;
    } else {
        std::cout << "male" << std::endl;
    }

    int counts = 0;
    for (int i = 2; i < 102; ++i) {
        if (out[2 * i] < out[2 * i + 1]) {
            ++counts;
        }
    }
    std::cout << "age: " << counts << std::endl;
    return 0;


}

参考资料:

[1] https://github.com/Tencent/ncnn

[2] https://github.com/deepinsight/insightface

相关 [ncnn insightface 训练] 推荐:

基于insightface训练mobilefacenet的相关步骤及ncnn转换流程

- -
经多位网友的共同实验,原方案部分情况下迭代次数稍微不足,导致最终识别率略有小差异,为了相对容易获得论文的最佳结果,对训练方案进行简单更新,实际训练也可根据数据acc训练是否已稳定来判断lr下降的迭代次数:. 适当增大softmax迭代次数,4万-->12万;. 增大arcface第一级lr0.1的迭代次数,8万-->12万;.

ncnn 载入insightface训练好的性别年龄识别模型 - sinat_31425585的博客 - CSDN博客

- -
从insightface项目中下载mxnet模型:. 2、使用ncnn的模型转换工具mxnet2ncnn进行模型转换.

使用Mxnet进行图像深度学习训练工具 InsightFace - 使用篇, 如何一键刷分LFW 99.80%, MegaFace 98%. - 知乎

- -
开头先把论文和开源项目地址放一下:. InsightFace库是对我们上述论文中提出算法的开源实现. 其中不仅仅包括我们自己的算法, 也包括其他常见的人脸loss, 比如Softmax, SphereFace, AMSoftmax, CosFace, Triplet Loss等等. 除了代码实现以外, 我们还提供了打包对齐好的人脸训练数据供下载, 免除了一大堆数据准备的工作.

GitHub - Tencent/ncnn: ncnn is a high-performance neural network inference framework optimized for the mobile platform

- -
ncnn 是一个为手机端极致优化的高性能神经网络前向计算框架. ncnn 从设计之初深刻考虑手机端的部署和使用. 无第三方依赖,跨平台,手机端 cpu 的速度快于目前所有已知的开源框架. 基于 ncnn,开发者能够将深度学习算法轻松移植到手机端高效执行,开发出人工智能 APP,将 AI 带到你的指尖.

树莓派NCNN环境搭建 | 异构 AI

- -
前言镜像已经做好了,传到百度网盘中了(请大家及时保存,不定期删除. https://pan.baidu.com/s/1fhiX86L8iL8tsLbsiVa6Wg密码: e64s. SD卡要求:至少16GB,板卡型号为树莓派3B+(其他型号未知). 本系列教程采用树莓派3B+开发板:. 1.4GHz 64位4核 ARM Cortex-A53 CPU.

Ncnn使用详解(2)——Android端 - DmrfCoder的博客 - CSDN博客

- -
本片文章基于你已经完成了 这篇文章的学习,主要介绍如何将写好的c代码应用到Android项目中. 系统:Ubuntu16.04 . 软件:Android Studio. 前期准备之 ndk安装. 在正式开始前我们需要先下载安装ndk,这里介绍一种简单高效的方式,打开Android Studio,然后依次点击File->Settings->Appearance&Behavior->System Settings->Android SDK,然后在SDK Tools下找到ndk,然后选中,点击apply就可以自动下载安装了,如图: .

Windows下编译ncnn的android端的库 - 迷若烟雨的专栏 - CSDN博客

- -
ncnn是腾讯开源的一个为手机端极致优化的高性能神经网络前向计算框架,目前已在腾讯多款应用中使用. 由于开发者使用的是linux类似的环境,因此只提供了build.sh用来构建android和iOS的库,但好在提供了CMakelist.txt文件,我们可以借助CMake进行跨平台的交叉编译. 将以下代码存为build.bat文件,双击执行即可.

Leetcode 编程训练

- - 酷 壳 - CoolShell.cn
Leetcode这个网站上的题都是一些经典的公司用来面试应聘者的面试题,很多人通过刷这些题来应聘一些喜欢面试算法的公司,比如:Google、微软、Facebook、Amazon之类的这些公司,基本上是应试教育的功利主义. 我做这些题目的不是为了要去应聘这些公司,而是为了锻炼一下自己的算法和编程能力.

MTCNN人脸及特征点检测--基于树莓派3B+及ncnn架构 - yuanlulu的博客 - CSDN博客

- -
本文尝试在树莓派3B+上用ncnn框架测试MTCNN. ncnn的基本编译和使用请参考《. 在树莓派3B+上编译ncnn并用benchmark和mobilenet_yolo测试》. mtcn-ncnn项目中下载mtcnn子目录,把这个目录放在最新的ncnn源码目录下. 修改ncnn最顶层的CMakeList.txt,增加对mtcnn的支持.

在Android手机上使用腾讯的ncnn实现图像分类 - 夜雨飘零 - CSDN博客

- -
在之前笔者有介绍过《在Android设备上使用PaddleMobile实现图像分类》,使用的框架是百度开源的PaddleMobile. 在本章中,笔者将会介绍使用腾讯的开源手机深度学习框架ncnn来实现在Android手机实现图像分类,这个框架开源时间比较长,相对稳定很多. ncnn的GitHub地址:https://github.com/Tencent/ncnn.