一、模型转换

#**mxnet编译**

1.下载mxnet:git clone https://github.com/dmlc/mxnet.git --recursive
2. 编译mxnet
```
cd mxnet
make -j8
```

可以得到lib文件夹下面的:libmxnet.so ,后面只需要该链接库,然后还有头文件:c_predict_api.h 即可调用mxnet#**caffe模型转换**

 1. 打开文件夹caffe_converter
```
cd mxnet/tools/caffe_converter
protoc --python_out=./ ./caffe.proto
```
 2. 编辑convert_model.py
```
sudo vim convert_model.py
```
在文件最开始处加入caffe、mxnet的python路径:
```
import sys
sys.path.append("../../python/")
sys.path.insert(0,'/home/hjimce/tools/caffe/python')
```

 3.输入命令

 ```
 python convert_model.py net.prototxt train.caffemodel newmodel
 ```
 就可以得到mxnet网络模型.json,参数文件.params后续可直接调用。convert_mean.py对于mean均值文件的转换,也可采用faceattribute1.0进行转换,保存成opencv可读文件

#**编译主程序**
复制mxnet所需文件:```c_predict_api.h、libmxnet.so```
复制模型转换文件:.json、.params、以及均值文件mean.xml,即可进行程序预测识别

二、外部cmake链接引用

set(USE_CUDA OFF)
set(USE_CUDNN OFF)add_subdirectory("./3dparty/mxnet/")
target_link_libraries(faceattribute  ${OpenCV_LIBS} mxnet)#链接mxnet库

三、外部API代码引用

//std::cout<<"load model finish"<<std::endl;
cv::Mat faceimage=Get_face(image,facerect,scalex,scaley);
cv::imshow("mouth.jpg",faceimage);
//cv::imwrite("eye.jpg",faceimage);

cv::Mat network_input_image=Std_net_image(faceimage,orisize, orisize,m_network_input_size , m_network_input_size);
int channels = 3;
int width = m_network_input_size;
int height = m_network_input_size;
int image_size=channels*width*height;

std::vector<mx_float> input_channels = std::vector<mx_float>(image_size);
preprocess(network_input_image, m_mean, 3, input_channels.data());
//std::cout<<"process image finish"<<std::endl;

clock_t begin = clock();
MXPredSetInput(m_network, "data", input_channels.data(), image_size);
MXPredForward(m_network);
mx_uint output_index = 0;
mx_uint *shape = 0;
mx_uint shape_len;
MXPredGetOutputShape(m_network, output_index, &shape, &shape_len);
size_t size = 1;
for (mx_uint i = 0; i < shape_len; ++i) size *= shape[i];
std::vector<float> result(size);
MXPredGetOutput(m_network, output_index, &(result[0]), size);
//

//vector<float> sorted(result.begin(), result.end());
int top_n = m_labels.size();
//partial_sort(sorted.begin(), sorted.begin() + top_n, sorted.end(), greater<float >());
std::vector<std::pair<string, float>>outputs;
for (int i = 0; i < top_n; i++) {// size_t idx = distance(result.begin(), find(result.begin(), result.end(), sorted[i]));
    outputs.push_back(std::pair<string, float>(m_labels[i],result[i]));
}

四、使用Amalgamation

cd 到mxnet的Amalgamation模块,输入:

make MIN=1

即将生成文件:mxnet_predict-all.cc。不过生成后,引用的时候,我拉取到的版本存在一堆bug,出现的一些问题,通过自己修改mxnet_predict-all.cc文件后,才能用。具体一些修改如下

1、干掉文件中:

//=====[213] STAGE: src     EXPANDING: ../src/ndarray/autograd.h =====

后面的所有实现函数。

2、修改:

#define DMLC_LOG_STACK_TRACE 1

为:

#define DMLC_LOG_STACK_TRACE 0

3、修改:

inline int MXAPIHandleException(const dmlc::Error &e) {MXAPISetLastError(e.what());
  return -1;
}

为:

inline int MXAPIHandleException(const dmlc::Error &e) {//MXAPISetLastError(e.what());
  return -1;
}

