def test_step(batch_images, batch_labels, labels_list): pred = crnn_model(batch_images, training=False) loss_value = loss_object(y_true=batch_labels, y_pred=pred) acc = test_accuracy(decoded_text=predict_text(pred), true_label=labels_list) loss_metric.update_state(values=loss_value) test_accuracy_metric.update_state(values=acc)
def valid_step(batch_images, batch_labels): pred = crnn_model(batch_images, training=False) loss_value = loss(y_true=batch_labels, y_pred=pred) valid_acc = accuracy(decoded_text=predict_text( pred, blank_index=blank_index), true_label=batch_labels) valid_loss_metric.update_state(values=loss_value) valid_accuracy.update_state(values=valid_acc)
def train_step(batch_images, batch_labels): with tf.GradientTape() as tape: pred = crnn_model(batch_images, training=True) loss_value = loss(y_true=batch_labels, y_pred=pred) gradients = tape.gradient(target=loss_value, sources=crnn_model.trainable_variables) optimizer.apply_gradients( grads_and_vars=zip(gradients, crnn_model.trainable_variables)) train_loss_metric.update_state(values=loss_value) train_acc = accuracy(decoded_text=predict_text(pred, blank_index), true_label=batch_labels) train_accuracy.update_state(values=train_acc)
def get_final_output_string(output, blank_index): decoded_text = tf.cast(x=output, dtype=tf.int32) decoded_text = decoded_text.numpy() decoded_text = index_to_char(inputs=decoded_text, idx2char_dict=Config.get_idx2char(), blank_index=blank_index) return decoded_text[0] if __name__ == '__main__': # GPU settings gpus = tf.config.list_physical_devices("GPU") if gpus: for gpu in gpus: tf.config.experimental.set_memory_growth(gpu, True) num_classes, blank_index = get_num_classes_and_blank_index() # read image image_raw = tf.io.read_file(Config.test_picture_path) image_tensor = tf.io.decode_image(contents=image_raw, channels=Config.IAMGE_CHANNELS, dtype=tf.dtypes.float32) image_tensor = tf.image.resize(image_tensor, [Config.IMAGE_HEIGHT, Config.IMAGE_WIDTH]) image_tensor = tf.expand_dims(input=image_tensor, axis=0) # load model crnn_model = CRNN(num_classes) crnn_model.load_weights(filepath=Config.save_model_dir+"saved_model") pred = crnn_model(image_tensor, training=False) predicted_string = get_final_output_string(predict_text(pred, blank_index), blank_index) print(predicted_string)
output_tensor = tf.squeeze(output, axis=0) idx2char = get_idx2char_map() output_string_list = [] for i in range(output_tensor.shape[0]): output_string_list.append(idx2char[output_tensor[i].numpy()]) output_string = "".join(output_string_list) return output_string if __name__ == '__main__': # GPU settings gpus = tf.config.list_physical_devices("GPU") if gpus: for gpu in gpus: tf.config.experimental.set_memory_growth(gpu, True) # read image image_raw = tf.io.read_file(test_picture_path) image_tensor = tf.io.decode_image(contents=image_raw, channels=IAMGE_CHANNELS, dtype=tf.dtypes.float32) image_tensor = tf.image.resize(image_tensor, [IMAGE_HEIGHT, IMAGE_WIDTH]) image_tensor = tf.expand_dims(input=image_tensor, axis=0) # load model crnn_model = CRNN() crnn_model.load_weights(filepath=save_model_dir + "saved_model") pred = crnn_model(image_tensor, training=False) predicted_string = get_final_output_string(predict_text(pred)) print(predicted_string)