Matlab画像セグメンテーション(U-Net)

Unetネットワーク

Unetは、エンコーディングとデコーディングの構造を組み合わせたニューラルネットワーク構造であり、セマンティックセグメンテーションネットワークです。これは、医療画像セグメンテーションの関連アプリケーションで広く使用されています。matlabを使用すると、ネットワーク構造の定義とトレーニングをすばやく実現できます。

データセットの準備

トレーニングする画像と対応するラベル付き画像を準備し、画像とラベル付き画像を別のディレクトリに保存し、同じファイル名を使用して1対1で対応します。

%% 数据集加载
dataSetDir = fullfile('./data');
imageDir = fullfile(dataSetDir,'trainingImages');
labelDir = fullfile(dataSetDir,'trainingLabels');

ピクセル分類のカテゴリ名と、ラベル付けされた画像の各カテゴリの輝度値を定義します

classNames = ["triangle","background"];
labelIDs   = [255 0];

 トレーニングデータセットオブジェクトを生成する

imds = imageDatastore(imageDir);
pxds = pixelLabelDatastore(labelDir,classNames,labelIDs);
% ds = pixelLabelImageDatastore(imds,pxds);
ds = combine(imds,pxds);

ネットワーク定義

imageSize = [32 32];
numClasses = 2;
lgraph = unetLayers(imageSize, numClasses)

ネットワークを訓練する

options = trainingOptions('sgdm', ...
    'InitialLearnRate',1e-3, ...
    'MaxEpochs',20, ...
    'VerboseFrequency',10);

net = trainNetwork(ds,lgraph,options)

モデルをONNX形式でエクスポートし、opencvやtensorrtなどのツールを使用してアプリケーションをデプロイします

exportONNXNetwork(net,'myunet.onnx');

テスト

pic = imread('.\data\testImages\image_002.jpg');
out2 = predict(net,pic);

subplot(1,2,1)
imshow(pic)
subplot(1,2,2)
imshow(out2(:,:,1))

完全なコードとテストデータ

https://download.csdn.net/download/Ango_/16138054

 

おすすめ

転載: blog.csdn.net/Ango_/article/details/115252616