[Torchvision API] Remove Torchvision's dependency - InterpolationMode#6383
Conversation
* Introduced internal _enums.py * Removed InterpolationMode dependencies from crops, resize and tests Signed-off-by: Marek Dabek <mdabek@nvidia.com>
|
@greptileai review |
|
| Filename | Overview |
|---|---|
| dali/python/nvidia/dali/experimental/torchvision/v2/_enums.py | New file: defines DALI-native InterpolationMode enum (same values as torchvision's) and _normalize_enum_like_interpolation_mode helper to coerce foreign enum instances without importing torchvision. |
| dali/python/nvidia/dali/experimental/torchvision/v2/resize.py | Swaps torchvision import for local _enums; renames validate_interpoliation→validate_interpolation (typo fix); validate_interpolation now normalizes before checking, enabling torchvision enum passthrough. |
| dali/python/nvidia/dali/experimental/torchvision/v2/functional/resize.py | Swaps torchvision import; adds explicit normalize_interpolation call before verify_args so the local variable is an InterpolationMode member for the subsequent interpolation_modes dict lookup. |
| dali/python/nvidia/dali/experimental/torchvision/v2/functional/crop.py | Import-only change: torchvision.InterpolationMode replaced by local _enums.InterpolationMode; resized_crop body unchanged. |
| dali/python/nvidia/dali/experimental/torchvision/v2/randomcrop.py | Import swapped to local enum; validate_interpoliation typo corrected to validate_interpolation in _ValidateRandomResizedCropInterpolation.verify. |
| dali/python/nvidia/dali/experimental/torchvision/init.py | Exports InterpolationMode at the package level via init.py and all, making it the public entry point for users who previously depended on torchvision's enum. |
| dali/test/python/torchvision/test_tv_interpolation_mode.py | New test file: covers enum value parity with torchvision, DALIInterpType mapping, normalization of torchvision-like enums, and error paths; uses private torchvision internal (_check_interpolation) for exact error-message comparison. |
| dali/test/python/torchvision/test_tv_randomresizedcrop.py | Migrates most InterpolationMode references from transforms.InterpolationMode to DALI's InterpolationMode; adds import of DALI's InterpolationMode. |
Flowchart
%%{init: {'theme': 'neutral'}}%%
flowchart TD
A["User passes interpolation\n(int, DALI InterpolationMode,\nor torchvision-like enum)"] --> B{isinstance int?}
B -- Yes --> C["int_to_interpolation_mode lookup\n(PIL codes 0-5)"]
C -- KeyError --> D["ValueError: not a valid PIL code"]
C -- Found --> E["InterpolationMode member"]
B -- No --> F["_normalize_enum_like_interpolation_mode"]
F --> G{Already InterpolationMode?}
G -- Yes --> E
G -- No --> H["Try InterpolationMode[obj.name]"]
H -- KeyError --> I["Try InterpolationMode(obj.value)"]
I -- ValueError --> J["ValueError: unrecognised input"]
H -- Found --> E
I -- Found --> E
E --> K["validate_interpolation\n(check supported modes)"]
K --> L["interpolation_modes dict\n→ DALIInterpType"]
L --> M["fn.resize / ndd.resize"]
Reviews (8): Last reviewed commit: "Imoroved InterpolationMode error handlin..." | Re-trigger Greptile
|
| Filename | Overview |
|---|---|
| dali/python/nvidia/dali/experimental/torchvision/v2/_enums.py | New file introducing DALI-native InterpolationMode enum with a compatibility bridge function; bridge has a silent passthrough for unrecognized types (caught downstream by validation). |
| dali/python/nvidia/dali/experimental/torchvision/v2/resize.py | Switches import from torchvision; adds normalize_interpolation call inside validate_interpoliation and updates normalize_interpolation to call the bridge. Double normalization is redundant but harmless due to idempotency. |
| dali/python/nvidia/dali/experimental/torchvision/v2/functional/resize.py | Adds normalize_interpolation call before verify_args; normalize is also called internally inside validate_interpoliation — double call is safe due to idempotency. |
| dali/python/nvidia/dali/experimental/torchvision/v2/functional/crop.py | Import-only change; resized_crop already had normalize_interpolation call before this PR. |
| dali/python/nvidia/dali/experimental/torchvision/v2/randomcrop.py | Import-only change; no functional behavior differences. |
| dali/python/nvidia/dali/experimental/torchvision/init.py | Exports the new InterpolationMode enum from the package's public API surface. |
| dali/test/python/torchvision/test_tv_randomresizedcrop.py | Updates two assertions to use DALI's InterpolationMode; most test cases still pass torchvision enums as inputs (intentional backward-compatibility check), but no end-to-end test exercises the DALI-native enum as the primary input. |
Sequence Diagram
sequenceDiagram
participant User
participant Resize/RRC as Resize / RandomResizedCrop
participant normalize_interpolation as normalize_interpolation()
participant normalize_bridge as normalize_enum_like_interpolation_mode()
participant validate as validate_interpoliation()
participant DALI as fn.resize / fn.random_resized_crop
User->>Resize/RRC: interpolation (TV enum, DALI enum, or int)
Resize/RRC->>normalize_interpolation: interpolation
alt int input
normalize_interpolation-->>Resize/RRC: InterpolationMode via int_to_interpolation_mode
else non-int input
normalize_interpolation->>normalize_bridge: interpolation
alt already InterpolationMode
normalize_bridge-->>normalize_interpolation: pass-through
else has matching .name
normalize_bridge-->>normalize_interpolation: InterpolationMode[name]
else has matching .value
normalize_bridge-->>normalize_interpolation: InterpolationMode(value)
else unrecognized
normalize_bridge-->>normalize_interpolation: original object (caught downstream)
end
normalize_interpolation-->>Resize/RRC: InterpolationMode enum
end
Resize/RRC->>validate: normalized interpolation
validate->>normalize_interpolation: re-normalizes internally
validate-->>Resize/RRC: raises NotImplementedError or ValueError if unsupported
Resize/RRC->>DALI: interpolation_modes[InterpolationMode] → DALIInterpType
Reviews (1): Last reviewed commit: "Removed Torchvision dependency - Interpo..." | Re-trigger Greptile
Signed-off-by: Marek Dabek <mdabek@nvidia.com>
|
!build |
|
CI MESSAGE: [53516601]: BUILD STARTED |
Signed-off-by: Marek Dabek <mdabek@nvidia.com>
98c7110 to
fcb826d
Compare
|
CI MESSAGE: [53516601]: BUILD PASSED |
Signed-off-by: Marek Dabek <mdabek@nvidia.com>
a87db09 to
fbb7ce1
Compare
Signed-off-by: Marek Dabek <mdabek@nvidia.com>
fbb7ce1 to
d5d5493
Compare
Category:
Refactoring
Description:
Remove currently the only Torchvision's dependency - InterpolationMode to make DALI Torchvision standalone solution:
Additional information:
Affected modules and functionalities:
Key points relevant for the review:
Tests:
Checklist
Documentation
DALI team only
Requirements
REQ IDs: N/A
JIRA TASK: DALI-4713