当前的Keras Captcha OCR 模型返回一个 CTC 编码的输出,需要在推理后进行解码。
要对此进行解码,需要在推理之后作为单独的步骤运行解码实用程序函数。
preds = prediction_model.predict(batch_images)
pred_texts = decode_batch_predictions(preds)
解码后的效用函数使用keras.backend.ctc_decode
,而后者又使用贪婪或波束搜索解码器。
# A utility function to decode the output of the network
def decode_batch_predictions(pred):
input_len = np.ones(pred.shape[0]) * pred.shape[1]
# Use greedy search. For complex tasks, you can use beam search
results = keras.backend.ctc_decode(pred, input_length=input_len, greedy=True)[0][0][
:, :max_length
]
# Iterate over the results and get back the text
output_text = []
for res in results:
res = tf.strings.reduce_join(num_to_char(res)).numpy().decode("utf-8")
output_text.append(res)
return output_text
我想使用 Keras 训练一个 Captcha OCR 模型,该模型返回解码后的 CTC 作为输出,而无需在推理后进行额外的解码步骤。
我将如何实现这一目标?