CRNN學習筆記

2021-09-23 10:33:28 字數 1727 閱讀 4662

最近學習了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列的連線。在我們的設定中每列的...