2015-01-13 23 views
5

Sto cercando di classificare le cifre di scrittura a mano, scritte da me e alcuni amici, da usign NN e CNN. Per addestrare il NN, viene utilizzato il set di dati MNIST. Il problema è che l'NN addestrato con il set di dati MNIST non dà risultati di test soddisfacenti sul mio set di dati. Ho usato alcune librerie su Python e MATLAB con diverse impostazioni come elencato di seguito.Pre-elaborazione prima del riconoscimento di cifre per NN e CNN addestrati con il set di dati MNIST

Su Python ho usato this code con l'impostazione;

  • 3 strati NN con # ingressi = 784, # di neuroni nascosti = 30, # uscite = 10
  • funzione Costo = entropia trasversale
  • numero di epoche size = 30
  • Batch = 10
  • tasso di apprendimento = 0,5

è allenato con training set MNIST, ei risultati dei test sono le seguenti:

risultato del test sulla MNIST risultato = 96% prova sul mio set di dati = 80%

Su MATLAB Ho usato deep learning toolbox con varie impostazioni, normalizzazione inclusa, simile al precedente e migliore precisione di NN è di circa il 75%. Sia NN che CNN sono usati su MATLAB.

Ho provato ad assomigliare al mio set di dati a MNIST. I risultati sopra raccolti sono stati raccolti da un set di dati pre-elaborati. Qui è la pre-processi applicati al mio set di dati:

  • Ogni cifra è ritagliata separatamente e ridimensionata a 28 x 28 da usign interpolazione bicubica
  • Pathces sono centrate con i valori medi di MNIST da usign riquadro di delimitazione su MATLAB
  • sfondo è 0 e il valore più alto di pixel è di 1 come in MNIST

non potevo sapere cosa fare di più. Ci sono ancora alcune differenze come il contrasto ecc., Ma le prove di miglioramento del contrasto non hanno potuto aumentare la precisione.

Ecco alcune cifre da MNIST e il mio set di dati personali per confrontarle visivamente.

MNIST digits

my own dataset

Come potete vedere, c'è una differenza di contrasto chiaro. Penso che il problema di accuratezza sia dovuto alla mancanza di somiglianza tra MNIST e il mio set di dati. Come posso gestire questo problema?

C'è una domanda simile in here, ma il suo set di dati è una raccolta di cifre stampate, non come il mio.

Modifica: Ho anche testato la versione binariale del mio set di dati su NN addestrato con MNIST binarizzato e MNIST predefinito. La soglia di binarizzazione è 0,05.

Ecco un'immagine di esempio in formato matrice dal set di dati MNIST e dal mio set di dati, rispettivamente. Entrambi sono 5.

MNIST:

