当前位置: 首页 > 编程日记 > 正文

Caffe中计算图像均值的实现(cifar10)

在深度学习中,在进行test时经常会减去train数据集的图像均值,这样做的好处是:属于数据预处理中的数据归一化,降低数据间相似性,可以将数值调整到一个合理的范围。

以下code是用于计算cifar10中训练集的图像均值:

#include "funset.hpp"
#include <string>
#include <vector>
#include <map>
#include "common.hpp"int campute_image_mean(const std::string& db_type, const std::string& db_path, std::vector<float>& image_mean)
{
#ifdef CPU_ONLYcaffe::Caffe::set_mode(caffe::Caffe::CPU);
#elsecaffe::Caffe::set_mode(caffe::Caffe::GPU);
#endif// reference: caffe/tools/compute_image_mean.cppboost::scoped_ptr<caffe::db::DB> db(caffe::db::GetDB(db_type));db->Open(db_path, caffe::db::READ);boost::scoped_ptr<caffe::db::Cursor> cursor(db->NewCursor());caffe::BlobProto sum_blob;int count = 0;// load first datumcaffe::Datum datum;datum.ParseFromString(cursor->value());caffe::DecodeDatumNative(&datum);sum_blob.set_num(1);sum_blob.set_channels(datum.channels());sum_blob.set_height(datum.height());sum_blob.set_width(datum.width());const int data_size = datum.channels() * datum.height() * datum.width();int size_in_datum = std::max<int>(datum.data().size(), datum.float_data_size());for (int i = 0; i < size_in_datum; ++i) {sum_blob.add_data(0.);}// Starting Iterationwhile (cursor->valid()) {caffe::Datum datum2;datum2.ParseFromString(cursor->value());caffe::DecodeDatumNative(&datum2);const std::string& data = datum2.data();size_in_datum = std::max<int>(datum2.data().size(), datum2.float_data_size());if (size_in_datum != data_size) {fprintf(stderr, "incorrect data field size: size_in_datum: %d, data_size: %d\n",size_in_datum, data_size);return -1;}if (data.size() != 0) {if (data.size() != size_in_datum) {fprintf(stderr, "data.size() != size_in_datum: data.size: %d, size_in_datum: %d\n",data.size(), size_in_datum);return -1;}for (int i = 0; i < size_in_datum; ++i) {sum_blob.set_data(i, sum_blob.data(i) + (uint8_t)data[i]);}} else {if (datum2.float_data_size() != size_in_datum) {fprintf(stderr, "datum.float_data_size() != size_in_datum: datum.float_data_size: %d, size_in_datum: %d",datum2.float_data_size(), size_in_datum);return -1;}for (int i = 0; i < size_in_datum; ++i) {sum_blob.set_data(i, sum_blob.data(i) + static_cast<float>(datum2.float_data(i)));}}++count;if (count % 10000 == 0) {fprintf(stderr, "Processed: %d files\n", count);}cursor->Next();}if (count % 10000 != 0) {fprintf(stderr, "Processed: %d files\n", count);}for (int i = 0; i < sum_blob.data_size(); ++i) {sum_blob.set_data(i, sum_blob.data(i) / count);}const int channels = sum_blob.channels();const int dim = sum_blob.height() * sum_blob.width();image_mean.resize(channels, 0.0);fprintf(stderr, "Number of channels: %d", channels);for (int c = 0; c < channels; ++c) {for (int i = 0; i < dim; ++i) {image_mean[c] += sum_blob.data(dim * c + i);}image_mean[c] /= dim;}fprintf(stderr, "\n");return 0;
}int cifar10_compute_image_mean()
{const std::string db_type{ "lmdb" };const std::string db_path{ "E:/GitCode/Caffe_Test/test_data/cifar10/cifar10_train_lmdb" };std::vector<float> image_mean;if (campute_image_mean(db_type, db_path, image_mean) != 0) {fprintf(stderr, "compute image mean fail\n");return -1;}fprintf(stderr, "image mean:");for (const auto& value : image_mean) {fprintf(stderr, "  %f  ", value);}fprintf(stderr, "\n");return 0;
}
执行结果如下:

