PARSeqCausalLM 类keras_hub.models.PARSeqCausalLM(
preprocessor,
backbone,
num_perms=6,
add_forward_perms=True,
add_mirrored_perms=True,
seed=None,
end_token_id=0,
**kwargs
)
使用PARSeq进行场景文本识别。使用 Scene Text Recognition with Permuted Autoregressive Sequence Models 中描述的PARSeq模型执行自然场景中的OCR。PARSeq是一个基于ViT的模型,它通过执行一个自回归解码阶段,然后进行一个细化阶段来实现迭代解码。参数
keras_hub.models.Preprocessor 实例或一个 keras.Layer 实例。模型使用的预处理器。keras_hub.models.PARSeqBackbone 实例或一个 keras.Model。模型使用的骨干模型。True。True。None,表示不设置种子。keras_hub.models.CausalLM 构造函数的额外关键字参数。示例
调用 predict() 运行推理。
# Load preset and run inference
images = np.random.randint(0, 256, size=(2, 32, 128, 3))
parseq = keras_hub.models.PARSeqCausalLM.from_preset(
"parseq_vit"
)
parseq.generate(images)
# Call `fit()` on a single batch.
images = np.random.randint(0, 256, size=(2, 32, 128, 3))
token_ids = np.array([[1, 2, 3, 4], [1, 2, 3, 0]])
padding_mask = np.array([[1, 1, 1, 1], [1, 1, 1, 0]])
parseq = keras_hub.models.PARSeqCausalLM.from_preset(
"parseq_vit"
)
parseq.fit(
x={
"images": images,
"token_ids": token_ids,
"padding_mask": padding_mask
},
batch_size=2,
)
使用自定义损失、优化器和图像编码器调用 fit()
.
# Initialize the image encoder, preprocessor and tokenizer
mean, std = 0.5, 0.5
image_converter = PARSeqImageConverter(
image_size=(32, 128),
offset=-mean / std,
scale=1.0 / 255.0 / std,
interpolation="bicubic",
)
tokenizer = PARSeqTokenizer(max_label_length=25)
preprocessor = keras_hub.models.PARSeqCausalLMPreprocessor(
image_converter=image_converter,
tokenizer=tokenizer,
)
# Create the backbone
image_encoder = ViTBackbone(
image_shape=(32, 128, 3),
patch_size=(4, 8),
num_layers=12,
num_heads=6,
hidden_dim=384,
mlp_dim=384 * 4,
use_class_token=False,
name="encoder",
)
backbone = PARSeqBackbone(
vocabulary_size=97,
max_label_length=25,
image_encoder=image_encoder,
num_decoder_heads=12,
num_decoder_layers=1,
decoder_hidden_dim=384,
decoder_mlp_dim=4 * 384,
)
# Create the PARSeq model
parseq = keras_hub.models.PARSeqCausalLM(
backbone=backbone,
preprocessor=preprocessor,
)
parseq.compile(
loss=keras.losses.SparseCategoricalCrossentropy(from_logits=True),
optimizer=keras.optimizers.Adam(5e-5),
)
parseq.fit(
x={
"images": images,
"token_ids": token_ids,
"padding_mask": padding_mask
},
batch_size=2,
)
from_preset 方法PARSeqCausalLM.from_preset(preset, load_weights=True, **kwargs)
从模型预设实例化一个 keras_hub.models.Task。
预设是一个包含配置、权重和其他文件资产的目录,用于保存和加载预训练模型。preset 可以作为以下之一传递:
'bert_base_en''kaggle://user/bert/keras/bert_base_en''hf://user/bert_base_en''./bert_base_en'对于任何 Task 子类,您都可以运行 cls.presets.keys() 来列出该类上所有可用的内置预设。
此构造函数可以通过两种方式调用。一种方式是从特定任务的基类(如 keras_hub.models.CausalLM.from_preset())调用,另一种方式是从模型类(如 keras_hub.models.BertTextClassifier.from_preset())调用。如果从基类调用,返回对象的子类将从预设目录中的配置推断出来。
参数
True,已保存的权重将被加载到模型架构中。如果为 False,所有权重将被随机初始化。示例
# Load a Gemma generative task.
causal_lm = keras_hub.models.CausalLM.from_preset(
"gemma_2b_en",
)
# Load a Bert classification task.
model = keras_hub.models.TextClassifier.from_preset(
"bert_base_en",
num_classes=2,
)
| 预设 | 参数 | 描述 |
|---|---|---|
| parseq | 23.83M | 用于场景文本识别的排列自回归序列 (PARSeq) 基础模型。 |
generate 方法PARSeqCausalLM.generate(
inputs, max_length=None, stop_token_ids="auto", strip_prompt=False
)
根据提示 inputs 生成文本。
此方法根据给定的 inputs 生成文本。用于生成的采样方法可以通过 compile() 方法设置。
如果 inputs 是一个 tf.data.Dataset,输出将“逐批”生成并连接起来。否则,所有输入将被视为单个批次处理。
如果模型附加了 preprocessor,inputs 将在 generate() 函数内部进行预处理,并且应与 preprocessor 层期望的结构匹配(通常是原始字符串)。如果未附加 preprocessor,则 inputs 应与 backbone 期望的结构匹配。请参阅上面的示例用法以了解每个的演示。
参数
tf.data.Dataset。如果模型附加了 preprocessor,inputs 应与 preprocessor 层期望的结构匹配。如果未附加 preprocessor,inputs 应与 backbone 模型期望的结构匹配。preprocessor 配置的 sequence_length 最大值。如果 preprocessor 为 None,则 inputs 应填充到所需的最大长度,并且此参数将被忽略。None、"auto" 或 token ID 的元组。默认为 "auto",它使用 preprocessor.tokenizer.end_token_id。不指定处理器将产生错误。None 在生成 max_length 个 token 后停止生成。您也可以指定一个 token ID 列表,模型应在此停止。请注意,token 序列中的每个序列都将被解释为一个停止 token,不支持多 token 停止序列。backbone 属性keras_hub.models.PARSeqCausalLM.backbone
一个具有核心架构的 keras_hub.models.Backbone 模型。
preprocessor 属性keras_hub.models.PARSeqCausalLM.preprocessor
用于预处理输入的 keras_hub.models.Preprocessor 层。