chapter 3. 打造自己的图像识别模型

一、微调原理

在自己的训练数据上训练深度模型时,一般采取在“预训练好的神经网络(如:ImageNet模型:VGG16)”上进行微调的方法。
以VGG16说明“微调含义”:如果要将VGG16的结构应用于新的数据集,首先要丢掉fc8层,然后重新加入fc8’,使得其output dimension满足新数据集的要求。在调整好VGG16结构以后,在训练VGG16时,可以保留VGG16的部分“预训练参数”,只训练几层layer的参数,具体可采取如下几种方式:
在这里插入图片描述

在这里插入图片描述

二、使用Tensorflow Slim 微调模型

1、Slim 介绍

2、利用Slim 微调模型
step1:下载Slim 源代码,Slim源代码保存在tensorflow/models/research/slim文件夹中;
tensorflow/models 可用git 命令下载:

git clone ht仁ps://github.corn/tensorflow/models.git


step2:在slim/datasets中定义了所有可以使用的datasets,为了可以使用本章创建的tfrecord数据,我们需要加入一个dataset,具体方法如下:
在datasets/目录下新建一个satillte.py文件(本章中使用的数据),并将followers.py中的code 复制到satillte.py中,且修改以下几个内容:

_FILE PATTERN =’ satellite *. tfrecord' 
SPLITS_TO_SIZE = {'train':4800,'validation':1200}
_NUM_CLASSES =6
'image/form ’: tf. FixedLenFeature ( (), tf. string, default_value =’ jpg’)

修改完satillite.py文件后,还需要在同目录的dataset_factory.py中,注册satellite数据库。

#注册方法,在dataset_factory.py中加入几行code
from datasets import satellite
datasets_map={'satellite':satellite} #字典中加入这个key-value

step3:将本章数据加入slim文件夹中,具体方法如下:
利用上述2步定义完数据集后,在slim文件夹下新建文件夹satellite,在该文件夹下,新建data文件夹,将本章数据复制进行,新建train_dir文件夹,用以保存日志和模型;新建pretrained文件夹,将想要使用的模型下载进来,本章中使用的是Inception V3 模型;
step4:将本章数据加入slim后,即可利用Slim微调model,训练satellite数据,训练使用slim中的train_image_classifier.py文件,在cmd中进行,具体如下:

以上code仅对Inception V3中最后fc8 layer进行参数优化,其它参数依然为“预训练Inception V3”中的参数值。
step5:模型准确率验证,可以使用slim中的eval_image_classifier.py进行,其在cmd中的code如下:

三、利用TensorBoard进行可视化与超参数选择

使用下列命令可以打开tensorboard,看到损失的变化曲线:

tensorboard --l_ogdir satellite/train dir 


Note that:当损失曲线波动较大,无法收敛时,可以是因为学习率过大,此时可以调小“学习率”试试。

三、导出模型并对单张图片进行识别

1、模型导出
step1:保存模型的网络结构,可利用slim中的export_inference_graph.py进行:

python export_inference_graph.py 
--alsologtostderr 
--model_name = inception_v3
--output_file = satellite/inception_v3_inf_graph.pb
--dataset_name satellite

step2:将模型网络结构 与 学习得到的参数 结合,导出为最终的预测模型,可用脚本freeze_graph.py实现:

python freeze_graph.py
--input_graph slim/satellite/inception_v3_inf_graph.pb
--input_checkpoint slim/satellite/train_dir/model.ckpt_5271
--input_binary true
--output_node_names InceptionV3/Predictions/Reshape_1
--output_graph slim/satellite/frozen_graph.pb

2、a test sample的预测
可用脚本文件classify_image_inception_v3.py实现:

python classify_image_inception_v3.py
--model_path slim/satellite/frozen_graph.pb
--label_path data_prepare/pic/label.txt
--image_file test_image.jpg

代码解析

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sarah ฅʕ•̫͡•ʔฅ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值