深度学习(五十八)caffe移植至mxnet相关推荐

  1. 花书+吴恩达深度学习(十八)迁移学习和多任务学习

    目录 0. 前言 1. 迁移学习 2. 多任务学习 如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔~我会非常开心的~ 花书+吴恩达深度学习(十八)迁移学习和多任务学习 花书+吴恩达深度学习(十 ...

  2. DL框架:主流深度学习框架(TensorFlow/Pytorch/Caffe/Keras/CNTK/MXNet/Theano/PaddlePaddle)简介、多个方向比较、案例应用之详细攻略

    DL框架:主流深度学习框架(TensorFlow/Pytorch/Caffe/Keras/CNTK/MXNet/Theano/PaddlePaddle)简介.多个方向比较.案例应用之详细攻略 目录 深 ...

  3. 12大深度学习开源框架(caffe,tensorflow,pytorch,mxnet等)汇总详解

    这是一篇总结文,给大家来捋清楚12大深度学习开源框架的快速入门,这是有三AI的GitHub项目,欢迎大家star/fork. https://github.com/longpeng2008/yousa ...

  4. 深度学习(十八)基于R-CNN的物体检测-CVPR 2014-未完待续

    基于R-CNN的物体检测 原文地址:http://blog.csdn.net/hjimce/article/details/50187029 作者:hjimce 一.相关理论 本篇博文主要讲解2014 ...

  5. 深度学习(十八)——YOLOv2(2), 语义分割

    YOLOv2 Stronger(续) Hierarchical classification(层次式分类) ImageNet的标签参考WordNet(一种结构化概念及概念之间关系的语言数据库).例如: ...

  6. 深度学习(十八):人脸验证(face verification)和人脸识别(face recognition)

    这是一系列深度学习的介绍,本文不会涉及公式推导,主要是一些算法思想的随笔记录. 适用人群:深度学习初学者,转AI的开发人员. 编程语言:Python 参考资料:吴恩达老师的深度学习系列视频 吴恩达老师 ...

  7. 系统学习深度学习(十八)--NIN模型

    转自:http://blog.csdn.net/mounty_fsc/article/details/51746111 补充:http://blog.csdn.net/sheng_ai/article ...

  8. 深度学习部署(十八): CUDA RunTime API _wa_仿射变换的实现

    1. 仿射变换 warpAffine是一种二维仿射变换技术,可以将图像从一种形式转换为另一种形式.它是OpenCV图像处理库中的一个函数,可用于对图像进行平移.旋转.缩放和剪切等操作. 仿射变换可以通 ...

  9. 花书+吴恩达深度学习(十九)构建模型策略(训练模型顺序、偏差方差、数据集划分、数据不匹配)

    目录 0. 前言 1. 调试模型顺序 2. 偏差方差的解决方法 3. 数据集的选取划分 4. 数据不匹配问题 5. 评估指标的选取 6. 贝叶斯最佳误差 如果这篇文章对你有一点小小的帮助,请给个关注, ...

  10. OpenCV学习笔记(五十六)——InputArray和OutputArray的那些事core OpenCV学习笔记(五十七)——在同一窗口显示多幅图片 OpenCV学习笔记(五十八)——读《Mast

    OpenCV学习笔记(五十六)--InputArray和OutputArray的那些事core 看过OpenCV源代码的朋友,肯定都知道很多函数的接口都是InputArray或者OutputArray ...

最新文章

  1. Linux根文件系统的文件镜像,构建小型Linux根文件系统镜像
  2. MATLAB无穷大上的反常积分
  3. python二值化特征_OpenCV-Python系列之轮廓特征高阶
  4. OpenCV---轮廓发现
  5. Java铬钼钢车架几何_车架的几何尺寸
  6. LeetCode 刷题笔记 2. 有效的括号(Valid Parentheses)
  7. 几个文件vtp格式转stl格式
  8. 《老路用得上的商学课》51-55学习笔记
  9. 解决IE浏览器无法打开TOMCAT http://locahost:8080
  10. 百度java面试应届,秋招 百度二轮面试---血淋淋的经历写实
  11. 【Linux 系统启动优化测试工具的使用——grabserial 】
  12. npm ERR! Error: tunneling socket could not be established的解决问题
  13. Hexo界面美化_实用插件配置
  14. dash live 播放
  15. windows卸载夸克网盘没有卸载干净
  16. hdu-1225-Football Score
  17. 通过上下两册书籍夯实Python基础,这本书就是Python的必备书籍
  18. INI 文件读取专用类
  19. 投了上千简历,是Android岗位需求少?还是我的技术不行
  20. win7 电脑通过xp电脑来使用hp laserjet 5200LX打印机

热门文章

  1. 自动清理归档日志_LGWR 日志写入进程
  2. java冒泡排序_冒泡排序不会写,怎么当程序员?细说经典java算法——冒泡排序...
  3. Java 头像剪切及上传服务器JSP 笔记
  4. 用c语言设计程序设计查表温度传感器,基于18B20温度传感器+1602液晶显示器的C语言程序设计开发...
  5. 执行transact-sql语句或批处理时发生异常_DAY5-step6 Python异常处理:try, raise,except, finally...
  6. Hadoop的Python框架指南
  7. [技术博客] 微信小程序的formid获取
  8. [LeetCode] 234. Palindrome Linked List_Easy tag: Linked List
  9. VBA 打开文件对话框
  10. 精品教程--Android组件详解