Equimo 2.5.0__tar.gz → 2.5.1__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.5.0 → equimo-2.5.1}/CHANGELOG.md +16 -0
- {equimo-2.5.0 → equimo-2.5.1}/PKG-INFO +1 -1
- {equimo-2.5.0 → equimo-2.5.1}/pyproject.toml +1 -1
- equimo-2.5.1/src/equimo/__init__.py +1 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/vision/models/eomt.py +13 -1
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/vision/query_training/_assignment.py +10 -8
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/vision/query_training/_loss.py +4 -2
- equimo-2.5.0/src/equimo/__init__.py +0 -1
- {equimo-2.5.0 → equimo-2.5.1}/LICENSE.md +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/LICENSES/Apache-2.0.txt +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/LICENSES/pretrained/README.md +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/LICENSES/pretrained/ast-BSD-3-Clause.txt +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/LICENSES/pretrained/convnext-Apache-2.0.txt +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/LICENSES/pretrained/convnextv2-CC-BY-NC-4.0.txt +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/LICENSES/pretrained/dinov2-Apache-2.0.txt +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/LICENSES/pretrained/dinov3-License.md +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/LICENSES/pretrained/eupe-FAIR-Noncommercial-Research-License.md +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/LICENSES/pretrained/lingbot-vision-Apache-2.0.txt +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/LICENSES/pretrained/siglip2-Apache-2.0.txt +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/LICENSES/pretrained/t0-alpha-Apache-2.0.txt +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/LICENSES/pretrained/tabpfn-3-License-v1.0.txt +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/LICENSES/pretrained/tips-CC-BY-4.0.txt +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/LICENSES/tfc-t0-APACHE-2.0.txt +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/NOTICE +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/README.md +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/docs/licensing/t0-source-provenance.md +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/docs/migration-v2.md +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/docs/stability.md +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/docs/timeseries.md +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/models/huggingface/NOTICE +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/models/huggingface/README.md +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/models/huggingface/convnext-conversion.json +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/_checkpoint_limits.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/_io.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/_pretrained.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/audio/__init__.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/audio/io.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/audio/layers/__init__.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/audio/layers/patch.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/audio/models/__init__.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/audio/models/ast.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/catalog.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/conversion/__init__.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/conversion/utils.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/core/__init__.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/core/_prng.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/core/emamodel.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/core/factory.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/core/implicit/__init__.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/core/implicit/_base.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/core/implicit/deq.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/core/implicit/injectors.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/core/implicit/stabilizers.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/core/implicit/strategies.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/core/intermediates.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/core/layers/__init__.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/core/layers/_registry.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/core/layers/activation.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/core/layers/attention.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/core/layers/dropout.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/core/layers/ffn.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/core/layers/generic.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/core/layers/mamba.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/core/layers/norm.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/core/layers/rotary.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/core/ops/__init__.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/core/ops/scan.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/finetune/__init__.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/finetune/_blocks.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/finetune/_serialization_codecs.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/finetune/_typing.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/finetune/audio/__init__.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/finetune/audio/recipes.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/finetune/audio/selectors.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/finetune/calibration.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/finetune/config.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/finetune/continued_ssl.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/finetune/feature_extraction.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/finetune/heads.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/finetune/inspection.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/finetune/labels.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/finetune/language/__init__.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/finetune/language/recipes.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/finetune/language/selectors.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/finetune/masks.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/finetune/merging.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/finetune/paths.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/finetune/peft/__init__.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/finetune/peft/_common.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/finetune/peft/_compat.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/finetune/peft/adapters.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/finetune/peft/base.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/finetune/peft/bitfit.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/finetune/peft/dora.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/finetune/peft/ia3.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/finetune/peft/lora.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/finetune/peft/prefix.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/finetune/peft/prompts.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/finetune/peft/scale_shift.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/finetune/peft/vera.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/finetune/pooling.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/finetune/recipes.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/finetune/regularization.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/finetune/selectors.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/finetune/serialization.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/finetune/surgery.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/finetune/tags.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/finetune/vision/__init__.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/finetune/vision/dense.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/finetune/vision/eomt.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/finetune/vision/pmt.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/language/__init__.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/language/models.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/language/tokenizers.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/registry.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/serialization.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/tabular/__init__.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/tabular/layers/__init__.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/tabular/layers/attention.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/tabular/layers/blocks.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/tabular/layers/decoder.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/tabular/layers/mlp.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/tabular/layers/preprocessing.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/tabular/layers/registry.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/tabular/models/__init__.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/tabular/models/tabpfn.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/timeseries/__init__.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/timeseries/layers/__init__.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/timeseries/layers/axis_attn.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/timeseries/layers/blocks.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/timeseries/layers/patch_encoder.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/timeseries/layers/registry.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/timeseries/layers/residual_mlp.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/timeseries/models/__init__.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/timeseries/models/t0.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/utils.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/vision/__init__.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/vision/_encoder_identity.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/vision/io.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/vision/layers/__init__.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/vision/layers/attention.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/vision/layers/convolution.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/vision/layers/downsample.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/vision/layers/patch.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/vision/layers/posemb.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/vision/layers/registry.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/vision/layers/squeeze_excite.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/vision/layers/wavelet.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/vision/models/__init__.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/vision/models/_embedding.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/vision/models/_features.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/vision/models/attnet.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/vision/models/convnext.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/vision/models/deq.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/vision/models/fastervit.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/vision/models/iformer.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/vision/models/lowformer.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/vision/models/mlla.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/vision/models/mobilenet.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/vision/models/parcae.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/vision/models/partialformer.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/vision/models/pmd.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/vision/models/pmt.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/vision/models/reduceformer.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/vision/models/shvit.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/vision/models/vit.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/vision/models/vssd.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/vision/pmt_checkpoint.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/vision/query_training/__init__.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/vision/query_training/_sampling.py +0 -0
- {equimo-2.5.0 → equimo-2.5.1}/src/equimo/vision/segmentation.py +0 -0
|
@@ -2,6 +2,22 @@
|
|
|
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.5.1] - 2026-10-16
|
|
6
|
+
|
|
7
|
+
### Changed
|
|
8
|
+
|
|
9
|
+
- The EoMT and PMT mask-head `ScaleBlock` computes its 2 × 2, stride-2 transposed convolution as a matmul followed by
|
|
10
|
+
depth-to-space. This avoids an untuned cuDNN fallback for the bfloat16 weight gradient that made GPU training steps
|
|
11
|
+
several times slower at batch sizes of 12 and above. Parameters and checkpoints are unchanged; outputs match the
|
|
12
|
+
previous implementation within floating-point rounding.
|
|
13
|
+
|
|
14
|
+
### Fixed
|
|
15
|
+
|
|
16
|
+
- `match_queries` and the query-segmentation losses no longer rely on dropping out-of-range scatter updates. Under
|
|
17
|
+
`vmap` with `--xla_gpu_deterministic_ops` or `--xla_gpu_exclude_nondeterministic_ops`, jaxlib 0.11.2 and earlier write
|
|
18
|
+
such updates into the next batch row (openxla/xla#49380), which silently produced non-optimal query assignments and
|
|
19
|
+
wrong classification targets.
|
|
20
|
+
|
|
5
21
|
## [2.5.0] - 2026-10-15
|
|
6
22
|
|
|
7
23
|
### Changed
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "2.5.1"
|
|
@@ -76,7 +76,19 @@ class ScaleBlock(eqx.Module):
|
|
|
76
76
|
self.norm = LayerNorm2d(channels, eps=1e-6)
|
|
77
77
|
|
|
78
78
|
def __call__(self, x: jax.Array) -> jax.Array:
|
|
79
|
-
|
|
79
|
+
# The 2x2 stride-2 transposed convolution has no overlapping windows, so
|
|
80
|
+
# it is a per-pixel matmul followed by depth-to-space. Lowering it as a
|
|
81
|
+
# convolution sends its bfloat16 weight gradient to an untuned cuDNN
|
|
82
|
+
# kernel that dominates training steps at larger batch sizes.
|
|
83
|
+
_, height, width = x.shape
|
|
84
|
+
# Equinox correlates the stored kernel with the dilated input.
|
|
85
|
+
weight = self.conv1.weight[:, :, ::-1, ::-1]
|
|
86
|
+
upscaled = jnp.einsum(
|
|
87
|
+
"oiab,ihw->ohawb", weight, x, preferred_element_type=jnp.float32
|
|
88
|
+
)
|
|
89
|
+
upscaled = upscaled.reshape(-1, 2 * height, 2 * width) + self.conv1.bias
|
|
90
|
+
upscaled = upscaled.astype(x.dtype)
|
|
91
|
+
return self.norm(self.conv2(jax.nn.gelu(upscaled, approximate=False)))
|
|
80
92
|
|
|
81
93
|
|
|
82
94
|
class MaskEmbedding(eqx.Module):
|
|
@@ -71,10 +71,11 @@ def match_queries(costs: jax.Array, target_valid: jax.Array) -> QueryAssignment:
|
|
|
71
71
|
candidate = jnp.where(available, distance, jnp.inf)
|
|
72
72
|
next_column = jnp.argmin(candidate).astype(jnp.int32) + 1
|
|
73
73
|
delta = candidate[next_column - 1]
|
|
74
|
-
#
|
|
75
|
-
#
|
|
76
|
-
|
|
77
|
-
|
|
74
|
+
# Unvisited columns add zero instead of being dropped as
|
|
75
|
+
# out-of-range updates: deterministic GPU scatters in jaxlib
|
|
76
|
+
# <= 0.11.2 write those into the next batch row
|
|
77
|
+
# (openxla/xla#49380).
|
|
78
|
+
u = u.at[owner].add(jnp.where(visited, delta, 0))
|
|
78
79
|
v = jnp.where(visited, v - delta, v)
|
|
79
80
|
distance = jnp.where(available, distance - delta, distance)
|
|
80
81
|
return u, v, visited, distance, previous, next_column, steps + 1
|
|
@@ -120,11 +121,12 @@ def match_queries(costs: jax.Array, target_valid: jax.Array) -> QueryAssignment:
|
|
|
120
121
|
finite,
|
|
121
122
|
)
|
|
122
123
|
_, _, owner, feasible = lax.fori_loop(0, targets, insert, initial)
|
|
123
|
-
|
|
124
|
+
# Unmatched queries write to a spare slot rather than out of range, which
|
|
125
|
+
# deterministic GPU scatters mishandle (openxla/xla#49380).
|
|
126
|
+
indices = jnp.full((targets + 1,), -1, dtype=jnp.int32)
|
|
124
127
|
destinations = jnp.where(owner[1:] > 0, owner[1:] - 1, targets)
|
|
125
|
-
indices = indices.at[destinations].set(
|
|
126
|
-
|
|
127
|
-
)
|
|
128
|
+
indices = indices.at[destinations].set(jnp.arange(queries, dtype=jnp.int32))
|
|
129
|
+
indices = indices[:targets]
|
|
128
130
|
return QueryAssignment(
|
|
129
131
|
jnp.where(feasible, indices, -1), active & feasible, feasible
|
|
130
132
|
)
|
|
@@ -410,9 +410,11 @@ def query_prediction_loss(
|
|
|
410
410
|
)
|
|
411
411
|
is_valid &= jnp.all(counts <= 1)
|
|
412
412
|
no_object = classes.shape[1] - 1
|
|
413
|
-
|
|
413
|
+
# Unmatched targets write to a spare slot rather than out of range, which
|
|
414
|
+
# deterministic GPU scatters mishandle (openxla/xla#49380).
|
|
415
|
+
assigned_labels = jnp.full((classes.shape[0] + 1,), no_object, dtype=jnp.int32)
|
|
414
416
|
destinations = jnp.where(matched, indices, classes.shape[0])
|
|
415
|
-
assigned_labels = assigned_labels.at[destinations].set(labels
|
|
417
|
+
assigned_labels = assigned_labels.at[destinations].set(labels)[:-1]
|
|
416
418
|
weights = (
|
|
417
419
|
jnp.where(assigned_labels == no_object, config.no_object_weight, 1.0)
|
|
418
420
|
* targets.supervised
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "2.5.0"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{equimo-2.5.0 → equimo-2.5.1}/LICENSES/pretrained/eupe-FAIR-Noncommercial-Research-License.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|