效率网培训时间: ImageNet公司

识别图像中的主要对象

2019年发布的这一系列模型是通过使用一种新方法均匀缩放基线卷积网络的宽度、深度和分辨率而获得的。与在ImageNet上训练的现有分类模型相比,EfficientNets在准确性和推理时间方面都有显著的性能提升。特别是,EfficientNet-B7超过了GPipe精度(Huang等人,2018),使用的参数少了约8.4倍,推理速度快了约6.1倍。此外,这些模型已成功用于CIFAR-100、Flowers、Birdsnap、Stanford Cars等数据集的转移学习,仍优于现有的最先进网络。

型号:6

训练集信息

性能

示例

资源检索

获取预先训练过的网:

在[1]中:=
NetModel[“在ImageNet上培训的EfficientNet”]
输出[1]=

NetModel参数

该模型由一系列单独的网络组成,每个网络由特定的参数组合标识。检查可用参数:

在[2]中:=
NetModel[“在ImageNet上培训的EfficientNet”,“ParametersInformation”]
输出[2]=

通过指定参数选择非默认网络:

在[3]中:=
NetModel[{“在ImageNet上训练的EfficientNet”,“架构”->“B5”}]
输出[3]=

选择一个非默认的未初始化网络:

在[4]中:=
NetModel[{“在ImageNet上训练的EfficientNet”,“架构”->“B5”},“未初始化的EvaluationNet”]
输出[4]=

基本用法

对图像进行分类:

在[5]中:=
(*评估此单元格以获取示例输入*)CloudGet[“https://www.wolframcloud.com/obj/021af06e-4c1e-42e9-b694-d29dcd947319"]
输出[5]=

预测是一个实体对象,可以查询:

在[6]中:=
pred[“定义”]
输出[6]=

获取预测的可用属性的列表实体以下为:

在[7]中:=
pred[“属性”]
输出[7]=

获得净预测的10个最可能实体的概率:

在[8]中:=
(*评估此单元格以获取示例输入*)CloudGet[“https://www.wolframcloud.com/obj/677689c0-8469-4e34-b67e-715f8d51ee2c"]
输出[8]=

ImageNet类列表之外的对象将被错误识别:

在[9]中:=
(*评估此单元格以获取示例输入*)CloudGet[“https://www.wolframcloud.com/obj/7bd1c7df-47c8-499f-83b5-6cd72bad35df"]
输出[9]=

获取所有可用类的名称列表:

在[10]中:=
实体值[NetExtract[NetModel[“在ImageNet上培训的EfficientNet”],“输出”][[“标签”]],“名称”]
输出[10]=

特征提取

删除训练后的网络的最后两层,以便网络生成图像的矢量表示:

在[11]中:=
提取器=Take[NetModel[“在ImageNet上训练的EfficientNet”],{1,-3}]
输出[11]=

获取一组图像:

在[12]中:=
(*评估此单元格以获取示例输入*)CloudGet[“https://www.wolframcloud.com/obj/eb3a80ec-5c1e-4560-b555-4f41d8d90643"]

可视化一组图像的特征:

在[13]中:=
FeatureSpacePlot[imgs,FeatureExtractor->提取器,LabelingSize->200,ImageSize->Full,AspectRatio->1/2]功能空间图[imgs,FeatureExtractor->提取器,LabelingSize->200,ImageSize->Full,AspectRatio->1/2]
输出[13]=

可视化卷积权重

提取训练网络中第一个卷积层的权重:

在[14]中:=
NetModel[“在ImageNet上培训的EfficientNet”]
输出[14]=
在[15]中:=
weights=净提取[NetModel[“在ImageNet上训练的EfficientNet”],{“stem_conv”,“Weights”}];

显示重量的尺寸:

在[16]中:=
尺寸[重量]
输出[16]=

将权重可视化为32张3x3大小图像的列表:

在[17]中:=
ImageAdjust[Image[#,Interleaving->False]]和/@Normal[weights]
输出[17]=

转移学习

使用预训练模型构建分类器来区分摩托车和自行车的图像。创建测试集和培训集:

在[18]中:=
(*评估此单元格以获取示例输入*)CloudGet[“https://www.wolframcloud.com/obj/5e44ac16-b75c-4422-a458-336007634336"]
在[19]中:=
(*评估此单元格以获取示例输入*)CloudGet[“https://www.wolframcloud.com/obj/27ba9f1d-5773-4240-adb8-7af28e8ec14e网址"]

从预处理网中去除线性层:

在[20]中:=
tempNet=Take[NetModel[“在ImageNet上训练的EfficientNet”],{1,-3}]
输出[20]=

创建一个新的网络,该网络由预处理网络、线性层和softmax层组成:

在[21]中:=
newNet=NetChain[<|“preparainedNet”->tempNet,“linearNew”->LinearLayer[],“softmax”->SoftmaxLayer[]|>,“Output”->NetDecoder[{“Class”,{“bickle”,“motoric”}}]]
输出[21]=

对数据集进行训练,冻结除“linearNew”层中的权重之外的所有权重(使用目标设备->“GPU”用于在GPU上进行培训):

在[22]中:=
trainedNet=NetTrain[newNet,trainSet,LearningRateMultipler->{“linearNew”->1,_->0}]
输出[22]=

在测试集上获得了完美的精度:

在[23]中:=
分类器测量[trainedNet,testSet,“准确性”]
输出[23]=

净信息

检查网络中所有阵列的参数数量:

在[24]中:=
信息[NetModel[“在ImageNet上培训的EfficientNet”],“ArraysElementCounts”]
输出[24]=

获取参数总数:

在[25]中:=
信息[NetModel[“在ImageNet上培训的EfficientNet”]\“ArraysTotalElementCount”]
输出[25]=

获取层类型计数:

在[26]中:=
信息[NetModel[“在ImageNet上培训的EfficientNet”],“LayerTypeCounts”]
输出[26]=

导出到MXNet

导出将网络转换为可在MXNet中打开的格式:

在[27]中:=
jsonPath=Export[FileNameJoin[{$TemporaryDirectory,“net.json”}],NetModel[“在ImageNet上训练的EfficientNet”],“MXNet”
输出[27]=

导出还创建了网络参数包含参数的文件:

在[28]中:=
paramPath=FileNameJoin[{DirectoryName[jsonPath],“net.params”}]
输出[28]=

获取参数文件的大小:

在[29]中:=
文件字节计数[paramPath]
输出[29]=

要求

Wolfram语言12.1(2020年3月)或以上

资源历史记录

参考