Transformers documentation
MGP-STR
Mô hình này được công bố trên HF papers vào ngày 08-09-2022 và được đóng góp cho Hugging Face Transformers vào ngày 13-03-2023.
MGP-STR
Tổng quan
Mô hình MGP-STR được đề xuất trong Multi-Granularity Prediction for Scene Text Recognition của Peng Wang, Cheng Da và Cong Yao. MGP-STR là một mô hình nhận dạng văn bản trong cảnh (STR) thị giác có khái niệm đơn giản nhưng mạnh mẽ, được xây dựng dựa trên Vision Transformer (ViT). Để tích hợp kiến thức ngôn ngữ, chiến lược Dự đoán Đa Mức Độ (MGP) được đề xuất nhằm đưa thông tin từ phương thức ngôn ngữ vào mô hình một cách ẩn.
Tóm tắt từ bài báo như sau:
Nhận dạng văn bản trong cảnh (STR) đã là một chủ đề nghiên cứu tích cực trong thị giác máy tính trong nhiều năm. Để giải quyết bài toán đầy thách thức này, nhiều phương pháp sáng tạo đã được đề xuất liên tiếp và việc tích hợp kiến thức ngôn ngữ vào các mô hình STR gần đây đã trở thành một xu hướng nổi bật. Trong công việc này, trước tiên chúng tôi lấy cảm hứng từ những tiến bộ gần đây của Vision Transformer (ViT) để xây dựng một mô hình STR thị giác đơn giản về mặt khái niệm nhưng mạnh mẽ, được xây dựng dựa trên ViT và vượt trội hơn so với các mô hình tiên tiến trước đó cho nhận dạng văn bản trong cảnh, bao gồm cả các mô hình thuần thị giác và các phương pháp tăng cường ngôn ngữ. Để tích hợp kiến thức ngôn ngữ, chúng tôi tiếp tục đề xuất chiến lược Dự đoán Đa Mức Độ (Multi-Granularity Prediction) để tiêm thông tin từ chế độ ngôn ngữ vào mô hình một cách ẩn, tức là, các biểu diễn subword (BPE và WordPiece) được sử dụng rộng rãi trong NLP được đưa vào không gian đầu ra, bên cạnh biểu diễn mức ký tự thông thường, trong khi không có mô hình ngôn ngữ (LM) độc lập nào được áp dụng. Thuật toán kết quả (được gọi là MGP-STR) có khả năng đẩy phong bao hiệu suất của STR lên một mức cao hơn. Cụ thể, nó đạt độ chính xác nhận dạng trung bình 93,35% trên các bộ chuẩn đánh giá tiêu chuẩn.
MGP-STR architecture. Taken from the original paper. MGP-STR được huấn luyện trên hai bộ dữ liệu tổng hợp MJSynth (MJ) và SynthText (ST) mà không cần tinh chỉnh trên các bộ dữ liệu khác. Mô hình này đạt kết quả tiên tiến nhất trên sáu bộ chuẩn đánh giá văn bản cảnh Latinh, bao gồm 3 bộ dữ liệu văn bản thường (IC13, SVT, IIIT) và 3 bộ dữ liệu văn bản không đều (IC15, SVTP, CUTE). Mô hình này được đóng góp bởi yuekun. Mã nguồn gốc có thể tìm thấy tại đây.
Ví dụ suy luận
MgpstrModel nhận ảnh làm đầu vào và tạo ra ba loại dự đoán, đại diện cho thông tin văn bản ở các mức độ chi tiết khác nhau. Ba loại dự đoán này được kết hợp để cho ra kết quả dự đoán cuối cùng.
Lớp ViTImageProcessor chịu trách nhiệm tiền xử lý ảnh đầu vào và MgpstrTokenizer giải mã các token ký tự được tạo ra thành chuỗi đích. MgpstrProcessor đóng gói ViTImageProcessor và MgpstrTokenizer thành một instance duy nhất để vừa trích xuất các đặc trưng đầu vào vừa giải mã các id token dự đoán.
- Nhận dạng ký tự quang học (OCR) từng bước
import requests
from PIL import Image
from transformers import MgpstrForSceneTextRecognition, MgpstrProcessor
processor = MgpstrProcessor.from_pretrained('alibaba-damo/mgp-str-base')
model = MgpstrForSceneTextRecognition.from_pretrained('alibaba-damo/mgp-str-base', device_map="auto")
# load a synthetic scene-text image
url = "https://huggingface.co/datasets/hf-internal-testing/transformers-synthetic-assets/resolve/main/images/mgp_str_ticket.png"
image = Image.open(requests.get(url, stream=True).raw).convert("RGB")
pixel_values = processor(images=image, return_tensors="pt").to(model.device).pixel_values
outputs = model(pixel_values)
generated_text = processor.batch_decode(outputs.logits)['generated_text']MgpstrConfig
lớp transformers.MgpstrConfig
< source >( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0is_encoder_decoder: bool = Falseid2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Noneimage_size: list[int] | tuple[int, ...] = (32, 128)patch_size: int | list[int] | tuple[int, int] = 4num_channels: int = 3max_token_length: int = 27num_character_labels: int = 38num_bpe_labels: int = 50257num_wordpiece_labels: int = 30522hidden_size: int = 768num_hidden_layers: int = 12num_attention_heads: int = 12mlp_ratio: float | int = 4.0qkv_bias: bool = Truedistilled: bool = Falselayer_norm_eps: float = 1e-05drop_rate: float | int = 0.0attn_drop_rate: float | int = 0.0drop_path_rate: float | int = 0.0output_a3_attentions: bool = Falseinitializer_range: float = 0.02 )
Tham số
- image_size (
Union[list[int], tuple[int, ...]], tùy chọn, mặc định là(32, 128)) — Kích thước (độ phân giải) của mỗi hình ảnh. - patch_size (
Union[int, list[int], tuple[int, int]], tùy chọn, mặc định là4) — Kích thước (độ phân giải) của mỗi patch. - num_channels (
int, tùy chọn, mặc định là3) — Số lượng kênh đầu vào. - max_token_length (
int, tùy chọn, mặc định là 27) — Số lượng token đầu ra tối đa. - num_character_labels (
int, tùy chọn, mặc định là 38) — Số lượng lớp cho đầu nhân vật. - num_bpe_labels (
int, tùy chọn, mặc định là 50257) — Số lượng lớp cho đầu bpe. - num_wordpiece_labels (
int, tùy chọn, mặc định là 30522) — Số lượng lớp cho wordpiece head. - hidden_size (
int, tùy chọn, mặc định là768) — Kích thước của các biểu diễn ẩn. - num_hidden_layers (
int, tùy chọn, mặc định là12) — Số lượng lớp ẩn trong bộ giải mã Transformer. - num_attention_heads (
int, tùy chọn, mặc định là12) — Số lượng đầu attention cho mỗi lớp attention trong bộ giải mã Transformer. - mlp_ratio (
Union[float, int], tùy chọn, mặc định là4.0) — Tỷ lệ giữa chiều ẩn của MLP và chiều nhúng. - qkv_bias (
bool, tùy chọn, mặc định làTrue) — Có thêm bias cho queries, keys và values hay không. - distilled (
bool, tùy chọn, mặc định làFalse) — Mô hình bao gồm một token và head chưng cất như trong các mô hình DeiT. - layer_norm_eps (
float, tùy chọn, mặc định là1e-05) — Giá trị epsilon được sử dụng bởi các lớp chuẩn hóa lớp (layer normalization). - drop_rate (
float, tùy chọn, mặc định là 0.0) — Xác suất dropout cho tất cả các lớp liên kết đầy đủ trong phần nhúng, bộ mã hóa. - attn_drop_rate (
float, tùy chọn, mặc định là 0.0) — Tỷ lệ dropout cho các xác suất chú ý. - drop_path_rate (
Union[float, int], tùy chọn, mặc định là0.0) — Tỷ lệ drop path cho việc hợp nhất patch. - output_a3_attentions (
bool, tùy chọn, mặc định làFalse) — Xác định xem mô hình có nên trả về các chú ý của module A^3 hay không. - initializer_range (
float, tùy chọn, mặc định là0.02) — Độ lệch chuẩn của truncated_normal_initializer để khởi tạo tất cả các ma trận trọng số.
Đây là lớp cấu hình để lưu trữ cấu hình của một Mgp StrModel. Nó được sử dụng để khởi tạo một mô hình Mgp Str theo các đối số được chỉ định, xác định kiến trúc của mô hình. Khởi tạo một cấu hình với các giá trị mặc định sẽ tạo ra một cấu hình tương tự như cấu hình của alibaba-damo/mgp-str-base
Các đối tượng cấu hình kế thừa từ PreTrainedConfig và có thể được sử dụng để kiểm soát đầu ra của mô hình. Đọc tài liệu từ PreTrainedConfig để biết thêm thông tin.
Ví dụ:
>>> from transformers import MgpstrConfig, MgpstrForSceneTextRecognition
>>> # Initializing a Mgpstr mgp-str-base style configuration
>>> configuration = MgpstrConfig()
>>> # Initializing a model (with random weights) from the mgp-str-base style configuration
>>> model = MgpstrForSceneTextRecognition(configuration)
>>> # Accessing the model configuration
>>> configuration = model.configMgpstrTokenizer
lớp transformers.MgpstrTokenizer
< source >( vocab_fileunk_token = '[GO]'bos_token = '[GO]'eos_token = '[s]'pad_token = '[GO]'**kwargs )
Tham số
- vocab_file (
str) — Đường dẫn đến tệp từ vựng. - unk_token (
str, tùy chọn, mặc định là"[GO]") — Token không xác định. Một token không có trong từ vựng sẽ không thể được chuyển đổi thành ID và sẽ được gán thành token này thay thế. - bos_token (
str, tùy chọn, mặc định là"[GO]") — Token đánh dấu đầu chuỗi. - eos_token (
str, tùy chọn, mặc định là"[s]") — Token kết thúc chuỗi. - pad_token (
strhoặctokenizers.AddedToken, tùy chọn, mặc định là"[GO]") — Một token đặc biệt được sử dụng để đưa các mảng token về cùng kích thước nhằm phục vụ việc tạo batch. Sau đó, nó sẽ bị bỏ qua bởi các cơ chế attention hoặc quá trình tính toán loss.
Xây dựng bộ phân tách ký tự MGP-STR.
Tokenizer này kế thừa từ PreTrainedTokenizer, lớp chứa hầu hết các phương thức chính. Người dùng nên tham khảo siêu lớp này để biết thêm thông tin về các phương thức đó.
MgpstrProcessor
lớp transformers.MgpstrProcessor
< source >( image_processor = Nonetokenizer = None**kwargs )
Tạo một MgpstrProcessor đóng gói một bộ xử lý ảnh và một tokenizer thành một bộ xử lý duy nhất.
MgpstrProcessor cung cấp đầy đủ các chức năng của ViTImageProcessor và MgpstrTokenizer. Xem ~ViTImageProcessor và ~MgpstrTokenizer để biết thêm thông tin.
__call__
< source >( text = Noneimages = None**kwargs )
Tham số
- text (`
) -- The sequence or batch of sequences to be encoded. Each sequence can be a string or a list of strings (pretokenized string). If you pass a pretokenized input, setis_split_into_words=True` to avoid ambiguity with batched inputs. - images (`
) -- Image to preprocess. Expects a single or batch of images with pixel values ranging from 0 to 255. If passing in images with pixel values between 0 and 1, setdo_rescale=False`. - return_tensors (
strhoặc TensorType, tùy chọn) — Nếu được đặt, sẽ trả về tensor của một framework cụ thể. Các giá trị chấp nhận được là:'pt': Trả về các đối tượngtorch.Tensorcủa PyTorch.'np': Trả về các đối tượngnp.ndarraycủa NumPy.
batch_decode
< source >( sequences ) → dict[str, any]
Tham số
Trả về
dict[str, any]
Từ điển chứa tất cả các đầu ra của kết quả đã giải mã.
generated_text (list[str]): Kết quả cuối cùng sau khi kết hợp điểm char, bpe và wp.
scores (list[float]): Điểm cuối cùng sau khi kết hợp char, bpe và wp. char_preds (list[str]): Danh sách
các câu đã giải mã ở cấp độ ký tự. bpe_preds (list[str]): Danh sách các câu đã giải mã ở cấp độ bpe. wp_preds
(list[str]): Danh sách các câu đã giải mã ở cấp độ wp.
Chuyển đổi một danh sách các danh sách id token thành một danh sách các chuỗi bằng cách gọi decode.
Phương pháp này chuyển tiếp tất cả các đối số của nó đến batch_decode() của PreTrainedTokenizer. Vui lòng tham khảo docstring của phương pháp này để biết thêm thông tin.
MgpstrModel
lớp transformers.MgpstrModel
< source >( config: MgpstrConfig )
Tham số
- config (MgpstrConfig) — Lớp cấu hình mô hình chứa tất cả các tham số của mô hình. Khởi tạo bằng tệp cấu hình không tải trọng số liên quan đến mô hình, chỉ tải cấu hình. Xem phương thức from_pretrained() để tải trọng số của mô hình.
Mgp Str Model cơ bản, xuất ra các hidden-states thô mà không có head cụ thể nào ở phía trên.
Mô hình này kế thừa từ PreTrainedModel. Xem tài liệu của lớp cha để biết các phương thức chung mà thư viện triển khai cho tất cả các mô hình của nó (chẳng hạn như tải xuống hoặc lưu trữ, thay đổi kích thước các nhúng đầu vào, cắt tỉa các đầu, v.v.)
Mô hình này cũng là một lớp con của torch.nn.Module trong PyTorch. Hãy sử dụng nó như một Module PyTorch thông thường và tham khảo tài liệu PyTorch cho mọi vấn đề liên quan đến cách sử dụng và hành vi chung.
forward
< source >( pixel_values: Tensoroutput_attentions: bool | None = Noneoutput_hidden_states: bool | None = Nonereturn_dict: bool | None = None**kwargs ) → BaseModelOutput or tuple(torch.Tensor)
Tham số
- pixel_values (
torch.Tensorcó hình dạng(batch_size, num_channels, image_size, image_size)) — Các tensor tương ứng với các hình ảnh đầu vào. Giá trị pixel có thể được lấy bằng cách sử dụng ViTImageProcessor. Xem ViTImageProcessor.call() để biết chi tiết (MgpstrProcessor sử dụng ViTImageProcessor để xử lý hình ảnh). - output_attentions (
bool, tùy chọn) — Có trả về các tensor attentions của tất cả các lớp attention hay không. Xemattentionstrong phần tensor được trả về để biết thêm chi tiết. - output_hidden_states (
bool, tùy chọn) — Có trả về trạng thái ẩn (hidden states) của tất cả các lớp hay không. Xemhidden_statestrong phần tensor trả về để biết thêm chi tiết. - return_dict (
bool, tùy chọn) — Có nên trả về một ModelOutput thay vì một tuple thông thường hay không.
Trả về
BaseModelOutput hoặc tuple(torch.Tensor)
Một BaseModelOutput hoặc một tuple của
torch.Tensor (nếu return_dict=False được truyền hoặc khi config.return_dict=False) bao gồm các
thành phần khác nhau tùy thuộc vào cấu hình (MgpstrConfig) và đầu vào.
Phương thức forward của MgpstrModel ghi đè lên phương thức đặc biệt __call__.
Mặc dù công thức cho bước truyền tiến cần được định nghĩa bên trong hàm này, người dùng nên gọi instance của
Modulesau đó thay vì gọi hàm này, vì instanceModulesẽ đảm nhận việc thực hiện các bước tiền xử lý và hậu xử lý, trong khi hàm này sẽ lặng lẽ bỏ qua chúng.
last_hidden_state (
torch.Tensorcó hình dạng(batch_size, sequence_length, hidden_size)) — Chuỗi các hidden-state tại đầu ra của lớp cuối cùng của mô hình.hidden_states (
tuple(torch.Tensor), tuỳ chọn, được trả về khioutput_hidden_states=Trueđược truyền vào hoặc khiconfig.output_hidden_states=True) — Bộ tuple củatorch.Tensor(một cho đầu ra của embeddings, nếu mô hình có lớp embedding, + một cho đầu ra của mỗi lớp) có hình dạng(batch_size, sequence_length, hidden_size).Trạng thái ẩn của mô hình tại đầu ra của mỗi lớp cùng với các đầu ra embedding ban đầu tùy chọn.
attentions (
tuple(torch.Tensor), tuỳ chọn, được trả về khioutput_attentions=Trueđược truyền vào hoặc khiconfig.output_attentions=True) — Tuple củatorch.Tensor(một cho mỗi lớp) có hình dạng(batch_size, num_heads, sequence_length, sequence_length).Trọng số chú ý sau softmax của attention, được sử dụng để tính trung bình có trọng số trong các đầu self-attention.
MgpstrForSceneTextRecognition
lớp transformers.MgpstrForSceneTextRecognition
< source >( config: MgpstrConfig )
Tham số
- config (MgpstrConfig) — Lớp cấu hình mô hình chứa tất cả các tham số của mô hình. Khởi tạo bằng tệp cấu hình không tải trọng số liên quan đến mô hình, chỉ tải cấu hình. Xem phương thức from_pretrained() để tải trọng số của mô hình.
MGP-STR Model transformer với ba đầu phân loại phía trên (ba module A^3 và ba lớp tuyến tính phía trên đầu ra của bộ mã hóa transformer) cho nhận dạng văn bản trong cảnh (STR).
Mô hình này kế thừa từ PreTrainedModel. Xem tài liệu của lớp cha để biết các phương thức chung mà thư viện triển khai cho tất cả các mô hình của nó (chẳng hạn như tải xuống hoặc lưu trữ, thay đổi kích thước các nhúng đầu vào, cắt tỉa các đầu, v.v.)
Mô hình này cũng là một lớp con của torch.nn.Module trong PyTorch. Hãy sử dụng nó như một Module PyTorch thông thường và tham khảo tài liệu PyTorch cho mọi vấn đề liên quan đến cách sử dụng và hành vi chung.
forward
< source >( pixel_values: Tensoroutput_attentions: bool | None = Noneoutput_a3_attentions: bool | None = Noneoutput_hidden_states: bool | None = Nonereturn_dict: bool | None = None**kwargs ) → MgpstrModelOutput or tuple(torch.Tensor)
Tham số
- pixel_values (
torch.Tensorcó hình dạng(batch_size, num_channels, image_size, image_size)) — Các tensor tương ứng với các hình ảnh đầu vào. Giá trị pixel có thể được lấy bằng cách sử dụng ViTImageProcessor. Xem ViTImageProcessor.call() để biết chi tiết (MgpstrProcessor sử dụng ViTImageProcessor để xử lý hình ảnh). - output_attentions (
bool, tùy chọn) — Có trả về các tensor attentions của tất cả các lớp attention hay không. Xemattentionstrong phần tensor được trả về để biết thêm chi tiết. - output_a3_attentions (
bool, tùy chọn) — Có trả về các tensor chú ý của các module a3 hay không. Xema3_attentionstrong các tensor được trả về để biết thêm chi tiết. - output_hidden_states (
bool, tùy chọn) — Có trả về trạng thái ẩn (hidden states) của tất cả các lớp hay không. Xemhidden_statestrong phần tensor trả về để biết thêm chi tiết. - return_dict (
bool, tùy chọn) — Có nên trả về một ModelOutput thay vì một tuple thông thường hay không.
Trả về
MgpstrModelOutput hoặc tuple(torch.Tensor)
Một MgpstrModelOutput hoặc một tuple của
torch.Tensor (nếu return_dict=False được truyền hoặc khi config.return_dict=False) bao gồm các
thành phần khác nhau tùy thuộc vào cấu hình (MgpstrConfig) và đầu vào.
Phương thức forward của MgpstrForSceneTextRecognition ghi đè lên phương thức đặc biệt __call__.
Mặc dù công thức cho bước truyền tiến cần được định nghĩa bên trong hàm này, người dùng nên gọi instance của
Modulesau đó thay vì gọi hàm này, vì instanceModulesẽ đảm nhận việc thực hiện các bước tiền xử lý và hậu xử lý, trong khi hàm này sẽ lặng lẽ bỏ qua chúng.
logits (
tuple(torch.Tensor)có hình dạng(batch_size, config.num_character_labels)) — Bộ batorch.Tensor(một cho đầu ra của character có hình dạng(batch_size, config.max_token_length, config.num_character_labels), + một cho đầu ra của bpe có hình dạng(batch_size, config.max_token_length, config.num_bpe_labels), + một cho đầu ra của wordpiece có hình dạng(batch_size, config.max_token_length, config.num_wordpiece_labels)) .Điểm phân loại (trước SoftMax) của character, bpe và wordpiece.
hidden_states (
tuple[torch.Tensor], tuỳ chọn, được trả về khioutput_hidden_states=Trueđược truyền vào hoặc khiconfig.output_hidden_states=True) — Tuple củatorch.Tensor(một cho đầu ra của embeddings, nếu mô hình có lớp embedding, + một cho đầu ra của mỗi lớp) có hình dạng(batch_size, sequence_length, hidden_size).Trạng thái ẩn của mô hình tại đầu ra của mỗi lớp cùng với các đầu ra embedding ban đầu tùy chọn.
attentions (
tuple[torch.Tensor], tuỳ chọn, được trả về khioutput_attentions=Trueđược truyền vào hoặc khiconfig.output_attentions=True) — Tuple củatorch.Tensor(một cho mỗi lớp) có hình dạng(batch_size, num_heads, sequence_length, sequence_length).Trọng số chú ý sau softmax của attention, được sử dụng để tính trung bình có trọng số trong các đầu self-attention.
a3_attentions (
tuple(torch.Tensor), optional, returned whenoutput_a3_attentions=Trueis passed or whenconfig.output_a3_attentions=True) — Tuple oftorch.Tensor(one for the attention of character, + one for the attention of bpe, + one for the attention of wordpiece) of shape(batch_size, config.max_token_length, sequence_length)`.Trọng số chú ý sau softmax của attention, được sử dụng để tính trung bình có trọng số trong các đầu self-attention.
Ví dụ:
>>> from transformers import (
... MgpstrProcessor,
... MgpstrForSceneTextRecognition,
... )
>>> from huggingface_hub.utils import httpx
>>> from io import BytesIO
>>> from PIL import Image
>>> # load a synthetic scene-text image
>>> url = "https://huggingface.co/datasets/hf-internal-testing/transformers-synthetic-assets/resolve/main/images/mgp_str_ticket.png"
>>> with httpx.stream("GET", url) as response:
... image = Image.open(BytesIO(response.read())).convert("RGB")
>>> processor = MgpstrProcessor.from_pretrained("alibaba-damo/mgp-str-base")
>>> pixel_values = processor(images=image, return_tensors="pt").pixel_values
>>> model = MgpstrForSceneTextRecognition.from_pretrained("alibaba-damo/mgp-str-base")
>>> # inference
>>> outputs = model(pixel_values)
>>> out_strs = processor.batch_decode(outputs.logits)
>>> out_strs["generated_text"]
'["ticket"]'