GitHub:https://github.com/fengbingchun/Caffe_Test

相关文章:

阿里云弹性公网IP(EIP)的使用限制

阿里云弹性公网IP&#xff08;EIP&#xff09;是一种可以独立购买和持有的公网IP地址资源&#xff0c;弹性公网IP具有独立购买持有、弹性绑定和配置灵活等优势&#xff0c;但实际使用中弹性公网IP也是有很多限制的&#xff0c;阿里云惠网分享弹性公网IP&#xff08;EIP&#xf…

400名微软员工主动曝光薪资:28万元到228万元不等!

作者 | Dave Gershgorn译者 | 弯月&#xff0c;编辑 | 郭芮来源 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;【导读】近日&#xff0c;近400名微软员工分享了他们的薪酬&#xff08;从4万美元到32万美元不等&#xff0c;约为28万人民币到228万人民币&#xff09;&am…

Extjs:添加查看全部按钮

var grid new Ext.grid.GridPanel({renderTo:tsllb,title:产品成本列表,selModel:csm,height:350,columns:[csm,{header: "编码", dataIndex: "bm", sortable: true,hidden:true},{header: "产品", dataIndex: "cp", sortable: true},…

练手扎实基本功必备:非结构文本特征提取方法

作者 | Dipanjan (DJ) Sarkar编译 | ronghuaiyang来源 | AI公园&#xff08;ID:AI_Paradise&#xff09;【导读】本文介绍了一些传统但是被验证是非常有用的&#xff0c;现在都还在用的策略&#xff0c;用来对非结构化的文本数据提取特征。介绍在本文中&#xff0c;我们将研究如…

范数介绍及C++/OpenCV/Eigen的三种实现

有时我们需要衡量一个向量的大小。在机器学习中&#xff0c;我们经常使用被称为范数(norm)的函数衡量向量大小。形式上&#xff0c;Lp范数定义如下&#xff1a;范数(包括Lp范数)是将向量映射到非负值的函数。直观上来说&#xff0c;向量x的范数衡量从原点到点x的距离。更严格地…

js添加网页水印和three.js场景中加水印

我们在日常网页开发的时候&#xff0c;可能想给自己的网页或者canvas里面添加水印&#xff0c;增添个人标记&#xff0c;我这里分为普通静态html页面和threejs中3d场景里面添加水印功能。一 静态html页面添加水印你只需要在你的页面添加一个图片遮罩&#xff0c;通过绝对定位和…

JAVA学习笔记(6)

关于多线程的优先级&#xff0c;这个程序里面&#xff0c;现在计算机比较好&#xff0c;int存储不下了&#xff0c;我跑了好几次都是负分&#xff0c;特把int改成long。但是之后跑出来的结果&#xff0c;两个数字都差不多&#xff0c;不知道是什么问题&#xff1f;等待答案中。…

C++/C++11中std::deque的使用

std::deque是双端队列&#xff0c;可以高效的在头尾两端插入和删除元素&#xff0c;在std::deque两端插入和删除并不会使其它元素的指针或引用失效。在接口上和std::vector相似。与sdk::vector相反&#xff0c;std::deque中的元素并非连续存储&#xff1a;典型的实现是使用一个…

贾扬清:我对人工智能方向的一点浅见

阿里妹导读&#xff1a;作为 AI 大神&#xff0c;贾扬清让人印象深刻的可能是他写的AI框架Caffe &#xff0c;那已经是六年前的事了。经过多年的沉淀&#xff0c;成为“阿里新人”的他&#xff0c;对人工智能又有何看法&#xff1f;最近&#xff0c;贾扬清在阿里内部分享了他的…

吴甘沙:天外飞“厕”、红绿灯消失,未来无人驾驶将被重新定义

整理 | 夕颜出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;2019 年9 月 5 日至 7 日&#xff0c;由新一代人工智能产业技术创新战略联盟&#xff08;AITISA&#xff09;指导&#xff0c;鹏城实验室、北京智源人工智能研究院支持&#xff0c;专业中文 IT 技术社区 CS…

Linux内核--网络栈实现分析(二)--数据包的传递过程--转

转载地址http://blog.csdn.net/yming0221/article/details/7492423 作者&#xff1a;闫明 本文分析基于Linux Kernel 1.2.13 注&#xff1a;标题中的”&#xff08;上&#xff09;“&#xff0c;”&#xff08;下&#xff09;“表示分析过程基于数据包的传递方向&#xff1a;”…

C++/C++11中std::stack的使用

栈stack 是一个容器适配器(container adaptor)类型&#xff0c;被特别设计用来运行于LIFO(Last-in First-out&#xff0c;后进先出)场景&#xff0c;在该场景中&#xff0c;只能从容器末尾添加和删除元素&#xff0c;其定义在stack头文件中。stack默认基于std::deque实现&#…

团队前四次作业——个人总结

团队前四次作业——个人总结 描述 团队名称待就业六人组相关团队第四次作业答辩——反思与总结做了哪些事&#xff1f;工作量、完成度 作业负责工作量完成度团队队员展示创意合照后期1h95%项目选题报告编写创新和收益部分2h85%项目原型设计原型设计6h95%需求规格说明书功能需求…

吴甘沙:天外飞“厕”、红绿灯消失,未来无人驾驶将被重新定义 | AI ProCon 2019

2019 年9 月 5 日至 7 日&#xff0c;由新一代人工智能产业技术创新战略联盟&#xff08;AITISA&#xff09;指导&#xff0c;鹏城实验室、北京智源人工智能研究院支持&#xff0c;专业中文 IT 技术社区 CSDN 主办的 2019 中国 AI 开发者大会&#xff08;AI ProCon 2019&#x…

MySQL基础day03_数据的导入、导出-MySQL 5.6

MySQL基础day03_数据的导入、导出-MySQL 5.6注&#xff1a;把数据按照一定格式存放到文件里才能进行数据的导入。1&#xff0c;数据导入的条件把文件里的内容保存到数据的表里&#xff1b;把数据按照一定格式存放文件里&#xff1b;注&#xff1a;默认情况下&#xff0c;只有管…

“含光”剑出,谁与争锋?阿里重磅发布首颗AI芯片含光800

作者 | 夕颜、胡巍巍 编辑 | 唐小引 出品 | AI 科技大本营&#xff08;ID:rgznai100&#xff09; 9 月末的杭州气温适宜&#xff0c;宜出游&#xff0c;宜在湖边餐厅浅酌一杯清茶消闲。但在钱塘江水支流河畔的云栖小镇&#xff0c;却完全一副与闲适氛围不相称的热闹景象。 …

c++面试题中经常被面试官面试的小问题总结(一)(本篇偏向基础知识)

原文作者&#xff1a;aircraft 原文链接&#xff1a;https://www.cnblogs.com/DOMLX/p/10711810.html 1.类中的函数定义后加了一个const代表什么&#xff1f; 代表它将具备以下三个性质&#xff1a;1.const对象只能调用const成员函数。2.const对象的值不能被修改&#xff0c;在…

矩阵特征分解介绍及雅克比(Jacobi)方法实现特征值和特征向量的求解(C++/OpenCV/Eigen)

对角矩阵(diagonal matrix)&#xff1a;只在主对角线上含有非零元素&#xff0c;其它位置都是零&#xff0c;对角线上的元素可以为0或其它值。形式上&#xff0c;矩阵D是对角矩阵&#xff0c;当且仅当对于所有的i≠j, Di,j 0. 单位矩阵就是对角矩阵&#xff0c;对角元素全部是1…

Entity Framework CodeFirst数据迁移

原文:Entity Framework CodeFirst数据迁移前言 紧接着前面一篇博文Entity Framework CodeFirst尝试。 我们知道无论是“Database First”还是“Model First”当模型发生改变了都可以通过Visual Studio设计视图进行更新&#xff0c;那么对于Code First如何更新已有的模型呢&…

限时早鸟票 | 2019 中国大数据技术大会(BDTC)超豪华盛宴抢先看!

2019 年12月5-7 日&#xff0c;由中国计算机学会主办&#xff0c;CCF 大数据专家委员会承办&#xff0c;CSDN、中科天玑数据科技股份有限公司协办的 2019 中国大数据技术大会&#xff0c;将于北京长城饭店隆重举行。届时&#xff0c;超过百位技术专家及行业领袖将齐聚于此&…

Google AI 系统 DeepMind无法通过 高中数学

Google 旗下 DeepMind 团队让 AI 系统接受一项高中程度的数学测试&#xff0c;结果在 40 道题目中只答对了 14 题&#xff0c;甚至连「1111111」也算错了。说来难以置信&#xff0c;Google AI 系统能打败人类世界棋王&#xff0c;却无法通过高中程度的数学考试。上周&#xff0…

C++11中std::tuple的使用

std::tuple是类似pair的模板。每个pair的成员类型都不相同&#xff0c;但每个pair都恰好有两个成员。不同std::tuple类型的成员类型也不相同&#xff0c;但一个std::tuple可以有任意数量的成员。每个确定的std::tuple类型的成员数目是固定的&#xff0c;但一个std::tuple类型的…

PHP Countable接口

实现该接口可以使用count()方法来获取集合的总数转载于:https://www.cnblogs.com/xiaodo0/p/3611307.html

矩阵奇异值分解简介及C++/OpenCV/Eigen的三种实现

奇异值分解(singular value decomposition, SVD)&#xff1a;将矩阵分解为奇异向量(singular vector)和奇异值(singular value)。通过奇异值分解&#xff0c;我们会得到一些与特征分解相同类型的信息。然而&#xff0c;奇异值分解有更广泛的应用。每个实数矩阵都有一个奇异值分…

经典!工业界深度推荐系统与CTR预估必读的论文汇总

&#xff08;图片付费下载自视觉中国&#xff09;来源 | 深度传送门&#xff08;ID: gh_5faae7b50fc5&#xff09;导读&#xff1a;本文是“深度推荐系统”专栏的第十一篇文章&#xff0c;这个系列将介绍在深度学习的强力驱动下&#xff0c;给推荐系统工业界所带来的最前沿的变…

docker上传自己的镜像

https://blog.csdn.net/boonya/article/details/74906927 需要注意的就是命名规范 docker push 注册用户名/镜像名 tag命令修改为规范的镜像&#xff1a; docker tag boonya/tomcat-allow-remote boonyadocker/tomcat-allow-remote转载于:https://www.cnblogs.com/MC-Curry/p/1…

多个class相同的input标签 获取当前值!方法!

2019独角兽企业重金招聘Python工程师标准>>> var a $(this).prev( ".你的class" ).val(); 转载于:https://my.oschina.net/u/1169079/blog/210082

C++11中std::forward_list单向链表的使用

std::forward_list是在C11中引入的单向链表或叫正向列表。forward_list具有插入、删除表项速度快、消耗内存空间少的特点&#xff0c;但只能向前遍历。与其它序列容器(array、vector、deque)相比&#xff0c;forward_list在容器内任意位置的成员的插入、提取(extracting)、移动…

即学即用的30段Python实用代码

&#xff08;图片付费下载自视觉中国&#xff09;原标题 | 30 Helpful Python Snippets That You Can Learn in 30 Seconds or Less作 者 | Fatos Morina翻 译 | Pita & AI开发者Python是目前最流行的语言之一&#xff0c;它在数据科学、机器学习、web开发、脚本编写、自…

如何配置IntelliJ IDEA发布JavaEE项目?

一、以war的形式运行项目 步骤1 新建或者导入项目后&#xff0c;选择File菜单-》Project Structure...&#xff0c;如下图&#xff1a; 步骤2 配置项目类型&#xff0c;名字可以自定义&#xff1a; 说明&#xff1a;这里的Artifact如果没有配置好的话&#xff0c;配置Tomcat时没…