打造自己的图像识别模型(1):将准备好的图片转化为tfrecord格式
打造自己的图像识别模型(2):TensorFlow Slim
打造自己的图像识别模型(3):训练数据导出模型,开始使用
上一回《打造自己的图像识别模型(1):将准备好的图片转化为tfrecord格式》 中咱们说了,站在前人的肩膀上,利用微调来打造自己的识别模型,最终准备好了如下数据。
那么,接下来,我们就开始训练这些数据。
通过训练这些数据,我们让程序培养自己的价值观(神经网络参数),以后再遇到类似图片,他能够通过公式推断出自己的结论。
谷歌公司提供的一个图像分类工具包,用它可以搞定很多操作,训练数据、保存模型、查看参数、验证数据……
那么,下面我们就来闻闻……不是……看看它,下载地址是 https://github.com/tensorflow/models/tree/master/research/slim。
我们看看Slim是个什么东西。
datasets里面定义训练时使用的数据集。
里面有一些常用的,比如MNIST,CIFAR-10等,你可以理解这都是一些样品,类似样板间。
这都是别人辛苦采集的图片,比如MNIST就是一些手写数字的图片数据集。
如果我们要训练自己的鸡鸭鹅,那么我们需要在里面定义一下自己的数据集。
其他的文件就不一个一个说了,今天用不到,反正他们都有各自的作用。
比如preprocessing这个文件夹是做图像预处理和数据增强的。
数据增强就是对现有数据进行一定折腾,比如你训练大鹅,有一张大鹅全身照。
那好,把照片裁剪一下,光有个鹅头,它还是不是大鹅。
上下倒转180度,头朝下它还是不是大鹅。
左右旋转180度,面朝东改为面朝西,它还是不是大鹅。
把白毛换成黑毛,它还是不是大鹅。
把图片缩小,让大鹅变成小鹅,它还是不是……鹅。
是的,即便你只提供一张图片,通过数据增强,把这张图片进行平移、旋转、翻转、裁剪、缩放、颜色变换、噪音扰动等等处理,告诉人工智能框架,这么折腾以后,它依然是大鹅,你识别的不是一个图片,而是某种特征。
类似数据增强这些操作,以及其他更高级的操作,slim都会帮你做。
相信,现在你对slim有个初步认识了。
将datasets下的flowers.py复制一份,作为你自己定制的数据集声明文件。
flowers.py是做鲜花识别一个例子。
那么,识别鸡鸭鹅的话,原理是一样的,因此复制没毛病。
我们复制一份起名叫satellite.py(名字随便起,我们上次生成tfrecord数据就是搞得卫星图,所以起这个名)。
然后,做一下修改。
主要是把整理好的数据参数改为自己的。
还有一处需要修改,图片格式默认是png,此处需要改为jpg,这是我们上次准备的图片格式。
有了上面这个文件,也就是说给我们的数据集分了房子,这个房子谁住,有多大,里面有什么家具,都说清楚了。
下面,就要登记上报给系统,让你的社区知道,因为你需要他们的水电安防等资源的支持。
datasets下找到dataset_factory.py将我们刚刚复制好的新文件导入。
又准备训练数据,上一集不是准备过了吗?
息怒,slim下新建一个我们的文件夹,作为储藏室,把上一集准备的地瓜干拷贝过来,再加点孜然。
其中pretrained是预训练相关,里面的inception_v3.ckpt文件可以下载
http://download.tensorflow.org/models/inception_v3_2016_08_28.tar.gz
这个预训练模型是什么玩意儿呢?
又要举例子了。
看下图,假设有一堆零件,左下是不合格的,右上是合格的。
那么如何通过分析得出一个标准,从而达到未来检测一个新零件是否合格的目的。
人来做很简单,你一眼就看出来了。
肯定分界点是一条左上到右下的线。
但是,很遗憾,机器没有眼,即便有摄像头,也没有大脑,有大脑也不知道该怎么去思考。
人工智能框架是怎么做的呢,随便画一条线,假设它是对的。
然后,把每一条数据进行验证,逐步去修正这条分割线,最后把所有数据都计算完,得到的一条目前最准确的分割线。
这是一个简单的例子,便于理解,因为你一眼就能看出来。
但是很多大数据,你根本看不过来,甚至都记不住。比如10万人的生活习惯和癌症的关系数据。
退一步讲,即便是5000张哈士奇和5000张狼的头像放在一起,这时候人类就没法一看看出来了到底哪条线是标准了。
但是机器能通过计算很快发现那条线(到这里就是多个卷积层)。
而这个inception_v3.ckpt文件,就是图像识别,那条预估好的通用基础线,在它的基础上进行训练,要有效的多。
至此,我们的工作就做完了,剩下的训练和验证,都是程序和框架的事情了。
下一回,我们将开始训练和导出使用。
继续往下看
打造自己的图像识别模型(3):训练数据导出模型,开始使用