Skip to content

Fix dropout converters logic

matthieu marchal requested to merge mmarchal/aidge_onnx:mm/fix/dropout into dev

Context

Fix ONNX Dropout operator compatibility issues across different opset versions. The current implementation was missing proper handling for opset version differences where:

  • Opsets < 12: Use ratio as attribute
  • Opsets ≥ 12: Use ratio as optional input tensor

This caused export failures and all Dropout tests to be marked as XFAIL due to argument signature mismatches.

Modified files

  • aidge_onnx/node_export/aidge_converters/dropout.py: Partial rewrite to handle opset version differences for export (Aidge → ONNX)
  • aidge_onnx/node_import/onnx_converters/dropout.py: Enhanced to extract ratio values from input tensors for opset ≥ 12 (ONNX → Aidge)
  • aidge_onnx/unit_tests/test_onnx_nodes_export.py: Removed outdated Dropout XFAIL entry to enable testing

Detailed major modifications

Import converter (dropout.py import):

  • Added opset version detection with < 12 vs ≥ 12 branching logic
  • Added tensor value extraction using np.array(ratio_tensor).item() pattern
  • Error handling with try-catch and fallback to default probability
  • Maintains backward compatibility for attribute-based ratios

Export converter (dropout.py export):

  • Added opset version detection with < 12 vs ≥ 12 branching logic
  • For opset < 12: Single data input + ratio attribute
  • For opset ≥ 12: Creates Constant node for ratio value as input tensor when needed

Remaining Dropout XFAIL entries requiring fixes

Import issues (test_onnx_nodes_import.py):

  • dropout/training_dropout* - "unsupported 'training_mode' attribute"
  • dropout/dropout_default_mask.* - "RuntimeError: Output index out of bound"
  • dropout/dropout_default_ratio/0 - "Attribute 'seed' is not supported for operator DropOut"
  • dropout/dropout_default/0 - "Attribute 'seed' is not supported for operator DropOut"

Forward testing issues:

  • test_onnx_nodes_import_forward.py: dropout.*/dropout_.*/0 - "DropOut cannot be tested without setting the same seed"
  • test_unit_cases_import_forward.py: dropout.* - "DropOut cannot be tested without setting the same seed"

TODO

  • Fix Dropout export converter for opset compatibility
  • Implement input-tensor ratio value extraction for import
  • Remove outdated XFAIL entry to enable Dropout testingns
  • Fix training_mode attribute support
  • Fix seed attribute handling
  • Resolve output index bounds issue for mask output
  • Implement deterministic testing with seed support

References

https://onnx.ai/onnx/operators/onnx__Dropout.html

Key insight: There are still 6 Dropout XFAIL entries that need to be addressed, primarily around training_mode attribute, seed attribute support, and deterministic testing capabilities.

Edited by matthieu marchal

Merge request reports

Loading