为了加快开发速度,使用了开源框架,开源框架有很多,这里仅选择其中一个做介绍 -- Keras。
视频讲解:www.mooc.ai/course/549/learn?lessonid=2859
预处理
首先,也是第一步,需要做的是预处理,该步骤的目标是把图像整理成能够直接塞入网络的图片的样子。
什么样子的图片格式才是一个网络需要的呢?
- 一个是未经过处理的原始图片;
- 一个是经过处理后,你想要得到的样子的图片。
比如,你未经过处理的图像是下面的图像的样子(Input,X_train,X)。
然后你想要得到的输出图片的样子是下面的样子(Output,Y_train,Y):
那么,你要做的工作来了。手动的把上面的未经过处理的图片的整理成下面图片的样子(或者借助其他工具)。
而你需要注意的是,这两张图片的大小是一样的(保证像素点的个数一致),因为我们要得到的神经网络输出图片(也叫做掩膜图)需要和神经网络的输入图片的像素点一一对应。
神经网络会根据某种对应法则,将上面的图片\(X\),映射到下面的图片\(Y\)中,即\(Y = f(x)\) ,这个映射法则\(f\)我们无法用一个公式准确的表达,但是确实是在神经网络内部实现了这种一一映射。如果真的要表达的话,那么只能用一个网络结构来说明这种映射关系了。
如果下面的图片的每个像素点都是一个概率值,那么这个图片就是一个由概率组成的一个矩阵,也叫做概率矩阵。
接下来,需要完成的就是需要把这个图片整理成能够输入网络的形式(统一格式):
- 统一颜色格式(RGB还是GRAYSCALE)
- 统一图片大小(size)
- 格式化图片名称(file_rename)
- 设置batch_size以及其他参数(非必须)
关于这个步骤的处理过程可以先Copy预处理的代码,该步骤用到了Keras的一个类库:ImageDataGenerator,从这个文档中,可以更加详细的了解到如何使用现有的方法解决你的问题了。官方解释的很到位,更重要的是还有实例。
开始训练
预处理做完了,那么就开始训练吧。
- 了解一下shape
- 制作一个网络模型
- 用你的模型进行训练
关于shape,是我们必须要掌握的一个常识性问题,看下图:
看图理解,不做解释。
如何制作网络模型呢?在图像分割上,有一个目前效果较好的模型叫做U-net,可以先用他们的模型直接训练,然后在前人的基础上做修改,以此降低学习成本,让成就感更高,从而促进学习兴趣(有点扯)。
模型框架做(Copy)好了,怎么来使用这个模型来训练自己的图片呢?Keras给出了一个方法叫做fit_generator,它可以激活你的模型,开始你的训练,里面的参数需要根据需要自己设置了,每个参数都是什么意思可以参考官方提供的帮助。这里也是有一个可以用来参考的实例代码可以使用。
运行测试
激动人心的时刻就是当你运行了python train.py
之后,接下来,就是漫长的等待它训练完成,然后对结果进行测试。
如何使用已经建立的网络模型进行测试?过程十分简单,使用load_model加载已经保存的模型,然后使用predict方法进行预测。使用方式及参数说明参考官方文档load_model和predict。这里也可以参考实际应用中使用的代码。