www.gusucode.com > IPCV_Eval_Kit_R2019a_0ce6858工具箱源码程序matlab > IPCV_Eval_Kit_R2019a_0ce6858/code/demo_files/I5_06_3_1_semanticSeg_FCN.m
%% FCN(Fully Convolutional Network)偵傛傞僙儅儞僥傿僢僋僙僌儊儞僥乕僔儑儞 %% 弶婜壔 clear; close all ;clc; rng('default'); %% 妛廗僨乕僞偺弨旛 dataSetDir = fullfile(toolboxdir('vision'),'visiondata','triangleImages'); imageDir = fullfile(dataSetDir,'trainingImages'); imds = imageDatastore(imageDir); %% 儔儀儖僨乕僞偺弨旛 classNames = ["triangle","background"]; labelIDs = [255 0]; labelDir = fullfile(dataSetDir,'trainingLabels'); pxds = pixelLabelDatastore(labelDir,classNames,labelIDs); %% 妛廗僨乕僞偲儔儀儖僨乕僞偺壜帇壔 I = read(imds); C = read(pxds); I = imresize(I,5); L = imresize(uint8(C),5); figure, imshowpair(I,L,'montage') %% 妛廗僨乕僞偺弨旛 augmenter = imageDataAugmenter('RandRotation',[-10 10],'RandXReflection',true) trainingData = pixelLabelImageDatastore(imds,pxds,'DataAugmentation',augmenter) %% FCN偺弨旛 numFilters = 64; filterSize = 3; numClasses = 2; layers = [ imageInputLayer([32 32 1]) convolution2dLayer(filterSize,numFilters,'Padding',1) reluLayer() maxPooling2dLayer(2,'Stride',2) convolution2dLayer(filterSize,numFilters,'Padding',1) reluLayer() transposedConv2dLayer(4,numFilters,'Stride',2,'Cropping',1); convolution2dLayer(1,numClasses); softmaxLayer() pixelClassificationLayer() ] % VGG16儀乕僗偺FCN傪峔抸偡傞fcnLayers傕巊梡壜擻 % (偨偩偟丄夋憸偑224x224埲忋昁梫) % layers = fcnLayers([224 224],numClasses); %% 妛廗僆僾僔儑儞 opts = trainingOptions('sgdm', ... 'InitialLearnRate',1e-3, ... 'MaxEpochs',100, ... 'MiniBatchSize',64,... 'Plots','training-progress'); %% 儔儀儖偺昿搙偐傜廳傒寁嶼 tbl = countEachLabel(trainingData) totalNumberOfPixels = sum(tbl.PixelCount); frequency = tbl.PixelCount / totalNumberOfPixels; classWeights = 1./frequency layers(end) = pixelClassificationLayer('Classes',tbl.Name,'ClassWeights',classWeights); %% 妛廗 net = trainNetwork(trainingData,layers,opts); %% 僥僗僩夋憸偱昡壙 testImage = imread('triangleTest.jpg'); imshow(testImage) C = semanticseg(testImage,net); B = labeloverlay(testImage,C); imshow(B) %% % Copyright 2018 The MathWorks, Inc.