预训练深度神经网络
您可以使用预先训练过的图像分类网络,该网络已经学会了从自然图像中提取功能强大且信息丰富的特征,并将其作为学习新任务的起点。大多数预先训练的网络都是在ImageNet数据库的一个子集上进行训练的[1],用于ImageNet大规模视觉识别挑战(ILSVRC)[2]。这些网络已经对超过100万张图像进行了训练,并可以将图像分为1000个对象类别,如键盘、咖啡杯、铅笔和许多动物。使用带有迁移学习的预训练网络通常比从零开始训练网络要快得多,也容易得多。
你可以使用之前训练过的网络完成以下任务:
目的 | 描述 |
---|---|
分类 | 将预先训练好的网络直接应用于分类问题。要对新图像进行分类,请使用 |
特征提取 | 通过使用层激活作为特征,使用预训练的网络作为特征提取器。您可以使用这些激活作为特征来训练另一个机器学习模型,例如支持向量机(SVM)。有关更多信息,请参见特征提取。示例请参见利用预训练网络提取图像特征。 |
转移学习 | 从训练过大型数据集的网络中提取层,并对新数据集进行微调。有关更多信息,请参见转移学习。关于一个简单的例子,请参见开始迁移学习。要尝试更多预先训练的网络,请参见训练深度学习网络对新图像进行分类。 |
比较Pretrained网络
当选择一个网络应用于你的问题时,预训练的网络有不同的特征。最重要的特征是网络的准确性、速度和规模。选择网络通常是在这些特征之间进行权衡。使用下图比较ImageNet验证精度与使用网络进行预测所需的时间。
提示
要开始迁移学习,试着选择一个更快的网络,如SqueezeNet或GoogLeNet。然后,您可以快速迭代并尝试不同的设置,如数据预处理步骤和训练选项。一旦你对哪种设置有了感觉,可以尝试更精确的网络,如Inception-v3或ResNet,看看这是否会改善你的结果。
请注意
上图仅显示了不同网络的相对速度。准确的预测和训练迭代时间取决于您使用的硬件和小批大小。
一个好的网络具有较高的准确性和速度。图中显示了使用现代GPU (an英伟达®特斯拉®P100)和128个小批量。预测时间是相对于最快的网络来衡量的。每个标记的面积与磁盘上网络的大小成正比。
ImageNet验证集上的分类精度是衡量在ImageNet上训练的网络精度最常用的方法。当您使用迁移学习或特征提取将在ImageNet上准确的网络应用到其他自然图像数据集时,它们通常也是准确的。这种概括是可能的,因为网络已经学会了从自然图像中提取功能强大和信息丰富的特征,这些特征可以概括到其他类似的数据集。然而,ImageNet上的高精度并不总是直接转移到其他任务上,因此尝试多个网络是个好主意。
如果您希望使用受限的硬件执行预测,或者通过Internet分布网络,那么还要考虑磁盘和内存上网络的大小。
网络的准确性
在ImageNet验证集上有多种计算分类精度的方法,不同的来源使用不同的方法。有时使用多个模型的集成,有时使用多个作物对每张图像进行多次评估。有时引用的是前5个精度而不是标准(前1)精度。由于这些差异,通常不可能直接比较来自不同来源的准确性。深度学习工具箱中预训练网络的精度是使用单一模型和单一中心图像裁剪的标准(top-1)精度。
负载Pretrained网络
要加载SqueezeNet网络,输入squeezenet
在命令行。
网= squeezenet;
对于其他网络,请使用googlenet
以获取从Add-On Explorer下载预先训练过的网络的链接。
下表列出了在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上训练的网络可以提供更高的准确性。
有关适合于音频任务的预训练网络的信息,请参见音频应用预训练网络。
可视化Pretrained网络
您可以使用加载和可视化预先训练的网络深层网络设计师。
deepNetworkDesigner (squeezenet)
要查看和编辑图层属性,请选择一个图层。点击图层名称旁边的帮助图标,查看图层属性信息。
通过单击在深度网络设计器中探索其他预先训练的网络新。
如果需要下载某个网络,请在该网络上暂停,然后单击安装打开附加组件资源管理器。
特征提取
特征提取是一种使用深度学习力量的简单而快速的方法,无需投入时间和精力来训练一个完整的网络。因为它只需要在训练图像上进行一次传递,所以在没有GPU的情况下尤其有用。您可以使用预先训练的网络提取学习过的图像特征,然后使用这些特征训练分类器,例如使用支持向量机fitcsvm
(统计和机器学习工具箱)。
当您的新数据集非常小时,尝试特征提取。因为您只对提取的特征训练一个简单的分类器,所以训练速度很快。微调更深层次的网络也不太可能提高准确性,因为可供学习的数据很少。
如果您的数据与原始数据非常相似,那么从网络更深处提取的更具体的特征可能对新任务有用。
如果您的数据与原始数据非常不同,那么从网络中更深层提取的特征可能对您的任务不太有用。尝试用从早期网络层提取的更一般的特征来训练最后一个分类器。如果新的数据集很大,那么您也可以尝试从头开始训练一个网络。
resnet通常是很好的特征提取器。有关演示如何使用预训练的网络进行特征提取的示例,请参见利用预训练网络提取图像特征。
转移学习
您可以将预先训练的网络作为起点,在新数据集上训练网络,从而对网络中的更深层次进行微调。使用迁移学习对网络进行微调通常比构建和训练一个新网络更快、更容易。网络已经学习了一组丰富的图像特征,但是当您对网络进行微调时,它可以学习特定于您的新数据集的特征。如果你有一个非常大的数据集,那么迁移学习可能不会比从头开始训练更快。
提示
对网络进行微调通常能获得最高的精确度。对于非常小的数据集(每个类少于20张图像),可以尝试特征提取。
与简单的特征提取相比,对网络进行微调要慢一些,需要付出更多努力,但由于网络可以学习提取不同的特征集,最终的网络通常更准确。只要新数据集不是很小,微调通常比特征提取效果更好,因为这样网络就有数据可以从中学习新特征。有关如何执行迁移学习的示例,请参见基于深度网络设计器的迁移学习而且训练深度学习网络对新图像进行分类。
进出口网络
您可以从TensorFlow™2、TensorFlow- keras、PyTorch导入网络和层图®,以及ONNX™(开放神经网络交换)模型格式。您还可以将深度学习工具箱网络和层图导出到TensorFlow 2和ONNX模型格式。
导入功能
外部深度学习平台和模型格式 | 作为网络的导入模型 | 导入模型作为层图 |
---|---|---|
TensorFlow网络SavedModel 格式 |
importTensorFlowNetwork |
importTensorFlowLayers |
TensorFlow-Keras网络的HDF5或JSON格式 | importKerasNetwork |
importKerasLayers |
追踪PyTorch模型.pt 文件 |
importNetworkFromPyTorch |
不适用 |
ONNX模型格式的网络 | importONNXNetwork |
importONNXLayers |
的importTensorFlowNetwork
而且importTensorFlowLayers
函数推荐importKerasNetwork
而且importKerasLayers
功能。有关更多信息,请参见导入张量流模型的推荐函数。
的importTensorFlowNetwork
,importTensorFlowLayers
,importNetworkFromPyTorch
,importONNXNetwork
,importONNXLayers
当您导入带有TensorFlow层、PyTorch层或ONNX操作符的模型时,函数会创建自动生成的自定义层,这些函数不能转换为内置的MATLAB®层。函数将自动生成的自定义层保存到当前文件夹中的一个包中。有关更多信息,请参见自动生成自定义层。
导出功能
导出网络或层图 | 外部深度学习平台和模型格式 |
---|---|
exportNetworkToTensorFlow |
Python中的TensorFlow 2模型®包 |
exportONNXNetwork |
ONNX模型格式 |
的exportNetworkToTensorFlow
函数将深度学习工具箱网络或层图保存为Python包中的TensorFlow模型。有关如何加载导出模型并将其保存为标准TensorFlow格式的更多信息,请参见负载导出张量流模型而且将导出的TensorFlow模型保存为标准格式。
通过使用ONNX作为中间格式,您可以与其他支持ONNX模型导出或导入的深度学习框架进行互操作。
音频应用预训练网络
Audio Toolbox™提供了预先训练的VGGish, YAMNet, OpenL3和CREPE网络。使用vggish
(音频工具箱),yamnet
(音频工具箱),openl3
(音频工具箱),绉
(音频工具箱)的函数VGGish(音频工具箱)而且YAMNet(音频工具箱)在仿真软件®直接与预先训练的网络互动。您还可以使用导入和可视化预先训练的音频网络深层网络设计师。
下表列出了可用的预训练音频网络及其一些属性。
网络 | 深度 | 大小 | 参数(百万) | 输入的大小 |
---|---|---|---|---|
绉 (音频工具箱) |
7 | 89.1 MB |
22.2 | 1024 - 1 - 1 |
openl3 (音频工具箱) |
8 | 18.8 MB |
4.68 | 128 - 199 - 1 |
vggish (音频工具箱) |
9 | 289 MB |
72.1 | 96 - 64 - 1 |
yamnet (音频工具箱) |
28 | 15.5 MB |
3.75 | 96 - 64 - 1 |
使用VGGish和YAMNet进行迁移学习和特征提取。提取VGGish或OpenL3特征嵌入输入到机器学习和深度学习系统。的classifySound
(音频工具箱)函数和声音分类器(音频工具箱)块使用YAMNet定位和分类声音到521个类别之一。的pitchnn
(音频工具箱)函数使用CREPE进行深度学习基音估计。
有关演示如何为新任务调整预先训练的音频网络的示例,请参见使用预训练音频网络的迁移学习(音频工具箱)而且深度网络设计器中预训练音频网络的迁移学习。
有关在音频应用程序中使用深度学习的更多信息,请参见音频应用的深度学习(音频工具箱)。
Pretrained模型GitHub
要查找最新的预训练模型,请参见MATLAB深度学习模型枢纽。
例如:
有关变压器模型,如GPT-2、BERT和FinBERT,请参阅基于MATLAB的变压器模型GitHub®存储库。
有关预先训练的effecentdet - d0对象检测模型,请参见用于目标检测的预训练高效det网络GitHub库。
参考文献
[1]ImageNet。http://www.image-net.org
[2] Russakovsky, O., Deng, J., Su, H.,等。“ImageNet大规模视觉识别挑战。”国际计算机视觉杂志。2015年第3期,第211-252页
[3]周,Bolei, Aditya Khosla, Agata Lapedriza, Antonio Torralba和Aude Oliva。“地点:一个用于深入理解场景的图像数据库。”arXiv预印本arXiv: 1610.02055(2016)。
[4]的地方。http://places2.csail.mit.edu/
另请参阅
alexnet
|googlenet
|inceptionv3
|densenet201
|darknet19
|darknet53
|resnet18
|resnet50
|resnet101
|vgg16
|vgg19
|shufflenet
|nasnetmobile
|nasnetlarge
|mobilenetv2
|xception
|inceptionresnetv2
|squeezenet
|importTensorFlowNetwork
|importTensorFlowLayers
|importNetworkFromPyTorch
|importONNXNetwork
|importONNXLayers
|exportNetworkToTensorFlow
|exportONNXNetwork
|深层网络设计师
相关的话题
- MATLAB中的深度学习
- 基于深度网络设计器的迁移学习
- 利用预训练网络提取图像特征
- 使用GoogLeNet对图像进行分类
- 训练深度学习网络对新图像进行分类
- 卷积神经网络的可视化特征
- 卷积神经网络的可视化激活
- 使用GoogLeNet的深度梦境图像