paint-brush
AI Framework hỗ trợ bạn về quy trình làm việc chuyển đổi hình ảnh thành văn bảntừ tác giả@ritabratamaiti
Bài viết mới

AI Framework hỗ trợ bạn về quy trình làm việc chuyển đổi hình ảnh thành văn bản

từ tác giả ritabratamaiti5m2024/12/31
Read on Terminal Reader

dài quá đọc không nổi

Cái gì: Chuyển đổi hình ảnh phương trình toán học thành LaTeX bằng cách sử dụng đường ống ngôn ngữ thị giác mô-đun của AnyModal. Cách thức: Sử dụng trọng số được đào tạo trước để suy luận nhanh hoặc đào tạo mô hình tùy chỉnh bằng tập dữ liệu của riêng bạn. Ở đâu: Tìm ví dụ đầy đủ, mã và trọng số mô hình trên GitHub và Hugging Face. Tại sao: Dễ dàng tích hợp nhiều thành phần AI (thị giác + văn bản) mà không cần viết mã cầu nối mở rộng.
featured image - AI Framework hỗ trợ bạn về quy trình làm việc chuyển đổi hình ảnh thành văn bản
ritabratamaiti HackerNoon profile picture
0-item
1-item

Giới thiệu về AnyModal

AnyModal là một khuôn khổ được thiết kế để hợp nhất nhiều "phương thức" (như hình ảnh, văn bản hoặc dữ liệu khác) thành một quy trình làm việc thống nhất, duy nhất. Thay vì phải xử lý các thư viện riêng biệt hoặc viết mã tùy chỉnh để kết nối các mô hình tầm nhìn và ngôn ngữ, AnyModal cung cấp một đường ống có cấu trúc, trong đó mỗi thành phần—bộ mã hóa hình ảnh, bộ mã hóa, mô hình ngôn ngữ—có thể được cắm vào mà không cần tùy chỉnh nhiều. Bằng cách xử lý các kết nối cơ bản giữa các phần này, AnyModal cho phép bạn tập trung vào quy trình cấp cao: ví dụ như đưa hình ảnh vào và đưa ra kết quả dạng văn bản.


Trên thực tế, AnyModal có thể giúp ích cho các tác vụ như chú thích hình ảnh, phân loại hoặc trong trường hợp được trình bày ở đây, LaTeX OCR. Vì khung này là mô-đun, nên việc hoán đổi một mô hình này sang mô hình khác tương đối đơn giản (ví dụ: xương sống tầm nhìn khác hoặc mô hình ngôn ngữ mới), giúp linh hoạt cho các trường hợp thử nghiệm hoặc sử dụng chuyên biệt.


Trường hợp sử dụng LaTeX OCR

Việc chuyển đổi hình ảnh của một biểu thức toán học thành một chuỗi LaTeX hợp lệ đòi hỏi phải kết nối thị giác máy tính và xử lý ngôn ngữ tự nhiên. Công việc của bộ mã hóa hình ảnh là trích xuất các đặc điểm hoặc mẫu ký hiệu từ phương trình, chẳng hạn như nhận dạng "cộng", "trừ" và các ký hiệu khác. Sau đó, thành phần ngôn ngữ sử dụng các đặc điểm này để dự đoán các mã thông báo LaTeX thích hợp theo trình tự.


LaTeX OCR với AnyModal về cơ bản là một minh chứng cho thấy bạn có thể ghép nối bộ mã hóa thị giác với mô hình ngôn ngữ nhanh như thế nào. Mặc dù ví dụ này đề cập cụ thể đến các phương trình, nhưng cách tiếp cận tổng thể có thể được mở rộng sang các tình huống chuyển đổi hình ảnh thành văn bản khác, bao gồm ký hiệu toán học nâng cao hoặc chuyên biệt hơn.


Đến cuối hướng dẫn này, bạn sẽ biết cách sử dụng AnyModal, cùng với Llama 3.2 1B và SigLIP của Google để tạo một VLM nhỏ cho các tác vụ OCR LaTeX:

