2016-06-02 17 views
-1

Я работаю над OCR для арабского персонажа. Я хочу попробовать glcm как метод извлечения объектов. Я получил код здесь: http://www.mathworks.com/matlabcentral/fileexchange/22187-glcm-texture-featuresКак повысить точность точности OCR для нейронной сети в Matlab

Пример входных изображений (символьных изображений):

enter image description hereenter image description hereenter image description here

и я сделал код, чтобы получить выход КРНБ, основанный на необходимых функций. Вот оно:

function features = EkstraksiFitur_GLCM(x) 
    glcm = graycomatrix(x,'offset',[0 1; -1 1; -1 0; -1 -1], 'NumLevels', 2); 

    stats = GLCM_Features1(glcm, 0); 
    autocorrelation = double(mean (stats.autoc)); 
    if isnan(autocorrelation) 
     autocorrelation=0; 
    else 
     autocorrelation=autocorrelation; 
    end 

    contrast = double(mean(stats.contr)); 
    if isnan(contrast) 
     contrast=0; 
    else 
     contrast=contrast; 
    end 

    Correlation = double(mean (stats.corrm)); 
    if isnan(Correlation) 
     Correlation=0; 
    else 
     Correlation=Correlation; 
    end 

    ClusterProminence = double(mean (stats.cprom)); 
    if isnan(ClusterProminence) 
     ClusterProminence=0; 
    else 
     ClusterProminence=ClusterProminence; 
    end 

    ClusterShade = double(mean (stats.cshad)); 
    if isnan(ClusterShade) 
     ClusterShade=0; 
    else 
     ClusterShade=ClusterShade; 
    end 

    Dissimilarity = double(mean (stats.dissi)); 
    if isnan(Dissimilarity) 
     Dissimilarity=0; 
    else 
     Dissimilarity=Dissimilarity; 
    end 

    Energy = double(mean (stats.energ)); 
    if isnan(Energy) 
     Energy=0; 
    else 
     Energy=Energy; 
    end 
    . 
    . 
    . 
    features=[autocorrelation, contrast, Correlation, Dissimilarity, Energy, Entropy, Homogeneity, MaximumProbability, SumAverage, SumVariance, SumEntropy, DifferenceVariance, DifferenceEntropy, InverseDifferenceMomentNormalized]; 

Использование цикла, чтобы получить функции всех изображений (данные поезда):

srcFile = dir('D:\1. Thesis FINISH!!!\Data set\0 Well Segmented Character\Advertising Bold 24\datatrain\*.png'); 
fetrain = []; 
for a = 1:length(srcFile) 
    file_name = strcat('D:\1. Thesis FINISH!!!\Data set\0 Well Segmented Character\Advertising Bold 24\datatrain\',srcFile(b).name); 
    A = imread(file_name); 
    [gl] = EkstraksiFitur_GLCM2 (A); 
    [fiturtrain] = reshape (gl, [56,1]) ; 
    fetrain = [fetrain fiturtrain]; 
% vectorname = strcat(file_name,'_array.mat'); 

end 
save ('fetrain.mat','fetrain'); 

У меня есть свои особенности.

enter image description here

А затем запустить процесс обучения с использованием нейронной сети, но я получаю очень низкий уровень точности. Это код:

% clc;clear;close all; 
% function net1 = pelatihan (input, target) 
net = newff(fetrain,target,[10 2],{'tansig','tansig'},'trainscg'); 
% net.trainParam.mem_reduc = 2; 
net.performFcn = 'mse'; 
net.divideFcn = 'dividetrain'; 
% [trainInd,valInd,testInd] = dividetrain(601); 
net.trainParam.show = 10; % Frequency of progress displays (in epochs). 
net.trainParam.epochs = 1000; %default 1000 
net.trainParam.goal = 1e-6; 
net = train(net,fetrain,target); 
output = round(sim(net,fetrain)); 
save net1.mat net 
% net2 = output; 
data = fetest; 

[target; output]; 
prediksi = round(sim (net, data)); 
[targetx; prediksi]; 

%% Calculate the accuracy % 
y = 1; 
j = size (prediksi, 2); 
% x = size (targetx, 2); 
for i = 1:j 
    if prediksi (i) == targetx (i) 
     y =y+1; 
    else 
     y; 
    end 
end 
% y all correct data 
% j all data 
s = 'The accuracy is %.2f%%'; 
acc = 100 *(y/j); 
sprintf (s,acc) 

Я пробовал несколько раз, но точность (результат теста NN) не улучшалась. Это условно дает выход 1,96%. Что-то не так с потоком процесса или с кодом, который я сделал?

Любая помощь будет очень полезно, и

ответ

1

Во-первых, я могу видеть из функции вы извлекли, что они Nnot нормализуется и они варьируются в диапазоне. что означает, что некоторые фетауры доминируют над остальными. попробуйте нормализовать или стандартизировать функции. точность, которую вы измеряете только на тренировочном наборе, или вы являетесь набором тестов или перекрестных методов проверки? это правда, что я вижу, что вы используете 601 функции? вы пробовали методы выбора функций, чтобы решить, какие функции лучше всего подходят для данных и модели?

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

Третий будет интересоваться входным изображением, чтобы понять, с чем вы сталкиваетесь.

+0

Благодарим вас за ответ @Feras Во-первых, есть ли у вас предложения по нормализации функции? сбор данных только для обучения сети, у меня есть еще данные для тестирования. Я планирую использовать проверку перекрестных ссылок, но до сих пор не понимал этого. || 601 количество входных изображений (символьные изображения - OCR). || Во-вторых, я просто пытаюсь получить конкретные функции из структуры в качестве результата процесса GLCM || В-третьих, я уже установил входные изображения (изображения на арабском языке) –

+0

Я бы порекомендовал вам начать стандартизацию функций. а затем попытайтесь сделать какой-либо выбор функции или, возможно, попытайтесь оценить ее, используя приложение weka. это изображение, взятое из планшета или руки? снова вы не могли бы написать структуру, которую используете в NN – Feras

+0

Есть ли у вас какой-либо метод рекомендации по стандартизации функций? Или пример кода? Это было бы очень полезно. || Изображение, выбранное из набора данных APTI. || Вы имели в виду, что структура - это что-то вроде алгоритма или рабочего потока NN ?, или параметров? , извините, я просто новичок, все еще не совсем понял все о NN. ... Спасибо @Feras –