paint-brush
מסגרת בינה מלאכותית סיקרה אותך בתהליכי עבודה של תמונה לטקסטעל ידי@ritabratamaiti
היסטוריה חדשה

מסגרת בינה מלאכותית סיקרה אותך בתהליכי עבודה של תמונה לטקסט

על ידי ritabratamaiti5m2024/12/31
Read on Terminal Reader

יותר מדי זמן; לקרוא

מה: הפוך תמונות משוואות מתמטיות ל-LaTeX באמצעות צינור הראייה-שפה המודולרי של AnyModal. איך: השתמש במשקלים מאומנים מראש להסקת מסקנות מהירה או אמן מודל מותאם אישית עם מערך הנתונים שלך. איפה: מצא דוגמאות מלאות, קוד ומשקולות דגמים ב-GitHub וב-Huging Face. למה: שלב בקלות רכיבי AI מרובים (חזון + טקסט) מבלי לכתוב קוד גישור נרחב.
featured image - מסגרת בינה מלאכותית סיקרה אותך בתהליכי עבודה של תמונה לטקסט
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 של גוגל כדי ליצור 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 on 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}")


בנוסף לאישור הביצועים, שלב אימות זה יכול להנחות שיפורים כגון התאמת הפרמטרים היפר, מעבר למודל בסיס אחר או חידוד עיבוד הנתונים מראש. על ידי ביצוע שלבי הדרכה אלה, אתה משיג הבנה טובה יותר של משחק הגומלין בין מקודד החזון למודל השפה, ותוכל להרחיב את זרימת העבודה למשימות נוספות או לתחומים מיוחדים יותר.


משאבים נוספים