有相当多的型号可供选择,而且随着时间的推移,这个名单只会继续变长。这有很多原因。这也可能让人有些畏惧:你如何选择,你如何知道自己做出了正确的选择?
我不愿意把所有预先训练过的模型看成一长串的选项,我更愿意把它们分类。
这些模型具有简单的体系结构,可以让您自信地启动和运行。它们往往有更少的层,并允许快速迭代预处理和训练选项。一旦掌握了如何训练模型,就可以进入下一节,看看是否可以改进结果。
从这里开始:GoogLeNet, VGG-16, VGG-19和AlexNet
这些模型包括基于图像的工作流程,如图像分类、对象检测和语义分割。大多数网络,包括上面的基本模型,都属于这一类。基本模型和高精度模型的不同之处在于,这些模型需要更多的训练时间,网络结构更加复杂。
从这里开始:ResNet-50, Inception-v3, Densenet-201,例外
对象检测工作流。DarkNet-19和DarkNet-53经常被推荐作为检测和YOLO类型工作流程的基础。我也看到过ResNet-50与Faster R-CNN一起使用,所以这里也有一些灵活性。我们将在下面的问题中深入了解物体检测的更多细节。
语义分割。你可以把一个网络变成一个当转向硬件时,模型大小变得越来越重要。这些型号的设计意图是为树莓派(Raspberry Pi)等嵌入式设备提供低内存占用。
从这里开始:SqueezeNet, MobileNet-v2, ShuffLeNet, NASNetMobile
这些模型具有简单的体系结构,可以让您自信地启动和运行。它们往往有更少的层,并允许快速迭代预处理和训练选项。一旦掌握了如何训练模型,就可以进入下一节,看看是否可以改进结果。
从这里开始:GoogLeNet, VGG-16, VGG-19和AlexNet
这些模型包括基于图像的工作流程,如图像分类、对象检测和语义分割。大多数网络,包括上面的基本模型,都属于这一类。与基本模型不同的是,高精度模型可能需要更多的训练时间,网络结构也更加复杂。
从这里开始:ResNet-50, Inception-v3, Densenet-201,例外
对象检测工作流。DarkNet-19和DarkNet-53经常被推荐作为检测和YOLO类型工作流程的基础。我也看到过ResNet-50与Faster R-CNN一起使用,所以这里也有一些灵活性。我们将在下面的问题中深入了解物体检测的更多细节。
语义分割。你可以把一个网络变成一个当转向硬件时,模型大小变得越来越重要。这些型号旨在具有低内存占用,用于嵌入式设备,如Raspberry Pi™。
从这里开始:SqueezeNet, MobileNet-v2, ShuffLeNet, NASNetMobile
这些只是一般的指导方针,以便在尝试选择模型时给您一些指导。我将从第一类开始,并在必要时继续使用更复杂的模型。就我个人而言,我认为使用AlexNet作为起点并没有什么错。这是一个很容易理解的架构五月根据问题适当地执行。
对于你的任务可能没有一个正确的选择。当模型精确地执行给定任务时,您就会知道您有了一个可接受的模型。你认为可接受的准确度水平在不同的应用中有很大的不同。想想谷歌在购物时的错误建议和错过的暴风雪警告之间的区别。
为您的应用程序尝试各种预训练的网络是确保获得最精确和最健壮模型的关键。当然,网络体系结构只是你要取得成功所需要的众多拨号中的一个。
首先简单介绍一下数据输入模型的背景知识。
所有预先训练的模型都有一个输入数据结构的期望,以便重新训练网络或预测新的数据。如果您的数据不符合模型的期望,您会发现自己在问这些问题。
有趣的是:你是操纵数据,还是操纵模型?
彩色图像通常以RGB格式表示,其中三层代表每个平面的红、绿、蓝颜色。灰度图像只包含一层而不是三层。可以复制灰度图像的单层来创建网络所期望的输入结构,如下图所示。
看一幅色彩非常丰富的图像,注意RGB平面看起来像三个灰度图像结合起来形成一个彩色图像。
不那么简单的方法是更改模型.为什么有人要费这么大劲去操纵模型而不是数据呢?
您可用的输入数据将为您确定这一点。
假设你的图像是1000x1000px,你的模型接受10x10px大小的图像。如果你调整你的图像大小为10x10px,你会留下一个输入图像的噪声。在这种情况下,您希望更改模型的输入层,而不是您的输入。
在我尝试用MATLAB之前,我认为操纵模型输入是一项复杂的任务,但它并没有那么糟糕。我保证。你要做的就是:
3.删除当前输入层并将其替换为新层。这使您能够更改输入大小。
4.导出模型,您就可以将其用于迁移学习应用程序了。我建议用它真的非常简单,你可以改变预先训练模型的输入大小,而无需手工编码。
在v2上定位较小的物体。YOLO首先使用特征提取网络(使用预先训练过的模型,如ResNet-50或DarkNet-19),然后进行本地化。
所以为什么导入预训练的YOLO模型到MATLAB?YOLO是用于对象检测的最流行的算法之一。物体检测比简单的物体识别问题带来更多的挑战。使用对象检测,您不仅需要识别对象,还需要确定它的位置。
有两类物体探测器:YOLO是一种单级探测器,Faster R-CNN是两级探测器。
有许多对象检测的应用程序需要进一步探索,但我强烈建议从一个简单的对象检测示例开始并从这里开始构建。
导入经过预训练的网络后,您可以选择以下方式冻结权重:
冻结所有初始层:
冻结各个图层:
函数层= freezeWeights(层)
为2 = 1:尺寸(层,1)
道具=属性(层(2));
为p = 1:元素个数(道具)
propName =道具{p};
如果~ isempty(正则表达式(propName“美元LearnRateFactor”,“一次”))
层(ii)。(propName) = 0;
结束
结束
结束
结束
冻结重量有两个好处,你可以:
在一个地方找到所有的列。
浏览由深度学习研究社区开发的模型体系结构。
浏览关于构建和修改ResNet-18模型的短视频。