深度学习图像识别技术:基于TensorFlow Object Detection API和OpenVINO? 工具套件
上QQ阅读APP看书,第一时间看更新

3.3 准备图片:下载猫狗数据集

准备图片以及标注图片是整个训练流程中最耗时的步骤。猫狗数据集的获取方式有两种:

第一种,直接在百度里面搜索“猫”和“狗”的图片,然后下载,如图3-6所示。

第二种,从Kaggle直接下载的猫狗数据集,下载地址:

图3-6 从百度下载猫狗图片

3.3.1 Kaggle数据集下载流程

Kaggle数据集下载的主要工作在于账号注册和安装Kaggle API。之所以要安装Kaggle API,是因为实际测试过程中,用Kaggle API命令下载比从网页直接下载的速度要快4~5倍,具体步骤如下。

第一步,注册Kaggle账户。从https://www.kaggle.com/account/login?phase=startRegisterTab进入Kaggle账户注册网页,根据提示注册账户。注册完Kaggle账户后,可以直接进入猫狗数据集下载页面https://www.kaggle.com/c/dogs-vs-cats-redux-kernels-edition/data,单击Download All按钮下载全部数据集,如图3-7所示。

若下载速度较快,则请忽略第二步及以后步骤。若下载速度很慢,则继续第二步,安装Kaggle API,用Kaggle API下载数据集。

第二步,安装Kaggle API。按〈Windows+Q〉快捷键启动Windows搜索输入框,然后输入“cmd”,启动Windows命令行终端。

在Windows命令行终端输入命令“conda activate tf_gpu”,激活tf_gpu虚拟环境,最后输入命令“pip install kaggle”,完成Kaggle API安装,如图3-8所示。安装完毕后,请重启计算机。

图3-7 直接下载数据集

图3-8 安装Kaggle API

第三步,下载kaggle.json。Kaggle要求必须下载登录口令文件kaggle.json才能用Kaggle API下载数据集。请登录自己的Kaggle账户页面(https://www.kaggle.com/<username>/account,把<username>换为自己的账户名),在My account页面单击Create New API Token按钮,下载kaggle.json文件,如图3-9所示。

图3-9 下载Kaggle.json

将下载的文件kaggle.json复制到%HOMEPATH%\.kaggle文件夹中。在命令行界面输入命令“echo%HOMEPATH%”,可以查到本机的%HOMEPATH%路径,如图3-10所示,本书的%HOMEPATH%\.kaggle的绝对路径是C:\Users\JHC\.kaggle。

图3-10 查%HOMEPATH%路径

第四步,用Kaggle API命令下载数据集。从https://www.kaggle.com/c/dogs-vs-cats-redux-kernels-edition/data,进入数据集下载页面,单击下载命令复制按钮,如图3-11中方框所示。

图3-11 复制Kaggle下载命令

按〈Windows+Q〉快捷键,启动Windows搜索输入框,然后输入“cmd”,启动Windows命令行终端。在Windows命令行终端输入命令“conda activate tf_gpu”,激活tf_gpu虚拟环境,最后输入命令:

完成猫狗数据集下载,如图3-12所示。

图3-12 下载猫狗数据集

下载的猫狗数据集分为训练集train.zip和测试集test.zip。训练集中包含25000张图片(猫和狗各12500张)。上万张的图片足够训练一个全新的模型,换句话说,若打算训练一个全新的模型,需要为每个类别准备上万张的图片。这种数量级的图片要求,对很多产品外观瑕疵识别应用来说,是非常难收集的。先不提每个瑕疵种类收集一万张图片,仅收集一万张瑕疵产品的图片,就是一个很浩大的工程。

3.3.2 训练图片的数量问题

对产品外观瑕疵检测应用来说,重新设计一个全新的深度神经网络模型,然后用数以万计的图片去训练它,在工程上实现的难度和成本极高。

基于深度学习预训练模型,用百张每类这个数量级的图片去做迁移学习,则是一个工程上容易实现的技术路径。

为了较好演示整个训练过程,在训练精度和训练模型工作量之间做一个平衡,本书的训练数据方案是:猫狗各选100张作为训练数据。当然,读者也可以选择200张,或500张。理论上,训练图片的数量越多,模型精度越高,泛化能力越好。

另外,一个新项目开始前,先用100张/类的数量做技术评估,也是一个常用的PoC(概念验证)方案,若100张/类的数量训练出来的模型的识别准确率超过85%,那这个新项目用深度学习技术来完成物体识别工作是基本没有问题的。

3.3.3 训练图片的样本不平衡问题

深度学习有个经典假设,即假定训练样本每个类别的数量是基本相同的,这也是为什么对于猫狗各选100张的原因。但实际应用场景中,往往很难满足这个条件,仍然以外观瑕疵检测应用为例,在实际生产过程中,有外观瑕疵的产品的数量本来就少,要收集到每个瑕疵种类都有基本相同数量的样本是非常困难的,就算能收集到,也要花很大的人力物力。

训练样本数量不平衡,会导致训练模型“重视”样本数量较多的类别,“轻视”样本数量较少的类别,这样训练出来的模型在测试数据集上的泛化能力会受到影响。例如,一个训练数据集的A样本有99个,B样本只有1个,训练算法很有可能会让AI模型放弃识别B,直接把所有样本都识别为A,这样的AI模型虽然在训练集上有高达99%的识别准确率,但并不是我们想要的结果。

为了实现训练样本数量平衡,通常使用数据增强(Data Augmentation)的技术来增加样本数量。对于图像数据来说,可以基于传统图像处理算法,对已有样本进行旋转、放缩、平移或翻折等操作,人为造出新的样本,增加该类样本的数量,解决样本不平衡的问题,如图3-13所示。

图3-13 数据增强