此示例显示如何修改预训练的MobileNet v2网络以创建SSD对象检测网络。
将预训练网络转换为SSD网络的过程类似于图像分类的转移学习过程:
加载预训练网络。
从预训练网络中选择一个或多个层以用于特征提取。
删除特征提取层之后的所有层
添加新层以支持对象检测任务。金宝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添加”,“锚定”);
创建一个卷积层,其中卷积过滤器的数量等于努曼彻斯
泰晤士报numClasses+1
。附加类表示后台类。
numAnchors=size(锚定框,1);numClassesPlusBackground=numClasses+1;numClsFilters=numAnchors*numClassesPlusBackground;filterSize=3;conv=convolution2dLayer(filterSize,numClsFilters,...“姓名”,“分类”,...“填充”,“相同”);
添加卷积层并将其连接到锚定框层。
lgraph=addLayers(lgraph,conv);lgraph=connectLayers(lgraph,“锚定”,“分类”);
创建一个卷积层,其中卷积过滤器的数量等于锚定框数量的四倍。
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”);
要完成分类分支,请创建并附加softmax层和焦点损耗层。
clsLayers=[softmaxLayer(“姓名”,“softmax”)聚焦层(“姓名”,“焦点”) ]; lgraph=添加层(lgraph,clsLayers);lgraph=连接层(lgraph,“合并分类”,“softmax”);
要完成回归分支,请创建并附着长方体回归层。
reg=RCNNBOX回归层(“姓名”,“盒回归”);lgraph=addLayers(lgraph,reg);lgraph=connectLayers(lgraph,“合并回归”,“盒回归”);
使用分析网络
检查网络。
分析网络(lgraph)
SSD网络是完整的,可以使用列车检测器
作用