最近學習了crnn網路,大體訓練流程如下:
1、準備輸入資料和標籤,標籤為稀疏矩陣
inputs = tf.placeholder(tf.float32, [batch_size, input_height, input_width, 1])
label = tf.sparse_placeholder(tf.int32, name='label')
seq_len = tf.placeholder(tf.int32, [none], name='seq_len')
2、通過cnn網路提取特徵
cnn_out = self._cnn(inputs)
3、通過2次雙向rnn,得到神經網路輸出結果
crnn_model = self._rnn(cnn_out, self._seq_len)
4、根據最終字元的類別得到最終的輸出
logits = tf.reshape(crnn_model, [-1, 512])
w = tf.variable(tf.truncated_normal([512, self._class_num], stddev=0.1), name="w")
b = tf.variable(tf.constant(0., shape=[self._class_num]), name="b")
logits = tf.matmul(logits, w) + b
logits = tf.reshape(logits, [self._batch_size, -1, self._class_num])
# 網路層輸出
net_output = tf.transpose(logits, (1, 0, 2))
5、解析網路輸出,其中decoded[0]是乙個稀疏張量,型別和label一樣
decoded, log_prob = tf.nn.ctc_greedy_decoder(net_output, self._seq_len)
6、損失函式loss
with tf.name_scope('loss'):
loss = tf.nn.ctc_loss(self._label, self._net_output, self._seq_len)
loss = tf.reduce_mean(loss)
7、優化器optimizer
with tf.name_scope('optimizer'):
train_op = tf.train.adamoptimizer(self._learning_rate).minimize(loss)
8、準確率accuracy
with tf.name_scope('accuracy'):
accuracy = 1 - tf.reduce_mean(tf.edit_distance(tf.cast(self._decoded[0], tf.int32), self._label))
accuracy_broad = tf.summary.scalar("accuracy", accuracy)
9、喂資料進行訓練
feed_dict =
sess.run(train_op, feed_dict=feed_dict)
文字識別 CRNN
來自 文字檢測主要解決的問題是 有文字,文字的範圍有多大,即定位文字行的所在位置和範圍及其布局。文字識別是在文字行定位的基礎上,對文字行內容進行識別,將影象中的文字資訊轉化為文字資訊。文字識別主要解決的問題是每個文字是什麼。圖1 文字識別的步驟 常用文字行識別演算法主要有兩個框架 ctc是一種los...
crnn驗證碼識別
crnn驗證碼識別 早期的驗證碼破解主要對字元檢測,切割,後對單個字元的識別。該方法只能對傳統的背景清晰,文字較為端正簡單的驗證碼進行識別,無法適應複雜背景的驗證碼文字。該驗證碼識別採用樣本自動生成及加入相應 驗證碼,crnn進行訓練識別。訓練樣本的自動生成 1 生成驗證碼詞庫,比如字元只有0 9 ...
文字識別 CRNN 白翔
pytorch 只針對英文 中文翻譯 架構包括三部分 1 卷積層,從輸入影象中提取特徵序列 2 迴圈層,每一幀的標籤分布 每幀 3 轉錄層,將每一幀的 變為最終的標籤序列。cnn 特徵序列的每乙個特徵向量在特徵圖上按列從左到右生成。這意味著第i個特徵向量是所有特徵圖第i列的連線。在我們的設定中每列的...