主要内容

预训练的深度神经网络

您可以使用预先训练过的图像分类网络,该网络已经学会从自然图像中提取强大且信息丰富的特征,并将其作为学习新任务的起点。大多数预训练的网络是在ImageNet数据库的一个子集上训练的[1],用于ImageNet大规模视觉识别挑战赛(ILSVRC)。[2]。这些网络已经在超过100万张图像上进行了训练,可以将图像分为1000个对象类别,比如键盘、咖啡杯、铅笔和许多动物。使用带有迁移学习的预训练网络通常比从头开始训练网络更快更容易。

你可以使用之前训练过的网络来完成以下任务:

目的 描述
分类

将预训练的网络直接应用于分类问题。要对新图像进行分类,请使用分类。有关显示如何使用预训练的网络进行分类的示例,请参见使用GoogLeNet分类图像

特征提取

通过使用层激活作为特征,使用预训练的网络作为特征提取器。您可以使用这些激活作为特征来训练另一个机器学习模型,例如支持向量机(SVM)。万博1manbetx有关更多信息,请参见特征提取。有关示例,请参见利用预训练网络提取图像特征

转移学习

从在大型数据集上训练的网络中提取层次,并对新的数据集进行微调。有关更多信息,请参见转移学习。有关简单示例,请参见开始迁移学习。若要尝试更多预训练的网络,请参见训练深度学习网络对新图像进行分类

比较预训练网络

在选择一个网络应用于你的问题时,预训练的网络有不同的特征。最重要的特征是网络的准确性、速度和大小。选择网络通常是在这些特征之间进行权衡。使用下图来比较ImageNet验证精度与使用网络进行预测所需的时间。

提示

要开始迁移学习,请尝试选择一个更快的网络,如SqueezeNet或GoogLeNet。然后,您可以快速迭代并尝试不同的设置,如数据预处理步骤和训练选项。一旦你感觉哪些设置工作得很好,尝试一个更精确的网络,如Inception-v3或ResNet,看看这是否能改善你的结果。

预训练网络的准确率和相对预测时间的比较。随着预训练网络的准确性增加,相对预测时间也会增加。

请注意

上图仅显示了不同网络的相对速度。准确的预测和训练迭代时间取决于您使用的硬件和小批量大小。

一个好的网络有很高的准确度和速度。该图显示了使用现代GPU时的分类精度与预测时间的关系英伟达®特斯拉®P100)和128个小批量。预测时间是相对于最快的网络来衡量的。每个标记的面积与磁盘上网络的大小成正比。

ImageNet验证集上的分类精度是衡量在ImageNet上训练的网络精度的最常用方法。当您使用迁移学习或特征提取将在ImageNet上准确的网络应用于其他自然图像数据集时,它们通常也是准确的。这种泛化是可能的,因为网络已经学会了从自然图像中提取强大且信息丰富的特征,这些特征可以泛化到其他类似的数据集。然而,ImageNet上的高精度并不总是直接转移到其他任务上,因此尝试多个网络是一个好主意。

如果您希望使用受限的硬件或通过Internet分布网络来执行预测,那么还要考虑磁盘和内存中的网络大小。

网络的准确性

在ImageNet验证集上有多种计算分类精度的方法,不同的来源使用不同的方法。有时使用多个模型的集成,有时使用多个作物对每张图像进行多次评估。有时引用前5位精度而不是标准(前1位)精度。由于这些差异,通常不可能直接比较来自不同来源的准确性。深度学习工具箱™中预训练网络的精度是使用单个模型和单个中心图像裁剪的标准(前1)精度。

负载预训练网络

要加载SqueezeNet网络,请键入squeezenet在命令行。

网=挤压网;

对于其他网络,请使用函数googlenet以获得从外接程序资源管理器下载预训练网络的链接。

下表列出了在ImageNet上训练过的可用的预训练网络及其一些属性。网络深度定义为从输入层到输出层的一条路径上连续卷积层或全连接层的最大数量。所有网络的输入都是RGB图像。

网络 深度 大小 参数(百万) 图像输入大小
squeezenet 18