Chú thích thực tế: f ( u ) = u + \sum _ { n = o d d } \alpha _ { n } \left[ \frac { ( u - \pi ) } { \pi } \right] ^ { n } ,Chú thích được tạo bằng AnyModal/LaTeX-OCR-Llama-3.2-1B: f ( u ) = u + \sum _ { n = o o d } \alpha _ { n } \left[ \frac { ( u - \pi ) ^ { n } } { \pi } \right],


Lưu ý rằng trọng số được phát hành tại AnyModal/LaTeX-OCR-Llama-3.2-1B được lấy bằng cách đào tạo chỉ trên 20% tập dữ liệu unsloth/LaTeX_OCR .


Bạn có thể sẽ có được một mô hình tốt hơn bằng cách đào tạo trên toàn bộ tập dữ liệu và qua nhiều kỷ nguyên hơn.


Ví dụ suy luận nhanh

Đối với những người chủ yếu quan tâm đến việc tạo LaTeX từ các hình ảnh hiện có, đây là bản trình diễn sử dụng trọng số được đào tạo trước. Điều này tránh nhu cầu đào tạo bất kỳ thứ gì từ đầu, cung cấp một con đường nhanh chóng để xem AnyModal hoạt động. Dưới đây là tổng quan ngắn gọn về việc thiết lập môi trường của bạn, tải xuống các mô hình cần thiết và chạy suy luận.


Sao chép kho lưu trữ AnyModal:

 git clone https://github.com/ritabratamaiti/AnyModal.git


Cài đặt các thư viện cần thiết:

 pip install torch torchvision huggingface_hub PIL


Sau đó, tải xuống các mức tạ đã được đào tạo sẵn được lưu trữ trên Hugging Face Hub:

 from huggingface_hub import snapshot_download snapshot_download("AnyModal/Image-Captioning-Llama-3.2-1B", local_dir="latex_ocr_model")


Những trọng số cụ thể này có thể được tìm thấy ở đây: LaTeX-OCR-Llama-3.2-1B trên Hugging Face


Tiếp theo, tải bộ mã hóa thị giác và mô hình ngôn ngữ:

 import llm import anymodal import vision from PIL import Image # Load language model and tokenizer tokenizer, model = llm.get_llm("meta-llama/Llama-3.2-1B") # Load vision-related components image_processor, vision_model, vision_hidden_size = vision.get_image_encoder('google/vit-base-patch16-224') vision_encoder = vision.VisionEncoder(vision_model) # Configure the multimodal pipeline multimodal_model = anymodal.MultiModalModel( input_processor=None, input_encoder=vision_encoder, input_tokenizer=vision.Projector(vision_hidden_size, llm.get_hidden_size(tokenizer, model), num_hidden=1), language_tokenizer=tokenizer, language_model=model, prompt_text="The LaTeX expression of the equation in the image is:" ) # Load the pretrained model weights multimodal_model._load_model("latex_ocr_model") multimodal_model.eval()


Cuối cùng, cung cấp hình ảnh và nhận đầu ra LaTeX:

 # Replace with the path to your equation image image_path = "path_to_equation_image.png" image = Image.open(image_path).convert("RGB") processed_image = image_processor(image, return_tensors="pt") processed_image = {k: v.squeeze(0) for k, v in processed_image.items()} latex_output = multimodal_model.generate(processed_image, max_new_tokens=120) print("Generated LaTeX:", latex_output)


Chuỗi các bước đơn giản này chạy toàn bộ quy trình—phân tích hình ảnh, chiếu hình ảnh vào không gian mô hình ngôn ngữ và tạo LaTeX tương ứng.


Hướng dẫn đào tạo

Đối với những người muốn kiểm soát nhiều hơn, chẳng hạn như điều chỉnh mô hình cho dữ liệu mới hoặc khám phá cơ chế của đường ống ngôn ngữ thị giác, quy trình đào tạo cung cấp cái nhìn sâu sắc hơn. Các phần bên dưới minh họa cách dữ liệu được chuẩn bị, cách các thành phần của mô hình được tích hợp và cách chúng được tối ưu hóa chung.


