主要内容

alexnet

AlexNet컨벌루션신경망

  • AlexNet网络架构

설명

AlexNet은8개계층으로구성된컨벌루션신경망입니다。ImageNet데이터베이스의1백만개가넘는영상에대해훈련된신경망의사전훈련된버전을불러올수있습니다[1].사전훈련된신경망은영상을키보드,마우스,연필,각종동물등1000가지사물범주로분류할수있습니다。그결과이신경망은다양한상을대하는다양한특징을학습했습니다。신경망의상입력크기는227×227입니다。MATLAB®의여타훈련된신경망에대한자세한내용은사전훈련된심층신경망항목을참조하십시오。

AlexNet신경망을사용하여分类로새상을분류할수있습니다。GoogLeNet을사용하여상분류하기항목의단계를따르되GoogLeNet을AlexNet으로바꾸어서수행하십시오。

深度学习入口에서는실용적딥러닝기법들을실습을통해무료로소개합니다。

예제

= alexnet은ImageNet데이터세트에서훈련된AlexNet신경망을반환합니다。

이함수를사용하려면深度学习工具箱™模型用于AlexNet网络지원패키지가필합니다。이지원패키지가설치되어있지않으면함수에서다운로드링크를제공합니다。또는深度学习工具箱模型用于AlexNet网络를참조하십시오。

Matlab의여타훈련된신경망에대한자세한내용은사전훈련된심층신경망항목을참조하십시오。

