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