花朵图像分类

最近更新时间:2019-08-21 11:11:00

场景背景

图像分类是计算机视觉中重要的基本问题,也是目标检测、行为跟踪、图像分割等其他任务的基础。图像分类的应用涵盖交通、安防、医疗、政府、互联网等多种领域,其应用场景包括交通场景识别、人脸检测、智能视频分析、医学图像识别等。

近年来,卷积神经网络(Convolution Neural Network,CNN)在图像识别领域取得了惊人的成绩。CNN 将图像像素的信息作为输入,通过卷积进行特征的提取和抽象,并直接输出图像识别结果,该方法极大程度的保留了图像原始信息,端到端的学习方法取得了很好的效果。Inception 是一类特殊而强大的 CNN,它可以在利用密集矩阵的高计算性能的同时,保持网络结果的稀疏性,以提高模型的泛化能力。

本文通过智能钛机器学习平台,利用 Inception 算法搭建花朵图像分类模型。用户无须编写代码,只要拖动相应的组件搭建模型架构,便可以在二十分钟以内快速上手,解决图像分类场景下的实际问题,训练完成后您可进行模型服务部署,并进行在线测试。

数据集介绍

本案例使用的 公开数据集 共包含五类花朵数据:Daisy(菊花)、Dandelion(蒲公英)、Rose(玫瑰)、Sunflower(向日葵)和 Tulip(郁金香),共218MB大小。
数据集抽样展示如下:(各类别下花朵照片示例)。

整体流程

工作流整体流程如下:

本场景共包含5个环节,分别是:

  1. 数据准备:上传训练集和测试集的花朵图像数据。
  2. 数据预处理:利用【图像切分转换】将数据拆分成训练集、验证集 ,并将原始 JPG 图片文件转换成高效的 TFRecord 格式文件。
  3. 使用【Inception】处理分类任务。
  4. 使用【深度学习分类任务评估】评估模型效果
  5. 模型部署及在线测试
说明:

工作流搭建过程中若连线有误可通过右键单击删除连线

详细流程

一. 数据准备
本步骤中需要上传两个数据源:花朵图像的训练集和预测集。

  1. 在智能钛控制台的左侧导航栏,选择【输入】>【数据源】>【 COS 数据集】,并拖入画布中,右键单击该组件【 重命名】为:训练集。
  2. 填写 COS 路径地址:${ai_dataset_lib}/demo/cv/flower_photos_trainval
注意:

请关闭【是否检查数据】


至此,我们将用于训练的花朵图像数据成功导入工作流,按照同样的操作我们将测试集数据拖拽入工作流,修改对应的COS路径地址,并关闭【是否检查数据】按钮:
测试集路径:${ai_dataset_lib}/demo/cv/flower_photos_predict

二. 图像切分转换
TFRecord 数据文件是一种将图像数据和标签统一存储的二进制文件,能更好的利用内存,在 Tensorflow 中快速的复制、移动、读取、存储等。

智能钛机器学习平台的【图像切分转换】组件同时适用于目标检测和图像分类,用户只需在参数配置区选择任务类型和切分比例,就可以实现对图像数据的切分和类型转换。在本次实验中,我们使用【图像切分转换】组件将原始 JPG 文件格式转换成高效的 TFRecord 格式,同时将实验数据切割成训练集和验证集,验证集比例为0.2。具体操作如下:

  1. 在智能钛机器学习平台控制台的左侧导航栏,选择【输入】>【数据转换】>【图像切分转换】,并拖入画布
  2. 将 【训练集】 的输出桩,连到 【图像切分转换】 左边的输入桩上,数据IO路径已根据连线自动生成。
  3. 单击【图像切分转换】,在右侧弹框中设置相关算法参数
    • 任务类型:图像分类。
    • 是否进行切分:是。
    • 验证集比例:0.2。
    • 其余参数可默认。

三. 分类网络
选择合适的 CNN 网络处理分类任务,这里以 Inception 网络为例。 Inception 网络的详情可以参考 相关论文

  1. 在控制台的左侧导航栏,选择【算法】>【深度学习算法】>【计算机视觉】>【 Inception】,并拖入画布中
  2. 将【图像切分转换】的三个输出桩,分别连接到【 Inception 】 的三个输入桩上,前两个桩分别代表训练集和验证集文件,最右侧的桩代表“label_map文件所在目录”。
  3. 配置算法参数:
    • 模型名称:inception_v3
    • batch_size: 32
    • 学习率:0.01
    • 训练步数:3000
    • 是否使用预训练模型:是
    • 优化器:rmsprop
    • 预训练模型路径:复制填写 ${ai_dataset_lib}/checkpoints/inception/inception_v3.ckpt
    • 是否仅训练全连接层:是
    • opt_epsilon:1.0
    • rmsprop_decay:0.9
    • rmsprop_momentum:0.9
    • GPUs:深度学习网络用到了 GPU 资源, 可以极大地提高训练速度。 单击该选项,在对话框中选择合适的显卡型号和数量,此处1张显卡即可。
    • 其余参数可默认。
  4. 左侧小烧杯代表完成训练的模型,将【测试集】的输出桩连接到小烧杯处。单击小烧杯,【模型更新方式】可选手动更新,将【模型运行方式】设置为自动运行,其余参数可默认。

四. 模型评估
在控制台的左侧导航栏,选择【输出】>【模型评估】>【深度学习分类任务评估】并拖入画布。将小烧杯模型的输出桩连接至【深度学习分类任务评估】,单击该组件设置算法参数:

  • 标签列的序号:2
  • 预测列序号:1
  • 其余参数可默认

五. 运行调度及评估效果查看
单击画布上方运行按钮可运行工作流,更多详情请参考 运行工作流
运行成功后,右键单击【深度学习分类任务评估】>【查看数据】,即可查看模型效果。


六. 模型部署及在线测试
工作流运行完成后,我们将运行生成的模型保存至模型仓库,并进行模型部署和在线测试。具体操作如下:

  1. 右键单击小烧杯模型组件,在列表中选择【保存到模型仓库】。
  2. 在弹出列表中输入模型名称:花朵分类,选择新建模型,单击保存。
  3. 页面将跳转至【模型仓库】页面,单击【部署】按钮,在弹框中进行模型部署设置。
    • 模型服务名称:花朵分类
    • 运行环境:tfserving/1.12
    • 其他参数可默认

  4. 模型部署完成后,进行花朵分类的在线测试。单击【更多】>【测试】,进入在线测试页面。


    我们已为您准备好了如下花朵测试图片,您可以右键保存图片 。保存完成后,单击【选择文件】,将准备好的图片上传,单击【测试】进行在线预测。

    查看预测结果,得知该花朵的分类是“sunflowers”。

    至此,我们利用智能钛机器学习平台完成了从数据预处理、模型构建、模型训练、模型评估到模型服务的全部流程。