Segmentación automática de imágenes de escenas de conducción (Unet)

Este artículo utiliza el entorno matlab para probar la tarea de segmentación de imágenes de la escena de conducción autónoma. Dividir la red usando Unet.

Mil imágenes etiquetadas y la precisión final del entrenamiento alcanza el 90 %.

 

 preparación de datos

Dirección de descarga de datos de preetiquetado de escena: Segmentación semántica para autos sin conductor | Kaggle

Es posible que la descarga de datos deba derribar la pared, si no puede descargarla, puede mover la imagen de escena de conducción automática segmentada y etiquetada data.zip

Los datos están marcados con 13 categorías, y se desconoce el nombre específico de cada categoría. Solo proporcione un nombre de clase para probar.

imagedir="E:\DLDatasets\kaggle\SelfDriving\dataA\dataA\CameraRGB";
labeldir="E:\DLDatasets\kaggle\SelfDriving\dataA\dataA\CameraSeg";

classNames=["c0","c1","c2","c3","c4","c5","c6","c7","c8","c9","c10","c11","c12"];
labelIds=0:12;

imds=imageDatastore(imagedir, "ReadFcn",@readImage);
pxds=pixelLabelDatastore(labeldir,classNames,labelIds,"ReadFcn",@readLabel);

ds=combine(imds,pxds);

El tamaño original de la imagen es de 600 x 800. Primero, la función de lectura de datos personalizada la escala a 96 x 128. Además, la imagen marcada es de tres canales y debe convertirse en una imagen de un solo canal.

function [data] = readImage(path)
    data=imread(path);
    data=imresize(data,[96 128]);
end

function [data] = readLabel(path)
    data=imread(path);
    data=data(:,:,1);
    data=imresize(data,[96 128]);
end

Definir red y parámetros.

% 定义网络
imageSize = [96 128 3];
numClasses = 13;
lgraph = unetLayers(imageSize, numClasses);
% 训练参数
options = trainingOptions('adam', ...
    'InitialLearnRate',1e-3, ...   % 1e-4不收敛,改为1e-3
    'MaxEpochs',100, ...
    "MiniBatchSize", 8,...
    'VerboseFrequency',50, ...
    'Plots','training-progress');

 tren

net = trainNetwork(ds,lgraph,options)

situación final de entrenamiento

 prueba

pic = imread("E:\DLDatasets\kaggle\SelfDriving\dataA\dataA\CameraRgb\02_00_120.png");
msk = imread("E:\DLDatasets\kaggle\SelfDriving\dataA\dataA\CameraSeg\02_00_120.png");
pic = imresize(pic, [96,128]);
msk = imresize(msk, [96,128]);
msk=msk(:,:,1);
out2 = predict(net,pic);

[h,w,~] = size(out2);
result = uint8(zeros(h,w));

for y = 1:h
    for x = 1:w
        [~,i]=max(out2(y,x,:));
        result(y,x)=i-1;
    end
end

result = result*20;

msk = msk*20;

subplot(1,3,1)
imshow(pic)
subplot(1,3,2)
imshow(result,'Colormap',jet(255))
subplot(1,3,3)
imshow(msk,'Colormap',jet(255))

 

 

 

Supongo que te gusta

Origin blog.csdn.net/Ango_/article/details/121751666
Recomendado
Clasificación