基于深度学习的图像分类(Classification)

作者:欧新宇(Xinyu OU)

本文档所展示的测试结果,均运行于:Intel Core i7-7700K CPU 4.2GHz, nVidia GeForce GTX 1080 Ti
本教案所涉及的数据集仅用于教学和交流使用,请勿用作商用。

最后更新:2021年3月6日


本教案以蝴蝶数据集为例进行介绍。

一、基于深度学习的图像分类的基本代码框架图

基于深度学习的图像分类包括很多实现的代码,有些是通用的,例如日志文件,绘图文件;有些是属于工程性的,例如数据准备文件;也有一部分是项目私有代码,例如配置文件。

Lec02_03CodesArchitecture

二. 数据准备和数据预处理

1. 数据准备:主要任务是将下载(收集)好的数据进行初步准备,包括数据清洗数据标注数据列表的生成。其中,

所有的数据集都按照工程习惯生成四个数据集,具体包括:

  1. 一般来说,训练集和验证集都是训练模型时的训练数据,其中训练集用于模型训练,验证集用于超参数评估。为了更好地完成超参数的选择,通常会将原始的训练集分割成训练集验证集;并进行模型训练,在完成超参数选择后,再将训练集验证集合并在一起后,进行统一训练。
  2. 测试集在很多情况下是没有标注的,并且测试集也不应该被用来参与模型参数的选择,只能在模型训练好,进行一次性的结果输出或性能评估。

2. 数据预处理:数据预处理主要负责实现数据的增广、通道变化、归一化、数据批次划分等,对于训练数据可能会包含多种数据增广操作,对于测试数据则一般只包含十重切割。

3. 数据读取:主要任务将读入的数据进行封装,并送入训练或预测代码

数据准备和数据预处理(图像增广)的相关知识和代码可以参考: [数据准备] [图像增广]

三. 全局配置(config)

全局配置是每个项目的私有代码,包括项目的各种参数,路径和初始化

四. 日志输出(logger)和可视化(draw)

  1. 日志输出是指将训练所涉及的各种参数信息、模型信息和训练过程参数进行输出保存,一般使用logger库完成。

  2. 可视化的目的是为了辅助、监控和调优训练过程,一般有三种方法:

    1. 收集训练过程中的运行结果进行可视化。目前本课程主要采取该方法,优点是清晰、简介;缺点是不灵活,必须在训练结束之后才能输出可视化。
    2. 调用logger输出的日志进行可视化。优点,可实时输出可视化结果。
    3. 调用开放平台的第三方可视化工具,例如:Paddle VisualDL, Tensorflow Board,优点是功能强大。

五. 优化器设置(optimize)

优化器设置主要包括优化算法和学习率设置,常见的优化算法包括:Momentum, RMS, SGD, Adam; 常见的学习率包括:PiecewiseDecay, CosinaAnealingDecay, ExponentialDecay, PolynomialDecay, 以及固定学习率。

该部分的技术文档将在后续推出,或请大家自行Baidu.

下面的代码将实现以上叙述的多种学习率和优化算法,并可根据config文件进行配置和调用。

六. 模型训练

深度学习的训练一般包括四种模式:

模型训练,可以生产两种模型:

七. 验证集评估

验证集评估可以使用调优模型,也可以使用部署模型,但是为了方便代码重用,建议直接使用调优模型。因为基于调优模型的验证集评估的代码,可以被训练代码共用,从而减少代码量。

八. 测试集评估和预测结果输出

对于测试集的处理,一般包含两个部分:

1. 测试集评估