Rede Unet
Unet é uma estrutura de rede neural que combina uma estrutura de codificação-decodificação e é uma rede de segmentação semântica. É amplamente utilizado em aplicações relacionadas à segmentação de imagens médicas. O uso do matlab pode realizar rapidamente a definição e o treinamento da estrutura de rede.
Preparação do conjunto de dados
Prepare a imagem a ser treinada e a imagem rotulada correspondente, armazene a imagem e a imagem rotulada em diretórios diferentes e use o mesmo nome de arquivo para correspondência um a um.
%% 数据集加载
dataSetDir = fullfile('./data');
imageDir = fullfile(dataSetDir,'trainingImages');
labelDir = fullfile(dataSetDir,'trainingLabels');
Defina o nome da categoria da classificação de pixel e o valor de brilho de cada categoria na imagem rotulada
classNames = ["triangle","background"];
labelIDs = [255 0];
Gerar objeto de conjunto de dados de treinamento
imds = imageDatastore(imageDir);
pxds = pixelLabelDatastore(labelDir,classNames,labelIDs);
% ds = pixelLabelImageDatastore(imds,pxds);
ds = combine(imds,pxds);
definição de rede
imageSize = [32 32];
numClasses = 2;
lgraph = unetLayers(imageSize, numClasses)
treinar a rede
options = trainingOptions('sgdm', ...
'InitialLearnRate',1e-3, ...
'MaxEpochs',20, ...
'VerboseFrequency',10);
net = trainNetwork(ds,lgraph,options)
Exporte o modelo no formato ONNX e use ferramentas como opencv ou tensorrt para implantação de aplicativos
exportONNXNetwork(net,'myunet.onnx');
teste
pic = imread('.\data\testImages\image_002.jpg');
out2 = predict(net,pic);
subplot(1,2,1)
imshow(pic)
subplot(1,2,2)
imshow(out2(:,:,1))
Código completo e dados de teste
https://download.csdn.net/download/Ango_/16138054