打造自己的图像识别模型(2):TensorFlow Slim

    技术2024-11-08  9

    目录

    打造自己的图像识别模型(1):将准备好的图片转化为tfrecord格式

    打造自己的图像识别模型(2):TensorFlow Slim

    打造自己的图像识别模型(3):训练数据导出模型,开始使用

     

    书接上回

    上一回《打造自己的图像识别模型(1):将准备好的图片转化为tfrecord格式》 中咱们说了,站在前人的肩膀上,利用微调来打造自己的识别模型,最终准备好了如下数据。

    那么,接下来,我们就开始训练这些数据。

    通过训练这些数据,我们让程序培养自己的价值观(神经网络参数),以后再遇到类似图片,他能够通过公式推断出自己的结论。

     

    TensorFlow Slim

    谷歌公司提供的一个图像分类工具包,用它可以搞定很多操作,训练数据、保存模型、查看参数、验证数据……

    那么,下面我们就来闻闻……不是……看看它,下载地址是 https://github.com/tensorflow/models/tree/master/research/slim。

    我们看看Slim是个什么东西。

    datasets里面定义训练时使用的数据集。

    里面有一些常用的,比如MNIST,CIFAR-10等,你可以理解这都是一些样品,类似样板间。

    这都是别人辛苦采集的图片,比如MNIST就是一些手写数字的图片数据集。

    如果我们要训练自己的鸡鸭鹅,那么我们需要在里面定义一下自己的数据集。

     

    其他的文件就不一个一个说了,今天用不到,反正他们都有各自的作用。

    比如preprocessing这个文件夹是做图像预处理和数据增强的。

    数据增强就是对现有数据进行一定折腾,比如你训练大鹅,有一张大鹅全身照。

    那好,把照片裁剪一下,光有个鹅头,它还是不是大鹅。

    上下倒转180度,头朝下它还是不是大鹅。

    左右旋转180度,面朝东改为面朝西,它还是不是大鹅。

    把白毛换成黑毛,它还是不是大鹅。

    把图片缩小,让大鹅变成小鹅,它还是不是……鹅。

    是的,即便你只提供一张图片,通过数据增强,把这张图片进行平移、旋转、翻转、裁剪、缩放、颜色变换、噪音扰动等等处理,告诉人工智能框架,这么折腾以后,它依然是大鹅,你识别的不是一个图片,而是某种特征。

    类似数据增强这些操作,以及其他更高级的操作,slim都会帮你做。

    相信,现在你对slim有个初步认识了。

     

    第一步:定义datasets文件

    将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):训练数据导出模型,开始使用

    Processed: 0.024, SQL: 9