Skip to content

No conversion path found for semantic attribute #1967

@leoll2

Description

@leoll2

I get an error when I try to convert between two schemas. One sample definition has channels_first=True and the other has channels_first=False.

Minimal reproducible example:

import numpy as np
import polars as pl
from datumaro.experimental import Sample, Dataset
from datumaro.experimental.categories import LabelCategories
from datumaro.experimental.fields import image_field

class Sample1(Sample):
    image: np.ndarray = image_field(dtype=pl.UInt8, channels_first=True)
    
class Sample2(Sample):
    image: np.ndarray = image_field(dtype=pl.UInt8, channels_first=False)

dataset = Dataset(Sample1)
    
s = Sample1(image=np.random.randint(0, 255, size=(3,32,32)))
dataset.append(s)

dataset.convert_to_schema(Sample2)

Error:

Traceback (most recent call last):
  File "<python-input-0>", line 18, in <module>
    dataset.convert_to_schema(Sample2)
    ~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^
  File "/home/leoll2/training_extensions/application/backend/.venv/lib/python3.13/site-packages/datumaro/experimental/dataset.py", line 432, in convert_to_schema
    conversion_paths, inferred_categories = find_conversion_path(self._schema, target_schema)
                                            ~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/leoll2/training_extensions/application/backend/.venv/lib/python3.13/site-packages/datumaro/experimental/converters/registry.py", line 690, in find_conversion_path
    semantic_converters, updated_target_state = _find_conversion_path_for_semantic(
                                                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        start_state, target_state, semantic
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/home/leoll2/training_extensions/application/backend/.venv/lib/python3.13/site-packages/datumaro/experimental/converters/registry.py", line 495, in _find_conversion_path_for_semantic
    raise ConversionError(error_msg)
datumaro.experimental.converters.base.ConversionError: No conversion path found.

    Available source fields: [ImageField(semantic=<Semantic.Default: 1>, dtype=UInt8, channels_first=True, format='RGB')]
    Required target fields: [ImageField(semantic=<Semantic.Default: 1>, dtype=UInt8, channels_first=False, format='RGB')]
Missing converters for type/dtype conversions:
  - 'image': ImageField(semantic=<Semantic.Default: 1>, dtype=UInt8, channels_first=True, format='RGB') → ImageField(semantic=<Semantic.Default: 1>, dtype=UInt8, channels_first=False, format='RGB')

Metadata

Metadata

Labels

No labels
No labels

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions