【开发日记】马桶识别之马桶分类,通过迁移学习进行马桶分类

通过上篇文章马桶识别之数据清洗,通过Resnet50清洗脏数据,得到了干净的马桶图片。但是由于评论区图片有限,每一类的图片只有300张左右。如果从头开始训练,数据量有点小。这时可以通过迁移学习,利用从ImageNet数据集中学习到的模型来进行迁移学习。

具体的做法是冻结网络(比如ResNet,GoogleNet,Vgg16等)前几层的权重和偏置,只留下最后一层的参数进行训练。其实,也是把前面几层网络当成特征提取器进行特征提取,然后再利用最后一层进行线性分类。

在Tensorflow的官方教程中,有一篇是关于迁移学习的教程,有兴趣的可以看一下:How to Retrain Inception's Final Layer for New Categories。本文正是基于该教程进行迁移学习。

1. 数据准备

数据组织结构如下图所示,创建一个总文件夹,下面放“种类”子文件夹,子文件夹下放图片

【开发日记】马桶识别之马桶分类,通过迁移学习进行马桶分类_第1张图片

2. 代码准备

确保~/tensorflow/examples 下有文件夹 image_retraining。如果没有的话,可以上Tensorflow的GitHub网址上下载(https://github.com/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%,并不是很好,可能样本还是太少了,但是训练过程很简单,避免自己从头开始写一个神经网络。

下一步可以使用其他模型或者使用数据增强,以及调整一下其他参数来看一下精度能否继续提高。

你可能感兴趣的:(开发日记)