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

AI Framework ви покрива работните потоци от изображение към текст

от ritabratamaiti5m2024/12/31
Read on Terminal Reader

Твърде дълго; Чета

Какво: Трансформирайте изображения на математически уравнения в LaTeX с помощта на модулния конвейер за визия–език на AnyModal. Как: Използвайте предварително обучени тегла за бързи изводи или обучете персонализиран модел с вашия собствен набор от данни. Къде: Намерете пълни примери, код и тегла на модела в GitHub и Hugging Face. Защо: Лесно интегрирайте множество AI компоненти (визия + текст), без да пишете обширен свързващ код.
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 за LaTeX OCR задачи:

Действителен надпис: 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
  • Организация на прегърнато лице : AnyModal на HF (следете за актуализации)
  • Общност на Reddit : r/AnyModal (за дискусии, обратна връзка и подкрепа от общността)