paint-brush
AI Framework розповість вам про робочі процеси перетворення зображення в текстза@ritabratamaiti
Нова історія

AI Framework розповість вам про робочі процеси перетворення зображення в текст

за ritabratamaiti5m2024/12/31
Read on Terminal Reader

Надто довго; Читати

Що: перетворюйте зображення математичних рівнянь у LaTeX за допомогою модульного конвеєра візуально-мовного зв’язку AnyModal. Як: використовуйте попередньо підготовлені ваги для швидкого висновку або навчіть спеціальну модель із власним набором даних. Де: знайдіть повні приклади, код і ваги моделі на GitHub і Hugging Face. Навіщо: легко інтегруйте кілька компонентів штучного інтелекту (зір + текст) без написання великого коду з’єднання.
featured image - AI Framework розповість вам про робочі процеси перетворення зображення в текст
ritabratamaiti HackerNoon profile picture
0-item
1-item

Про AnyModal

AnyModal — це структура, розроблена для об’єднання кількох «модальностей» (таких як зображення, текст чи інші дані) у єдиний узгоджений робочий процес. Замість того, щоб жонглювати окремими бібліотеками чи писати спеціальний код для поєднання бачення та мовних моделей, AnyModal забезпечує структурований конвеєр, де кожен компонент — кодери зображень, токенізери, мовні моделі — можна підключити без серйозних налаштувань. Обробляючи базові зв’язки між цими частинами, AnyModal дозволяє вам зосередитися на високорівневому процесі: наприклад, додавання зображення та отримання текстового результату.


На практиці AnyModal може допомогти з такими завданнями, як створення підписів до зображень, класифікація або, у випадку, який тут показано, LaTeX OCR. Оскільки фреймворк є модульним, можна відносно легко замінити одну модель на іншу (наприклад, іншу основу бачення або нову модель мови), що робить її гнучкою для експериментів або спеціалізованих випадків використання.


Випадок використання LaTeX OCR

Перетворення зображення математичного виразу на дійсний рядок LaTeX вимагає поєднання комп’ютерного зору та обробки природної мови. Завдання кодувальника зображень полягає у вилученні функцій або символічних шаблонів із рівняння, таких як розпізнавання «плюс», «мінус» та інші символи. Потім мовний компонент використовує ці функції для передбачення відповідних токенів LaTeX у послідовності.


LaTeX OCR з AnyModal — це, по суті, демонстрація того, як швидко ви можете поєднати візуальний кодер із мовною моделлю. У той час як у цьому прикладі конкретно розглядаються рівняння, загальний підхід можна розширити до інших сценаріїв перетворення зображення в текст, включаючи більш просунуту або спеціалізовану математичну нотацію.


До кінця цього підручника ви будете знати, як використовувати AnyModal разом із Llama 3.2 1B і SigLIP від Google для створення невеликого VLM для завдань OCR LaTeX:

Фактичний підпис: f ( u ) = u + \sum _ { n = o d d } \alpha _ { n } \left[ \frac { ( u - \pi ) } { \pi } \right] ^ { n } ,Створено Підпис із використанням AnyModal/LaTeX-OCR-Llama-3.2-1B: f ( u ) = u + \sum _ { n = o o d } \alpha _ { n } \left[ \frac { ( u - \pi ) ^ { n } } { \pi } \right],


Зауважте, що ваги, опубліковані в AnyModal/LaTeX-OCR-Llama-3.2-1B, отримані шляхом навчання лише на 20% набір даних unsloth/LaTeX_OCR .


Ймовірно, ви отримаєте кращу модель, навчаючись на всьому наборі даних і протягом більшої кількості епох.


Приклад швидкого висновку

Для тих, хто в першу чергу зацікавлений у створенні LaTeX із існуючих зображень, ось демонстрація використання попередньо навчених ваг. Це дозволяє уникнути необхідності навчати щось з нуля, пропонуючи швидкий шлях, щоб побачити AnyModal у дії. Нижче наведено стислий огляд налаштування середовища, завантаження необхідних моделей і виконання висновків.


Клонуйте репозиторій AnyModal:

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


Встановити необхідні бібліотеки:

 pip install torch torchvision huggingface_hub PIL


Потім завантажте попередньо підготовлені ваги, розміщені на Hugging Face Hub:

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


Ці конкретні ваги можна знайти тут: LaTeX-OCR-Llama-3.2-1B на Hugging Face


Далі завантажте візуальний кодер і мовну модель:

 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()


Нарешті, надайте зображення та отримайте результат 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)


Ця проста послідовність кроків запускає весь конвеєр — аналіз зображення, проектування його в простір мовної моделі та генерування відповідного LaTeX.


Навчальний посібник

Для тих, хто хоче більше контролювати, наприклад, адаптувати модель до нових даних або досліджувати механіку конвеєра візуальної мови, навчальний процес забезпечує глибше розуміння. У розділах нижче показано, як готуються дані, як інтегруються компоненти моделі та як вони спільно оптимізуються.


Замість того, щоб покладатися лише на попередньо підготовлені компоненти, ви можете отримати навчальний набір даних із парних зображень і міток LaTeX. Одним із прикладів є набір даних unsloth/LaTeX_OCR , який містить зображення рівнянь разом із їхніми рядками LaTeX. Після встановлення залежностей і налаштування вашого набору даних кроки для навчання включають створення конвеєра даних, ініціалізацію моделі та циклічний перегляд епох.


Ось схема підготовки набору даних і його завантаження:

 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))))


На цьому етапі ви повинні створити або повторно використати той самий конвеєр AnyModal, описаний раніше. Замість того, щоб завантажувати попередньо підготовлені ваги, ви повинні ініціалізувати модель, щоб вона могла навчатися з нуля або з частково попередньо підготовлених контрольних точок.

 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:" )


Потім ви можете створити навчальний цикл для оптимізації параметрів моделі. Загальний підхід використовує оптимізатор AdamW від PyTorch і додатково використовує навчання змішаної точності для підвищення ефективності:

 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()


Після кожної епохи або принаймні після завершення навчання оцінка моделі на перевірочному наборі допомагає переконатися, що вона узагальнює нові дані:

 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}")


Окрім підтвердження продуктивності, цей етап перевірки може скеровувати такі вдосконалення, як налаштування гіперпараметрів, перехід на іншу базову модель або вдосконалення попередньої обробки даних. Виконуючи ці навчальні кроки, ви краще зрозумієте взаємодію між візуальним кодувальником і мовною моделлю, а також зможете розширити робочий процес до додаткових завдань або більш спеціалізованих областей.


Додаткові ресурси

  • Репозиторій GitHub : AnyModal
  • Каталог проекту LaTeX OCR : папка GitHub
  • Вага натренованої моделі з обіймами : LaTeX-OCR-Llama-3.2-1B
  • Hugging Face Організація : AnyModal на HF (стежте за оновленнями)
  • Спільнота Reddit : r/AnyModal (для обговорень, відгуків і підтримки спільноти)