Columns 1 through 10 

     0   0   0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0 0.1176 0.1412 
     0   0   0   0   0   0   0 0.1922 0.9333 0.9922 
     0   0   0   0   0   0   0 0.0706 0.8588 0.9922 
     0   0   0   0   0   0   0   0 0.3137 0.6118 
     0   0   0   0   0   0   0   0   0 0.0549 
     0   0   0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0 0.0902 0.2588 
     0   0   0   0   0   0 0.0706 0.6706 0.8588 0.9922 
     0   0   0   0 0.2157 0.6745 0.8863 0.9922 0.9922 0.9922 
     0   0   0   0 0.5333 0.9922 0.9922 0.9922 0.8314 0.5294 
     0   0   0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0   0   0 

    Columns 11 through 20 

     0   0   0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0   0   0 
     0   0 0.0118 0.0706 0.0706 0.0706 0.4941 0.5333 0.6863 0.1020 
    0.3686 0.6039 0.6667 0.9922 0.9922 0.9922 0.9922 0.9922 0.8824 0.6745 
    0.9922 0.9922 0.9922 0.9922 0.9922 0.9922 0.9922 0.9843 0.3647 0.3216 
    0.9922 0.9922 0.9922 0.9922 0.7765 0.7137 0.9686 0.9451   0   0 
    0.4196 0.9922 0.9922 0.8039 0.0431   0 0.1686 0.6039   0   0 
    0.0039 0.6039 0.9922 0.3529   0   0   0   0   0   0 
     0 0.5451 0.9922 0.7451 0.0078   0   0   0   0   0 
     0 0.0431 0.7451 0.9922 0.2745   0   0   0   0   0 
     0   0 0.1373 0.9451 0.8824 0.6275 0.4235 0.0039   0   0 
     0   0   0 0.3176 0.9412 0.9922 0.9922 0.4667 0.0980   0 
     0   0   0   0 0.1765 0.7294 0.9922 0.9922 0.5882 0.1059 
     0   0   0   0   0 0.0627 0.3647 0.9882 0.9922 0.7333 
     0   0   0   0   0   0   0 0.9765 0.9922 0.9765 
     0   0   0   0 0.1804 0.5098 0.7176 0.9922 0.9922 0.8118 
     0   0 0.1529 0.5804 0.8980 0.9922 0.9922 0.9922 0.9804 0.7137 
    0.0941 0.4471 0.8667 0.9922 0.9922 0.9922 0.9922 0.7882 0.3059   0 
    0.8353 0.9922 0.9922 0.9922 0.9922 0.7765 0.3176 0.0078   0   0 
    0.9922 0.9922 0.9922 0.7647 0.3137 0.0353   0   0   0   0 
    0.9922 0.9569 0.5216 0.0431   0   0   0   0   0   0 
    0.5176 0.0627   0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0   0   0 

    Columns 21 through 28 

     0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0 
    0.6510 1.0000 0.9686 0.4980   0   0   0   0 
    0.9922 0.9490 0.7647 0.2510   0   0   0   0 
    0.3216 0.2196 0.1529   0   0   0   0   0 
     0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0 
    0.2510   0   0   0   0   0   0   0 
    0.0078   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0 

mio insieme di dati:

Columns 1 through 10 

     0   0   0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0 0.4000 0.5569 
     0   0   0   0   0   0   0   0 0.9961 0.9922 
     0   0   0   0   0   0   0   0 0.6745 0.9882 
     0   0   0   0   0   0   0   0 0.0824 0.8745 
     0   0   0   0   0   0   0   0   0 0.4784 
     0   0   0   0   0   0   0   0   0 0.4824 
     0   0   0   0   0   0   0   0 0.0824 0.8745 
     0   0   0   0   0   0   0 0.0824 0.8392 0.9922 
     0   0   0   0   0   0   0 0.2392 0.9922 0.6706 
     0   0   0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0 0.4431 0.3608 
     0   0   0   0   0   0   0 0.3216 0.9922 0.5922 
     0   0   0   0   0   0   0 0.3216 1.0000 0.9922 
     0   0   0   0   0   0   0   0 0.2784 0.5922 
     0   0   0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0   0   0 

    Columns 11 through 20 

     0   0   0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0   0   0 
     0   0 0.2000 0.5176 0.8392 0.9922 0.9961 0.9922 0.7961 0.6353 
    0.7961 0.7961 0.9922 0.9882 0.9922 0.9882 0.5922 0.2745   0   0 
    0.9569 0.7961 0.5569 0.4000 0.3216   0   0   0   0   0 
    0.7961   0   0   0   0   0   0   0   0   0 
    0.9176 0.1176   0   0   0   0   0   0   0   0 
    0.9922 0.1961   0   0   0   0   0   0   0   0 
    0.9961 0.3569 0.2000 0.2000 0.2000 0.0392   0   0   0   0 
    0.9922 0.9882 0.9922 0.9882 0.9922 0.6745 0.3216   0   0   0 
    0.7961 0.6353 0.4000 0.4000 0.7961 0.8745 0.9961 0.9922 0.2000 0.0392 
     0   0   0   0   0 0.0784 0.4392 0.7529 0.9922 0.8314 
     0   0   0   0   0   0   0   0 0.4000 0.7961 
     0   0   0   0   0   0   0   0   0 0.0784 
     0   0   0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0   0   0 
     0   0   0   0   0   0 0.0824 0.4000 0.4000 0.7176 
    0.9176 0.5961 0.6000 0.7569 0.6784 0.9922 0.9961 0.9922 0.9961 0.8353 
    0.5922 0.9098 0.9922 0.8314 0.7529 0.5922 0.5137 0.1961 0.1961 0.0392 
     0   0   0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0   0   0 

    Columns 21 through 28 

     0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0 
    0.1608   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0 
    0.1608   0   0   0   0   0   0   0 
    0.9176 0.2000   0   0   0   0   0   0 
    0.8353 0.9098 0.3216   0   0   0   0   0 
    0.2431 0.7961 0.9176 0.4392   0   0   0   0 
     0 0.0784 0.8353 0.9882   0   0   0   0 
     0   0 0.6000 0.9922   0   0   0   0 
     0 0.1608 0.9137 0.8314   0   0   0   0 
    0.1216 0.6784 0.9569 0.1569   0   0   0   0 
    0.9137 0.8314 0.3176   0   0   0   0   0 
    0.5569 0.0784   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0 
     0   0   0   0   0   0   0   0 
