Ich habe Wortbilder wie folgt:
Nehmen wir an, es ist ein 256x64
Bild. Mein Ziel ist es, den Text aus dem Bild zu extrahieren, 73791096754314441539
wie es eine OCR im Grunde tut.
Ich versuche ein Modell zu bauen, das Wörter aus Bildern erkennen kann.
Wenn ich ein Wort sage, kann es eines der folgenden sein:
- Jedes Wörterbuchwort, kein Wörterbuchwort
- az, AZ, Sonderzeichen einschließlich
spaces
Ich habe ein Modell (Snippet aufgrund von Unternehmensrichtlinien) in Tensorflow wie folgt erstellt:
inputs = tf.placeholder(tf.float32, [common.BATCH_SIZE, common.OUTPUT_SHAPE[1], common.OUTPUT_SHAPE[0], 1])
# Here we use sparse_placeholder that will generate a
# SparseTensor required by ctc_loss op.
targets = tf.sparse_placeholder(tf.int32)
# 1d array of size [batch_size]
seq_len = tf.placeholder(tf.int32, [common.BATCH_SIZE])
model = tf.layers.conv2d(inputs, 64, (3,3),strides=(1, 1), padding='same', name='c1')
model = tf.layers.max_pooling2d(model, (3,3), strides=(2,2), padding='same', name='m1')
model = tf.layers.conv2d(model, 128,(3,3), strides=(1, 1), padding='same', name='c2')
model = tf.layers.max_pooling2d(model, (3,3),strides=(2,2), padding='same', name='m2')
model = tf.transpose(model, [3,0,1,2])
shape = model.get_shape().as_list()
model = tf.reshape(model, [shape[0],-1,shape[2]*shape[3]])
cell = tf.nn.rnn_cell.LSTMCell(common.num_hidden, state_is_tuple=True)
cell = tf.nn.rnn_cell.DropoutWrapper(cell, input_keep_prob=0.5, output_keep_prob=0.5)
stack = tf.nn.rnn_cell.MultiRNNCell([cell]*common.num_layers, state_is_tuple=True)
outputs, _ = tf.nn.dynamic_rnn(cell, model, seq_len, dtype=tf.float32,time_major=True)
Mein aktueller Ansatz besteht darin, die Eingabe eines Wortbildes zu verwenden, es durch ein CNN
Extrakt auf hoher Ebene zu übertragen, die Bildmerkmale wie unten beschrieben in sequentielle Daten umzuwandeln
[[a1,b1,c1],[a2,b2,c2],[a3,b3,c3]] -> [[a1,a2,a3],[b1,b2,b3],[c1,c2,c3]]
, es dann über eine RNN (LSTM oder BiLSTM) zu übergeben und dann CTC
(Connectionist Temporal Loss) zu verwenden Finden Sie das Verlust- und Zugnetz.
Ich erhalte nicht die erwarteten Ergebnisse. Ich wollte wissen, ob:
- Es gibt einen anderen besseren Weg, um diese Aufgabe zu erledigen
- Wenn ich Features in die richtige Reihenfolge konvertiere
- Jede Forschungsarbeit, in der so etwas gemacht wird.
font_size
oderimage dimension
was meine Genauigkeit beeinträchtigen wird. Was denken Sie ? Aber wenn ich nur ein BiLSTM wie in der Okropie verwende, kann ich Bilder verschiedener Dimensionen einspeisen (wahrscheinlich noch experimentieren). Wie ist Ihre Meinung dazu?