主要内容

创建SSD对象检测网络

此示例显示如何修改预训练的MobileNet v2网络以创建SSD对象检测网络。

将预训练网络转换为SSD网络的过程类似于图像分类的转移学习过程:

  1. 加载预训练网络。

  2. 从预训练网络中选择一个或多个层以用于特征提取。

  3. 删除特征提取层之后的所有层

  4. 添加新层以支持对象检测任务。金宝app

负荷预训练网络

使用加载预训练的MobileNet v2网络mobilenetv2. 这需要MobileNet v2网络的深度学习工具箱模型™ 支持包。如果未安装此支持包,则该功能将提供下载链接。加载网络后,将网络转换为金宝app分层图对象,以便可以操纵图层。

net=mobilenetv2();lgraph=layerGraph(net);

更新网络输入大小

更新网络输入大小以满足训练数据要求。例如,假设训练数据为300×300 RGB图像。设置输入大小。

imageInputSize=[300 3];

接下来,创建一个与原始层同名的新图像输入层。

imgLayer=imageInputLayer(imageInputSize,“姓名”,“输入_1”);

用新的图像输入层替换旧的图像输入层。

lgraph=替换层(lgraph,“输入_1”,imgLayer);

选择特征提取图层

SSD使用多个功能映射预测对象位置。通常,您可以选择具有不同输出大小的功能提取层,以利用多比例功能的优势。您可以使用分析网络函数或Deep Network Designer应用程序来确定网络中图层的输出大小。请注意,选择最佳的一组特征提取图层需要进行经验评估。

为简洁起见,此示例演示了使用一个特征提取层。将特征提取层设置为“块12添加”.

特征提取层=“块12添加”;

删除特征提取层之后的层

接下来,删除特征提取层之后的层。您可以通过将网络导入到Deep network Designer应用程序、手动删除层并将修改后的网络导出到您的工作区来完成此操作。

对于本例,加载修改后的网络,该网络已作为支持文件添加到此示例中。金宝app

修改=负载(“mobilenetv2Block12Add.mat”); lgraph=modified.mobilenetw2block12add;

附着锚定层

指定锚定框和对象类的数量,并使用anchorBoxLayer创建锚定框层。

numClasses=5;锚点盒=[16 16 32 16];锚点盒=锚点盒层(锚点盒,“姓名”,“锚定”);

将锚定框图层附着到特征提取图层。

lgraph=添加层(lgraph,anchorBox);lgraph=连接层(lgraph,“块12添加”,“锚定”);

创建SSD分类分支

创建一个卷积层,其中卷积过滤器的数量等于努曼彻斯泰晤士报numClasses+1。附加类表示后台类。

numAnchors=size(锚定框,1);numClassesPlusBackground=numClasses+1;numClsFilters=numAnchors*numClassesPlusBackground;filterSize=3;conv=convolution2dLayer(filterSize,numClsFilters,...“姓名”,“分类”,...“填充”,“相同”);

添加卷积层并将其连接到锚定框层。

lgraph=addLayers(lgraph,conv);lgraph=connectLayers(lgraph,“锚定”,“分类”);

创建SSD回归分支

创建一个卷积层,其中卷积过滤器的数量等于锚定框数量的四倍。

numRegFilters=4*numAnchors;conv=Recolution2DLAYER(过滤器化,numRegFilters,...“姓名”,“回归”,...“填充”,“相同”);

添加卷积层并将其连接到锚定框层。

lgraph=addLayers(lgraph,conv);lgraph=connectLayers(lgraph,“锚定”,“回归”);

合并分类特征

创建一个ssdMergeLayer使用类的数量和特征提取层的数量初始化。

numFeatureExtractionLayers=numel(featureExtractionLayer);mergeClassification=ssdMergeLayer(NumClassSplusBackground,numFeatureExtractionLayers,...“姓名”,“合并分类”);

添加SSD合并层并将其连接到康维分类

lgraph=addLayers(lgraph,合并分类);lgraph=connectLayers(lgraph,“分类”,“合并分类/in1”);

合并回归特征

创建一个ssdMergeLayer使用用于优化定位框位置的坐标偏移数和特征提取层数初始化。

numCoordinates=4;mergeRegression=ssdMergeLayer(numCoordinates,numFeatureExtractionLayers,...“姓名”,“合并回归”);

添加SSD合并层并将其连接到康复归

lgraph=addLayers(lgraph,合并回归);lgraph=连接层(lgraph,“回归”,“合并回归/in1”);

完整的SSD检测网络

要完成分类分支,请创建并附加softmax层和焦点损耗层。

clsLayers=[softmaxLayer(“姓名”,“softmax”)聚焦层(“姓名”,“焦点”) ]; lgraph=添加层(lgraph,clsLayers);lgraph=连接层(lgraph,“合并分类”,“softmax”);

要完成回归分支,请创建并附着长方体回归层。

reg=RCNNBOX回归层(“姓名”,“盒回归”);lgraph=addLayers(lgraph,reg);lgraph=connectLayers(lgraph,“合并回归”,“盒回归”);

使用分析网络检查网络。

分析网络(lgraph)

SSD网络是完整的,可以使用列车检测器作用