腾讯开源ncnn:自己的模型运行结果与caffe的结果不一样
来源:互联网 发布:分水岭算法的原理 编辑:程序博客网 时间:2024/05/22 00:13
本博记录为卤煮使用时的记录,如有疏漏,请指正。
卤煮:非文艺小燕儿
本博地址: 腾讯开源ncnn:自己的模型运行结果与caffe的结果不一样
感谢开源共享的各位大牛们,让我们能够站在巨人的肩膀上前行。自己之前用caffe和tinyDNN框架跑得模型,这次用腾讯开源的ncnn的跑了一下,最后一层的输出结果却很不一样,大概是0.x和几十的差距。
纠结半天发现是输出图像归一化的问题。
ncnn给的示例,图像做了去均值,所用的均值是
const float mean_vals[3] = { 104.f, 117.f, 123.f };
用下面这句实现了去均值操作
in.substract_mean_normalize(mean_vals, 0);
以下操作要根据你自己模型的图像预处理策略进行对应,下面的处理方法只是对应了我自己的。数据预处理到-1到1之间。
而对于我的模型来说,应该使用的均值文件为:
const float mean_vals[3] = { 127.5f, 127.5f, 127.5f };
同时还要把数据归一化到-1~1之间。
目前还没有详细看ncnn的代码,可能也支持归一化到-1到1之间。
目前先自己在他的in.substract_mean_normalize(mean_vals, 0);中先针对缩放修改了一点儿。
减完均值后,追加了一句
*ptr = (*ptr)* 0.0078125;
效果如下:
for (; remain>0; remain--){ *ptr -= mean; *ptr = (*ptr)* 0.0078125; ptr++; }
这样运行出来的结果就对了。
总而言之,还是因为没有去好好看ncnn的代码,不明所以的去仿照示例引起的问题。
接下来好好看看,不再重蹈覆辙。
追加:
经过nihui大神指点,正途应该是这么改
const float mean_vals[3] = { 127.5f, 127.5f, 127.5f };
const float norm_vals[3] = { 0.0078125f, 0.0078125f, 0.0078125f };
in.substract_mean_normalize(mean_vals, norm_vals);
参考:
https://github.com/Tencent/ncnn/issues/50
- 腾讯开源ncnn:自己的模型运行结果与caffe的结果不一样
- 腾讯开源ncnn:示例程序运行
- C++产生随机数,每次运行得到的结果不一样
- C++产生随机数,每次运行得到的结果不一样
- crontab执行shell脚本和直接运行的结果不一样
- Leetcode 运行输出与本地结果不一样的解决方法(用例子说明)
- 腾讯开源ncnn:Ubuntu下运行示例
- ncnn安卓搭建并使用自己的模型
- Python xrange与range的区别返回的结果不一样
- SQL SERVER2005 使用<>与!= 查询结果不一样的问题
- sort 排序的结果为什么与strcmp不一样
- 程序每次运行结果不一样
- IAR Debug与Release遇到运行结果不一样
- 少写一个“;”,带来不一样的结果
- 有关kmeans训练结果不一样的问题
- oracle合并两个不一样的结果集
- 预期与实际运行结果的对比
- 提取caffe和ncnn的权重
- 正则表达式
- 原生javascript判断是否是移动端访问,跳转到手机端网址代码
- 记录将文档word2007版本转换为html格式——java代码
- Python爬虫爬取知乎用户信息+寻找潜在客户
- 字符串
- 腾讯开源ncnn:自己的模型运行结果与caffe的结果不一样
- 对象的访问定位:句柄与直接指针
- MVC引入SERVICE层 提高代码重用性 沟通CONTROL和MODEL
- HttpClient源码解析系列:第三篇:发送-接收的底层过程
- hbase cannot get log reader问题
- LeetCode-9.Palindrome Number(求回文数字)
- Tempter of the Bone
- 异常——每天看一眼,程序少错点
- React Native DatePicker使用说明