Thay vì chỉ dựa vào các thành phần được đào tạo trước, bạn có thể có được một tập dữ liệu đào tạo gồm các hình ảnh được ghép nối và nhãn LaTeX. Một ví dụ là tập dữ liệu unsloth/LaTeX_OCR , chứa các hình ảnh của phương trình cùng với chuỗi LaTeX của chúng. Sau khi cài đặt các phụ thuộc và thiết lập tập dữ liệu của bạn, các bước để đào tạo bao gồm tạo một đường ống dữ liệu, khởi tạo mô hình và lặp qua các kỷ nguyên.


Sau đây là phác thảo về cách chuẩn bị và tải tập dữ liệu:

 from torch.utils.data import Subset import vision # Load training and validation sets train_dataset = vision.ImageDataset("unsloth/LaTeX_OCR", image_processor, split='train') val_dataset = vision.ImageDataset("unsloth/LaTeX_OCR", image_processor, split='test') # Optionally use a smaller subset for faster iteration subset_ratio = 0.2 train_dataset = Subset(train_dataset, range(int(subset_ratio * len(train_dataset)))) val_dataset = Subset(val_dataset, range(int(subset_ratio * len(val_dataset))))


Tại thời điểm này, bạn sẽ xây dựng hoặc tái sử dụng cùng một đường ống AnyModal được mô tả trước đó. Thay vì tải các trọng số được đào tạo trước, bạn sẽ khởi tạo mô hình để nó có thể học từ đầu hoặc từ các điểm kiểm tra được đào tạo trước một phần.

 multimodal_model = anymodal.MultiModalModel( input_processor=None, input_encoder=vision_encoder, input_tokenizer=vision.Projector(vision_hidden_size, llm.get_hidden_size(tokenizer, model), num_hidden=1), language_tokenizer=tokenizer, language_model=model, prompt_text="The LaTeX expression of the equation in the image is:" )


Sau đó, bạn có thể tạo một vòng lặp đào tạo để tối ưu hóa các tham số của mô hình. Một cách tiếp cận phổ biến là sử dụng trình tối ưu hóa AdamW của PyTorch và tùy chọn sử dụng đào tạo độ chính xác hỗn hợp để đạt hiệu quả:

 from tqdm import tqdm import torch optimizer = torch.optim.AdamW(multimodal_model.parameters(), lr=1e-4) scaler = torch.cuda.amp.GradScaler() train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=16, shuffle=True) num_epochs = 5 for epoch in range(num_epochs): for batch_idx, batch in tqdm(enumerate(train_loader), desc=f"Epoch {epoch+1} Training"): optimizer.zero_grad() with torch.cuda.amp.autocast(): logits, loss = multimodal_model(batch) scaler.scale(loss).backward() scaler.step(optimizer) scaler.update()


Sau mỗi kỷ nguyên hoặc ít nhất là khi quá trình đào tạo kết thúc, việc đánh giá mô hình trên tập xác thực sẽ giúp đảm bảo mô hình có thể khái quát hóa thành dữ liệu mới:

 val_loader = torch.utils.data.DataLoader(val_dataset, batch_size=16, shuffle=False) for batch_idx, batch in enumerate(val_loader): predictions = multimodal_model.generate(batch['input'], max_new_tokens=120) for idx, prediction in enumerate(predictions): print(f"Actual LaTeX: {batch['text'][idx]}") print(f"Generated LaTeX: {prediction}")


Ngoài việc xác nhận hiệu suất, bước xác thực này có thể hướng dẫn các cải tiến như điều chỉnh siêu tham số, chuyển sang mô hình cơ sở khác hoặc tinh chỉnh quá trình xử lý trước dữ liệu của bạn. Bằng cách làm theo các bước đào tạo này, bạn sẽ hiểu rõ hơn về sự tương tác giữa bộ mã hóa thị giác và mô hình ngôn ngữ và bạn có thể mở rộng quy trình làm việc sang các tác vụ bổ sung hoặc các miền chuyên biệt hơn.


Tài nguyên bổ sung