Skip to content
intermediateimage

PixMo-Points - Pointing Annotation for Vision-Language Models

Collect the pointing supervision behind Molmo: place a point on what each referring expression refers to. Scored as a point-in-region hit rate, because a point has no area and every IoU against one is zero.

About this dataset

PixMo-Points is a dataset of images paired with referring expressions and points marking the locations those expressions refer to. It is part of the PixMo collection released with Molmo, presented by Matt Deitke and colleagues in "Molmo and PixMo: Open Weights and Open Data for State-of-the-Art Vision-Language Models", and it is what provides the pointing capability of the Molmo family of models.

The collection's distinguishing property is that it was gathered from human annotators rather than distilled from a proprietary vision-language model, which is the paper's central argument: the strongest open-weight models had been relying on synthetic data from closed VLMs, leaving the community without foundational knowledge about how to build a performant VLM from scratch.

The released set has 2,376,222 training examples under an ODC-BY-1.0 licence. Each row carries an image URL and a SHA-256 hash of the image bytes so a download can be checked against what was annotated, a list of x and y point coordinates in pixels, a count, a label that ranges from a bare object name to a full referring expression, and a collection_method marking whether the image was chosen to target high-frequency counting or general pointing.

The config collects this with the grounding_eval schema in point mode, alongside an image_annotation schema that owns the canvas and supplies the landmark tool. A separate count field is collected because PixMo-Points targets counting as well as pointing, and the number of visible instances is a meaningful answer even when the annotator has not placed a point on every one.

Pointing is scored differently from grounding, and it has to be. A point has no area, so every IoU against one is zero, and scoring points the way boxes are scored would report total failure for a model that is pointing perfectly. Potato reports a point-in-region hit rate instead, with mean_miss_distance computed over the misses only, since averaging it over hits as well would mostly measure how large the objects are rather than how badly the model missed.

Agreement between annotators is reported as a distance in normalized image units rather than as a coefficient, for the same structural reason. An overlap measure applied to points saturates: two annotators pointing at opposite corners of the same image still score around 0.86, which a coefficient scale would band as strong agreement, so a pointing corpus scored that way looks near-perfect regardless of what the annotators actually did. A distance has no ceiling to saturate against, and is named a distance so that nothing bands it as a coefficient.

Training examples
2,376,222
Licence
ODC-BY-1.0
Collection methods
pointing, counting
Annotation
Human, not distilled from another VLM
Used by
Molmo model family
Labels:outdoornatureurbanpeopleanimal+

Configuration Fileconfig.yaml

This Potato config reproduces the annotation task. Save it as config.yaml and run potato start config.yaml to try it.

yaml
# yaml-language-server: $schema=https://potatoannotator.readthedocs.io/en/latest/schemas/potato-config.schema.json
#
# PixMo-Points — Pointing Annotation for Vision-Language Models
#
# Paper:   Deitke et al., "Molmo and PixMo: Open Weights and Open Data for
#          State-of-the-Art Vision-Language Models"
#          https://arxiv.org/abs/2409.17146
# Dataset: https://huggingface.co/datasets/allenai/pixmo-points  (ODC-BY-1.0)
#
# PixMo-Points pairs images with referring expressions and the points marking
# what each expression refers to. It was collected from human annotators, not
# distilled from another VLM, and it is what gives the Molmo models their
# pointing ability. The released set has 2,376,222 training examples. Each row
# carries the image URL and SHA-256, a list of x/y points in pixels, a count, a
# label that ranges from a bare object name to a full referring expression, and
# a collection_method of either "pointing" or "counting".
#
# Reproduction notes
# ------------------
# `region_type: point` is the whole reason this design exists. A point has no
# area, so every IoU against one is zero: scoring points the way boxes are
# scored reports total failure for a model that is pointing perfectly. Potato
# scores pointing as a point-in-region hit rate instead, and reports
# mean_miss_distance over the misses only -- averaged over hits as well, it
# would mostly measure how large the objects are.
#
# Agreement between annotators is likewise reported as a distance in normalized
# image units rather than as a coefficient, because an overlap measure applied
# to points saturates: two annotators pointing at opposite corners of the image
# still score about 0.86, which any coefficient scale would band as strong
# agreement. A distance has no ceiling to saturate against.
#
# `count` is collected separately because PixMo-Points targets high-frequency
# counting as well as general pointing, and a count is the answer even when the
# annotator does not place a point on every instance.
#
# Two annotators per image, so pointing agreement is defined.

