InceptionV3迁移学习:选择不同tensor作为输入

本文主要讨论的是预训练InceptionV3如何定义不同的输入以及输出,并展示了提取不同inception模型节点的迁移学习效果


网上很容易找到关于InceptionV3模型迁移学习的文章

但是这些文章都是一致的读取JPG作为二进制输入,选择BOTTLENECK作为输出,但是我的输入是一个图片矩阵,不想那么笨的将一个个图片矩阵写成JPG图片,就对InceptionV3
的结构进行了一下探索

1.常规的加载模型的PB文件,定义各tensor

主要问题是假如我的输入是矩阵,不能直接用参考文章中的JPEG_INPUT作为输入。那么要怎么找到这个矩阵tensor的定义呢?

我的想法是,既然加载了模型到计算图中,利用tensorboard强大的功能,可以显示计算图的结构,那么从这个结构中就知道怎么定义不同格式的输入了

2.得到计算图

只需要定义与加载好InceptionV3的模型后,利用常规的tensorboard的写入图函数就能得到计算图

然后打开tensorboard就能得到图结构


然后我们仔细看stem的输入部分

可以看到假如我们直接读取JPG文件,输入到计算图中的是一个标量

DecodeJpeg/contents:0

因为我的输入就是 一 N*229*229*3的图片矩阵,我想要直接将这个矩阵输入到计算图中,仔细看图的结构

会看到Cast节点可以接受任意尺寸的矩阵输入,然后再扩展维度为 (1,?,?,3)的图片矩阵,最后统一resize为(1,229,229,3)的图片矩阵

所以也就是说这个模型时不支持batch输入的,必须要一张一张或者是一个一个图片矩阵输入才可以。

因为我的输入就是 229*229*3的矩阵,那么直接定义想要用的节点

ExpandDims:0

作为输入就可以,输入可以是任意的H,W,只需要保证输入格式是(1,H,W,3)就可以了


同理,可以修改想要的输出节点

文章后面尝试了pool_3的输入节点作为特征,并比较了效果

效果


我的face_img是一个(10000,229,229,3)的大矩阵,需要一个个的输入这个图片矩阵

大概转换一个图片矩阵为特征的话需要0.2秒的时间



实验:

inception 不同节点的迁移学习

1.只提取BottleNeck的输出,也就是图片提取的特征为(1,2048)

当前我的项目上刚好需要对一个新的数据集进行分类,我的数据集大概有 50000张图片,分类有16种

(1)将所有图片输入到inception模型中,输出为bottleneck节点,然后再建立3层的全连接神经网络对这些特征进行分类,实验结果还是效果不错,以及比自己重新建立一个CNN网络的表现要好了,在经过比较短的时间训练后在验证集上的到了80%左右的准确率。

由于训练的是全连接神经网络,增加训练时间很可能会使得网络过拟合,所以这个方法的准确率大概为80%,效果已经很好了



2.提取更靠前节点的输出

按照inceptionv3的计算图结构,可以看到bottleneck前面接的是一个pool层,pool层前面是一个inception block,我选择提取池化前的特征,特征维度为 (1,8,8,2048)

按照前面所说的方法,找点这个节点的名称,就能够提取到这部分的特征


将所有图片输入网络,提取出这个节点的特征后保存

提取的特征维度为 : (50000,8,8,2048)且每个数为32位浮点数,假如一次加载到内存中大概需要25GB的内存,所以我选择将这些特征数据分成10小份,每份大小为2.5G左右

然后训练一个卷积网络对这些特征进行分类,我选择的网络结构为:

conv1:                2048@3*3/1                (N,8,8,2048)  ->    (N,6,6,2048)

conv2:                2048@3*3/1                (N,6,6,2048)  ->    (N,4,4,2048)

conv3:                2048@3*3/1                (N,4,4,2048)  ->    (N,2,2,2048)

FC4:                       2048                             (N,2*2*2048)     ->       (N,2048)

FC5:                        1024                             (N,2048)            ->      (N,1024)

FC6:                        16                                (N,1024)            ->      (N,16)

最后输出为 FC6层

在经过5小时的训练后,网络在验证集上的准确率大概收敛在93%左右。这还只是粗略的训练,没有对网络进行调参


结论:

假如你在自己的项目上有比较小的数据集,而又想利用深度学习方案解决这个问题,这时候利用迁移学习得到的结果肯定是比重新训练一个新的CNN网络要好很多。假如只利用BOTTLENECK的输入分类得到的效果不好,可以尝试提取更加高维度的特征,这样得到的结果会更加好

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

推荐阅读更多精彩内容