Передача обучения FCN из Matconvnet в MATLAB Neural Network Toolbox

Я обучил полностью сверточную сеть с 3 сверточными слоями, используя Matconvnet. FCN был обучен работе с патчами изображения в градациях серого 32x32 и будет использоваться для поиска дефектов в изображениях в градациях серого 2048x2048. Он работает так, как задумано, используя Matconvnet, но по разным причинам я хочу попробовать реализовать его с помощью набора инструментов Matralb Neural Network. Я попытался создать свою сетевую структуру в Matlab и передать веса и смещения, используя следующий код:

% Image input layer
inputLayer = imageInputLayer([2048 2048 1], 'Name', 'Input', ...
    'Normalization', 'none');
% First layer
filterSize = [5 5];
numFilters = 32;
firstLayer = [
    convolution2dLayer(filterSize, numFilters, 'Padding', 2, ...
    'Name', 'Conv1')
    maxPooling2dLayer(8, 'Stride', 4, 'Padding', 2, 'Name', 'Pool1')
    reluLayer('Name', 'Relu1')
    ];
% Second layer
filterSize = [8 8];
numFilters = 32;
secondLayer = [
    convolution2dLayer(filterSize, numFilters, 'Padding', 0, ...
    'Name', 'Conv2')
    reluLayer('Name', 'Relu2')
    ];
% Third (prediction) layer
filterSize = [1 1];
numFilters = 2;
predictionLayer = [
    convolution2dLayer(filterSize, numFilters, 'Padding', 0, ...
    'Name', 'Conv3')
    softmaxLayer('Name', 'Softmax')
    classificationLayer('Name', 'Classification')
    ];
layers = [
    inputLayer
    firstLayer
    secondLayer
    predictionLayer
    ];
% Import weights and biases from Matconvnet
layers(2).Weights = net.params(1).value;
layers(2).Bias = reshape(net.params(2).value, [1 1 32]);
layers(5).Weights = net.params(3).value;
layers(5).Bias = reshape(net.params(4).value, [1 1 32]);
layers(7).Weights = net.params(5).value;
layers(7).Bias = reshape(net.params(6).value, [1 1 2]);
matlabNet = SeriesNetwork(layers);

Итак, мой вопрос. Поддерживаются ли FCN в Matlab и правильный ли это подход? Я пытался использовать matlabNet, созданный из кода, но получаю ошибки, связанные с неопределенным OutputSize. Я также пытался тренировать сеть с помощью trainNetwork, но он жаловался на неправильные размеры выходных слоев. Есть идеи?

0 ответов

Другие вопросы по тегам