您可以使用一个已经学会从自然图像中提取强大且信息丰富的特征的预训练图像分类网络,并将其用作学习新任务的起点。大多数预先训练过的网络都是在ImageNet数据库的一个子集上训练的[1],用于图像网大规模视觉识别挑战(ILSVRC)[2]。这些网络已经对100多万张图像进行了训练,可以将图像分类为1000个对象类别,如键盘、咖啡杯、铅笔和许多动物。使用带有迁移学习的预训练网络通常比从头训练网络要快得多,也容易得多。
你可以使用以前训练过的网络完成以下任务:
目的 | 描述 |
---|---|
分类 | 将预先训练好的网络直接应用于分类问题。要分类一个新的图像,使用 |
特征提取 | 使用一个预先训练的网络作为特征提取器,使用层激活作为特征。您可以使用这些激活作为特性来训练另一个机器学习模型,比如支持向量机(SVM)。万博1manbetx有关更多信息,请参见特征提取。例如,请参阅利用预先训练好的网络提取图像特征。 |
转移学习 | 从在大数据集上训练过的网络中提取层,并在新数据集上进行微调。有关更多信息,请参见转移学习。有关一个简单的示例,请参见从迁移学习开始。尝试更多预先训练过的网络,看训练深度学习网络对新图像进行分类。 |
预先训练过的网络有不同的特点,当选择一个网络来应用于你的问题时,这些特点很重要。最重要的特征是网络精度、速度和大小。选择一个网络通常是在这些特性之间进行权衡。使用下面的图比较ImageNet验证准确性和使用网络进行预测所需的时间。
要开始迁移学习,试着选择一个更快的网络,如SqueezeNet或GoogLeNet。然后,您可以快速迭代并尝试不同的设置,比如数据预处理步骤和训练选项。一旦您感觉哪种设置工作得好,尝试一个更准确的网络,如incepo -v3或ResNet,看看是否能改善您的结果。
上面的图只是显示了不同网络的相对速度。准确的预测和训练迭代时间取决于您使用的硬件和小批量的大小。
一个好的网络具有高的精度和快速。图显示分类精度vs预测时间时使用现代GPU (an英伟达®特斯拉®P100)和一个小型批大小128。预测时间是相对于最快的网络来测量的。每个标记的面积与磁盘上网络的大小成比例。
ImageNet验证集上的分类精度是衡量在ImageNet上训练的网络精度的最常用方法。ImageNet上精确的网络在使用传输学习或特征提取将它们应用到其他自然图像数据集时也通常是准确的。这种泛化之所以成为可能,是因为网络已经学会了从自然图像中提取强大的、信息量大的特征,这些特征可以泛化到其他类似的数据集。但是,ImageNet上的高精度并不总是直接传输到其他任务上,因此尝试多网络是一个好主意。
如果您希望使用受限的硬件或通过Internet分发网络来执行预测,那么还要考虑磁盘和内存中网络的大小。
有多种方法可以计算ImageNet验证集上的分类精度,不同的源使用不同的方法。有时使用多个模型的集合,有时使用多种作物对每张图像进行多次评估。有时引用的是前5的准确性,而不是标准的(前1)准确性。由于这些差异,通常不可能直接比较来自不同来源的准确性。深度学习工具箱™中预训练网络的准确率是标准的(top-1)准确率,使用单一模型和单一中心图像裁剪。
要装入挤压网,键入squeezenet
在命令行。
网= squeezenet;
对于其他网络,使用功能如googlenet
获取从插件资源管理器下载预训练网络的链接。
下表列出了在ImageNet上训练的可用的预训练网络及其一些属性。网络深度定义为从输入层到输出层的路径上最大数量的顺序卷积层或全连接层。所有网络的输入都是RGB图像。
网络 | 深度 | 大小 | 参数(百万) | 图像输入大小 |
---|---|---|---|---|
squeezenet |
18 | 4.6 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 | 6.3 MB | 1.4 | 224年- 224年 |
nasnetmobile |
* | 20 MB | 5.3 | 224年- 224年 |
nasnetlarge |
* | 360 MB | 88.9 | 331年- 331年 |
darknet19 |
19 | 72.5 MB | 21.0 | 256年- 256年 |
darknet53 |
53 | 145 MB | 41.0 | 256年- 256年 |
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网络是在ImageNet数据集上训练的,但是您也可以加载在Places365数据集上训练好的网络[3][4]。在Places365上接受训练的网络将图像分为365个不同的位置类别,如场地、公园、跑道和大厅。要加载在Places365数据集上训练好的预先训练好的GoogLeNet网络,请使用googlenet(“重量”、“places365”)
。在执行迁移学习以执行新任务时,最常见的方法是使用在ImageNet上预先训练好的网络。如果新的任务类似于对场景进行分类,那么使用在Places365上训练过的网络可以获得更高的准确率。
特征提取是使用深度学习的强大功能的一种简单而快速的方法,无需花费时间和精力来训练整个网络。因为它只需要一个单一的通过训练图像,它是特别有用的,如果你没有一个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导入预先训练好的网络importCaffeNetwork
函数。在Caffe模型动物园中有许多预先训练好的网络可用[5]。下载所需的.prototxt
和.caffemodel
文件和使用importCaffeNetwork
将预训练好的网络导入MATLAB®。有关更多信息,请参见importCaffeNetwork
。
您可以导入Caffe网络的网络架构。下载所需的.prototxt
文件,并使用importCaffeLayers
将网络层导入到MATLAB中。有关更多信息,请参见importCaffeLayers
。
通过使用ONNX作为中间格式,您可以与其他支持ONNX模型导出或导入的深度学习框架进行互操作,例如TensorFlow、PyTorch、咖啡厅2、Microsoft万博1manbetx®认知工具包(CNTK)、Core ML和Apache MXNet™。
将一个经过训练的深度学习工具箱网络导出为ONNX模型格式exportONNXNetwork
函数。然后可以将ONNX模型导入到其他支持ONXX模型导入的深度学习框架中。万博1manbetx
使用从ONNX导入预先训练好的网络importONNXNetwork
并导入使用或不使用权重的网络架构importONNXLayers
。
[1]ImageNet。http://www.image-net.org
鲁索夫斯基,邓俊杰,苏,等。“ImageNet大规模视觉识别的挑战”。国际计算机视觉杂志(IJCV)。2015年第3期第115卷第211-252页
周,波雷,阿迪提亚·科斯拉,阿加塔·拉派德丽扎,安东尼奥·托拉尔巴和奥德·奥利瓦。“地方:深入理解场景的图像数据库。”arXiv预印本arXiv: 1610.02055(2016)。
[4]的地方。http://places2.csail.mit.edu/
[5]咖啡模型动物园。http://caffe.berkeleyvision.org/model_zoo.html
深层网络设计师|alexnet
|darknet19
|darknet53
|densenet201
|exportONNXNetwork
|googlenet
|importCaffeLayers
|importCaffeNetwork
|importKerasLayers
|importKerasNetwork
|importONNXLayers
|importONNXNetwork
|inceptionresnetv2
|inceptionv3
|mobilenetv2
|nasnetlarge
|nasnetmobile
|resnet101
|resnet18
|resnet50
|shufflenet
|squeezenet
|vgg16
|vgg19
|xception