paint-brush
AI Framework on käsitellyt kuvasta tekstiksi työnkulkuakirjoittaja@ritabratamaiti
Uusi historia

AI Framework on käsitellyt kuvasta tekstiksi työnkulkua

kirjoittaja ritabratamaiti5m2024/12/31
Read on Terminal Reader

Liian pitkä; Lukea

Mitä: Muunna matemaattisten yhtälöiden kuvat LaTeX-muotoon AnyModalin modulaarisen visio-kieli-putkilinjan avulla. Miten: Käytä esikoulutettuja painoja nopeaan päättelyyn tai harjoittele mukautettu malli omalla tietojoukollasi. Missä: Löydä täydelliset esimerkit, koodit ja mallipainot GitHubista ja Hugging Facesta. Miksi: Integroi helposti useita tekoälykomponentteja (näkemys + teksti) kirjoittamatta laajaa siltauskoodia.
featured image - AI Framework on käsitellyt kuvasta tekstiksi työnkulkua
ritabratamaiti HackerNoon profile picture
0-item
1-item

Tietoja AnyModalista

AnyModal on kehys, joka on suunniteltu yhdistämään useita "modaliteetteja" (kuten kuvia, tekstiä tai muuta dataa) yhdeksi, yhtenäiseksi työnkuluksi. Sen sijaan, että jonglelisi erillisten kirjastojen kanssa tai kirjoittaisi mukautettua koodia yhdistämään visio- ja kielimalleja, AnyModal tarjoaa strukturoidun putkilinjan, jossa jokainen komponentti – kuvankooderit, tunnisteet, kielimallit – voidaan kytkeä ilman suuria mukautuksia. Käsittelemällä näiden kappaleiden välisiä taustalla olevia yhteyksiä, AnyModal antaa sinun keskittyä korkean tason prosessiin: esimerkiksi kuvan syöttämiseen ja tekstituloksen saamiseen.


Käytännössä AnyModal voi auttaa sellaisissa tehtävissä kuin kuvien tekstitys, luokittelu tai tässä esitetyssä tapauksessa LaTeX OCR. Koska kehys on modulaarinen, yhden mallin vaihtaminen toiseen (esim. eri visiorunkoon tai uuteen kielimalliin) on suhteellisen helppoa, mikä tekee siitä joustavan kokeiluja tai erikoiskäyttötapauksia varten.


LaTeX OCR -käyttökotelo

Matemaattisen lausekkeen kuvan muuntaminen kelvolliseksi LaTeX-merkkijonoksi edellyttää tietokonenäön ja luonnollisen kielen käsittelyn yhdistämistä. Kuvakooderin tehtävänä on poimia yhtälöstä piirteitä tai symbolisia kuvioita, kuten plus-, miinus- ja muiden symbolien tunnistaminen. Kielikomponentti käyttää sitten näitä ominaisuuksia ennustaakseen oikeat LaTeX-tunnisteet järjestyksessä.


LaTeX OCR AnyModalin kanssa on pohjimmiltaan osoitus siitä, kuinka nopeasti voit yhdistää näköenkooderin kielimalliin. Vaikka tässä esimerkissä käsitellään erityisesti yhtälöitä, yleistä lähestymistapaa voidaan laajentaa muihin kuvasta tekstiksi -skenaarioihin, mukaan lukien edistyneempi tai erikoistunut matemaattinen merkintä.


Tämän opetusohjelman loppuun mennessä opit käyttämään AnyModalia yhdessä Llama 3.2 1B:n ja Googlen SigLIP:n kanssa pienen VLM:n luomiseen LaTeX OCR -tehtäviä varten:

Todellinen kuvateksti: f ( u ) = u + \sum _ { n = o d d } \alpha _ { n } \left[ \frac { ( u - \pi ) } { \pi } \right] ^ { n } ,Luotu Tekstitys käyttäen AnyModal/LaTeX-OCR-Llama-3.2-1B: f ( u ) = u + \sum _ { n = o o d } \alpha _ { n } \vasen[ \frac { ( u - \pi ) ^ { n } } { \pi } \oikea],


