thibaud frere commited on
Commit
f117331
·
1 Parent(s): 3c0763c
.gitattributes CHANGED
@@ -8,4 +8,6 @@
8
  *.avi filter=lfs diff=lfs merge=lfs -text
9
  *.wav filter=lfs diff=lfs merge=lfs -text
10
  *.csv filter=lfs diff=lfs merge=lfs -text
11
- *.json filter=lfs diff=lfs merge=lfs -text
 
 
 
8
  *.avi filter=lfs diff=lfs merge=lfs -text
9
  *.wav filter=lfs diff=lfs merge=lfs -text
10
  *.csv filter=lfs diff=lfs merge=lfs -text
11
+ *.json filter=lfs diff=lfs merge=lfs -text
12
+ package.json -filter -diff -merge text
13
+ package-lock.json -filter -diff -merge text
README.md CHANGED
@@ -1,5 +1,5 @@
1
  ---
2
- title: 'Research article template'
3
  emoji: 📝
4
  colorFrom: blue
5
  colorTo: indigo
 
1
  ---
2
+ title: 'FineVision: Open Data is all you need'
3
  emoji: 📝
4
  colorFrom: blue
5
  colorTo: indigo
app/.astro/astro/content.d.ts CHANGED
@@ -185,13 +185,11 @@ declare module 'astro:content' {
185
  };
186
 
