2015-03-12 16 views
6

Sto provando a creare cascate di haar per eseguire l'OCR di un font specifico; un classificatore per personaggio.Generazione di buoni dati di addestramento per cascate di haar

Posso generare tonnellate di dati di addestramento semplicemente disegnando il carattere sulle immagini. Quindi, il piano è di generare dati di allenamento positivi per ciascun personaggio e utilizzare gli esempi di altri personaggi come dati di allenamento negativi.

Mi chiedo quante variazioni dovrei inserire nei dati di addestramento. Normalmente proverei semplicemente tutto, ma ho capito che queste cose impiegano giorni per allenarsi (per ogni personaggio!) Quindi qualche consiglio sarebbe buono.

Così, alcune domande:

  • Ha l'algoritmo di formazione riconoscere che non mi importa di pixel trasparenti? O funzionerà meglio se sovrappongo i personaggi su sfondi diversi?
  • Devo includere immagini in cui ogni carattere è mostrato con prefissi e suffissi diversi, o dovrei semplicemente trattare ciascun carattere individualmente?
  • Devo includere immagini in cui il carattere è scalato verso l'alto o il basso? Ho capito che l'algoritmo praticamente ignora le dimensioni e ridimensiona tutto per efficienza comunque?

Grazie!

risposta

8

L'algoritmo di allenamento riconosce che non mi interessa i pixel trasparenti? O funzionerà meglio se sovrappongo i personaggi su sfondi diversi?

Quanto più "rumore" si danno le immagini sulle parti dei dati di allenamento, tanto più sarà robusto, ma sì più tempo ci vorrà per allenarsi. Questo è comunque il luogo in cui i tuoi campioni negativi entreranno in azione. Se si dispone di un numero di campioni di allenamento negativo il più possibile con il maggior numero possibile di intervalli, si creeranno rilevatori più robusti. Detto questo, se si ha in mente un particolare caso d'uso, suggerirei di allineare leggermente il set di allenamento per farlo corrispondere, sarà meno robusto ma molto meglio nella vostra applicazione.

Devo includere immagini in cui ogni carattere è mostrato con prefissi e suffissi diversi, o dovrei semplicemente trattare ciascun carattere individualmente?

Se si desidera rilevare singole lettere, quindi allenarsi individualmente. Se lo alleni per rilevare "ABC" e vuoi solo "A", inizierà a ricevere messaggi misti. Basta addestrare ogni lettera "A", "B" ecc. E quindi il rilevatore dovrebbe essere in grado di individuare ogni singola lettera in immagini più grandi.

Devo includere immagini in cui il carattere è scalato in alto o in basso? Ho capito che l'algoritmo praticamente ignora le dimensioni e ridimensiona tutto per efficienza comunque?

Non credo sia corretto. AFAIK l'algoritmo HAAR non può ridimensionare un'immagine allenata. Quindi se alleni tutte le tue immagini su 50x50 lettere ma le lettere nelle tue immagini sono 25x25 allora non le rilevererai. Se ti alleni e scopri il contrario, otterrai risultati. Inizia in piccolo, lascia che l'algoritmo cambi la dimensione (in alto) per te.

Problemi correlati