通过上篇文章马桶识别之数据清洗,通过Resnet50清洗脏数据,得到了干净的马桶图片。但是由于评论区图片有限,每一类的图片只有300张左右。如果从头开始训练,数据量有点小。这时可以通过迁移学习,利用从ImageNet数据集中学习到的模型来进行迁移学习。
具体的做法是冻结网络(比如ResNet,GoogleNet,Vgg16等)前几层的权重和偏置,只留下最后一层的参数进行训练。其实,也是把前面几层网络当成特征提取器进行特征提取,然后再利用最后一层进行线性分类。
在Tensorflow的官方教程中,有一篇是关于迁移学习的教程,有兴趣的可以看一下:How to Retrain Inception's Final Layer for New Categories。本文正是基于该教程进行迁移学习。
1. 数据准备
数据组织结构如下图所示,创建一个总文件夹,下面放“种类”子文件夹,子文件夹下放图片
2. 代码准备
确保~/tensorflow/examples 下有文件夹 image_retraining。如果没有的话,可以上Tensorflow的GitHub网址上下载(/tensorflow/tensorflow)。
3. 开始训练
训练很简单,只要输入以下代码即可,默认使用预训练的 Inception V3模型。(注意更改为自己代码所在位置以及图片路径)
python E:\Python35\Lib\site-packages\tensorflow\examples\image_retraining\retrain.py --image_dir F:\AI\proj\data
4. 训练结果
使用我的笔记本电脑,差不多10分钟左右就可以出来结果。
训练的精度为68.4%,并不是很好,可能样本还是太少了,但是训练过程很简单,避免自己从头开始写一个神经网络。
下一步可以使用其他模型或者使用数据增强,以及调整一下其他参数来看一下精度能否继续提高。
如果觉得《【开发日记】马桶识别之马桶分类 通过迁移学习进行马桶分类》对你有帮助,请点赞、收藏,并留下你的观点哦!