2015-03-19 5 views
3

У меня есть один набор исходных патчей изображений (матрицы 101x101) и другой соответствующий набор патчей изображений (одинаковый размер 101x101) в двоичном формате, которые являются «ответом» для обучения нейронной сети. Я хотел обучить свою нейронную сеть так, чтобы она могла учиться, распознавать форму, которую она обучала из данного изображения, и производить изображение (в той же матричной форме 150x10201, возможно?) На выходной матрице (в результате сегментации).Тренировочная нейронная сеть для сегментации изображений

Оригинальное изображение находится слева, а нужный выход - справа.

enter image description hereenter image description here

Таким образом, как и для этапа предварительной обработки данных, я видоизмененная исходные участки изображения в векторные матрицы 1x10201 для каждого фрагмента изображения. Сочетая 150 из них, я получаю матрицу 150x10201 в качестве моего ввода и другую матрицу 150x10201 из двоичных патчей изображения. Затем я предоставляю эти входные данные в сеть глубокого обучения. В этом случае я использовал Deep Verief Network.

Мой Matlab код для установки и обучить ДБН, как показано ниже:

% поезд скрытый блок ДБН 4 слоев 100 и использовать его веса для инициализации NN

rand('state',0) 

% поезд д.б.н.

dbn.sizes = [100 100 100 100]; 
opts.numepochs = 5; 
opts.batchsize = 10; 
opts.momentum = 0; 
opts.alpha  = 1; 
dbn = dbnsetup(dbn, train_x, opts); 
dbn = dbntrain(dbn, train_x, opts); 

% разворачиваться ДБН Н. Н.

nn = dbnunfoldtonn(dbn, 10201); 
nn.activation_function = 'sigm'; 

% железно пп

opts.numepochs = 1; 
opts.batchsize = 10; 

assert(isfloat(train_x), 'train_x must be a float'); 
assert(nargin == 4 || nargin == 6,'number ofinput arguments must be 4 or 6') 

loss.train.e    = []; 
loss.train.e_frac   = []; 
loss.val.e     = []; 
loss.val.e_frac   = []; 
opts.validation = 0; 
if nargin == 6 
    opts.validation = 1; 
end 

fhandle = []; 
if isfield(opts,'plot') && opts.plot == 1 
    fhandle = figure(); 
end 

m = size(train_x, 1); 

batchsize = opts.batchsize; 
numepochs = opts.numepochs; 

numbatches = m/batchsize; 

assert(rem(numbatches, 1) == 0, 'numbatches must be a integer'); 

L = zeros(numepochs*numbatches,1); 
n = 1; 
for i = 1 : numepochs 
tic; 

kk = randperm(m); 
for l = 1 : numbatches 
    batch_x = train_x(kk((l - 1) * batchsize + 1 : l * batchsize), :); 

    %Add noise to input (for use in denoising autoencoder) 
    if(nn.inputZeroMaskedFraction ~= 0) 
     batch_x = batch_x.*(rand(size(batch_x))>nn.inputZeroMaskedFraction); 
    end 

    batch_y = train_y(kk((l - 1) * batchsize + 1 : l * batchsize), :); 

    nn = nnff(nn, batch_x, batch_y); 
    nn = nnbp(nn); 
    nn = nnapplygrads(nn); 

    L(n) = nn.L; 

    n = n + 1; 
end 

t = toc; 

if opts.validation == 1 
    loss = nneval(nn, loss, train_x, train_y, val_x, val_y); 
    str_perf = sprintf('; Full-batch train mse = %f, val mse = %f', 
loss.train.e(end), loss.val.e(end)); 
else 
    loss = nneval(nn, loss, train_x, train_y); 
    str_perf = sprintf('; Full-batch train err = %f', loss.train.e(end)); 
end 
if ishandle(fhandle) 
    nnupdatefigures(nn, fhandle, loss, opts, i); 
end 

disp(['epoch ' num2str(i) '/' num2str(opts.numepochs) '. Took ' num2str(t) ' seconds' '. Mini-batch mean squared error on training set is ' num2str(mean(L((n-numbatches):(n-1)))) str_perf]); 
nn.learningRate = nn.learningRate * nn.scaling_learningRate; 
end 

Может кто-нибудь, дайте мне знать, является подготовка к NN, как это позволит ему сделать сегментацию работу? или как мне изменить код для обучения NN, чтобы он мог генерировать результат/результат в качестве матрицы изображения в форме 150x10201?

Большое вам спасибо.

ответ

1

Ваши входы слишком большие. Вам следует попытаться работать с меньшими патчами от 19x19 до 30x30 (которые уже представляют собой 900 нейронов во входном слое).

И вот ваша главная проблема: у вас всего 150 изображений! И когда вы обучаете NN, вам нужно, по крайней мере, в три раза больше учебных примеров, чем весов в ваш NN. Поэтому будьте очень осторожны с архитектурой, которую вы выбираете.

CNN может быть более адаптирован к вашей проблеме.

Смежные вопросы