187
  type DataEntryMap = {
188
- "assets": {
189
- "data/mnist-variant-model": {
190
- id: "data/mnist-variant-model";
191
  collection: "assets";
192
- data: any
193
- };
194
- };
195
  "embeds": Record<string, {
196
  id: string;
197
  collection: "embeds";
 
185
  };
186
 
187
  type DataEntryMap = {
188
+ "assets": Record<string, {
189
+ id: string;
 
190
  collection: "assets";
191
+ data: any;
192
+ }>;
 
193
  "embeds": Record<string, {
194
  id: string;
195
  collection: "embeds";
app/src/content/article.mdx CHANGED
@@ -27,23 +27,28 @@ import visualPoster from "./assets/images/visual-vocabulary-poster.png";
27
  import Accordion from '../components/Accordion.astro'
28
 
29
  <Sidenote>
30
- TLDR; Today, we release FineVision, a new multimodal dataset with 17M images, 24 million samples, 90M question-answer turns and 10B answer tokens comprising 5TB. We have extensively cleaned, analysed, and rated every single turn across 4 qualitative metrics with a score from 1-5 to enable the construction and study of individual training mixtures.
31
 
32
- Additionally, we ran extensive ablations and compared the performance of models trained on our dataset with common open source alternatives. Our dataset is both more divers, and achieves an average improvement of 35% in 10 common benchmarks over all baselines.
33
 
34
  To use the dataset, simply load it with:
35
  ```python
36
  from datasets import load_dataset
 
37
  ds = load_dataset('HuggingFaceM4/FineVision', name='ai2d_merged', split='train', streaming=True)
38
  ```
39
  </Sidenote>
40
 
41
  ## Introduction
42
- Even though open-weights Vision-Language Models (VLMs) are becoming ever more powerful, the accessibility of large-scale, state-of-the-art training data for these models is still lagging behind. The data to train these models is often proprietary and inaccessible for the broader community. Projects like The Cauldron, LLaVa and Cambrian aim to provide such datasets, but get quickly outpaced by the speed of the field and the emergence of novel applications for VLMs, like agentic tasks.
 
 
 
 
43
 
44
  ## Constructing FineVision
45
  ### Data Collection
46
- We manually collect over 180 image-text datasets from the recent literature and create new subsets in lacking domains.
47
 
48
  <Wide>
49
  <Accordion title="FineVision Subsets">
@@ -238,15 +243,34 @@ We manually collect over 180 image-text datasets from the recent literature and
238
  </Wide>
239
 
240
  ### Cleaning
241
- After gathering all the sub-datasets, every turn is cleaned. We remove all individual turns whose combined question and answer length exceeds 8192 tokens. We resize big images to have a longest side of 2048 pixels while keeping the aspect ratio, and discard images with corrupted metadata. This results in a clean final dataset with a maximum turn length of 8192 tokens and a maximum image dimension of 2048 pixels on the longest side.
 
 
 
 
 
 
 
242
 
243
  ### Result
244
- FineVision consists of 9 categories: Captioning & Knowledge, Chart & Table, General VQA, Grounding & Counting, Mathematics, Naive OCR, OCR QA, Science, Text-only.
 
 
 
 
 
 
 
 
245
 
246
- There are multiple ways to count the data in a multimodal dataset. The most common are the number of samples and the number of images. Additionally, a single sample can consist of multiple question/answer pairs in the form of a multi-turn conversation. Similarly to text-only datasets, the number of answer tokens is also interesting, since these are the tokens the model is actually trained on. We keep track of all 4 different distributions.
247
 
248
- In total, FineVision has 17.3M images, 24.3M samples, 88.9M turns, and 9.5B answer tokens. Based on these 4 distributions, multiple different mixtures are possible. In conjunction with the provided ratings, we encourage the community to experiment with downsampling large categories, for example according to quality and diversity criteria, and with upsampling high quality samples in small categories.
249
 
 
 
 
 
250
  <Wide>
251
  <HtmlEmbed src="d3-pie.html" desc="Distribution of Categories in FineVision" align="center" />
252
  </Wide>
@@ -255,25 +279,69 @@ In total, FineVision has 17.3M images, 24.3M samples, 88.9M turns, and 9.5B answ
255
  To evaluate how our dataset compares to other open-source datasets, we conduct various experiments.
256
 
257
  ### Model Architecture: nanoVLM
258
- For most of the ablations and experiments, we train a 450M parameter VLM, since it provides a good trade off between training time and model performance. We utilize the lightweight nanoVLM training framework with SmolLM2-360M-Instruct as the text backbone, andSigLIP2-512 as the vision encoder. We experimented with a classic 2-stage training schedule where the first stage is used to train mainly the Modality Projection to align the Language and Image Embeddings, and the second stage is used to train the whole model. Interestingly, we did not observe any significant benefits from this additional first stage compared to training the whole model directly, so we settled on a single stage training for most ablations.
 
 
 
 
 
 
 
259
 
260
  ### Baseline Datasets
261
- We compare our dataset against 3 popular open source alternatives: [The Cauldron](https://huggingface.co/datasets/HuggingFaceM4/the_cauldron), [LLaVA-OneVision](https://huggingface.co/datasets/lmms-lab/LLaVA-OneVision-Data) and [Cambrian-7M](https://huggingface.co/datasets/nyu-visionx/Cambrian-10M). We analyse all of them with the same pipeline concerning potential test-set contamination. Note that these rates are not the actual contaminations. While the pipeline discovers some similarities between the images of the test sets and the train sets, this does not mean that they are actually samples from the test set, since these consist of both image and the corresponding text. This is rather used as an upper bound on potential train/test overlap and as a relative comparison between the four datasets.
 
 
 
 
 
 
 
 
 
262
 
263
  ### Evaluations
264
- To evaluate our ablations in a reproducible manner, we utilize lmms-eval during training. We evaluate on a diverse set of 10 benchmarks: AI2D, ChartQA, DocVQA, InfoVQA, MME, MMMU, MMStar, OCRBench, TextVQA and Seedbench. Since these benchmarks cover different topics and produce results on different scales, e.g. AI2D returns the accuracy of the exact matches (0-100), but MME returns a continuous score (0-2800), aggregating them is not trivial. In our ablations the relative performance between the different configurations matters, so we determine the rank of every model in each training step and average it over all the benchmarks. This way we can judge where different configurations rank among each other over the course of training, and how big the difference between them is.
 
 
 
 
 
 
 
 
 
265
 
266
  ## Experiments
267
- Each of our ablations trains a 450M model with maximal image size of 1536x1536 pixel (without resizing smaller images) and a maximal input token length of 4096. In all single stage configurations we train for 20k Steps on 32 H100s for approximately 20h while evaluating all 11 benchmarks every 1k Steps. If not specified otherwise, the “Baseline” in our intra dataset ablations refers to a training run on the full unfiltered and unchanged dataset
 
 
 
 
268
 
269
  ### How does FineVision compare against the Baselines?
270
- Compared against existing VLM training datasets, FineVision produces significantly higher benchmark ranks than the other options. Over the 10 different metrics, FineVision achieves a 45.68% improvement over the Cauldron, a 13.04% improvement over Cambrian, and a 46.83% improvement over LLaVa.
271
 
 
 
 
 
 
272
  <HtmlEmbed src="against-baselines.html" desc="Average Rank of Models trained on different open source datasets." />
273
 
274
  ### How contaminated are the datasets?
275
- To investigate data leakage from benchmarks into this dataset, we construct a deduplication pipeline based on the sample images. We embed the images of 66 image-test datasets from the lmms-eval framework using the SSCD descriptor, and compute the cosine similarity between our samples and the test-set embeddings. Whenever a sample has a similarity higher than a threshold of 0.95 it is assumed to be a duplicate. While our tests with various thresholds show that this is still flagging more false-positives than false-negatives, we preferred to err on the side of caution. Below is an example of a correctly identified Duplicate ("Photo"), a false-positive with a similarity score above 0.95 ("Chart") and a false-negative with a similarity score below 0.95 ("Drawing"). We open-source the deduplication pipeline here as well as the precomputed test-set embedding’s here.
276
 
 
 
 
 
 
 
 
 
 
 
 
 
277
  <Wide>
278
  <HtmlEmbed src="comparison.html" desc="Examples of the Deduplication Pipeline."/>
279
  </Wide>
@@ -287,12 +355,33 @@ To investigate data leakage from benchmarks into this dataset, we construct a de
287
 
288
  Additionally, we experimented with removing all found samples from all datasets to see if the outcome is different from the results above, but we observe the same distribution.
289
 
 
290
  <HtmlEmbed src="against-baselines-deduplicated.html" desc="Average Rank of Models trained on different deduplicated open source datasets." />
 
291
 
292
- After removing these duplicates, the average performance of the models over all benchmarks dropped by 2.78% for Cambrian, 2.39% for Cauldron, 1.45% for FineVision and 2.72% for LLaVa, indicating that while FineVision is already performing best, test-set contamination has the smallest effect in this dataset.
293
 
294
  ### How diverse are the datasets?
295
- Similarly to the comparison of the size, we also wanted to evaluate the datasets for diversity. Evaluating the diversity of a dataset is a field of study for itself, which we will not dive into here, rather we borrow techniques from computer vision and use the already computed SSCD embeddings as a proxy of visual diversity. The SSCD embeddings should provide a good approximation since they are specifically optimized for distinguishing between visually similar content, through their differential entropy regularization that tries to ensure the full utilization of the embedding space. The resulting approximately uniform distribution of the embeddings promotes consistent separation between descriptor vectors, making distances from different embedding regions more comparable, which is crucial for meaningful diversity measurements. To not rely on a subsample of the dataset in estimating the diversity, we analyse the covariance metric of the full embeddings since this can be computed over the whole dataset in a numerically stable way (using Welford’s algorithm). From this covariance matrix, we can calculate the eigenvalues for analysis. We get the effective rank of the covariance matrix, which measures how uniformly the variance is distributed across dimensions, as well as the participation ratio, which measures how many dimensions actively contribute to the overall variance. The effective rank (entropy based) estimates the uniformity of the variance distribution, while the participation ratio (concentration-based) estimates the breadth of the variance participation . To obtain a single ‘diversity score’ for the datasets, we normalize the effective rank and participation ratio with the embedding dimension and compute their geometric mean. We observe that FineVision is not only the biggest, but also the most diverse dataset.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
296
 
297
  | Name | Effective Rank | Participation Ratio | Diversity |
298
  |---------------|----------------|---------------------|-----------|
@@ -302,27 +391,46 @@ Similarly to the comparison of the size, we also wanted to evaluate the datasets
302
  | FineVision | 359.22 | 182.52 | 0.500 |
303
 
304
  ### Should you merge multiple questions for the same image into a single multi turn conversation?
305
- Since the training of a VLM already builds upon pretrained vision and language backbones, datasets are usually not completely unstructured, but follow an image+question and answer structure. Recent works have shown that consolidating multiple questions for the same image into a multi-turn conversation where the image is shown only once improves model performance, and additionally also reduces the datasets memory footprint. We therefore experiment with deduplicating every image in our dataset internally using the same SSCD descriptors, manually inspect the resulting clusters and merge fitting samples into a multi-turn conversation.
 
 
 
 
 
 
306
  Even when training for longer than the other ablations, we did not observe a significant difference, if at all rather one in favour against merging multiple samples together.
307
 
 
308
  <HtmlEmbed src="internal-deduplication.html" desc="Average Ranking of Models trained with internally deduplicated / merged samples." />
 
309
 
310
  ### Should you train on multilingual data if your language backbone was not?
311
- There are some multilingual datasets in our mixture, but since our Language Backbone is only trained on English data, we experimented with removing all the multilingual, mainly Chinese, subsets. This does also not seem to make a big difference, with slight advantages to leaving the data, even if it was not part of the Language Backbone's initial training. In our training setup with this configuration, one epoch over the whole dataset equals ~12k steps, so the benefit of unseen languages only materializes after the first full epoch.
312
 
 
 
 
 
 
 
 
313
  <HtmlEmbed src="remove-ch.html" desc="Average Rank of Models trained with and without multilingual samples" />
 
314
 
315
  ### How can you assess the quality of the dataset?
316
 
317
- The usual goal for every dataset, to collect samples with the highest quality possible, is quite an abstract endeavour in practice, especially for multimodal datasets. Additionally, different training stages usually have different qualitative and quantitative requirements. Finally, tuning the mixtures of different categories is also reliant on how much data with what quality is available. For image-text datasets, there are 3 different combinatorial ways to evaluate a sample: text-only, image-only, and image-text correspondence. The question persists, how do you actually measure the quality of a sample, especially if you have to do so in 3 different ways.
318
- With FineVision, we test a framework to rate every single turn in our dataset across 4 axes.
 
 
 
 
319
  For this, we used a LLM and VLM-as-a-judge pipeline (using Qwen3-32B and Qwen2.5VL-32B), to rate every turn on a scale from 1-5 in these 4 categories:
320
  - **Text Formatting Quality**: How is the quality of the answer both linguistically and structurally? (Question and Answer)
321
  - **Question-Answer Relevance**: Does the answer properly respond to the question? (Question and Answer)
322
  - **Visual Dependency**: How much does the question depend on visual information to be answered? (Question only)
323
  - **Image-Question Correspondence**: How well does the image support answering the question? (Image and Question)
324
 
325
- This is the distribution of scores across the different filters for FineVision.
326
  | Filter | 1 | 2 | 3 | 4 | 5 |
327
  |-----------------------|-------|-------|-------|-------|-------|
328
  | Formatting | 0.5 | 0.7 | 1.1 | 77.5 | 20.3 |
@@ -332,34 +440,72 @@ This is the distribution of scores across the different filters for FineVision.
332
 
333
  To try to quantify the quality of the training data and the effect it has on the model’s performance, we run extensive ablations on our generated ratings.
334
 
 
335
  <HtmlEmbed src="all-ratings.html" desc="Average Rank of Models trained with samples that have all 4 ratings above a certain threshold." />
 
 
 
 
 
 
336
 
337
- Interestingly, both when only training on turns that have any of the 4 ratings under a certain threshold, as well as when training on turns where only a single rating at a time is used, we observe the same behaviour. Simply training on all samples of the dataset outperforms in benchmarks. This could mean multiple things.
338
- We can almost see the same distribution in the ranks across all filters: From best to worst with an increase in the rating threshold. For example the visual dependency and the image correspondence rating both result in exactly the same distribution of rankings, corresponding to the natural order of options, 1 through 5. This could indicate that with a sufficiently large dataset that you train on long enough, it hurts more to remove samples, even if they were judged to be of low quality, than to train on them.
339
- The notion of quality for VLM datasets is nuanced in general. If we compare training a VLM and an LLM, training the VLM is closer in nature to the SFT part than the ‘Pre-Training’ part of training a LLM. We do not train on crawls of internet data, instead we train on individual samples of Image-Question and Answer pairs, and these datapoints are usually ‘curated rather than collected’. We also do not train on trillions of tokens, but on billions. This means that the datasets for VLMs usually already have a certain baseline quality. Since FineVision is mainly a collection of common VLM datasets, combined with a few newly created ones in low resource domains, this baseline quality is the same here. We could therefore be trying to measure and quantify nuances in the quality of Image-Question-Answer Pairs, instead of using the binary indicator of using curated SFT datasets as the measure for quality, and training on as much data as possible.
340
- Alternatively, while we used state-of-the-art open source models to judge our datapoints, we still had to find a compromise between model quality and cost due to the raw required effort to rate every single turn of FineVision. The chosen models could simply not be powerful enough to recognize and judge the quality of samples.
341
- Even though our first proposal to judge the quality of multimodal data on a per-turn basis did not yield any improvement in model performance, we believe that this is still an exciting and important direction of research and hope the release of FineVision encourages the community to develop techniques for this at large scale.
342
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
343
  <HtmlEmbed src="formatting-filters.html" title="Formatting Filter" desc="Average Rank of Models that have the Formatting Filter above a threshold." />
344
  <HtmlEmbed src="relevance-filters.html" title="Relevance Filter" desc="Average Rank of Models that have the Relevance Filter above a threshold." />
 
345
  <HtmlEmbed src="visual-dependency-filters.html" title="Visual Dependency Filter" desc="Average Rank of Models that have the Visual Dependency Filter above a threshold." />
346
  <HtmlEmbed src="image-correspondence-filters.html" title="Image Correspondence Filter" desc="Average Rank of Models that have the Image-Correspondence Filter above a threshold." />
 
347
 
348
  ### Should you train in multiple stages?
349
- The standard training procedure of a VLM usually follows at least two stages. First, you train only the connecting module, potentially in addition the image encoder, and then you train the whole model in a second stage. Some work has even introduced an additional Stage 2.5, where you train the full model on a smaller subset of higher quality data. To investigate this on small models, we experiment both with single, dual and triple stage training.
 
 
 
350
 
351
  #### 1 Stage vs 2 Stages
352
 
353
  <HtmlEmbed src="ss-vs-s1.html" desc="Average Rank of a model trained for 20K steps in a single stage, and a model trained for the same 20k steps on top of pretraining the Modality Projection and Vision Encoder for 10k steps." />
 
354
 
355
  We observe that at this model size, with this amount of available data, training only a single stage actually outperforms a multi stage approach.
356
 
357
  #### 2 Stages vs 2.5 Stages
358
- We also experiment if splitting the second stage results in any performance improvements. We take the baseline, and continue training for another 20k steps, both with the unfiltered (>= 1) as well as filtered subsets of FineVision according to our ratings.
 
 
359
 
 
360
  <HtmlEmbed src="s25-ratings.html" desc="Average Rank if a model trained for an additional 20K steps on top of unfiltered training for 20K steps." />
 
361
 
362
  Like in the previous results, we observe that the best outcome is simply achieved by training on as much data as possible.
363
 
364
  ## Conclusion
365
- We introduce FineVision, a new state of the art open dataset to train VLMs, that is both bigger and more diverse than previous open source datasets. In addition to extensive ablations, we present a new family of small, purely data-centric trained VLMs, and hope we can empower both further research and the community with this.
 
27
  import Accordion from '../components/Accordion.astro'
28
 
29
  <Sidenote>
30
+ TLDR; Today, we release **FineVision**, a new multimodal dataset with **17M images**, 24 million samples, 90M question-answer turns and 10B answer tokens comprising **5TB**. We have extensively cleaned, analysed, and rated every single turn across 4 qualitative metrics with a score from 1-5 to enable the construction and study of individual training mixtures.
31
 
32
+ Additionally, we ran extensive ablations and compared the performance of models trained on our dataset with common open source alternatives. Our dataset is both more divers, and achieves an average improvement of **35%** in **10 common benchmarks** over all baselines.
33
 
34
  To use the dataset, simply load it with:
35
  ```python
36
  from datasets import load_dataset
37
+
38
  ds = load_dataset('HuggingFaceM4/FineVision', name='ai2d_merged', split='train', streaming=True)
39
  ```
40
  </Sidenote>
41
 
42
  ## Introduction
43
+ Even though open-weights Vision-Language Models (VLMs) are becoming ever more powerful, the accessibility of large-scale, state-of-the-art **training data** for these models is still lagging behind.
44
+
45
+ The data to train these models is often proprietary and inaccessible for the broader community.
46
+
47
+ Projects like The Cauldron, LLaVa and Cambrian aim to provide such datasets, but get quickly outpaced by the speed of the field and the emergence of novel applications for VLMs, like agentic tasks.
48
 
49
  ## Constructing FineVision
50
  ### Data Collection
51
+ We manually collect **over 180** image-text datasets from the recent literature and create new subsets in lacking domains.
52
 
53
  <Wide>
54
  <Accordion title="FineVision Subsets">
 
243
  </Wide>
244
 
245
  ### Cleaning
246
+ After gathering all the sub-datasets, every turn is cleaned.
247
+
248
+ We remove all individual turns whose combined question and answer length exceeds **8192 tokens**.
249
+
250
+ We resize big images to have a longest side of **2048 pixels** while keeping the aspect ratio, and discard images with corrupted metadata.
251
+
252
+ This results in a clean final dataset with a maximum turn length of 8192 tokens and a maximum image dimension of 2048 pixels on the longest side.
253
+
254
 
255
  ### Result
256
+ **FineVision** consists of **9 categories**: Captioning & Knowledge, Chart & Table, General VQA, Grounding & Counting, Mathematics, Naive OCR, OCR QA, Science, Text-only.
257
+
258
+ There are multiple ways to count the data in a multimodal dataset.
259
+
260
+ The most common are the number of samples and the number of images.
261
+
262
+ Additionally, a single sample can consist of multiple question/answer pairs in the form of a multi-turn conversation.
263
+
264
+ Similarly to text-only datasets, the number of answer tokens is also interesting, since these are the tokens the model is actually trained on.
265
 
266
+ We keep track of all **4 different distributions**.
267
 
268
+ In total, **FineVision** has **17.3M images**, **24.3M samples**, **88.9M turns**, and **9.5B answer tokens**.
269
 
270
+ Based on these **4 distributions**, multiple different mixtures are possible.
271
+
272
+ In conjunction with the provided ratings, we encourage the community to experiment with downsampling large categories, for example according to quality and diversity criteria, and with upsampling high quality samples in small categories.
273
+ <br/>
274
  <Wide>
275
  <HtmlEmbed src="d3-pie.html" desc="Distribution of Categories in FineVision" align="center" />
276
  </Wide>
 
279
  To evaluate how our dataset compares to other open-source datasets, we conduct various experiments.
280
 
281
  ### Model Architecture: nanoVLM
282
+ For most of the ablations and experiments, we train a **450M** parameter VLM, since it provides a good trade off between training time and model performance.
283
+
284
+ We utilize the lightweight nanoVLM training framework with **SmolLM2-360M-Instruct** as the text backbone, andSigLIP2-512 as the vision encoder.
285
+
286
+ We experimented with a classic 2-stage training schedule where the first stage is used to train mainly the Modality Projection to align the Language and Image Embeddings, and the second stage is used to train the whole model.
287
+
288
+ Interestingly, we did not observe any significant benefits from this additional first stage compared to training the whole model directly, so we settled on a **single stage** training for most ablations.
289
+
290
 
291
  ### Baseline Datasets
292
+
293
+ We compare our dataset against 3 popular open source alternatives: **[The Cauldron](https://huggingface.co/datasets/HuggingFaceM4/the_cauldron)**, **[LLaVA-OneVision](https://huggingface.co/datasets/lmms-lab/LLaVA-OneVision-Data)** and **[Cambrian-7M](https://huggingface.co/datasets/nyu-visionx/Cambrian-10M)**.
294
+
295
+ We analyse all of them with the same pipeline concerning potential test-set contamination.
296
+
297
+ Note that these rates are not the actual contaminations.
298
+
299
+ While the pipeline discovers some similarities between the images of the test sets and the train sets, this does not mean that they are actually samples from the test set, since these consist of both image and the corresponding text.
300
+
301
+ This is rather used as an upper bound on potential train/test overlap and as a relative comparison between the four datasets.
302
 
303
  ### Evaluations
304
+
305
+ To evaluate our ablations in a reproducible manner, we utilize **lmms-eval** during training.
306
+
307
+ We evaluate on a diverse set of **10 benchmarks**: AI2D, ChartQA, DocVQA, InfoVQA, MME, MMMU, MMStar, OCRBench, TextVQA and Seedbench.
308
+
309
+ Since these benchmarks cover different topics and produce results on different scales, e.g. AI2D returns the accuracy of the exact matches (0-100), but MME returns a continuous score (0-2800), aggregating them is not trivial.
310
+
311
+ In our ablations the relative performance between the different configurations matters, so we determine the rank of every model in each training step and average it over all the benchmarks.
312
+
313
+ This way we can judge where different configurations rank among each other over the course of training, and how big the difference between them is.
314
 
315
  ## Experiments
316
+ Each of our ablations trains a 450M model with maximal image size of 1536x1536 pixel (without resizing smaller images) and a maximal input token length of 4096.
317
+
318
+ In all single stage configurations we train for **20k Steps** on **32 H100s** for approximately 20h while evaluating all 11 benchmarks every 1k Steps.
319
+
320
+ If not specified otherwise, the “Baseline” in our intra dataset ablations refers to a training run on the full unfiltered and unchanged dataset
321
 
322
  ### How does FineVision compare against the Baselines?
 
323
 
324
+ Compared against existing VLM training datasets, **FineVision** produces significantly higher benchmark ranks than the other options.
325
+
326
+ Over the 10 different metrics, **FineVision** achieves a **45.68%** improvement over the Cauldron, a **13.04%** improvement over Cambrian, and a **46.83%** improvement over LLaVa.
327
+
328
+ ---
329
  <HtmlEmbed src="against-baselines.html" desc="Average Rank of Models trained on different open source datasets." />
330
 
331
  ### How contaminated are the datasets?
 
332
 
333
+ To investigate data leakage from benchmarks into this dataset, we construct a deduplication pipeline based on the sample images.
334
+
335
+ We embed the images of 66 image-test datasets from the lmms-eval framework using the SSCD descriptor, and compute the cosine similarity between our samples and the test-set embeddings.
336
+
337
+ Whenever a sample has a similarity higher than a threshold of **0.95** it is assumed to be a duplicate.
338
+
339
+ While our tests with various thresholds show that this is still flagging more false-positives than false-negatives, we preferred to err on the side of caution.
340
+
341
+ Below is an example of a correctly identified Duplicate ("Photo"), a false-positive with a similarity score above 0.95 ("Chart") and a false-negative with a similarity score below 0.95 ("Drawing").
342
+
343
+ We open-source the deduplication pipeline here as well as the precomputed test-set embedding’s here.
344
+ <br/>
345
  <Wide>
346
  <HtmlEmbed src="comparison.html" desc="Examples of the Deduplication Pipeline."/>
347
  </Wide>
 
355
 
356
  Additionally, we experimented with removing all found samples from all datasets to see if the outcome is different from the results above, but we observe the same distribution.
357
 
358
+ ---
359
  <HtmlEmbed src="against-baselines-deduplicated.html" desc="Average Rank of Models trained on different deduplicated open source datasets." />
360
+ ---
361
 
362
+ After removing these duplicates, the average performance of the models over all benchmarks dropped by 2.78% for Cambrian, 2.39% for Cauldron, **1.45%** for FineVision and 2.72% for LLaVa, indicating that while FineVision is already performing best, test-set contamination has the smallest effect in this dataset.
363
 
364
  ### How diverse are the datasets?
365
+
366
+ Similarly to the comparison of the size, we also wanted to evaluate the datasets for diversity.
367
+
368
+ Evaluating the diversity of a dataset is a field of study for itself, which we will not dive into here, rather we borrow techniques from computer vision and use the already computed **SSCD embeddings** as a proxy of visual diversity.
369
+
370
+ The SSCD embeddings should provide a good approximation since they are specifically optimized for distinguishing between visually similar content, through their differential entropy regularization that tries to ensure the full utilization of the embedding space.
371
+
372
+ The resulting approximately uniform distribution of the embeddings promotes consistent separation between descriptor vectors, making distances from different embedding regions more comparable, which is crucial for meaningful diversity measurements.
373
+
374
+ To not rely on a subsample of the dataset in estimating the diversity, we analyse the covariance metric of the full embeddings since this can be computed over the whole dataset in a numerically stable way (using Welford’s algorithm).
375
+
376
+ From this covariance matrix, we can calculate the eigenvalues for analysis.
377
+
378
+ We get the effective rank of the covariance matrix, which measures how uniformly the variance is distributed across dimensions, as well as the participation ratio, which measures how many dimensions actively contribute to the overall variance.
379
+
380
+ The effective rank (entropy based) estimates the uniformity of the variance distribution, while the participation ratio (concentration-based) estimates the breadth of the variance participation .
381
+
382
+ To obtain a single ‘**diversity score**’ for the datasets, we normalize the effective rank and participation ratio with the embedding dimension and compute their geometric mean.
383
+
384
+ We observe that **FineVision** is not only the biggest, but also the most diverse dataset.
385
 
386
  | Name | Effective Rank | Participation Ratio | Diversity |
387
  |---------------|----------------|---------------------|-----------|
 
391
  | FineVision | 359.22 | 182.52 | 0.500 |
392
 
393
  ### Should you merge multiple questions for the same image into a single multi turn conversation?
394
+
395
+ Since the training of a VLM already builds upon pretrained vision and language backbones, datasets are usually not completely unstructured, but follow an image+question and answer structure.
396
+
397
+ Recent works have shown that consolidating multiple questions for the same image into a **multi-turn conversation** where the image is shown only once improves model performance, and additionally also reduces the datasets memory footprint.
398
+
399
+ We therefore experiment with deduplicating every image in our dataset internally using the same SSCD descriptors, manually inspect the resulting clusters and merge fitting samples into a multi-turn conversation.
400
+
401
  Even when training for longer than the other ablations, we did not observe a significant difference, if at all rather one in favour against merging multiple samples together.
402
 
403
+ ---
404
  <HtmlEmbed src="internal-deduplication.html" desc="Average Ranking of Models trained with internally deduplicated / merged samples." />
405
+ ---
406
 
407
  ### Should you train on multilingual data if your language backbone was not?
 
408
 
409
+ There are some multilingual datasets in our mixture, but since our Language Backbone is only trained on English data, we experimented with removing all the multilingual, mainly Chinese, subsets.
410
+
411
+ This does also not seem to make a big difference, with slight advantages to leaving the data, even if it was not part of the Language Backbone's initial training.
412
+
413
+ In our training setup with this configuration, one epoch over the whole dataset equals ~12k steps, so the benefit of unseen languages only materializes after the first full epoch.
414
+
415
+ ---
416
  <HtmlEmbed src="remove-ch.html" desc="Average Rank of Models trained with and without multilingual samples" />
417
+ ---
418
 
419
  ### How can you assess the quality of the dataset?
420
 
421
+ The usual goal for every dataset, to collect samples with the highest quality possible, is quite an abstract endeavour in practice, especially for multimodal datasets. Additionally, different training stages usually have different qualitative and quantitative requirements.
422
+
423
+ Finally, tuning the mixtures of different categories is also reliant on how much data with what quality is available. For image-text datasets, there are 3 different combinatorial ways to evaluate a sample: text-only, image-only, and image-text correspondence. The question persists, how do you actually measure the quality of a sample, especially if you have to do so in 3 different ways.
424
+
425
+ With **FineVision**, we test a framework to rate every single turn in our dataset across 4 axes.
426
+
427
  For this, we used a LLM and VLM-as-a-judge pipeline (using Qwen3-32B and Qwen2.5VL-32B), to rate every turn on a scale from 1-5 in these 4 categories:
428
  - **Text Formatting Quality**: How is the quality of the answer both linguistically and structurally? (Question and Answer)
429
  - **Question-Answer Relevance**: Does the answer properly respond to the question? (Question and Answer)
430
  - **Visual Dependency**: How much does the question depend on visual information to be answered? (Question only)
431
  - **Image-Question Correspondence**: How well does the image support answering the question? (Image and Question)
432
 
433
+ This is the distribution of scores across the different filters for **FineVision**.
434
  | Filter | 1 | 2 | 3 | 4 | 5 |
435
  |-----------------------|-------|-------|-------|-------|-------|
436
  | Formatting | 0.5 | 0.7 | 1.1 | 77.5 | 20.3 |
 
440
 
441
  To try to quantify the quality of the training data and the effect it has on the model’s performance, we run extensive ablations on our generated ratings.
442
 
443
+ ---
444
  <HtmlEmbed src="all-ratings.html" desc="Average Rank of Models trained with samples that have all 4 ratings above a certain threshold." />
445
+ ---
446
+
447
+ Interestingly, both when only training on turns that have any of the 4 ratings under a certain threshold, as well as when training on turns where only a single rating at a time is used, we observe the same behaviour.
448
+
449
+ Simply training on all samples of the dataset **outperforms in benchmarks**.
450
+ This could mean multiple things.
451
 
452
+ We can almost see the same distribution in the ranks across all filters: From best to worst with an increase in the rating threshold.
 
 
 
 
453
 
454
+ For example the visual dependency and the image correspondence rating both result in exactly the same distribution of rankings, corresponding to the natural order of options, 1 through 5.
455
+
456
+ This could indicate that with a sufficiently large dataset that you train on long enough, it hurts more to remove samples, even if they were judged to be of low quality, than to train on them.
457
+
458
+ The notion of quality for VLM datasets is nuanced in general.
459
+
460
+ If we compare training a VLM and an LLM, training the VLM is closer in nature to the SFT part than the ‘Pre-Training’ part of training a LLM.
461
+
462
+ We do not train on crawls of internet data, instead we train on individual samples of Image-Question and Answer pairs, and these datapoints are usually ‘curated rather than collected’.
463
+
464
+ We also do not train on trillions of tokens, but on billions.
465
+
466
+ This means that the datasets for VLMs usually already have a certain baseline quality.
467
+
468
+ Since **FineVision** is mainly a collection of common VLM datasets, combined with a few newly created ones in low resource domains, this baseline quality is the same here.
469
+
470
+ We could therefore be trying to measure and quantify nuances in the quality of Image-Question-Answer Pairs, instead of using the binary indicator of using curated SFT datasets as the measure for quality, and training on as much data as possible.
471
+
472
+ Alternatively, while we used state-of-the-art open source models to judge our datapoints, we still had to find a compromise between model quality and cost due to the raw required effort to rate every single turn of **FineVision**.
473
+
474
+ The chosen models could simply not be powerful enough to recognize and judge the quality of samples.
475
+
476
+ Even though our first proposal to judge the quality of multimodal data on a per-turn basis did not yield any improvement in model performance, we believe that this is still an exciting and important direction of research and hope the release of **FineVision** encourages the community to develop techniques for this at large scale.
477
+
478
+ ---
479
  <HtmlEmbed src="formatting-filters.html" title="Formatting Filter" desc="Average Rank of Models that have the Formatting Filter above a threshold." />
480
  <HtmlEmbed src="relevance-filters.html" title="Relevance Filter" desc="Average Rank of Models that have the Relevance Filter above a threshold." />
481
+ ---
482
  <HtmlEmbed src="visual-dependency-filters.html" title="Visual Dependency Filter" desc="Average Rank of Models that have the Visual Dependency Filter above a threshold." />
483
  <HtmlEmbed src="image-correspondence-filters.html" title="Image Correspondence Filter" desc="Average Rank of Models that have the Image-Correspondence Filter above a threshold." />
484
+ ---
485
 
486
  ### Should you train in multiple stages?
487
+
488
+ The standard training procedure of a VLM usually follows at least two stages. First, you train only the connecting module, potentially in addition the image encoder, and then you train the whole model in a second stage. Some work has even introduced an additional Stage 2.5, where you train the full model on a smaller subset of higher quality data.
489
+
490
+ To investigate this on small models, we experiment both with single, dual and triple stage training.
491
 
492
  #### 1 Stage vs 2 Stages
493
 
494
  <HtmlEmbed src="ss-vs-s1.html" desc="Average Rank of a model trained for 20K steps in a single stage, and a model trained for the same 20k steps on top of pretraining the Modality Projection and Vision Encoder for 10k steps." />
495
+ ---
496
 
497
  We observe that at this model size, with this amount of available data, training only a single stage actually outperforms a multi stage approach.
498
 
499
  #### 2 Stages vs 2.5 Stages
500
+ We also experiment if splitting the second stage results in any performance improvements.
501
+
502
+ We take the baseline, and continue training for another 20k steps, both with the unfiltered (>= 1) as well as filtered subsets of **FineVision** according to our ratings.
503
 
504
+ ---
505
  <HtmlEmbed src="s25-ratings.html" desc="Average Rank if a model trained for an additional 20K steps on top of unfiltered training for 20K steps." />
506
+ ---
507
 
508
  Like in the previous results, we observe that the best outcome is simply achieved by training on as much data as possible.
509
 
510
  ## Conclusion
511
+ We introduce **FineVision**, a new state of the art open dataset to train VLMs, that is both **bigger and more diverse** than previous open source datasets. In addition to extensive ablations, we present a new family of small, purely data-centric trained VLMs, and hope we can empower both further research and the community with this.
app/src/content/embeds/banner.html CHANGED
@@ -84,7 +84,8 @@
84
 
85
  d3.csv(csvUrl, d3.autoType).then(async (raw) => {
86
  const data = raw.filter((d) => d && typeof d.x_position === 'number' && typeof d.y_position === 'number');
87
- const categories = Array.from(new Set(data.map((d) => d.category || 'Unknown')));
 
88
  const color = d3.scaleOrdinal().domain(categories).range(d3.schemeTableau10);
89
  const xDomain = d3.extent(data, (d) => d.x_position);
90
  const yDomain = d3.extent(data, (d) => d.y_position);
@@ -137,7 +138,7 @@
137
  gCentroids.attr('transform', `translate(0, ${padTop})`);
138
 
139
  // Centroides en labels: doublage (fond blanc + texte couleur) + anti-chevauchement
140
- const fontPx = 16;
141
  const estimateTextWidth = (s) => Math.max(fontPx, (s ? String(s).length : 0) * fontPx * 0.62 + 8);
142
 
143
  // Prépare des noeuds à l'échelle pixel pour la simulation
@@ -221,14 +222,14 @@
221
  mergedC.select('text.label-bg').each(function() {
222
  this.style.setProperty('fill', 'var(--surface-bg)', 'important');
223
  this.style.setProperty('stroke', 'var(--surface-bg)', 'important');
224
- this.style.setProperty('stroke-width', '6', 'important');
225
  this.style.setProperty('font-weight', '900', 'important');
226
  this.style.setProperty('font-size', `${fontPx}px`, 'important');
227
  });
228
  mergedC.select('text.label-fg').each(function(d) {
229
  const base = d3.color(color(d.category || 'Unknown'));
230
  const adjusted = base
231
- ? (isDark ? base.brighter(0.8) : base.darker(0.7)).toString()
232
  : color(d.category || 'Unknown');
233
  this.style.setProperty('fill', adjusted, 'important');
234
  this.style.setProperty('font-weight', '900', 'important');
@@ -264,7 +265,6 @@
264
  `<div><strong>${d.category || 'Unknown'}</strong></div>` +
265
  `<div><strong>ID</strong> ${d.original_id}</div>` +
266
  `<div><strong>Subset</strong> ${d.subset ?? '—'}</div>` +
267
- `<div><strong>X</strong> ${d.x_position} · <strong>Y</strong> ${d.y_position}</div>` +
268
  `</div>` +
269
  `</div>`;
270
  tip.style.opacity = '1';
 
84
 
85
  d3.csv(csvUrl, d3.autoType).then(async (raw) => {
86
  const data = raw.filter((d) => d && typeof d.x_position === 'number' && typeof d.y_position === 'number');
87
+ // Tri des catégories pour un ordre stable et correspondance avec d3-pie
88
+ const categories = Array.from(new Set(data.map((d) => d.category || 'Unknown'))).sort();
89
  const color = d3.scaleOrdinal().domain(categories).range(d3.schemeTableau10);
90
  const xDomain = d3.extent(data, (d) => d.x_position);
91
  const yDomain = d3.extent(data, (d) => d.y_position);
 
138
  gCentroids.attr('transform', `translate(0, ${padTop})`);
139
 
140
  // Centroides en labels: doublage (fond blanc + texte couleur) + anti-chevauchement
141
+ const fontPx = 18;
142
  const estimateTextWidth = (s) => Math.max(fontPx, (s ? String(s).length : 0) * fontPx * 0.62 + 8);
143
 
144
  // Prépare des noeuds à l'échelle pixel pour la simulation
 
222
  mergedC.select('text.label-bg').each(function() {
223
  this.style.setProperty('fill', 'var(--surface-bg)', 'important');
224
  this.style.setProperty('stroke', 'var(--surface-bg)', 'important');
225
+ this.style.setProperty('stroke-width', '10', 'important');
226
  this.style.setProperty('font-weight', '900', 'important');
227
  this.style.setProperty('font-size', `${fontPx}px`, 'important');
228
  });
229
  mergedC.select('text.label-fg').each(function(d) {
230
  const base = d3.color(color(d.category || 'Unknown'));
231
  const adjusted = base
232
+ ? (isDark ? base.brighter(0.8) : base.darker(.8)).toString()
233
  : color(d.category || 'Unknown');
234
  this.style.setProperty('fill', adjusted, 'important');
235
  this.style.setProperty('font-weight', '900', 'important');
 
265
  `<div><strong>${d.category || 'Unknown'}</strong></div>` +
266
  `<div><strong>ID</strong> ${d.original_id}</div>` +
267
  `<div><strong>Subset</strong> ${d.subset ?? '—'}</div>` +
 
268
  `</div>` +
269
  `</div>`;
270
  tip.style.opacity = '1';
app/src/content/embeds/d3-pie.html CHANGED
@@ -110,23 +110,10 @@
110
  function drawPies(rows){
111
  const { innerWidth, innerHeight } = updateSize();
112
 
113
- // Categories
114
- const categories = Array.from(new Set(rows.map(r => r.eagle_cathegory))).sort();
115
-
116
- // Build a categorical palette anchored on bar chart vibes + theme primary
117
- const primary = getComputedStyle(document.documentElement).getPropertyValue('--primary-color').trim() || '#E889AB';
118
- const base = [primary, '#4EA5B7', '#E38A42', '#CEC0FA'];
119
- const pool = Array.from(new Set([
120
- ...base,
121
- ...(d3.schemeTableau10 || []),
122
- ...(d3.schemeSet3 || []),
123
- ...(d3.schemePastel1 || []),
124
- ].flat().filter(Boolean)));
125
-
126
- const colorOf = (cat) => {
127
- const idx = categories.indexOf(cat);
128
- return pool[idx % pool.length] || primary;
129
- };
130
 
131
  // Legend will be positioned after radius is known
132
 
 
110
  function drawPies(rows){
111
  const { innerWidth, innerHeight } = updateSize();
112
 
113
+ // Catégories (triées) + échelle de couleurs harmonisée avec banner.html
114
+ const categories = Array.from(new Set(rows.map(r => r.eagle_cathegory || 'Unknown'))).sort();
115
+ const color = d3.scaleOrdinal().domain(categories).range(d3.schemeTableau10);
116
+ const colorOf = (cat) => color(cat || 'Unknown');
 
 
 
 
 
 
 
 
 
 
 
 
 
117
 
118
  // Legend will be positioned after radius is known
119