Huomaa, että AnyModal/LaTeX-OCR-Llama-3.2-1B:ssä vapautetut painot saadaan harjoittelemalla vain 20 %:lla unsloth/LaTeX_OCR-tietojoukko .


Saat todennäköisesti paremman mallin harjoittelemalla koko tietojoukkoa ja useammilla aikakausilla.


Esimerkki nopeasta päättelystä

Niille, jotka ovat ensisijaisesti kiinnostuneita LaTeXin luomisesta olemassa olevista kuvista, tässä on esittely esikoulutetuilla painoilla. Tämä välttää tarpeen harjoitella mitään tyhjästä ja tarjoaa nopean tien nähdä AnyModal toiminnassa. Alla on ytimekäs katsaus ympäristösi määrittämiseen, tarvittavien mallien lataamiseen ja päätelmien suorittamiseen.


Kloonaa AnyModal-arkisto:

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


Asenna tarvittavat kirjastot:

 pip install torch torchvision huggingface_hub PIL


Lataa sitten Hugging Face Hubista isännöidyt esikoulutetut painot:

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


Nämä ominaispainot löytyvät täältä: LaTeX-OCR-Llama-3.2-1B halaavilla kasvoilla


Lataa seuraavaksi visiokooderi ja kielimalli:

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


Anna lopuksi kuva ja hanki LaTeX-tulostus:

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


Tämä yksinkertainen vaihesarja suorittaa koko liukuhihnan – kuvan analysoinnin, sen projisoinnin kielimallin tilaan ja vastaavan LaTeX:n luomisen.


Koulutuksen opetusohjelma

Niille, jotka haluavat enemmän hallintaa, kuten mukauttaa mallia uusiin tietoihin tai tutkia visio-kieliputken mekaniikkaa, koulutusprosessi tarjoaa syvemmän näkemyksen. Alla olevat osiot havainnollistavat, kuinka tiedot valmistellaan, miten mallin komponentit integroidaan ja miten ne yhdessä optimoidaan.


Sen sijaan, että luottaisit pelkästään esikoulutettuihin komponentteihin, voit hankkia harjoitustietojoukon kuvista ja LaTeX-tarroista. Yksi esimerkki on unsloth/LaTeX_OCR tietojoukko, joka sisältää yhtälöiden kuvia sekä niiden LaTeX-merkkijonoja. Kun olet asentanut riippuvuuksia ja määrittänyt tietojoukon, koulutukseen kuuluu dataputken luominen, mallin alustaminen ja silmukoiden läpikäyminen.


Tässä on pääpiirteet tietojoukon valmistelusta ja lataamisesta:

 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ässä vaiheessa sinun pitäisi rakentaa tai käyttää uudelleen samaa AnyModal-liukuhihnaa, joka on kuvattu aiemmin. Sen sijaan, että lataat esikoulutettuja painoja, alustat mallin, jotta se voi oppia tyhjästä tai osittain esikoulutetuista tarkistuspisteistä.

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


Tämän jälkeen voit luoda harjoitussilmukan mallin parametrien optimoimiseksi. Yleinen lähestymistapa käyttää PyTorchin AdamW optimointiohjelmaa ja käyttää valinnaisesti sekatarkkuutta tehokkuuden parantamiseksi:

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


Jokaisen aikakauden jälkeen tai ainakin koulutuksen päätyttyä mallin arviointi validointijoukossa auttaa varmistamaan, että se yleistyy uusiin tietoihin:

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


Suorituskyvyn vahvistamisen lisäksi tämä tarkistusvaihe voi ohjata parannuksia, kuten hyperparametrien säätämistä, vaihtamista toiseen perusmalliin tai tietojen esikäsittelyn tarkentamiseen. Seuraamalla näitä koulutusvaiheita saat paremman käsityksen visiokooderin ja kielimallin välisestä vuorovaikutuksesta ja voit laajentaa työnkulkua lisätehtäviin tai erikoistuneempiin toimialueisiin.


Lisäresurssit