Essentially the most highly effective VLMs obtainable at present stay proprietary, limiting open analysis exploration. Open fashions typically lag as a consequence of dependency on artificial knowledge generated by proprietary fashions, proscribing true openness. Molmo, a complicated vision-language mannequin, seeks to bridge this hole by creating high-quality multimodal capabilities constructed from open datasets and unbiased coaching strategies.
PixMo, the accompanying dataset, was designed to beat the standard limitations of knowledge accessibility in VLM growth. The group collected in depth image-caption pairs utilizing human speech annotations, which resulted in high-density captions free from the constraints of artificial datasets.
Molmo’s structure follows a regular multimodal design: it combines a imaginative and prescient encoder and a language mannequin to create a vision-language mannequin able to processing each photographs and textual content.
Overview
- PixMo Datasets (the success issue for Molmo)
- Key Elements of the Molmo Structure
- Picture Pre-processor: Converts enter photographs right into a set of multi-scale, multi-crop sections.
- Imaginative and prescient Encoder (CLIP ViT-L/14 336px)
- Connector (MLP-based projection): Projection of picture embeddings to language mannequin’s dimension.
- Decoder-Solely Transformer LLM.
- Coaching Pipeline: Two Phases
- Multimodal Pre-Coaching for Caption Era
- Supervised Advantageous-Tuning on Various Duties
- Analysis of Molmo on 11 benchmark datasets
- Arms-on experimentation with Molmo (code)
Desk of contents
PixMo Datasets – the Fundamental part of Molmo’s success
- PixMo-Cap: Annotators have been requested to explain photographs in speech for 60-90 seconds, offering detailed and dense picture captions. The speech was additional transcribed and handed by way of a language mannequin to scrub the textual content (take away spoken artifacts, normalize type). The information comprises detailed, dense captions for over 712okay photographs.
- PixMo-AskModelAnything: Annotators generate various question-answer pairs with photographs.
- PixMo-Factors: This dataset contains point-based annotations, enabling Molmo to level, reply location-based questions, and rely objects instantly by pointing, including a spatial dimension to visible understanding.
- Different datasets: These embrace artificial clock datasets (query answering on analog clocks) (PixMo-Clocks) and document-heavy datasets (PixMo-Docs, PixMo-CapQA).
Complete element of the Structure of Molmo and its Design Selections:
Enter Processing: Multi-Scale, Multi-Crop Pictures
The enter to Molmo is generated by making use of multi-scale and multi-crop transformations to the unique picture. In multi-crop coaching, a number of crops (sections) of the identical picture are taken from completely different areas, typically at varied scales and resolutions. Every crop offers a special perspective or focus space of the picture.
- Goal: Multi-crop coaching is designed to present the mannequin a richer, extra various understanding of your entire picture by exposing it to extra particulars and views. This helps it generalize higher, particularly on high-resolution photographs with advanced scenes.
Imaginative and prescient Encoder: OpenAI’s ViT-L/14 336px CLIP Mannequin
The core of Molmo’s visible processing is OpenAI’s CLIP (Contrastive Language Picture-Pretraining) mannequin, a strong Imaginative and prescient Transformer (ViT) optimized for high-resolution inputs.
- Why did Molmo select OpenAI’s CLIP as a substitute of SigLIP?: By way of experimentation, CLIP proved superior to options like SigLIP in dealing with multi-scale, multi-crop, and high-resolution knowledge. Alternatively, SigLIP performs higher in single-crop situations however struggles with the calls for of multi-crop coaching, probably lacking out on the richer contextual understanding that Molmo requires.
- Mathematical and Conceptual Instinct: CLIP’s structure makes use of consideration layers that weigh the significance of picture patches based mostly on spatial and feature-related relevance. Every patch successfully attends to others, forming a complete picture illustration. This aligns properly with multi-scale processing as a result of CLIP can leverage each native patch particulars and the broader context in its closing tokenized illustration. SigLIP’s easier processing pipeline doubtless restricted its skill to generalize as successfully below comparable situations.
Connector: Multi-Layer Perceptron (MLP) and Pooling
The connector is a fastidiously constructed MLP that tasks the high-dimensional tokens from CLIP to match the enter area (dimensions) the language mannequin requires. Following this projection, a pooling layer performs dimensionality discount, guaranteeing the visible tokens are condensed to a manageable measurement for the language mannequin with out sacrificing key visible particulars.
Dimensionality Discount By way of Pooling: Pooling selects and averages key options throughout the visible tokens. Conceptually, this may be regarded as a abstract of visible info—simply sufficient element to tell the language mannequin with out overwhelming it.
Instance: Think about a cityscape picture divided into 100 tokens by the imaginative and prescient encoder. Pooling condenses these tokens by summarizing key options, prioritizing outstanding buildings (like buildings), and decreasing redundancy in repetitive areas (just like the sky). This ends in a smaller, targeted set of round 20 tokens, capturing solely essentially the most important particulars for environment friendly processing by the language mannequin.
Language Mannequin (LLM): Decoder-Solely Transformer
Molmo’s imaginative and prescient encoder stays constant throughout variants, using CLIP’s ViT-L/14 mannequin for all variations. Nevertheless, Molmo’s LLM part varies based mostly on necessities for capability, openness, and compute effectivity:
- Mannequin Variants for Language Processing: Molmo offers flexibility by permitting varied LLMs, together with OLMo (7B-1024), OLMoE-1B-7B, and bigger fashions like Qwen2 and Mistral. These LLMs differ of their parameter scales and openness, from environment friendly smaller fashions to high-capacity variants able to dealing with advanced language and picture interactions.
- Reasoning Behind A number of LLMs: By providing a wide range of LLMs, Molmo can cater to various wants. Smaller fashions are sooner and fewer compute-intensive, whereas bigger fashions are suited to duties that require extra nuanced language processing and deeper contextual understanding.
In transformers, decoder-only structure is especially suited to duties requiring context-based technology, reminiscent of captioning or question-answering. The mannequin “decodes” tokens in a self-referential method, with every token attending to all earlier tokens to construct a coherent output, guided by each visible and textual cues from earlier levels.
Coaching Pipeline: Two Easy Phases
Molmo’s coaching is split into two main levels that contribute to mannequin’s excessive efficiency and flexibility:
Stage 1: Multimodal Pre-Coaching for Caption Era
Aim: Prepare the mannequin to generate detailed, correct captions for photographs. PixMo-Cap dataset is used on this step.
Molmo makes use of an easier, single-stage pre-training technique for caption technology, which avoids the complexity and potential inefficiencies of multi-stage pre-training (e.g., freezing elements of the mannequin/community at completely different levels).
Why Molmo Avoids Multi-Stage Pre-training?
Molmo’s easier, single-stage pre-training works properly in its context as a result of:
- It makes use of high-quality human-annotated knowledge from the beginning, which avoids the necessity for progressive fine-tuning throughout levels. This is likely one of the key differentiators between Molmo and different fashions that depend on weakly labeled or artificial knowledge.
- Molmo’s imaginative and prescient encoder (e.g., CLIP) and language mannequin are each off-the-shelf and are fine-tuned collectively in a single go, avoiding the inefficiency of multi-stage fine-tuning.
- Effectivity: Coaching all elements collectively (single-stage pre-training) permits the mannequin to converge sooner and simplifies the coaching pipeline.
Stage 2: Supervised Advantageous-Tuning on Various Duties
After pre-training for caption technology, Molmo is fine-tuned on a mix of datasets, together with customary tutorial datasets and extra PixMo datasets like PixMo-AskModelAnything, PixMo-Factors, PixMo-Clocks, and PixMo-Docs. The fine-tuning contains supervised coaching knowledge for duties like query answering, counting, and point-based referencing.
- Why No RLHF (Reinforcement Studying with Human Suggestions)? Molmo doesn’t use RLHF, which is usually employed in fashions like GPT-4, to refine efficiency by way of human interplay. As an alternative, Molmo depends on high-quality labelled knowledge for fine-tuning. The thought right here is that Molmo’s complete dataset already encompasses a broad set of real-world duties, obviating the necessity for additional human suggestions throughout coaching.
Analysis: Tutorial Benchmarks and Human Desire
Evaluating multimodal fashions might be difficult as a result of complexity of visible and linguistic duties. The Molmo group gauged efficiency utilizing a mixture of educational benchmarks and in depth human evaluations.
- Tutorial Benchmarks: Molmo was examined in opposition to 11 broadly used datasets, together with VQA, DocVQA, and a brand new counting-focused benchmark, Flickr Rely. The fashions to be in contrast are categorized into Four teams: proprietary fashions that may solely be accessed by way of API calls, fashions with launched weights however closed knowledge, fashions with launched weights and launched coaching knowledge, and the Molmo household of fashions. The outcomes positioned Molmo fashions alongside and even above proprietary methods like GPT-4V, particularly the 72B variant.
- Human Desire Testing: To complement quantitative scores, Molmo’s human desire testing concerned accumulating over 325,000 pairwise comparisons, and rating fashions on consumer satisfaction. Molmo-72B achieved one of many highest rankings, trailing solely proprietary fashions like GPT-4o in direct consumer desire.
Comparability with Different Fashions (LLaVA, Qwen2-VL, PaliGemma)
- LLaVA and Qwen2-VL: These fashions depend on multi-stage pre-training, typically involving frozen elements of the mannequin throughout completely different levels. They use large-scale, artificial knowledge, which helps with scale however introduces noise and reliance on proprietary VLMs.
- PaliGemma: Just like Qwen2-VL, it makes use of closed knowledge and relies on artificial knowledge generated by proprietary fashions. Molmo avoids these dependencies, guaranteeing transparency and reproducibility.
Additionally learn: Arms-On Multimodal Retrieval and Interpretability (ColQwen + Vespa)
A Arms-on Information for working Molmo on our use case:
Now that we’re clear with the structure of Molmo let’s get hands-on and check out some examples with Molmo. On this part, we’ll stroll by way of utilizing Molmo on instance photographs to extract structured info. This hands-on session will enable you to perceive find out how to load the mannequin, course of photographs, generate outputs, and customise it on your personal knowledge.
Colab pocket book: Molmo-VLM-handson.ipynb (I’ve used A100 Excessive-Ram GPU for working these experiments)
1. Setting Up the Surroundings
First, we have to set up some important packages. These embrace transformers for mannequin processing, torch for dealing with tensors, Pillow for picture manipulation, and pytesseract for OCR (Optical Character Recognition).
!pip set up -q transformers torch Pillow einops
!pip set up -q pytesseract
!apt-get set up -y tesseract-ocr
2. Loading the Molmo Mannequin and Processor
Right here, we specify the Molmo mannequin we wish to use (on this case, MolmoE-1B-0924) and cargo it together with its processor.
from transformers import AutoModelForCausalLM, AutoProcessor, GenerationConfig
from PIL import Picture
import torch model_name = 'allenai/MolmoE-1B-0924'
processor = AutoProcessor.from_pretrained(model_name, trust_remote_code=True, torch_dtype='auto', device_map='auto')
mannequin = AutoModelForCausalLM.from_pretrained(model_name, trust_remote_code=True, torch_dtype='auto', device_map='auto') mannequin.to("cuda")
AutoProcessor prepares the inputs for Molmo, dealing with each photographs and textual content prompts. AutoModelForCausalLM masses the language mannequin. Setting device_map=’auto’ ensures the mannequin is loaded onto one of the best obtainable machine (like GPU) for sooner efficiency.
3. Processing and Displaying an Picture
To work with a picture, we load it utilizing Pillow and show it to verify we’ve got the right enter.
image_path = 'your_image.png' # present the picture path right here
picture = Picture.open(image_path).convert('RGB')
picture
This code masses a picture from the desired path and converts it to RGB format, guaranteeing compatibility with the mannequin.
Resizing the Picture for Consistency
If a picture is just too giant, you may resize it for constant processing after which show the picture. This perform resizes photographs with a top larger than 800 pixels. Decreasing picture measurement can optimize processing with out considerably affecting the mannequin’s skill to interpret content material.
def resize_image(picture, max_height=800): width, top = picture.measurement if top > max_height: ratio = max_height / top new_width = int(width * ratio) new_height = int(top * ratio) return picture.resize((new_width, new_height)) return picture
4. Processing Picture and Textual content for Mannequin Enter
We outline a textual content immediate and course of each the picture and textual content collectively utilizing the processor.
inputs = processor.course of( photographs=[image], textual content="Extract all the knowledge from the web page in JSON format, particularly the account abstract and all contact particulars in correct format."
) inputs = {okay: v.to(mannequin.machine).unsqueeze(0) for okay, v in inputs.objects()}
The processor combines the picture and textual content right into a format the mannequin can interpret. Every enter is moved to the mannequin’s machine (normally GPU) and reshaped for batch processing.
5. Producing the Output Textual content
Utilizing the mannequin’s generate_from_batch perform, we generate an output based mostly on the picture and immediate.
output = mannequin.generate_from_batch( inputs, GenerationConfig(max_new_tokens=500, stop_strings="<|endoftext|>"), tokenizer=processor.tokenizer
) generated_tokens = output[0, inputs['input_ids'].measurement(1):]
generated_text = processor.tokenizer.decode(generated_tokens, skip_special_tokens=True) print(generated_text)
Right here, we set a most restrict of 500 tokens (you may improve or lower the variety of tokens in response to your usecase) for the response and outline a cease situation (<|endoftext|>). This line (output[0, inputs[‘input_ids’].measurement(1):] ) extracts solely the generated tokens with slicing which skips the enter immediate tokens within the output. This isolates the newly generated tokens and avoids redundancy in responses.
The mannequin processes the inputs and generates tokens representing the textual content output, which we then decode to human-readable textual content. This enables us to see Molmo’s extracted info based mostly on our immediate.
Total perform which takes an image_path and a immediate and can generate textual content as instructed
def generate_text(image_path, immediate): picture = Picture.open(image_path).convert('RGB') inputs = processor.course of( photographs=[image], textual content=immediate ) inputs = {okay: v.to(mannequin.machine).unsqueeze(0) for okay, v in inputs.objects()} output = mannequin.generate_from_batch( inputs, GenerationConfig(max_new_tokens=500, stop_strings="<|endoftext|>"), tokenizer=processor.tokenizer ) generated_tokens = output[0,inputs['input_ids'].measurement(1):] generated_text = processor.tokenizer.decode(generated_tokens, skip_special_tokens=True) return picture, generated_text
You possibly can go customized prompts to refine the mannequin’s focus. On this case, we’re asking for detailed info, specifying a JSON format for structured knowledge extraction. This helps Molmo return knowledge that’s prepared for additional processing or evaluation.
The picture from which we’re extracting knowledge:
input_path = '/content material/Visualization - Binary Quantization.png' immediate = '''You might be an skilled mathematician. You'll want to perceive what's been talked about on this web page and description the matters together with rationalization.
The output ought to be in json format with keys "matters talked about", "rationalization": {"exp_topic1", "exp_topic2", ...} ''' picture, generated_text = generate_text(input_path, immediate)
resize_image(picture)
print(generated_text)
Output:
{
"matters talked about": [
"Question and token",
"Binary quantization",
"Hamming distance",
"Minimal Hamming distance",
"Question and token embeddings",
"Last hamming similarity"
],
"rationalization": {
"question and token": "The picture discusses the method of changing every
worth in a question or token into both 1 or 0, relying on whether or not it
represents a constructive or destructive worth respectively. This method is used
in binary quantization.",
"binary quantization": "This can be a technique for representing actual numbers in
binary format with a set variety of bits. The picture explains find out how to convert
floating-point numbers to binary after which calculate the Hamming distance
between two binary vectors.",
"Hamming distance": "This can be a measure of what number of bit positions differ
between two binary vectors. The picture exhibits find out how to calculate this distance
between two binary vectors of various lengths.",
"minimal Hamming distance": "This refers back to the shortest distance between
two vectors of the identical size, excluding the vector itself. The picture
offers formulation for calculating this distance for various token sizes
and question lengths.",
"question and token embeddings": "The picture describes find out how to symbolize question
and token knowledge in a four-dimensional area utilizing multi-vector embeddings. It
explains the method of tokenization and using binary quantization for
this illustration.",
"closing hamming similarity": "The picture concludes by discussing the
calculation of total hamming similarity between two question vectors and
their embeddings"
}
}
We will additionally take a posh instance the place there are numerous tables and see how a lot knowledge the mannequin can extract in a single go:
input_path = '/content material/0fa82bab-e131-43dd-86da-7153b2ecc76d.png' immediate = '''Extract all the knowledge from the web page in json, each knowledge must be current. Do not miss out on contact particulars, identify, deal with, account invoice abstract, billing historical past and methods to pay.
The output ought to be in json format with keys being all the information discovered within the web page. Data is essential. ''' picture, generated_text = generate_text(input_path, immediate, max_tokens=1000)
print(generated_text)
resize_image(picture, max_height=600) # displaying the picture my resizing it 600 pixels top
Output:
{
"energyStatement": {
"accountNumber": "5553220335-0",
"statementDate": "01/30/2024",
"dueDate": "02/20/2024",
"web site": "www.pge.com/myenergy",
"serviceInfo": {
"meterNumber": "10098180854",
"totalUsage": "518.53 MWh",
" rotatingOutageBlock": "10F",
"serviceID": "5534591016"
},
"billingHistory": {
"billingcycles": "33 billing cycles",
"billingcyclesToDate": "12/31/2023",
"currentBillingcycle": "12/22/2023"
},
"serviceSchedule": {
"serviceID": "5534591016",
"schedule": "EVA Dwelling Charging"
},
"electricDeliveryCharges": {
"complete": "$139.29",
"2018VintagePowerChargeInferenceAdjustment": "1.00"
},
"contactInfo": {
"phoneNumber": "555-123-4567",
"electronic mail": "[email protected]"
}
}
}
From the above picture, as we will see in on the go, many of the particulars are extracted, however what if we don’t wish to miss a single piece of knowledge from the web page and the web page is dense with info? There, we will strive an method to separate the picture into a number of patches and go these patches individually to the mannequin to extract knowledge that we will finally mix collectively.
Splitting the Picture into Patches
To deal with advanced photographs with various areas, cut up them into smaller patches and course of every patch individually. Right here, we’re following an easy method of splitting the picture into Four equal sections. That is helpful for giant paperwork the place completely different areas might comprise distinct info, and likewise sections are equally divided (like analysis papers).
def split_image_into_patches(picture): width, top = picture.measurement patches = { "top_left": picture.crop((0, 0, width // 2, top // 2)), "top_right": picture.crop((width // 2, 0, width, top // 2)), "bottom_left": picture.crop((0, top // 2, width // 2, top)), "bottom_right": picture.crop((width // 2, top // 2, width, top)) } return patches
Processing Every Patch and Extracting Data
Every patch is processed individually with a immediate to extract related particulars. We retailer every patch’s lead to a dictionary.
extracted_data = {}
for patch_name, patch_image in image_patches.objects(): inputs = processor.course of( photographs=[patch_image], textual content="Extract all the knowledge from web page in JSON, each knowledge must be current." ) inputs = {okay: v.to(mannequin.machine).unsqueeze(0) for okay, v in inputs.objects()} output = mannequin.generate_from_batch( inputs, GenerationConfig(max_new_tokens=500, stop_strings="<|endoftext|>"), tokenizer=processor.tokenizer ) generated_tokens = output[0, inputs['input_ids'].measurement(1):] generated_text = processor.tokenizer.decode(generated_tokens, skip_special_tokens=True) extracted_data[patch_name] = generated_text
The above method of splitting photographs equally is much like splitting an extended textual content doc into fixed-length textual content chunks. Nevertheless, if the chunks are divided between a seamless textual content then we lose context. This idea applies to photographs too. So, as a substitute of splitting the picture equally, what if we cut up the picture based mostly on visually semantic chunks.
We shall be attempting out a easy method right here: combining OCR with calculating the road hole in bounding packing containers to create a gaggle of patches from a picture after which go these patches to the Molmo mannequin.
We will apply OCR to establish textual content areas within the picture and return the textual content together with bounding packing containers.
import pytesseract def extract_text_regions(picture): ocr_data = pytesseract.image_to_data(picture, output_type=pytesseract.Output.DICT) text_regions = [] for i, phrase in enumerate(ocr_data['text']): if phrase.strip(): # Ignore empty strings x, y, w, h = ocr_data['left'][i], ocr_data['top'][i], ocr_data['width'][i], ocr_data['height'][i] text_regions.append({ "textual content": phrase, "bbox": (x, y, x + w, y + h) }) return text_regions
Grouping and Processing Semantic Chunks
We will group textual content areas into logical chunks (like paragraphs or tables) for extra logical extraction. This perform teams phrases into bigger chunks, like traces or paragraphs, based mostly on their bounding field positions (calculation of vertical line hole between bounding packing containers). It’s helpful for extracting extra contextually coherent info from paperwork.
def group_text_regions(text_regions, line_threshold=10): grouped_regions = [] current_group = [] last_bottom = -1 for area in text_regions: _, high, _, backside = area['bbox'] if last_bottom != -1 and (high - last_bottom > line_threshold): grouped_regions.append(current_group) current_group = [] current_group.append(area) last_bottom = backside if current_group: grouped_regions.append(current_group) return grouped_regions
Now, we’ll apply this method on a web page to create teams and go every patch to the mannequin for extraction. As soon as all of the json knowledge are extracted, we will go it to an LLM to mix every little thing collectively.
# Apply OCR to establish textual content areas
text_regions = extract_text_regions(picture) # Group textual content areas into semantic chunks
semantic_chunks = group_text_regions(text_regions) # Initialize a dictionary to retailer extracted knowledge from every chunk
extracted_data = {} # Loop by way of every semantic chunk, course of, and retailer the output
for idx, chunk in enumerate(semantic_chunks): # Create a bounding field for the chunk x_min = min([r['bbox'][0] for r in chunk]) y_min = min([r['bbox'][1] for r in chunk]) x_max = max([r['bbox'][2] for r in chunk]) y_max = max([r['bbox'][3] for r in chunk]) # Crop the picture to the bounding field of the chunk chunk_image = picture.crop((x_min, y_min, x_max, y_max)) # Put together textual content immediate for Molmo chunk_text = " ".be part of([r['text'] for r in chunk]) prompt_text = f"Extract info from this part: {chunk_text} in JSON format." # Course of the chunk picture and immediate with Molmo inputs = processor.course of( photographs=[chunk_image], textual content=prompt_text ) inputs = {okay: v.to(mannequin.machine).unsqueeze(0) for okay, v in inputs.objects()} output = mannequin.generate_from_batch( inputs, GenerationConfig(max_new_tokens=500, stop_strings="<|endoftext|>"), tokenizer=processor.tokenizer ) generated_tokens = output[0, inputs['input_ids'].measurement(1):] generated_text = processor.tokenizer.decode(generated_tokens, skip_special_tokens=True) print(generated_text, "nn") # Retailer the extracted knowledge for the present chunk extracted_data[f"chunk_{idx}"] = generated_text # Mix all extracted knowledge
combined_data = { "page_summary": extracted_data }
This was a enjoyable experiment, however it isn’t but the best-optimized method. We will enhance it additional by utilizing segmentation to create logical chunks. If we plan to make use of OCR, then grouping must be extra strict and heuristic-based (contemplating each vertical and horizontal line gaps and a few checks on the quantity of textual content or knowledge obtainable).
Conclusion
On this deep dive into Molmo and PixMo, we explored the motivations behind growing open and sturdy vision-language fashions, the detailed structure of Molmo, and the distinctive datasets powering its capabilities. We walked by way of key design selections, together with why Molmo opted for an easier, single-stage coaching pipeline and selected CLIP because the imaginative and prescient encoder for its superior efficiency in dealing with multi-crop, high-resolution photographs. The hands-on part showcased Molmo’s flexibility in extracting advanced structured knowledge, offering you with sensible examples and code to check out your self. By embracing transparency, high-quality knowledge, and environment friendly coaching methods, Molmo units a brand new customary in open multimodal analysis, providing a flexible instrument for tackling various vision-language duties. Now we have come to the tip of the weblog. I hope this weblog offers a complete understanding of Molmo and evokes you to experiment with its capabilities.
Additionally, if you’re searching for a generative AI course on-line, then discover: GenAI Pinnacle Program
Ceaselessly Requested Questions
Ans. Molmo makes use of CLIP as a result of it demonstrated superior efficiency in dealing with multi-crop and high-resolution photographs. CLIP’s sturdy consideration mechanisms and skill to seize spatial relationships throughout picture patches make it more practical for advanced visible duties. In distinction, SigLIP struggled with multi-crop settings and was higher suited to easier, single-crop situations.
Ans. Molmo leverages the PixMo dataset, which incorporates high-quality, human-annotated image-caption pairs and specialised datasets like PixMo-AskModelAnything and PixMo-Factors. These datasets present various, real-world knowledge that improve Molmo’s generalization capabilities. In contrast to artificial datasets, PixMo’s human annotations guarantee a richer and extra pure understanding of visible content material.
Ans. Sure, Molmo is designed to be extremely versatile. You possibly can customise prompts based mostly in your particular job wants, reminiscent of extracting structured knowledge in JSON format or answering particular queries about a picture. The hands-on examples within the weblog reveal find out how to adapt Molmo to numerous use circumstances, making it appropriate for duties starting from doc understanding to picture captioning