= alexnet(“权重”,“imagenet”은ImageNet데이터세트에서훈련된AlexNet신경망을반환합니다。이 구문은网络과동일합니다。

= alexnet(“权重”,“没有”은훈련되지않은AlexNet신경망아키텍처를반환합니다。훈련되지않은모델에는지원패키지가필하지않습니다。

예제

모두 축소

深度学习工具箱模型用于AlexNet网络지원패키지를다운로드하고설치합니다。

명령줄에alexnet을입력합니다。

alexnet

深度学习工具箱模型用于AlexNet网络지원패키지가설치되어있지않은경우,필요한지원패키지로연결되는애드온탐색기링크를함수에서제공합니다。지원패키지를설치하려면링크를클릭한다음설치를클릭하십시오。명령줄에alexnet을입력하여설치가성공적으로완료되었는지확하십시오。

alexnet
ans = SeriesNetwork with properties: Layers: [25×1 nnet.cnn.layer.Layer]

필한지원패키지가설치되어있는경우,함수가SeriesNetwork객체를반환합니다。

심층신경망디자이너를사용하여신경망을시각화합니다。

deepNetworkDesigner (alexnet)

새로만들기를클릭하여심층신경망디자이너에서사전훈련된다른신경망을살펴봅니다。

深度网络设计器开始页显示可用的预训练网络

신경망을다운로드해야할경우에는원하는신경망에서잠시멈추고설치를클릭하여애드온탐색기를엽니다。

이예제에서는사전훈련된AlexNet컨벌루션신경망이새로운영상모음에대해분류를수행하도록미세조정하는방법을보여줍니다。

1백만개가넘는영상에대해훈련된AlexNet은영상을키보드,커피머그잔,연필,각종동물등1000가지사물범주로분류할수있습니다。이신경망은다양한상을대하는다양한특징을학습했습니다。이신경망은영상을입력값으로받아서영상에있는사물에대한레이블과각사물범주의확률을출력합니다。

전이학습은딥러닝응용분야에서널리사용됩니다。사전훈련된신경망을새로운작업을학습하기위한출발점으로사용할수있습니다。전이학습으로신경망을미세조정하는것은무작위로초기화된가중치를사용하여신경망을처음부터훈련시키는것보다일반적으로훨씬더빠르고쉽습니다。학습된특징을보다적은개수의훈련영상을사용하여새로운작업으로빠르게전이할수있습니다。

데이터불러오기

새、상의압축을풀고、새、상데이터저장소로불러옵니다。imageDatastore는폴더이름을기준으로상에자동으로레이블을지정하고데이터를ImageDatastore객체로저장합니다。영상데이터저장소를사용하면메모리에담을수없는데이터를포함하여다량의영상데이터를저장할수있고컨벌루션신경망훈련중에영상배치를효율적으로읽어들일수있습니다。

解压缩(“MerchData.zip”);imds = imageDatastore(“MerchData”...“IncludeSubfolders”,真的,...“LabelSource”“foldernames”);

데이터를훈련데이터세트와검데이터세트로나눕니다。상의70%를훈련용으로사용하고30%를검용으로사용합니다。splitEachLabel图片데이터저장소를2개의새로운데이터저장소로분할합니다。

[imdsTrain,imdsValidation] = splitEachLabel(imds,0.7,“随机”);

이매우작은데이터세트에는이제55개의훈련영상과20개의검증영상이포함됩니다。샘플상몇개를시합니다。

numTrainImages = numel(imdsTrain.Labels);idx = randperm(numTrainImages,16);数字i = 1:16 subplot(4,4,i) i = readimage(imdsTrain,idx(i));imshow(我)结束

사전훈련된신경망불러오기

사전훈련된AlexNet신경망을불러옵니다。深度学习工具箱™模型用于AlexNet网络가설치되어있지않으면이를다운로드할수있는링크가제공됩니다。1백만개가넘는영상에대해훈련된AlexNet은영상을키보드,마우스,연필,각종동물등1000가지사물범주로분류할수있습니다。그결과이모델은다양한상을대하는다양한특징을학습했습니다。

Net = alexnet;

analyzeNetwork를사용하여신경망아키텍처에대한대화형방식시각화와신경망계층에대한상세한정보를표시합니다。

analyzeNetwork(净)

첫번째계층인영상입력계층에입력되는영상은크기가227×227×3이어야합니다。여기서3은색채널의개수입니다。

inputSize = net.Layers(1).InputSize
inputSize =1×3227 227 3

마지막계층바꾸기

사전훈련된신경망의마지막세계층은1000개의클래스에대해구성되어있습니다。이세계층을새로운분류문제에맞게미세조정해야합니다。사전훈련된신경망에서마지막3개를제외한모든계층을추출합니다。

layersTransfer = net.Layers(1:end-3);

마지막세계층을완전연결계층,소프트맥스계층,분류출력계층으로바꾸어계층을새로운분류작업으로전이합니다。새로운데이터에따라새로운완전연결계층의옵션을지정합니다。완전연결계층이새로운데이터의클래스개수와동일한크기를갖도록설정합니다。전이된계층보다새로운계층에서학습이빠르게이루어지도록하려면완전연결계층의WeightLearnRateFactor값과BiasLearnRateFactor값을높이십시오。

numClasses = numel(categories(imdsTrain.Labels))
numClasses = 5
layers = [layersTransfer fullyConnectedLayer(numClasses,“WeightLearnRateFactor”, 20岁,“BiasLearnRateFactor”,20) softmaxLayer classificationLayer];

신경망훈련시키기

이신경망의입력영상은크기가227×227×3이되어야하는데영상데이터저장소의영상은이와다른크기를갖습니다。대상데이터저장소를사용하여훈련상의크기를자동으로조정합니다。훈련상에대해추가로수행할대연산을지정합니다。즉,세로축을따라훈련영상을무작위로뒤집고,최대30개의픽셀을가로와세로방향으로무작위로평행이동합니다。데이터증대는신경망이과적합되는것을방지하고훈련영상의정확한세부정보가기억되지않도록하는데도움이됩니다。

pixelRange = [-30 30];imageAugmenter = imageDataAugmenter(...“RandXReflection”,真的,...“RandXTranslation”pixelRange,...“RandYTranslation”, pixelRange);augimdsTrain = augmentedimagedastore (inputSize(1:2)),imdsTrain,...“DataAugmentation”, imageAugmenter);

추가적인데이터증대를수행하지않고검증영상의크기를자동으로조정하려면증대영상데이터저장소를추가적인전처리연산지정없이사용하십시오。

augimdsValidation = augmentedImageDatastore(inputSize(1:2),imdsValidation);

훈련옵션을지정합니다。전이학습을위해,사전훈련된신경망의앞쪽계층의특징(전이된계층가중치)을유지합니다。전이된계층의학습을늦추려면초기학습률을작은값으로설정하십시오。이전단계에서는새로운마지막계층의학습속도를높이기위해완전연결계층의학습률인자를증가시켰습니다。이러한조합으로학습률을설정하면새로운계층에서는학습이빨라지고나머지계층에서는학습이느려집니다。전이학습을수행할때는많은횟수의纪元에대해훈련을진행하지않아도됩니다。纪元1회는전체훈련데이터세트에대한하나의완전한훈련주기를의미합니다。미니배치크기와검데이터를지정합니다。훈련 중에ValidationFrequency번의반복마다신경망이검됩니다。

选项= trainingOptions(“个”...“MiniBatchSize”10...“MaxEpochs”6...“InitialLearnRate”1的军医,...“洗牌”“every-epoch”...“ValidationData”augimdsValidation,...“ValidationFrequency”3,...“详细”假的,...“阴谋”“训练进步”);

전이된계층과새로운계층으로구성된신경망을훈련시킵니다。기본적으로trainNetwork는GPU를사용할수있으면GPU를사용하고그렇지않은경우에는CPU를사용합니다。GPU에서훈련시키려면并行计算工具箱™와지원되는GPU장치가필요합니다。지원되는장치에대한자세한내용은릴리스별gpu지원(并行计算工具箱)항목을참조하십시오。trainingOptions“ExecutionEnvironment”이름-값쌍通讯录수를사용하여실행환경을지정할수도있습니다。

netTransfer = trainNetwork(augimdsTrain,layers,options);

검상분류하기

미세조정한신경망을사용하여검상을분류합니다。

[YPred,scores] = category (netTransfer,augimdsValidation);

4개의샘플검상을예측된레이블과함께。

idx = randperm(numel(imdsValidation.Files),4);数字i = 1:4 subplot(2,2,i) i = readimage(imdsValidation,idx(i));imshow(I) label = YPred(idx(I));标题(字符串(标签));结束

검세트에대한분류정확도를계산합니다。정확도는신경망이올바르게예측하는레이블의비율입니다。

YValidation = imdsValidation.Labels;accuracy = mean(YPred == YValidation)
准确度= 1

분류정확도를높이기위한팁을보려면딥러닝팁과령항목을참조하십시오。

AlexNet을사용하여상을읽어들이고,크기를조정하고,분류합니다。먼저사전훈련된AlexNet모델을불러옵니다。

Net = alexnet;

imread를사용하여상을읽어들입니다。

I = imread(“peppers.png”);图imshow(我)

사전훈련된모델을사용하려면상크기가신경망의입력크기와같아야합니다。신경망의첫번째계층의InputSize속성을사용하여신경망의입력크기를확합니다。

sz = net.Layers(1).InputSize
深圳=1×3227 227 3

상의크기를신경망의입력크기에맞게조정합니다。

I = imresize(I,sz(1:2));图imshow(我)

分类를사용하여상을분류합니다。

分类(net,I)
标签=分类甜椒

@ @상을분류결과와함께@ @시합니다。

图imshow(I) title(label)

이예제에서는사전훈련된컨벌루션신경망에서학습된영상특징을추출한다음추출한특징을사용하여영상분류기를훈련시키는방법을보여줍니다。특징추출은사전훈련된심층신경망의강력한표현기능을가장쉽고빠르게사용하는방법입니다。예를들어,추출된특징에대해fitcecoc(统计和机器学习的工具箱™)를사용하여서포트벡터머신(SVM)을훈련시킬수있습니다。특징추출은데이터를한번만통과하면되기때문에신경망훈련을가속할GPU가없을때시도할수있는좋은출발점이됩니다。

데이터불러오기

샘플、상의압축을풀고、샘플、상데이터저장소로서불러옵니다。imageDatastore는폴더이름을기준으로상에자동으로레이블을지정하고데이터를ImageDatastore객체로저장합니다。영상데이터저장소를사용하면메모리에담을수없는데이터를포함하여다량의영상데이터를저장할수있습니다。데이터를훈련데이터70%와테스트데이터30%로분할합니다。

解压缩(“MerchData.zip”);imds = imageDatastore(“MerchData”...“IncludeSubfolders”,真的,...“LabelSource”“foldernames”);[imdsTrain,imdsTest] = splitEachLabel(imds,0.7,“随机”);

이매우작은데이터세트에는이제55개의훈련영상과20개의검증영상이있습니다。샘플상몇개를시합니다。

numImagesTrain = numel(imdsTrain.Labels);idx = randperm(numImagesTrain,16);i = 1:16 i {i} = readimage(imdsTrain,idx(i));结束图imshow (imtile(我))

사전훈련된신경망불러오기

사전훈련된AlexNet신경망을불러옵니다。深度学习工具箱模型用于AlexNet网络지원패키지가설치되어있지않으면이를다운로드할수있는링크가제공됩니다。1백만개가넘는영상에대해훈련된AlexNet은영상을1000가지사물범주로분류할수있습니다。키보드,마우스,연필,각종동물등을예로들수있습니다그결과이모델은다양한상을대하는다양한특징을학습했습니다。

Net = alexnet;

신경망아키텍처를@ @시합니다。이신경망은5개의컨벌루션계층과3개의완전연결계층을갖습니다。

网层
ans = 25x1带有图层的图层数组:227 x227x3数据的图像输入图像的zerocenter正常化2 conv1卷积96年11 x11x3旋转步[4 4]和填充[0 0 0 0]3‘relu1 ReLU ReLU 4 norm1的横通道正常化横通道正常化与5频道/元素5“pool1”马克斯池3 x3马克斯池步(2 - 2)和填充[0 0 0 0]6“conv2”分组卷积2组128 5 x5x48旋转步[1]和填充(2 2 2 2)7的relu2 ReLU ReLU 8 norm2交叉道标准化交叉道正常化与5频道/元素9“pool2”马克斯池3 x3马克斯池步[2 2]和填充[0 0 0 0]10 conv3卷积384 3 x3x256旋转步[1]和填充[1 1 1 1]11的relu3 ReLU ReLU 12“conv4”分组卷积2组192 3 x3x192旋转步[1]和填充[1 1 1 1]13的relu4 ReLU ReLU 14“conv5”分组卷积2组128 3 x3x192旋转步[1]和填充(1 1 1)15'relu5' ReLU ReLU 16 'pool5'最大池化3x3最大池化与stride[2 2]和填充[0 000 0]17 'fc6'全连接4096全连接层18 'relu6' ReLU ReLU 19 'drop6' drop6' Dropout 50% Dropout 20 'fc7'全连接4096全连接层21 'relu7' ReLU ReLU 22 'drop7' Dropout 50% Dropout 23 'fc8'全连接1000全连接层24 'prob' Softmax Softmax 25 'output'分类输出crossentropyex与'tench'和999其他类

첫번째계층인영상입력계층에입력되는영상은크기가227×227×3이어야합니다。여기서3은색채널의개수입니다。

inputSize = net.Layers(1).InputSize
inputSize =1×3227 227 3

상특징추출하기

신경망은입력상에대한계층현을생성합니다。보다심층의계층에는앞쪽계층의하위수준특징을사용하여생성한상위수준의특징이포함됩니다。훈련、상과테스트、상의특징、현을가져오려면완전연결계층“fc7”에서激活를사용하십시오。@ @상의하위수준@ @현을가져오려면신경망의앞쪽계층을사용하십시오。

이신경망의입력영상은크기가227×227×3이되어야하는데영상데이터저장소의영상은이와다른크기를갖습니다。신경망에입력하기전에훈련영상과테스트영상의크기를자동으로조정하려면증대영상데이터저장소를만들고원하는영상크기를지정한다음이러한데이터저장소를激活에대한입력수로사용하십시오。

augimdsTrain = augmentedImageDatastore(inputSize(1:2),imdsTrain);augimdsTest = augmentedImageDatastore(inputSize(1:2),imdsTest);层=“fc7”;featuresTrain =激活(net,augimdsTrain,layer,“OutputAs”“行”);featuresTest =激活(net,augimdsTest,layer,“OutputAs”“行”);

훈련데이터와테스트데이터로부터클래스레이블을추출합니다。

YTrain = imdsTrain.Labels;YTest = imdsTest.Labels;

상분류기피팅하기

훈련상으로부터추출한특징을예측변수로사용하고fitcecoc(统计和机器学习的工具箱)를사용하여다중클래스서포트벡터머신(SVM)을피팅합니다。

mdl = fitcecoc(featuresTrain,YTrain);

테스트상분류하기

훈련된SVM모델과테스트영상으로부터추출한특징을사용하여테스트영상을분류합니다。

YPred = predict(mdl, featurest);

4개의샘플테스트상을예측된레이블과함께시합니다。

Idx = [1 5 10 15];数字i = 1: nummel (idx) subplot(2,2,i) i = readimage(imdsTest,idx(i));标签= YPred(idx(i));imshow (I)标题(标签)结束

테스트세트에대한분류정확도를계산합니다。정확도는신경망이올바르게예측하는레이블의비율입니다。

accuracy = mean(YPred == YTest)
准确度= 1

이svm은높은정확도를갖습니다。특징추출을사용했을때의정확도가충분히높지않다면그대신전이학습을사용해보십시오。

출력marketing수

모두 축소

사전훈련된AlexNet컨벌루션신경망으로,SeriesNetwork객체로반환됩니다。

훈련되지않은AlexNet컨벌루션신경망아키텍처로,배열로반환됩니다。

  • 深度学习入口에서는실용적딥러닝기법들을실습을통해무료로소개합니다。

참고 문헌

[1] ImageNet。http://www.image-net.org

[2]卢萨可夫斯基,O.,邓J.,苏H.,等。ImageNet大规模视觉识别挑战赛国际计算机视觉杂志(IJCV)。115卷,第3期,2015年,第211-252页

[3] Krizhevsky, Alex, Ilya Sutskever和Geoffrey E. Hinton。深度卷积神经网络的ImageNet分类神经信息处理系统的进展。2012.

[4] BVLC AlexNet模型。https://github.com/BVLC/caffe/tree/master/models/bvlc_alexnet

확장 기능

버전 내역

R2017a에개발됨