Equimo 2.6.0__tar.gz → 2.8.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {equimo-2.6.0 → equimo-2.8.0}/CHANGELOG.md +134 -0
- {equimo-2.6.0 → equimo-2.8.0}/LICENSES/pretrained/README.md +10 -0
- equimo-2.8.0/LICENSES/pretrained/sam-License.md +96 -0
- {equimo-2.6.0 → equimo-2.8.0}/NOTICE +42 -0
- equimo-2.6.0/README.md → equimo-2.8.0/PKG-INFO +132 -9
- equimo-2.6.0/PKG-INFO → equimo-2.8.0/README.md +76 -61
- equimo-2.8.0/docs/licensing/sam3-provenance.md +81 -0
- {equimo-2.6.0 → equimo-2.8.0}/docs/stability.md +18 -0
- {equimo-2.6.0 → equimo-2.8.0}/models/huggingface/NOTICE +14 -0
- {equimo-2.6.0 → equimo-2.8.0}/models/huggingface/README.md +12 -1
- equimo-2.8.0/pyproject.toml +136 -0
- equimo-2.6.0/pyproject.toml → equimo-2.8.0/pyproject.toml.orig +15 -4
- equimo-2.8.0/src/equimo/EGM.md +227 -0
- equimo-2.8.0/src/equimo/__init__.py +1 -0
- equimo-2.8.0/src/equimo/_legacy_layouts.py +167 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/_pretrained.py +3 -1
- equimo-2.8.0/src/equimo/audio/EGM.md +61 -0
- equimo-2.8.0/src/equimo/audio/layers/EGM.md +42 -0
- equimo-2.8.0/src/equimo/audio/models/EGM.md +64 -0
- equimo-2.8.0/src/equimo/conversion/EGM.md +56 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/conversion/utils.py +22 -10
- equimo-2.8.0/src/equimo/core/EGM.md +126 -0
- equimo-2.8.0/src/equimo/core/emamodel.py +42 -0
- equimo-2.8.0/src/equimo/core/implicit/EGM.md +124 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/core/implicit/deq.py +5 -5
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/core/implicit/strategies.py +3 -2
- equimo-2.8.0/src/equimo/core/layers/EGM.md +272 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/core/layers/__init__.py +6 -0
- equimo-2.8.0/src/equimo/core/layers/_apply.py +13 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/core/layers/activation.py +3 -1
- equimo-2.8.0/src/equimo/core/layers/attention.py +577 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/core/layers/dropout.py +7 -7
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/core/layers/ffn.py +38 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/core/layers/generic.py +9 -4
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/core/layers/mamba.py +4 -3
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/core/layers/norm.py +14 -2
- equimo-2.8.0/src/equimo/core/ops/EGM.md +80 -0
- equimo-2.8.0/src/equimo/core/ops/__init__.py +20 -0
- equimo-2.8.0/src/equimo/core/ops/probability.py +213 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/core/ops/scan.py +20 -20
- equimo-2.8.0/src/equimo/core/parameters.py +209 -0
- {equimo-2.6.0/src/equimo/finetune → equimo-2.8.0/src/equimo/core}/tags.py +51 -140
- equimo-2.8.0/src/equimo/finetune/EGM.md +296 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/finetune/_typing.py +2 -1
- equimo-2.8.0/src/equimo/finetune/audio/EGM.md +53 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/finetune/config.py +9 -10
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/finetune/continued_ssl.py +5 -1
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/finetune/feature_extraction.py +5 -4
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/finetune/heads.py +10 -9
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/finetune/labels.py +48 -9
- equimo-2.8.0/src/equimo/finetune/language/EGM.md +47 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/finetune/masks.py +1 -21
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/finetune/merging.py +4 -1
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/finetune/paths.py +2 -25
- equimo-2.8.0/src/equimo/finetune/peft/EGM.md +246 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/finetune/peft/_common.py +13 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/finetune/peft/_compat.py +22 -3
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/finetune/peft/adapters.py +25 -13
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/finetune/peft/dora.py +1 -1
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/finetune/peft/ia3.py +1 -1
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/finetune/peft/lora.py +51 -20
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/finetune/peft/prefix.py +12 -13
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/finetune/peft/prompts.py +17 -42
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/finetune/peft/scale_shift.py +7 -3
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/finetune/peft/vera.py +5 -3
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/finetune/pooling.py +5 -5
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/finetune/regularization.py +14 -7
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/finetune/serialization.py +29 -10
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/finetune/surgery.py +1 -1
- equimo-2.8.0/src/equimo/finetune/tags.py +182 -0
- equimo-2.8.0/src/equimo/finetune/vision/EGM.md +66 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/finetune/vision/eomt.py +4 -8
- equimo-2.8.0/src/equimo/language/EGM.md +87 -0
- equimo-2.8.0/src/equimo/language/__init__.py +18 -0
- equimo-2.8.0/src/equimo/language/data/bpe_simple_vocab_16e6.txt.gz +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/language/models.py +128 -2
- equimo-2.8.0/src/equimo/language/tokenizers.py +253 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/serialization.py +98 -23
- equimo-2.8.0/src/equimo/tabular/EGM.md +33 -0
- equimo-2.8.0/src/equimo/tabular/layers/EGM.md +100 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/tabular/layers/attention.py +48 -6
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/tabular/layers/decoder.py +4 -3
- equimo-2.8.0/src/equimo/tabular/models/EGM.md +77 -0
- equimo-2.8.0/src/equimo/timeseries/EGM.md +30 -0
- equimo-2.8.0/src/equimo/timeseries/layers/EGM.md +47 -0
- equimo-2.8.0/src/equimo/timeseries/models/EGM.md +64 -0
- equimo-2.8.0/src/equimo/vision/EGM.md +152 -0
- equimo-2.8.0/src/equimo/vision/_encoder_identity.py +46 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/vision/io.py +3 -1
- equimo-2.8.0/src/equimo/vision/layers/EGM.md +229 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/vision/layers/attention.py +30 -22
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/vision/layers/convolution.py +27 -2
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/vision/layers/downsample.py +2 -2
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/vision/layers/posemb.py +274 -113
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/vision/layers/wavelet.py +1 -1
- equimo-2.8.0/src/equimo/vision/models/EGM.md +216 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/vision/models/eomt.py +2 -14
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/vision/models/fastervit.py +4 -1
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/vision/models/lowformer.py +3 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/vision/models/parcae.py +13 -16
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/vision/models/pmd.py +3 -1
- equimo-2.8.0/src/equimo/vision/models/sam3/EGM.md +246 -0
- equimo-2.8.0/src/equimo/vision/models/sam3/__init__.py +36 -0
- equimo-2.8.0/src/equimo/vision/models/sam3/decoding.py +79 -0
- equimo-2.8.0/src/equimo/vision/models/sam3/detector.py +876 -0
- equimo-2.8.0/src/equimo/vision/models/sam3/encoder.py +262 -0
- equimo-2.8.0/src/equimo/vision/models/sam3/interactive.py +681 -0
- equimo-2.8.0/src/equimo/vision/models/sam3/model.py +270 -0
- equimo-2.8.0/src/equimo/vision/models/sam3/tracker.py +1287 -0
- equimo-2.8.0/src/equimo/vision/models/sam3/video.py +1145 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/vision/models/shvit.py +1 -1
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/vision/models/vit.py +6 -6
- equimo-2.8.0/src/equimo/vision/ops.py +214 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/vision/pmt_checkpoint.py +17 -3
- equimo-2.8.0/src/equimo/vision/query_training/EGM.md +108 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/vision/query_training/_loss.py +4 -5
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/vision/segmentation.py +145 -5
- equimo-2.6.0/src/equimo/__init__.py +0 -1
- equimo-2.6.0/src/equimo/core/emamodel.py +0 -31
- equimo-2.6.0/src/equimo/core/layers/attention.py +0 -304
- equimo-2.6.0/src/equimo/core/ops/__init__.py +0 -3
- equimo-2.6.0/src/equimo/language/__init__.py +0 -9
- equimo-2.6.0/src/equimo/language/tokenizers.py +0 -99
- equimo-2.6.0/src/equimo/vision/_encoder_identity.py +0 -27
- {equimo-2.6.0 → equimo-2.8.0}/LICENSE.md +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/LICENSES/Apache-2.0.txt +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/LICENSES/pretrained/ast-BSD-3-Clause.txt +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/LICENSES/pretrained/convnext-Apache-2.0.txt +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/LICENSES/pretrained/convnextv2-CC-BY-NC-4.0.txt +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/LICENSES/pretrained/dinov2-Apache-2.0.txt +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/LICENSES/pretrained/dinov3-License.md +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/LICENSES/pretrained/eupe-FAIR-Noncommercial-Research-License.md +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/LICENSES/pretrained/lingbot-vision-Apache-2.0.txt +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/LICENSES/pretrained/siglip2-Apache-2.0.txt +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/LICENSES/pretrained/t0-alpha-Apache-2.0.txt +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/LICENSES/pretrained/tabpfn-3-License-v1.0.txt +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/LICENSES/pretrained/tips-CC-BY-4.0.txt +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/LICENSES/tfc-t0-APACHE-2.0.txt +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/docs/licensing/t0-source-provenance.md +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/docs/migration-v2.md +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/docs/timeseries.md +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/models/huggingface/convnext-conversion.json +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/_checkpoint_limits.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/_io.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/audio/__init__.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/audio/io.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/audio/layers/__init__.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/audio/layers/patch.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/audio/models/__init__.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/audio/models/ast.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/catalog.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/conversion/__init__.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/core/__init__.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/core/_prng.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/core/factory.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/core/implicit/__init__.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/core/implicit/_base.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/core/implicit/injectors.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/core/implicit/stabilizers.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/core/intermediates.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/core/layers/_registry.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/core/layers/rotary.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/finetune/__init__.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/finetune/_blocks.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/finetune/_serialization_codecs.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/finetune/audio/__init__.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/finetune/audio/recipes.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/finetune/audio/selectors.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/finetune/calibration.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/finetune/inspection.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/finetune/language/__init__.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/finetune/language/recipes.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/finetune/language/selectors.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/finetune/peft/__init__.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/finetune/peft/base.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/finetune/peft/bitfit.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/finetune/recipes.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/finetune/selectors.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/finetune/vision/__init__.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/finetune/vision/dense.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/finetune/vision/pmt.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/registry.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/tabular/__init__.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/tabular/layers/__init__.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/tabular/layers/blocks.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/tabular/layers/mlp.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/tabular/layers/preprocessing.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/tabular/layers/registry.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/tabular/models/__init__.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/tabular/models/tabpfn.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/timeseries/__init__.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/timeseries/layers/__init__.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/timeseries/layers/axis_attn.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/timeseries/layers/blocks.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/timeseries/layers/patch_encoder.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/timeseries/layers/registry.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/timeseries/layers/residual_mlp.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/timeseries/models/__init__.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/timeseries/models/t0.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/utils.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/vision/__init__.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/vision/layers/__init__.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/vision/layers/patch.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/vision/layers/registry.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/vision/layers/squeeze_excite.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/vision/models/__init__.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/vision/models/_embedding.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/vision/models/_features.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/vision/models/attnet.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/vision/models/convnext.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/vision/models/deq.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/vision/models/iformer.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/vision/models/mlla.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/vision/models/mobilenet.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/vision/models/partialformer.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/vision/models/pmt.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/vision/models/reduceformer.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/vision/models/vssd.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/vision/query_training/__init__.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/vision/query_training/_assignment.py +0 -0
- {equimo-2.6.0 → equimo-2.8.0}/src/equimo/vision/query_training/_sampling.py +0 -0
|
@@ -2,6 +2,140 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to Equimo are documented here. Equimo follows Semantic Versioning from version 2.0.0 onward.
|
|
4
4
|
|
|
5
|
+
## [2.8.0] - 2026-11-10
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
|
|
9
|
+
- SAM 3.1 in `equimo.vision.models.sam3` (`Sam3`, `sam31_multiplex`, `decode_concepts`, the prompt and output types and
|
|
10
|
+
an experimental video tracker), `sam31_text` and `ClipBpeTokenizer` in `equimo.language` with a `clip` extra, and
|
|
11
|
+
converted weights under the SAM License. See `docs/sam3.md`.
|
|
12
|
+
- SAM 3.1 prompting helpers: `encode_concept`, `source_size` for prompts given in original pixels, default positive
|
|
13
|
+
interactive labels with validation, and `decode_concepts` keeping every query by default.
|
|
14
|
+
- `Sam3VideoTracker.remove_object`.
|
|
15
|
+
- `equimo.core.parameters` describes how optimizers should treat each leaf, for every training workflow:
|
|
16
|
+
`trainable_mask` (an Equinox filter excluding buffers), `weight_decay_mask` (also usable as an Optax `mask`),
|
|
17
|
+
`DEFAULT_NO_DECAY_TAGS`, `buffer_mask`, `module_tags`, and the field markers `buffer()` and `tagged(...)`. The path
|
|
18
|
+
tagger moved to `equimo.core.tags`; `equimo.finetune` and `equimo.finetune.tags` re-export the same functions.
|
|
19
|
+
|
|
20
|
+
### Changed
|
|
21
|
+
|
|
22
|
+
- RoPE and Swin position embeddings compute the values that follow from their configuration (`VisionRoPE.freqs`,
|
|
23
|
+
`DinoRoPE.periods`, `RoPE.rotations`, and the `PosEmbMLPSwinv1D`/`PosEmbMLPSwinv2D` coordinate and index tables) when
|
|
24
|
+
used instead of storing them as PyTree leaves, so optimizers no longer see them and weight decay can no longer change
|
|
25
|
+
them. They remain readable as attributes but cannot be replaced with `eqx.tree_at`; set them through constructor
|
|
26
|
+
arguments. The structural signatures of models using them change. Checkpoints, fine-tuning bundles, and PMT artifacts
|
|
27
|
+
saved by earlier versions still load; `load_weights` raises `ValueError` when a stored value differs from the computed
|
|
28
|
+
one by more than rounding, for example after weight decay, and `load_delta` raises `FineTuneBundleError` for a bundle
|
|
29
|
+
whose trained delta changed such a value. Earlier versions cannot read checkpoints, bundles, or PMT artifacts that 2.8
|
|
30
|
+
saves for these models. The value hashes that identify a model (fine-tuning bundle base-checkpoint hashes, merge
|
|
31
|
+
checks, PMT encoder digests) cover the static fields of these modules instead, such as RoPE `base` and
|
|
32
|
+
`periods_dtype`, so a base model that differs only in those settings is rejected.
|
|
33
|
+
- Frozen PEFT arrays are declared buffers and excluded from every trainability mode: VeRA `vera_A`/`vera_B`, LoRA-FA
|
|
34
|
+
`frozen_A`/`correction_matrix`, RandLoRA bases, PiSSA `base_weight_delta`, OFT `unmerged_weight`, and a fixed
|
|
35
|
+
AdaptFormer `scale`. `mode="full"` previously trained the VeRA bases, the LoRA-FA correction matrix, and the OFT
|
|
36
|
+
backup weight. `make_param_labels` without `trainable_paths` gives buffers the label `None` instead of a decay label.
|
|
37
|
+
- The default no-weight-decay policy (`LLRDConfig.no_weight_decay_tags`, `DEFAULT_NO_DECAY_TAGS`) also excludes layer
|
|
38
|
+
scales (`block.layer_scale`, including PMD lateral scales) and state-space dynamics (`ssm`: Mamba `A_log`, `D`,
|
|
39
|
+
`dt_bias`; Parcae `A_log`, `dt_bias`, `B`, `C`). Leaves of registered normalization layers are tagged `norm` whatever
|
|
40
|
+
their field name, including norms inside `eqx.nn.Sequential`, and leaves named `*_bias` are tagged `bias`. The path
|
|
41
|
+
tagger also tags the Swin-v2 continuous position-bias MLP (`pos_emb_funct`, used by FasterViT HAT blocks)
|
|
42
|
+
`embedding.position`. These tags change tag-based selection (`TargetSpec` tags, `train_norm`, `train_bias`, and the
|
|
43
|
+
`norm`, `head_plus_norm`, `bias`, and surgical modes), parameter roles, plan labels, and plan fingerprints.
|
|
44
|
+
`CANONICAL_TAGS` gains `ssm`, `buffer`, and `vector`.
|
|
45
|
+
- The path tagger tags arrays with at most one axis `vector`, and the default no-weight-decay policy excludes them, as
|
|
46
|
+
timm, MAE, and OpenCLIP do. With the tags above, built-in backbones need no `vector` tag; PEFT and probe-head vectors
|
|
47
|
+
no longer decay: DoRA magnitudes, AdaLoRA singular values, VeRA and RandLoRA scales, IA3 vectors, FourierFT
|
|
48
|
+
coefficients, scale/shift parameters, adapter residual scales, and the `AttentionPool` and
|
|
49
|
+
`AttentionPoolingClassifierHead` query vectors. Their plan labels change from `*_decay` to `*_no_decay`.
|
|
50
|
+
- Position-embedding tables are evaluated while tracing, so `jax.jit` programs and ONNX exports hold them as constants.
|
|
51
|
+
MLLA attention rotates queries and keys with one RoPE call, so its programs hold one table per block. Exporting `RoPE`
|
|
52
|
+
(MLLA) or the Swin tables to ONNX needs a jax2onnx release that includes enpasos/jax2onnx#291; jax2onnx 0.17.1 and
|
|
53
|
+
0.18.0 fail on them.
|
|
54
|
+
- `VisionParcae.weight_decay_mask()` follows the default policy, so it also leaves biases, norms, layer scales, vectors,
|
|
55
|
+
and position embeddings undecayed.
|
|
56
|
+
- `update_ema_model` averages only trainable leaves; integer arrays and buffers take the current model's values.
|
|
57
|
+
- `l2_sp_loss`, `adapter_norm_loss`, and `task_vector_norm_loss` skip buffers.
|
|
58
|
+
- `VisionTransformer` raises `TypeError` for unknown constructor arguments instead of ignoring them.
|
|
59
|
+
- `DropPath` keeps or drops the whole unbatched input with one draw, matching `DropPathAdd`; it previously dropped rows
|
|
60
|
+
of the leading axis (tokens or channels) independently.
|
|
61
|
+
- `PromptedModel.__call__` raises `ValueError` when the base model has no `head`; use `features()` for headless models.
|
|
62
|
+
- `apply_adalora` raises `ValueError` for a nonzero `dropout`, which AdaLoRA wrappers cannot apply.
|
|
63
|
+
- `load_image` raises `ValueError` when only one of `mean` and `std` is given.
|
|
64
|
+
- Tokenizer files are cached under a directory derived from the full URL, so pinned revisions no longer share a cache
|
|
65
|
+
entry; existing tokenizers are downloaded once more.
|
|
66
|
+
|
|
67
|
+
### Fixed
|
|
68
|
+
|
|
69
|
+
- `FasterViT` runs models with three or more stages. Their window stages previously raised `ValueError` on every forward
|
|
70
|
+
endpoint.
|
|
71
|
+
- `SHViT.__call__` pools before its final norm. It previously raised `ValueError` with the default `norm_layer`.
|
|
72
|
+
- `LowFormer` drops the stem entry of `att_strides`, so each stage uses its own stride and the presets run at 224
|
|
73
|
+
pixels. The last attention stage of every preset changes shape: its checkpoints saved by earlier versions no longer
|
|
74
|
+
load.
|
|
75
|
+
- `FeatureSpec(pooling="attention")` returns the feature dtype instead of float32 for low-precision features.
|
|
76
|
+
- `apply_eva_lora` skips targets it already wrapped instead of raising for missing activation artifacts.
|
|
77
|
+
- `MllaBlock` (used by `Mlla` and `Vssd`) applies its output projection to the gated attention output and keeps the
|
|
78
|
+
first convolutional position encoding in the residual stream, as in MLLA and VSSD. Outputs of these models change.
|
|
79
|
+
- EUPE ViTs use the DINOv3 patch RoPE configuration, including training-time coordinate rescaling, which their config
|
|
80
|
+
previously set under an ignored key. Inference outputs are unchanged.
|
|
81
|
+
- EUPE ViTs compute their RoPE periods in bfloat16, as the EUPE checkpoints store them. Pretrained outputs are
|
|
82
|
+
unchanged; models built with `pretrained=False` previously used float32 periods.
|
|
83
|
+
- LoRA-FA with `custom_vjp=False`, RandLoRA, and AdaptFormer with a fixed scale stop gradients to their frozen arrays.
|
|
84
|
+
- `GroupSpec.tags` holds the tags shared by every leaf of the group instead of the first leaf's tags, so tag-based
|
|
85
|
+
optimizer rules, such as Rollfast's `GroupRule(tag=...)`, no longer depend on which leaf a group happened to start
|
|
86
|
+
with.
|
|
87
|
+
- `apply_lora_rank_pattern` keeps the `metadata` of LoRA wrappers, such as PiSSA's initialization record.
|
|
88
|
+
- Plans with layer-wise learning-rate decay, or other non-uniform multipliers, on PEFT models no longer raise
|
|
89
|
+
"inconsistent learning rate": PEFT labels then also name the block, head, or embedding (`lora_A_block_03_decay`
|
|
90
|
+
instead of `lora_A_decay`). Labels under uniform rates are unchanged.
|
|
91
|
+
- `apply_adalora` honors `scaling="alpha_over_sqrt_r"`.
|
|
92
|
+
- The `dynamictanh` norm (`DyT`) can be used as a block `norm_layer`.
|
|
93
|
+
- Adapters, AdaptFormer, scale/shift, and `AttentionPool` return the activation dtype instead of promoting bfloat16 to
|
|
94
|
+
float32.
|
|
95
|
+
- `save_delta` without `base_model` accepts a `TrainableSpec(mode="peft")` that trains no head, norm, or bias.
|
|
96
|
+
- `SentencePieceTokenizer` checks for the `language` extra before downloading, writes downloads atomically, and times
|
|
97
|
+
out after 60 seconds.
|
|
98
|
+
- PyTorch conversion renames only whole `scale` and `kernel` path components, keeps dictionary keys in parameter names,
|
|
99
|
+
and rejects an unknown `source` even when a `torch_model` is given.
|
|
100
|
+
|
|
101
|
+
## [2.7.0] - 2026-10-26
|
|
102
|
+
|
|
103
|
+
### Added
|
|
104
|
+
|
|
105
|
+
- `equimo.core.ops` exports `softmax`, `log_softmax`, `softmax_cross_entropy_with_integer_labels`, and
|
|
106
|
+
`softmax_cross_entropy_with_logit_targets`, following "A Fix for Softmax and Cross-Entropy". They compute in at least
|
|
107
|
+
float32, return the input dtype, and keep the dominant logit's small gradient at high confidence. The logit-target
|
|
108
|
+
loss, for distillation, also preserves near-equality gradients, stops target gradients, and supports higher-order
|
|
109
|
+
derivatives.
|
|
110
|
+
- Experimental fused attention: `equimo.core.layers.with_attention_implementation(model, "cudnn")` runs core,
|
|
111
|
+
prefix-tuned, and tabular attention through cuDNN's fused kernel for bfloat16 or float16 models on CUDA GPUs, and
|
|
112
|
+
attention modules accept the same choice as an `implementation` argument. On an RTX 4080, it shortened ViT and EoMT
|
|
113
|
+
training steps by 7-22% and reduced their temporary memory by 17-56%. It does not support attention dropout or
|
|
114
|
+
jax2onnx export; the default `"xla"` implementation is unchanged.
|
|
115
|
+
- `semantic_crop_origins` places the fewest evenly spaced crops that cover a scaled image, for sliding-window evaluation
|
|
116
|
+
with `merge_semantic_crops`. With the shorter side scaled to the crop size, it matches the EoMT reference's windows,
|
|
117
|
+
except that its last crop always ends at the image edge: the reference's floating-point spacing stops a pixel short
|
|
118
|
+
for some sizes, such as a 1,347-pixel side with 448-pixel crops.
|
|
119
|
+
|
|
120
|
+
### Changed
|
|
121
|
+
|
|
122
|
+
- Equimo requires JAX and jaxlib 0.11.1 or newer. With it, a compiled step that captures both a frozen encoder and its
|
|
123
|
+
images as constants matches eager execution, which JAX 0.8.1 did not.
|
|
124
|
+
- Attention pooling, attention-pooling heads, adapter fusion, the tabular decoder, and the `"softmax"` activation
|
|
125
|
+
compute softmax in at least float32 with the corrected derivative of `equimo.core.ops.softmax`, returning the model
|
|
126
|
+
dtype. Tabular attention computes its softmax in at least float32. Attention logits are cast before scaling, avoiding
|
|
127
|
+
a second bfloat16 rounding when the square root of the head dimension is not a power of two. Float32 forward results
|
|
128
|
+
and checkpoint structure are unchanged.
|
|
129
|
+
|
|
130
|
+
### Fixed
|
|
131
|
+
|
|
132
|
+
- Query classification uses stable cross-entropy, so confident correct predictions retain nonzero losses and target
|
|
133
|
+
gradients.
|
|
134
|
+
- `selective_scan` returns the input dtype. Its float32 scan state leaked into bfloat16 outputs, unlike `ssd`.
|
|
135
|
+
- `merge_semantic_crops` raises a `ValueError` when the crops leave part of the scaled image uncovered. It returned NaN
|
|
136
|
+
scores there instead, and any final resize spread them to every output pixel, so the argmax labelled the whole image
|
|
137
|
+
class 0.
|
|
138
|
+
|
|
5
139
|
## [2.6.0] - 2026-10-17
|
|
6
140
|
|
|
7
141
|
### Fixed
|
|
@@ -23,6 +23,7 @@ still current.
|
|
|
23
23
|
| dinov3 | `dinov3_` | 8 | DINOv3 License | [snapshot](dinov3-License.md) | [DINOv3](https://github.com/facebookresearch/dinov3) | [upstream license](https://github.com/facebookresearch/dinov3/blob/main/LICENSE.md) | 2026-08-21 |
|
|
24
24
|
| eupe | `eupe_` | 6 | FAIR Noncommercial Research License v1 | [snapshot](eupe-FAIR-Noncommercial-Research-License.md) | [EUPE](https://github.com/facebookresearch/EUPE) | [upstream license](https://github.com/facebookresearch/EUPE/blob/main/LICENSE.md) | 2026-08-21 |
|
|
25
25
|
| lingbot | `lingbot_` | 4 | Apache 2.0 | [snapshot](lingbot-vision-Apache-2.0.txt) | [LingBot-Vision checkpoints](https://huggingface.co/collections/robbyant/lingbot-vision) | [upstream license](https://github.com/robbyant/lingbot-vision/blob/main/LICENSE) | 2026-09-23 |
|
|
26
|
+
| sam31 | `sam31_` | 2 | SAM License | [snapshot](sam-License.md) | [SAM 3.1](https://github.com/facebookresearch/sam3) | [upstream license](https://github.com/facebookresearch/sam3/blob/main/LICENSE) | 2026-11-09 |
|
|
26
27
|
| siglip2 | `siglip2_` | 15 | Apache 2.0 | [snapshot](siglip2-Apache-2.0.txt) | [SigLIP 2 model](https://huggingface.co/google/siglip2-base-patch16-256) | [current license declaration](https://huggingface.co/google/siglip2-base-patch16-256) | 2026-08-21 |
|
|
27
28
|
| t0 | `t0_` | 1 | Apache 2.0 | [snapshot](t0-alpha-Apache-2.0.txt) | [T0-alpha model](https://huggingface.co/theforecastingcompany/t0-alpha) | [upstream license](https://github.com/theforecastingcompany/tfc-t0/blob/main/LICENSE) | 2026-08-21 |
|
|
28
29
|
| tabpfn | `tabpfn_` | 8 | TABPFN-3 License v1.0 | [snapshot](tabpfn-3-License-v1.0.txt) | [TabPFN-3 model](https://huggingface.co/Prior-Labs/tabpfn_3) | [upstream license](https://huggingface.co/Prior-Labs/tabpfn_3/blob/main/LICENSE) | 2026-08-21 |
|
|
@@ -80,6 +81,15 @@ the upstream vision and text checkpoint parameters to its JAX/Equinox parameter
|
|
|
80
81
|
source is the [`google-deepmind/tips` project](https://github.com/google-deepmind/tips), which states that it is not an
|
|
81
82
|
official Google product. No endorsement by the upstream authors is implied.
|
|
82
83
|
|
|
84
|
+
### SAM 3.1
|
|
85
|
+
|
|
86
|
+
The `sam31_multiplex` and `sam31_text` archives are converted from Meta's SAM 3.1 checkpoint (`facebook/sam3.1`,
|
|
87
|
+
`sam3.1_multiplex.pt`) and remain SAM Materials under the [SAM License](sam-License.md). Equimo converted the parameters
|
|
88
|
+
to its JAX/Equinox layout and archive format; they are not an official Meta product and no endorsement by Meta is
|
|
89
|
+
implied. The license requires that a copy of it accompany any distribution, that publications using the materials
|
|
90
|
+
acknowledge them (section 1.b.ii), and that uses comply with trade controls (sections 1.b.iii and 1.b.v). Equimo's SAM
|
|
91
|
+
3.1 code is not SAM Materials in the author's reading; see `docs/licensing/sam3-provenance.md`.
|
|
92
|
+
|
|
83
93
|
### T0-alpha
|
|
84
94
|
|
|
85
95
|
Equimo converted the upstream T0-alpha checkpoint to its JAX/Equinox parameter layout and archive format. The Apache-2.0
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
SAM License\
|
|
2
|
+
Last Updated: November 19, 2025
|
|
3
|
+
|
|
4
|
+
“Agreement” means the terms and conditions for use, reproduction, distribution and modification of the SAM Materials set
|
|
5
|
+
forth herein.
|
|
6
|
+
|
|
7
|
+
“SAM Materials” means, collectively, Documentation and the models, software and algorithms, including machine-learning
|
|
8
|
+
model code, trained model weights, inference-enabling code, training-enabling code, fine-tuning enabling code, and other
|
|
9
|
+
elements of the foregoing distributed by Meta and made available under this Agreement.
|
|
10
|
+
|
|
11
|
+
“Documentation” means the specifications, manuals and documentation accompanying SAM Materials distributed by Meta.
|
|
12
|
+
|
|
13
|
+
“Licensee” or “you” means you, or your employer or any other person or entity (if you are entering into this Agreement
|
|
14
|
+
on such person or entity’s behalf), of the age required under applicable laws, rules or regulations to provide legal
|
|
15
|
+
consent and that has legal authority to bind your employer or such other person or entity if you are entering in this
|
|
16
|
+
Agreement on their behalf.
|
|
17
|
+
|
|
18
|
+
“Meta” or “we” means Meta Platforms Ireland Limited (if you are located in or, if you are an entity, your principal
|
|
19
|
+
place of business is in the EEA or Switzerland) or Meta Platforms, Inc. (if you are located outside of the EEA or
|
|
20
|
+
Switzerland).
|
|
21
|
+
|
|
22
|
+
“Sanctions” means any economic or trade sanctions or restrictions administered or enforced by the United States
|
|
23
|
+
(including the Office of Foreign Assets Control of the U.S. Department of the Treasury (“OFAC”), the U.S. Department of
|
|
24
|
+
State and the U.S. Department of Commerce), the United Nations, the European Union, or the United Kingdom.
|
|
25
|
+
|
|
26
|
+
“Trade Controls” means any of the following: Sanctions and applicable export and import controls.
|
|
27
|
+
|
|
28
|
+
By using or distributing any portion or element of the SAM Materials, you agree to be bound by this Agreement.
|
|
29
|
+
|
|
30
|
+
1\. License Rights and Redistribution.
|
|
31
|
+
|
|
32
|
+
a. Grant of Rights. You are granted a non-exclusive, worldwide, non-transferable and royalty-free limited license under
|
|
33
|
+
Meta’s intellectual property or other rights owned by Meta embodied in the SAM Materials to use, reproduce, distribute,
|
|
34
|
+
copy, create derivative works of, and make modifications to the SAM Materials.
|
|
35
|
+
|
|
36
|
+
b. Redistribution and Use. i. Distribution of SAM Materials, and any derivative works thereof, are subject to the terms
|
|
37
|
+
of this Agreement. If you distribute or make the SAM Materials, or any derivative works thereof, available to a third
|
|
38
|
+
party, you may only do so under the terms of this Agreement and you shall provide a copy of this Agreement with any such
|
|
39
|
+
SAM Materials.
|
|
40
|
+
|
|
41
|
+
ii. If you submit for publication the results of research you perform on, using, or otherwise in connection with SAM
|
|
42
|
+
Materials, you must acknowledge the use of SAM Materials in your publication.
|
|
43
|
+
|
|
44
|
+
iii. Your use of the SAM Materials must comply with applicable laws and regulations, including Trade Control Laws and
|
|
45
|
+
applicable privacy and data protection laws. iv. Your use of the SAM Materials will not involve or encourage others to
|
|
46
|
+
reverse engineer, decompile or discover the underlying components of the SAM Materials. v. You are not the target of
|
|
47
|
+
Trade Controls and your use of SAM Materials must comply with Trade Controls. You agree not to use, or permit others to
|
|
48
|
+
use, SAM Materials for any activities subject to the International Traffic in Arms Regulations (ITAR) or end uses
|
|
49
|
+
prohibited by Trade Controls, including those related to military or warfare purposes, nuclear industries or
|
|
50
|
+
applications, espionage, or the development or use of guns or illegal weapons. 2. User Support. Your use of the SAM
|
|
51
|
+
Materials is done at your own discretion; Meta does not process any information nor provide any service in relation to
|
|
52
|
+
such use. Meta is under no obligation to provide any support services for the SAM Materials. Any support provided is “as
|
|
53
|
+
is”, “with all faults”, and without warranty of any kind.
|
|
54
|
+
|
|
55
|
+
3\. Disclaimer of Warranty. UNLESS REQUIRED BY APPLICABLE LAW, THE SAM MATERIALS AND ANY OUTPUT AND RESULTS THEREFROM ARE
|
|
56
|
+
PROVIDED ON AN “AS IS” BASIS, WITHOUT WARRANTIES OF ANY KIND, AND META DISCLAIMS ALL WARRANTIES OF ANY KIND, BOTH
|
|
57
|
+
EXPRESS AND IMPLIED, INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY, OR
|
|
58
|
+
FITNESS FOR A PARTICULAR PURPOSE. YOU ARE SOLELY RESPONSIBLE FOR DETERMINING THE APPROPRIATENESS OF USING OR
|
|
59
|
+
REDISTRIBUTING THE SAM MATERIALS AND ASSUME ANY RISKS ASSOCIATED WITH YOUR USE OF THE SAM MATERIALS AND ANY OUTPUT AND
|
|
60
|
+
RESULTS.
|
|
61
|
+
|
|
62
|
+
4\. Limitation of Liability. IN NO EVENT WILL META OR ITS AFFILIATES BE LIABLE UNDER ANY THEORY OF LIABILITY, WHETHER IN
|
|
63
|
+
CONTRACT, TORT, NEGLIGENCE, PRODUCTS LIABILITY, OR OTHERWISE, ARISING OUT OF THIS AGREEMENT, FOR ANY LOST PROFITS OR ANY
|
|
64
|
+
DIRECT OR INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL, EXEMPLARY OR PUNITIVE DAMAGES, EVEN IF META OR ITS AFFILIATES
|
|
65
|
+
HAVE BEEN ADVISED OF THE POSSIBILITY OF ANY OF THE FOREGOING.
|
|
66
|
+
|
|
67
|
+
5\. Intellectual Property.
|
|
68
|
+
|
|
69
|
+
a. Subject to Meta’s ownership of SAM Materials and derivatives made by or for Meta, with respect to any derivative
|
|
70
|
+
works and modifications of the SAM Materials that are made by you, as between you and Meta, you are and will be the
|
|
71
|
+
owner of such derivative works and modifications.
|
|
72
|
+
|
|
73
|
+
b. If you institute litigation or other proceedings against Meta or any entity (including a cross-claim or counterclaim
|
|
74
|
+
in a lawsuit) alleging that the SAM Materials, outputs or results, or any portion of any of the foregoing, constitutes
|
|
75
|
+
infringement of intellectual property or other rights owned or licensable by you, then any licenses granted to you under
|
|
76
|
+
this Agreement shall terminate as of the date such litigation or claim is filed or instituted. You will indemnify and
|
|
77
|
+
hold harmless Meta from and against any claim by any third party arising out of or related to your use or distribution
|
|
78
|
+
of the SAM Materials.
|
|
79
|
+
|
|
80
|
+
6\. Term and Termination. The term of this Agreement will commence upon your acceptance of this Agreement or access to
|
|
81
|
+
the SAM Materials and will continue in full force and effect until terminated in accordance with the terms and
|
|
82
|
+
conditions herein. Meta may terminate this Agreement if you are in breach of any term or condition of this Agreement.
|
|
83
|
+
Upon termination of this Agreement, you shall delete and cease use of the SAM Materials. Sections 3, 4 and 7 shall
|
|
84
|
+
survive the termination of this Agreement.
|
|
85
|
+
|
|
86
|
+
7\. Governing Law and Jurisdiction. This Agreement will be governed and construed under the laws of the State of
|
|
87
|
+
California without regard to choice of law principles, and the UN Convention on Contracts for the International Sale of
|
|
88
|
+
Goods does not apply to this Agreement. The courts of California shall have exclusive jurisdiction of any dispute
|
|
89
|
+
arising out of this Agreement.
|
|
90
|
+
|
|
91
|
+
8\. Modifications and Amendments. Meta may modify this Agreement from time to time; provided that they are similar in
|
|
92
|
+
spirit to the current version of the Agreement, but may differ in detail to address new problems or concerns. All such
|
|
93
|
+
changes will be effective immediately. Your continued use of the SAM Materials after any modification to this Agreement
|
|
94
|
+
constitutes your agreement to such modification. Except as provided in this Agreement, no modification or addition to
|
|
95
|
+
any provision of this Agreement will be binding unless it is in writing and signed by an authorized representative of
|
|
96
|
+
both you and Meta.
|
|
@@ -66,3 +66,45 @@ This product includes software derived from Chronos-2 by Amazon.com, Inc. or
|
|
|
66
66
|
its affiliates, Copyright Amazon.com, Inc. All Rights Reserved, licensed under
|
|
67
67
|
the Apache License 2.0.
|
|
68
68
|
Source: https://github.com/amazon-science/chronos-forecasting
|
|
69
|
+
|
|
70
|
+
CLIP tokenizer and vocabulary
|
|
71
|
+
-----------------------------
|
|
72
|
+
|
|
73
|
+
ClipBpeTokenizer in src/equimo/language/tokenizers.py is adapted from
|
|
74
|
+
clip/simple_tokenizer.py in OpenAI's CLIP release, and
|
|
75
|
+
src/equimo/language/data/bpe_simple_vocab_16e6.txt.gz is the vocabulary from
|
|
76
|
+
that release.
|
|
77
|
+
|
|
78
|
+
Source: https://github.com/openai/CLIP
|
|
79
|
+
|
|
80
|
+
MIT License
|
|
81
|
+
|
|
82
|
+
Copyright (c) 2021 OpenAI
|
|
83
|
+
|
|
84
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
85
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
86
|
+
in the Software without restriction, including without limitation the rights
|
|
87
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
88
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
89
|
+
furnished to do so, subject to the following conditions:
|
|
90
|
+
|
|
91
|
+
The above copyright notice and this permission notice shall be included in all
|
|
92
|
+
copies or substantial portions of the Software.
|
|
93
|
+
|
|
94
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
95
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
96
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
97
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
98
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
99
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
100
|
+
SOFTWARE.
|
|
101
|
+
|
|
102
|
+
SAM 3.1 weights
|
|
103
|
+
---------------
|
|
104
|
+
|
|
105
|
+
Equimo's sam31_multiplex and sam31_text archives are converted from Meta's
|
|
106
|
+
SAM 3.1 checkpoint and remain under the SAM License; see
|
|
107
|
+
LICENSES/pretrained/sam-License.md. No SAM Materials are included in this
|
|
108
|
+
distribution: the archives are downloaded separately. Equimo's SAM 3.1 code is
|
|
109
|
+
under Equimo's license; docs/licensing/sam3-provenance.md records how it was
|
|
110
|
+
written.
|
|
@@ -1,3 +1,59 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: Equimo
|
|
3
|
+
Version: 2.8.0
|
|
4
|
+
Summary: Implementation of modern multimodal models in JAX/Equinox
|
|
5
|
+
License-Expression: MIT AND Apache-2.0
|
|
6
|
+
License-File: LICENSE.md
|
|
7
|
+
License-File: LICENSES/Apache-2.0.txt
|
|
8
|
+
License-File: LICENSES/pretrained/README.md
|
|
9
|
+
License-File: LICENSES/pretrained/ast-BSD-3-Clause.txt
|
|
10
|
+
License-File: LICENSES/pretrained/convnext-Apache-2.0.txt
|
|
11
|
+
License-File: LICENSES/pretrained/convnextv2-CC-BY-NC-4.0.txt
|
|
12
|
+
License-File: LICENSES/pretrained/dinov2-Apache-2.0.txt
|
|
13
|
+
License-File: LICENSES/pretrained/dinov3-License.md
|
|
14
|
+
License-File: LICENSES/pretrained/eupe-FAIR-Noncommercial-Research-License.md
|
|
15
|
+
License-File: LICENSES/pretrained/lingbot-vision-Apache-2.0.txt
|
|
16
|
+
License-File: LICENSES/pretrained/sam-License.md
|
|
17
|
+
License-File: LICENSES/pretrained/siglip2-Apache-2.0.txt
|
|
18
|
+
License-File: LICENSES/pretrained/t0-alpha-Apache-2.0.txt
|
|
19
|
+
License-File: LICENSES/pretrained/tabpfn-3-License-v1.0.txt
|
|
20
|
+
License-File: LICENSES/pretrained/tips-CC-BY-4.0.txt
|
|
21
|
+
License-File: LICENSES/tfc-t0-APACHE-2.0.txt
|
|
22
|
+
License-File: NOTICE
|
|
23
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
24
|
+
Classifier: Intended Audience :: Developers
|
|
25
|
+
Classifier: Intended Audience :: Science/Research
|
|
26
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
27
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
28
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
29
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
30
|
+
Requires-Dist: banax>=0.1.2
|
|
31
|
+
Requires-Dist: einops>=0.8.0
|
|
32
|
+
Requires-Dist: equinox>=0.13.3
|
|
33
|
+
Requires-Dist: jax>=0.11.1
|
|
34
|
+
Requires-Dist: jaxlib>=0.11.1
|
|
35
|
+
Requires-Dist: loguru>=0.7.3
|
|
36
|
+
Requires-Dist: lz4>=4.4.3
|
|
37
|
+
Requires-Dist: requests>=2.32.3
|
|
38
|
+
Requires-Dist: torch>=2.11,<2.12 ; extra == 'audio'
|
|
39
|
+
Requires-Dist: torchaudio>=2.11,<2.12 ; extra == 'audio'
|
|
40
|
+
Requires-Dist: ftfy>=6.1,<7 ; extra == 'clip'
|
|
41
|
+
Requires-Dist: regex>=2024.11.6 ; extra == 'clip'
|
|
42
|
+
Requires-Dist: matplotlib>=3.10.1 ; extra == 'extras'
|
|
43
|
+
Requires-Dist: pillow>=11.1.0 ; extra == 'extras'
|
|
44
|
+
Requires-Dist: scikit-learn>=1.6.1 ; extra == 'extras'
|
|
45
|
+
Requires-Dist: tensorflow>=2.18.1 ; extra == 'language'
|
|
46
|
+
Requires-Dist: tensorflow-text>=2.18.1 ; extra == 'language'
|
|
47
|
+
Requires-Dist: torch>=2.6.0 ; extra == 'torch'
|
|
48
|
+
Requires-Dist: timm>=1.0.15 ; extra == 'torch'
|
|
49
|
+
Requires-Python: >=3.12, <3.15
|
|
50
|
+
Provides-Extra: audio
|
|
51
|
+
Provides-Extra: clip
|
|
52
|
+
Provides-Extra: extras
|
|
53
|
+
Provides-Extra: language
|
|
54
|
+
Provides-Extra: torch
|
|
55
|
+
Description-Content-Type: text/markdown
|
|
56
|
+
|
|
1
57
|
# Equimo: Modern Multimodal Models in JAX/Equinox
|
|
2
58
|
|
|
3
59
|
**WARNING**: This is a research library implementing recent model architectures. The implementations are based on paper
|
|
@@ -7,6 +63,12 @@ Equimo provides JAX/Equinox implementations of recent architectures across modal
|
|
|
7
63
|
modality today; language has first-class text encoders/tokenizers, audio includes AST spectrogram models, tabular
|
|
8
64
|
includes TabPFN-3 core models, and the experimental time-series namespace includes the raw T0 backbone.
|
|
9
65
|
|
|
66
|
+

|
|
67
|
+
|
|
68
|
+
*SAM 3.1 video tracking from the text prompt `"person"`, with
|
|
69
|
+
[the code in the guide](docs/sam3.md#tracking-a-film-clip). Excerpt from* Pulp Fiction *(1994, Miramax), which belongs
|
|
70
|
+
to its rights holders and is not covered by Equimo's licenses.*
|
|
71
|
+
|
|
10
72
|
## Features
|
|
11
73
|
|
|
12
74
|
- Pure JAX/Equinox implementations
|
|
@@ -56,7 +118,7 @@ Equimo is organized by modality, with reusable building blocks separated from mo
|
|
|
56
118
|
|
|
57
119
|
| Namespace | Purpose |
|
|
58
120
|
| ---------------------- | --------------------------------------------------------------------------------------- |
|
|
59
|
-
| `equimo.core` | Shared layers, scan ops, implicit/DEQ utilities, EMA helpers
|
|
121
|
+
| `equimo.core` | Shared layers, scan ops, implicit/DEQ utilities, EMA helpers, parameter tags and masks |
|
|
60
122
|
| `equimo.vision` | Vision models, vision layers, and image IO |
|
|
61
123
|
| `equimo.language` | Text encoders and tokenizers |
|
|
62
124
|
| `equimo.audio` | Audio models, layers, and checkpoint-linked AST waveform preprocessing |
|
|
@@ -100,6 +162,7 @@ Beyond a standard ViT (e.g., DINOv2 or SigLIP), Equimo provides other SotA archi
|
|
|
100
162
|
| FreeNet | [FreeNet: Liberating Depth-Wise Separable Operations for Building Faster Mobile Vision Architectures](https://ojs.aaai.org/index.php/AAAI/article/view/33041) | 2025 | ✅‡ |
|
|
101
163
|
| EUPE | [Efficient Universal Perception Encoder](https://arxiv.org/abs/2603.22387) | 2026 | ✅ |
|
|
102
164
|
| LingBot-Vision | [Vision Pretraining for Dense Spatial Perception](https://arxiv.org/abs/2607.05247) | 2026 | ✅§ |
|
|
165
|
+
| SAM 3.1 | [SAM 3: Segment Anything with Concepts](https://arxiv.org/abs/2511.16719) | 2025 | ✅¶ |
|
|
103
166
|
| ViT-5 | [ViT-5: Vision Transformers for The Mid-2020s](https://arxiv.org/abs/2602.08071) | 2026 | ✅ |
|
|
104
167
|
|
|
105
168
|
\*: Only contains the Linear Angular Attention module. It is straightforward to build a ViT around it, but may require
|
|
@@ -116,6 +179,9 @@ network from these blocks.
|
|
|
116
179
|
tokens, and self-attention without a key bias; the Giant variant uses a SwiGLU FFN. Pretrained Small, Base, Large, and
|
|
117
180
|
Giant backbones are available — see [pretrained models](#list-of-pretrained-models).
|
|
118
181
|
|
|
182
|
+
¶: SAM 3.1 finds every instance of a concept in an image, segments objects from clicks, and tracks through video
|
|
183
|
+
(experimental). See the [SAM 3.1 guide](docs/sam3.md). Its weights are under the SAM License.
|
|
184
|
+
|
|
119
185
|
## Implemented Audio Models
|
|
120
186
|
|
|
121
187
|
| Model | Paper | Year | Status |
|
|
@@ -216,6 +282,7 @@ Minimal example:
|
|
|
216
282
|
import jax
|
|
217
283
|
import equimo.finetune as eqft
|
|
218
284
|
import equimo.vision.models as em
|
|
285
|
+
from equimo.core.ops import softmax_cross_entropy_with_integer_labels
|
|
219
286
|
|
|
220
287
|
key = jax.random.PRNGKey(0)
|
|
221
288
|
model = em.vit_tiny_patch16_224(num_classes=10, key=key)
|
|
@@ -236,7 +303,7 @@ frozen = plan.frozen
|
|
|
236
303
|
def loss_fn(trainable, batch):
|
|
237
304
|
model = plan.combine(trainable)
|
|
238
305
|
logits = jax.vmap(lambda x: model(x, key=key, inference=False))(batch["x"])
|
|
239
|
-
return
|
|
306
|
+
return softmax_cross_entropy_with_integer_labels(logits, batch["y"]).mean()
|
|
240
307
|
```
|
|
241
308
|
|
|
242
309
|
Frozen leaves are absent from `plan.trainable`; they are not assigned a zero learning rate. `plan.labels` and
|
|
@@ -746,6 +813,7 @@ The following models have pretrained weights available in Equimo:
|
|
|
746
813
|
- [TabPFN-3](https://arxiv.org/abs/2605.13986)
|
|
747
814
|
- [T0-alpha](https://huggingface.co/theforecastingcompany/t0-alpha)
|
|
748
815
|
- [LingBot-Vision](https://arxiv.org/abs/2607.05247) (Small, Base, Large, and Giant)
|
|
816
|
+
- [SAM 3.1](https://arxiv.org/abs/2511.16719) (the `sam31_multiplex` vision and `sam31_text` text models)
|
|
749
817
|
|
|
750
818
|
Before using any pretrained weights, review the [pretrained-model license index](LICENSES/pretrained/README.md). It
|
|
751
819
|
links the current upstream terms and records when each bundled license snapshot was last checked. Upstream licenses can
|
|
@@ -753,7 +821,7 @@ change, so the copies in this repository may be outdated; always check the lates
|
|
|
753
821
|
terms are welcome as issues or pull requests.
|
|
754
822
|
|
|
755
823
|
Model identifiers map to filenames in Equimo's
|
|
756
|
-
[Hugging Face repository](https://huggingface.co/poiretclement/equimo/tree/
|
|
824
|
+
[Hugging Face repository](https://huggingface.co/poiretclement/equimo/tree/f4b4cf5bc2d47a98fd0df11eddb08fd3bb5dded6/models/default).
|
|
757
825
|
|
|
758
826
|
Published ConvNeXt size factories load the default classifier with `pretrained=True`:
|
|
759
827
|
|
|
@@ -945,14 +1013,69 @@ import jax
|
|
|
945
1013
|
import jax.numpy as jnp
|
|
946
1014
|
import equinox as eqx
|
|
947
1015
|
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
)
|
|
1016
|
+
|
|
1017
|
+
def to_bfloat16(tree):
|
|
1018
|
+
return jax.tree_util.tree_map(
|
|
1019
|
+
lambda leaf: leaf.astype(jnp.bfloat16) if eqx.is_inexact_array(leaf) else leaf,
|
|
1020
|
+
tree,
|
|
1021
|
+
)
|
|
1022
|
+
|
|
1023
|
+
|
|
1024
|
+
model_bf16 = to_bfloat16(model_fp32)
|
|
1025
|
+
```
|
|
1026
|
+
|
|
1027
|
+
For training, keep float32 parameters and cast inside the loss. Gradients then return in float32 and the optimizer
|
|
1028
|
+
updates float32 values; bfloat16 parameters drop updates smaller than about 0.4% of their magnitude.
|
|
1029
|
+
|
|
1030
|
+
```python
|
|
1031
|
+
from equimo.core.ops import softmax_cross_entropy_with_integer_labels
|
|
1032
|
+
|
|
1033
|
+
|
|
1034
|
+
@eqx.filter_value_and_grad
|
|
1035
|
+
def loss_and_grads(model_fp32, images, labels, key):
|
|
1036
|
+
model = to_bfloat16(model_fp32)
|
|
1037
|
+
keys = jax.random.split(key, images.shape[0])
|
|
1038
|
+
logits = jax.vmap(lambda x, k: model(x, key=k, inference=False))(images, keys)
|
|
1039
|
+
return softmax_cross_entropy_with_integer_labels(logits, labels).mean()
|
|
1040
|
+
```
|
|
1041
|
+
|
|
1042
|
+
Give the optimizer only the trainable leaves and Equimo's weight-decay mask. `trainable_mask` leaves out buffers, such
|
|
1043
|
+
as frozen PEFT bases, which weight decay would otherwise change; `weight_decay_mask` leaves biases, norms, layer scales,
|
|
1044
|
+
state-space dynamics, every other array with at most one axis, position embeddings, and learned class, register,
|
|
1045
|
+
distillation, and mask tokens undecayed:
|
|
1046
|
+
|
|
1047
|
+
```python
|
|
1048
|
+
import optax
|
|
1049
|
+
from equimo.core.parameters import trainable_mask, weight_decay_mask
|
|
1050
|
+
|
|
1051
|
+
params, static = eqx.partition(model_fp32, trainable_mask(model_fp32))
|
|
1052
|
+
optimizer = optax.adamw(3e-4, weight_decay=0.05, mask=weight_decay_mask)
|
|
1053
|
+
opt_state = optimizer.init(params)
|
|
1054
|
+
```
|
|
1055
|
+
|
|
1056
|
+
Differentiate with respect to `params` and rebuild the model with `eqx.combine(params, static)`. Fine-tuning plans apply
|
|
1057
|
+
the same policy.
|
|
1058
|
+
|
|
1059
|
+
Numerically sensitive operations cast locally to float32 and return the model dtype: normalization statistics, rotary
|
|
1060
|
+
factors, and every softmax. Attention between tokens applies `jax.nn.softmax` to float32 logits. Other softmaxes
|
|
1061
|
+
(attention pooling, attention-pooling heads, adapter fusion, the tabular decoder, and the `"softmax"` activation) use
|
|
1062
|
+
`equimo.core.ops.softmax`, whose derivative also stays accurate for highly confident distributions. For the same reason,
|
|
1063
|
+
use the [`equimo.core.ops` classification losses](docs/finetuning/classification_losses.md). The
|
|
1064
|
+
[performance notes](docs/performance.md#softmax-precision) give the measurements behind these choices.
|
|
1065
|
+
|
|
1066
|
+
On NVIDIA GPUs with TF32 tensor cores (Ampere and newer), JAX's default precision may run float32 matrix multiplications
|
|
1067
|
+
as TF32. For float32 reference accuracy, run the computation under `jax.default_matmul_precision("highest")`.
|
|
1068
|
+
|
|
1069
|
+
On CUDA GPUs, bfloat16 and float16 models can run attention through cuDNN's fused kernel, which saves memory and time on
|
|
1070
|
+
long sequences. This is experimental, requires inactive attention dropout, and cannot be exported with jax2onnx:
|
|
1071
|
+
|
|
1072
|
+
```python
|
|
1073
|
+
from equimo.core.layers import with_attention_implementation
|
|
1074
|
+
|
|
1075
|
+
model = with_attention_implementation(model_bf16, "cudnn") # "xla" switches back
|
|
952
1076
|
```
|
|
953
1077
|
|
|
954
|
-
|
|
955
|
-
applied internally where needed.
|
|
1078
|
+
See the [fused-attention measurements](docs/performance.md#fused-attention).
|
|
956
1079
|
|
|
957
1080
|
## Contributing
|
|
958
1081
|
|