5.2 MB

1.24

227年- 227年

googlenet 22

27 MB

7.0

224年- 224年

inceptionv3 48

89 MB

23.9

299年- 299年

densenet201 201

77 MB

20.0

224年- 224年

mobilenetv2 53

13 MB

3.5

224年- 224年

resnet18 18

44 MB

11.7

224年- 224年

resnet50 50

96 MB

25.6

224年- 224年

resnet101 101

167 MB

44.6

224年- 224年

xception 71

85 MB

22.9 299年- 299年
inceptionresnetv2 164

209 MB

55.9

299年- 299年

shufflenet 50 5.4 MB 1.4 224年- 224年
nasnetmobile * 20 MB 5.3 224年- 224年
nasnetlarge * 332 MB 88.9 331年- 331年
darknet19 19 78 MB 20.8 256年- 256年
darknet53 53 155 MB 41.6 256年- 256年
efficientnetb0 82 20 MB 5.3

224年- 224年

alexnet 8

227 MB

61.0

227年- 227年

vgg16 16

515 MB

138

224年- 224年

vgg19 19

535 MB

144

224年- 224年

* NASNet-Mobile和NASNet-Large网络不是由模块的线性序列组成。

GoogLeNet在Places365培训

标准的GoogLeNet网络是在ImageNet数据集上训练的,但您也可以加载在Places365数据集上训练的网络[3][4]。在Places365上训练的网络将图像分为365个不同的地点类别,如田地、公园、跑道和大厅。要加载在Places365数据集上训练的预训练的GoogLeNet网络,请使用googlenet(“重量”、“places365”)。在执行迁移学习来执行新任务时,最常见的方法是使用在ImageNet上预训练的网络。如果新任务类似于场景分类,那么使用在Places365上训练的网络可以提供更高的准确性。

可视化预训练网络

您可以加载和可视化预训练的网络使用深度网络设计器

deepNetworkDesigner (squeezenet)

深度网络设计器显示预训练的SqueezeNet网络

要查看和编辑图层属性,请选择一个图层。点击图层名称旁边的帮助图标,查看图层属性的信息。

在深度网络设计器中选择跨通道归一化层。PROPERTIES窗格显示了该层的属性。

通过单击在深度网络设计器中探索其他预训练的网络

深度网络设计器开始页显示可用的预训练网络

如果需要下载网络,请在需要下载的网络上暂停,然后单击安装打开附加组件资源管理器。

特征提取

特征提取是一种使用深度学习功能的简单快速的方法,无需投入时间和精力来训练完整的网络。因为它只需要对训练图像进行一次传递,所以在没有GPU的情况下尤其有用。您使用预训练的网络提取学习到的图像特征,然后使用这些特征来训练分类器,例如使用支持向量机万博1manbetxfitcsvm(统计和机器学习工具箱)

当你的新数据集非常小时,尝试特征提取。因为你只在提取的特征上训练一个简单的分类器,所以训练速度很快。微调更深层次的网络也不太可能提高准确性,因为可供学习的数据很少。

  • 如果您的数据与原始数据非常相似,那么在网络中更深层提取的更具体的特征可能对新任务有用。

  • 如果您的数据与原始数据有很大差异,那么在网络中更深层提取的特征可能对您的任务没有太大用处。试着用从早期网络层提取的更一般的特征来训练最终的分类器。如果新的数据集很大,那么你也可以尝试从头开始训练一个网络。

resnet通常是很好的特征提取器。有关显示如何使用预训练的网络进行特征提取的示例,请参见利用预训练网络提取图像特征

转移学习

您可以以预先训练的网络作为起点,在新数据集上训练网络,从而对网络中的更深层次进行微调。使用迁移学习对网络进行微调通常比构建和训练一个新网络更快更容易。网络已经学习了一组丰富的图像特征,但是当你对网络进行微调时,它可以学习特定于新数据集的特征。如果你有一个非常大的数据集,那么迁移学习可能不会比从头开始训练更快。

提示

对网络进行微调通常可以获得最高的精度。对于非常小的数据集(每个类少于20张图像),可以尝试特征提取。

与简单的特征提取相比,对网络进行微调更慢,需要更多的努力,但由于网络可以学习提取不同的特征集,最终的网络通常更准确。只要新数据集不是很小,微调通常比特征提取效果更好,因为这样网络就有数据可以从中学习新特征。有关显示如何执行迁移学习的示例,请参见基于深度网络设计器的迁移学习而且训练深度学习网络对新图像进行分类

迁移学习工作流

进出口网络

你可以从TensorFlow中导入网络和网络架构®-Keras, Caffe和ONNX™(开放神经网络交换)模型格式。您还可以将训练过的网络导出为ONNX模型格式。

从喀拉邦进口

从TensorFlow-Keras导入预训练的网络importKerasNetwork。您可以从相同的HDF5 (.h5)文件或单独的HDF5和JSON (. JSON)文件导入网络和权重。有关更多信息,请参见importKerasNetwork

使用TensorFlow-Keras导入网络架构importKerasLayers。您可以导入网络架构,可以带权重,也可以不带权重。您可以从相同的HDF5 (.h5)文件或单独的HDF5和JSON (. JSON)文件导入网络体系结构和权重。有关更多信息,请参见importKerasLayers

Caffe进口

从Caffe导入预训练的网络importCaffeNetwork函数。在Caffe模型动物园中有许多预先训练好的网络[5]。下载所需的.prototxt而且.caffemodel文件及使用importCaffeNetwork将预先训练好的网络导入MATLAB®。有关更多信息,请参见importCaffeNetwork

您可以导入Caffe网络的网络架构。下载所需的.prototxt文件和使用importCaffeLayers将网络层导入MATLAB。有关更多信息,请参见importCaffeLayers

导出到和从导入ONNX

通过使用ONNX作为中间格式,您可以与其他支持ONNX模型导出或导入的深度学习框架进行互操作,例如TensorFlow, PyTorch, Caffe2, Microsoft万博1manbetx®认知工具包(CNTK), Core ML和Apache MXNet™。

将训练好的深度学习工具箱网络导出为ONNX模型格式exportONNXNetwork函数。然后,您可以将ONNX模型导入到其他支持ONXX模型导入的深度学习框架中。万博1manbetx

从ONNX导入预训练的网络importONNXNetwork并导入使用或不使用权重的网络架构importONNXLayers

音频应用预训练网络

通过使用深度学习工具箱和音频工具箱™,将预先训练好的网络用于音频和语音处理应用程序。

音频工具箱提供预训练的VGGish和YAMNet网络。使用vggish(音频工具箱)而且yamnet(音频工具箱)函数直接与预训练的网络交互。的classifySound(音频工具箱)函数为YAMNet执行所需的预处理和后处理,以便您可以定位并将声音分类到521个类别之一。方法来探索YAMNet本体yamnetGraph(音频工具箱)函数。的vggishFeatures(音频工具箱)函数为VGGish执行必要的预处理和后处理,以便提取特征嵌入输入到机器学习和深度学习系统。有关在音频应用程序中使用深度学习的更多信息,请参见音频应用的深度学习简介(音频工具箱)

使用VGGish和YAMNet进行迁移学习和特征提取。例如,请参见预训练音频网络的迁移学习(音频工具箱)

预训练模型GitHub

要查找最新的预训练模型和示例,请参见MATLAB深度学习(GitHub)

例如:

参考文献

[1]ImageNet。http://www.image-net.org

[2] Russakovsky, O., Deng, J., Su, H.等。“ImageNet大规模视觉识别挑战。”国际计算机视觉杂志(IJCV)。115卷,第3期,2015年,第211-252页

[3] Zhou, Bolei, Aditya Khosla, Agata Lapedriza, Antonio Torralba和Aude Oliva。“场所:用于深度场景理解的图像数据库。”arXiv预印本:1610.02055(2016)。

[4]的地方。http://places2.csail.mit.edu/

[5]Caffe动物园模型。http://caffe.berkeleyvision.org/model_zoo.html

另请参阅

|||||||||||||||||||||||||

相关的话题