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.