port: 8000
annotation_task_name: "PixMo-Points - Pointing Annotation"
task_dir: "."
media_directory: media
output_annotation_dir: "annotation_output/"
output_annotation_format: "json"

data_files:
  - sample-data.json

item_properties:
  id_key: "id"
  text_key: "image_url"

instance_display:
  fields:
    - key: image_url
      type: image
      label: "Image"

user_config:
  allow_all_users: true
  users: []

num_annotators_per_item:
  default: 2

annotation_schemes:
  # grounding_eval binds expressions to answers but does not draw, so an image
  # schema owns the canvas. `landmark` is the point tool.
  - annotation_type: image_annotation
    name: region
    description: "Place a point on each thing the selected expression names."
    source_field: image_url
    tools:
      - landmark
    labels:
      - name: referent
        color: "#6e56cf"

  - annotation_type: grounding_eval
    name: pointing
    description: "Point at what each expression refers to."
    region_type: point
    expressions_field: expressions
    require_all: false

  - annotation_type: number
    name: instance_count
    description: "How many instances of the expression are visible?"
    min: 0
    max: 200
    step: 1

  - annotation_type: text
    name: notes
    description: "If the expression is ambiguous or nothing matches, say so. (optional)"

annotation_instructions: |
  Each image comes with one or more referring expressions.

  For each expression:
  1. Select it.
  2. Place a point on every instance the expression refers to. Put the point
     inside the object, roughly at its centre; it does not have to be exact,
     but it must be unambiguously on the thing rather than near it.
  3. Record how many instances are visible. If there are more instances than
     you have pointed at, the count is still the true number.

  If an expression refers to nothing in the image, mark it as not present
  rather than pointing at your best guess. Not-present is a real answer and is
  counted separately.

  Point at the object, not at its label, shadow or reflection. For an object
  that is partly hidden, point at a visible part.

Sample Datasample-data.json

json
[
  {
    "id": "pixmo_001",
    "image_url": "https://example.com/pixmo/kitchen_counter_001.jpg",
    "collection_method": "pointing",
    "expressions": [
      {
        "id": "pixmo_001_e1",
        "text": "the coffee mug"
      },
      {
        "id": "pixmo_001_e2",
        "text": "the handle of the kettle"
      },
      {
        "id": "pixmo_001_e3",
        "text": "the person's left hand"
      }
    ]
  },
  {
    "id": "pixmo_002",
    "image_url": "https://example.com/pixmo/bookshelf_002.jpg",
    "collection_method": "counting",
    "expressions": [
      {
        "id": "pixmo_002_e1",
        "text": "a book with a red spine"
      },
      {
        "id": "pixmo_002_e2",
        "text": "the potted plant"
      }
    ]
  }
]

// ... and 8 more items

Get This Design

View on GitHub

Clone or download from the repository

Quick start:

git clone https://github.com/davidjurgens/potato-showcase.git
cd potato-showcase/image/visual-grounding/pixmo-points-pointing
potato start config.yaml

Dataset & paper

Deitke et al., 2024

Citation (BibTeX)

bibtex
@article{deitke2024molmo,
    title = {Molmo and PixMo: Open Weights and Open Data for State-of-the-Art Vision-Language Models},
    author = {Deitke, Matt and Clark, Christopher and Lee, Sangho and Tripathi, Rohun and Yang, Yue and Park, Jae Sung and Salehi, Mohammadreza and Muennighoff, Niklas and Lo, Kyle and Soldaini, Luca and others},
    journal = {arXiv:2409.17146},
    year = {2024}
}

Details

Annotation Types

grounding_evalimage_annotationnumbertext

Domain

Computer VisionNLP

Use Cases

Pointing EvaluationVisual GroundingVLM EvaluationObject Counting

Tags

pixmomolmopointingvisual-groundingvlmreferring-expressionallenaicounting

Found an issue or want to improve this design?

Open an Issue