+0

Questo argomento è troppo specifico per SO, può essere qualcuno in grado di rispondere e vi auguro buona fortuna, ma vorrei dire che hai più possibilità Diffusione su http: //www.reddit .com/r/MachineLearning/o http://stats.stackexchange.com/questions/tagged/machine-learning – elyase

+1

Sembra che le tue cifre abbiano molta più variazione di luminosità. Hai provato a quantizzare l'immagine .... i.e. x (x> 0) = 255? Puoi anche provare un filtro mediano per eliminare qualsiasi rumore di sale e pepe introdotto dalla compressione. – shaw2thefloor

+1

@ shaw2thefloor Ho applicato x (x <0.05) = 0, perché l'interpolazione bicubica ha introdotto un po 'di offset su sfondo che non esiste in MNIST. Ho anche provato la versione binarizzata del mio set di dati per testare su NN addestrato con MNIST binarizzati e MNIST normale. L'accuratezza è scesa in entrambi i casi. Inoltre, l'aumento del contrasto non ha aumentato la precisione, anzi è diminuito! Ho controllato i percorsi elaborati e non c'era rumore di sale e pepe. –

risposta

1

Quindi quello che stai cercando è un modo generalizzato di normalizzare i dati del test in modo che possa essere confrontato con i dati di allenamento MNIST. Forse potresti prima usare una tecnica per normalizzare i dati di allenamento di MNIST in un formato standard, quindi addestrare la tua CNN, quindi normalizzare i tuoi dati di test usando lo stesso processo, quindi applicare la CNN per il riconoscimento.

Hai visto questo documento? Usa la normalizzazione dell'immagine basata sul momento. È a livello di parola, quindi non proprio quello che stai facendo, ma dovrebbe essere abbastanza facile da implementare.

Moment-based Image Normalization for Handwritten Text Recognition (Kozielski et al.):

+0

Questa è la risposta più vicina alla mia domanda. Lo controllerò. –

0

Si potrebbe prendere il mnist addestrati CNN e provare la riqualificazione su un sottoinsieme dei vostri campioni. Applica sfocature e small.roto-traduzioni per aumentare il datasize.

+1

Ho raccolto 120 cifre da 4 soggetti utilizzando Samsung Note3 con la sua penna. Quindi lo spessore della penna non differiva in generale. Il tuo suggerimento probabilmente aumenterà la precisione perché i dati MNIST hanno vari tipi di cifre e non sono simili al mio set di dati in generale. Tuttavia, il mio obiettivo finale è il rilevamento accurato di lettere e cifre scritte a mano da qualsiasi immagine. Può essere un'immagine della lavagna in una classe. In tal caso, CNN o NN addestrati con MNIST o set di dati raccolti tramite una penna per smartphone restituiranno una minore precisione. Ho bisogno di un pre-processo generale che possa aumentare la somiglianza con il set di allenamento. –