Opencv::dnn调用caffemodel以及使用均值文件


1.简介

       现在这个时代吧,你说你不知道大数据,不知道深度学习,都不敢说自己是做软件的。。。可是深度学习这东西吧,虽然有诸如Caffe、Torch、Tensorflow等架构,但也不是一两天就能入门的,再者说这东西也吃硬件,没个金刚钻,也做不好这瓷器活。

       不过话说回来,大部分人也只是使用模型,并不会自己训练模型。深度学习架构中,资历老、“活”还好的Caffe一直被大部分人使用(貌似是大神贾杨清的博士毕设。。。)。众所周知,有个叫Caffe Model Zoo的伊甸园,里面不仅仅包括在ImageNet上训练的模型,还有许多别的模型,能满足你的大部分需求。传送门:https://github.com/BVLC/caffe/wiki/Model-Zoo

       然而新的问题来了,怎么用模型呢?caffemodel文件是啥,prototxt又是啥?正常情况下,我们肯定是用Caffe架构中已经写好的函数,或者使用PyCaffe中的python接口。可是你可以去尝试配置一下Caffe。。。(博主身边有个大牛就喜欢干这种事,所以复不复杂自己去试试吧)

       这里就需要感谢一下国外的大牛了啊,他们开发出了opencv_contrib包,里面的dnn模块可以直接使用caffemodel。(差距啊。。。)

       最后就是博主写这篇文章的最终原因了。。。为毛dnn模块里不能加载均值文件,至于啥是均值文件我会在下文中讲。


2.“爱”之初体验

       有一个ImageNet-1K的数据集,即数据集中共有1K个类别的实际生活中东东。那我们如何让机器进行分类呢?分类,说白了就是让机器告诉我这个图片里主要是啥。好,装X开始,你只需要编译好你的opencv_contrib(我使用的是3.2版本)包,然后ctrl+c,ctrl+v链接中的代码:


装X代码传送门:http://docs.opencv.org/master/d5/de7/tutorial_dnn_googlenet.html


       当机器返回给你space shuttle的时候,是不是非常激动?你的机器居然认识了航天飞机,还是在你啥事没做的情况下。。。在这里我们也不去吹嘘CNN为啥这么牛逼之类的,毕竟这不是本文的初衷。

        这个时候,有些做过Caffe模型训练的人就会问了,均值文件呢?Caffe在实际训练的过程中,图像的各个通道都会减去均值文件进行训练,会提高速度和精度。可是为什么Opencv官方的demo里压根就没提及?

        无奈,去看了dnn类是如何实现的。。。

        看完了之后,除了惊讶还是惊讶。第一个惊讶是因为,居然还能读Tensorlfow的checkpoint和Torch的model。第二个惊讶是,压根没法读取均值文件。。。它的函数就是dnn::readNetFromCaffe(const string protofile, const string model)。。。那均值文件怎么办?

3.“爱”之思考

       我个人只想到两个办法,反正均值文件不就记录了图像通道中的像素值吗,会protobuf读取不就好了?(忘了说了,我们正常使用的均值文件都是.binaryproto文件)可惜,我并不会。。。

       第二个办法就是我现在用的,借助Caffe接口,利用PyCaffe将binaryproto转成npy,至于这个代码,网上一大把。。。npy文件,直接用np.load就好。我直接把它转成图片存储了下来,注意在存储的时候,需要用np.transpose(2,0,1)转置一下,至于为啥,你用np.shape自己看看就知道了,这里我给出我的均值文件生成的图像:

       这个时候你应该知道我要做啥了吧,剩下来的就是把我们自己进行测试图片与这张图片做减法咯,首先将这张图片以及测试图片resize到网络的输入尺寸,然后进行cv::substract操作。然后将这个Mat丢入到blobFromImage中就大功告成了。

       实际测试中,我们发现均值文件对分类的结果影响不是很大,但是置信度提升还是有的。

       其实我一直想规避Caffe接口,但是我个人看源码得出的结论是无法使用均值文件的,也许是因为我水平不够吧!

4.莫名奇妙看到的

       前两天刚刚考了设计模式,今天看到了有人问Caffe使用了哪种设计模式?

       答案貌似是抽象工厂。。。

       长年写脚本语言的人,看着类啊类的真是累啊累。。。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容