Xenova's picture
Xenova HF Staff
sync 6fdf6301e2bb
a695686 verified
Raw History Blame
42.3 kB
{
"fixtureArrays": {
"onnx_backend_roialign_input_x": [0.27639999985694885, 0.7149999737739563, 0.19580000638961792, 0.3416000008583069, 0.46380001306533813, 0.02590000070631504, 0.2962999939918518, 0.6517999768257141, 0.48559999465942383, 0.7250000238418579, 0.963699996471405, 0.08950000256299973, 0.29190000891685486, 0.6753000020980835, 0.023399999365210533, 0.6132000088691711, 0.8084999918937683, 0.5324000120162964, 0.8992000222206116, 0.44670000672340393, 0.3264999985694885, 0.8478999733924866, 0.9697999954223633, 0.24709999561309814, 0.9336000084877014, 0.18780000507831573, 0.4765999913215637, 0.4307999908924103, 0.3400000035762787, 0.21619999408721924, 0.020600000396370888, 0.1720000058412552, 0.21549999713897705, 0.43939998745918274, 0.06530000269412994, 0.34060001373291016, 0.7724000215530396, 0.3921000063419342, 0.2540999948978424, 0.5799000263214111, 0.40619999170303345, 0.21940000355243683, 0.447299987077713, 0.46869999170303345, 0.7109000086784363, 0.932699978351593, 0.9815000295639038, 0.6320000290870667, 0.1728000044822693, 0.6118999719619751, 0.30970001220703125, 0.1282999962568283, 0.4984000027179718, 0.5067999958992004, 0.4278999865055084, 0.01730000041425228, 0.43880000710487366, 0.0430000014603138, 0.46709999442100525, 0.711899995803833, 0.10109999775886536, 0.8476999998092651, 0.4726000130176544, 0.1776999980211258, 0.9922999739646912, 0.4041999876499176, 0.18690000474452972, 0.7795000076293945, 0.9945999979972839, 0.9689000248908997, 0.13660000264644623, 0.3671000003814697, 0.7010999917984009, 0.6233999729156494, 0.9866999983787537, 0.5584999918937683, 0.6984999775886536, 0.5608999729156494, 0.8787999749183655, 0.9927999973297119, 0.5697000026702881, 0.8511000275611877, 0.6711000204086304, 0.9405999779701233, 0.8751000165939331, 0.7495999932289124, 0.16500000655651093, 0.10490000247955322, 0.1559000015258789, 0.2513999938964844, 0.701200008392334, 0.40560001134872437, 0.7878999710083008, 0.34610000252723694, 0.04149999842047691, 0.29980000853538513, 0.5094000101089478, 0.3727000057697296, 0.5482000112533569, 0.050200000405311584],
"avg_single_roi_f32_input_x": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],
"ort_f16_half_pixel_8x8_sampling2_input_x": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63],
"onnx_backend_aligned_false_5x5_input_x": [0.2764, 0.715, 0.1958, 0.3416, 0.4638, 0.0259, 0.2963, 0.6518, 0.4856, 0.725, 0.9637, 0.0895, 0.2919, 0.6753, 0.0234, 0.6132, 0.8085, 0.5324, 0.8992, 0.4467, 0.3265, 0.8479, 0.9698, 0.2471, 0.9336, 0.1878, 0.4766, 0.4308, 0.34, 0.2162, 0.0206, 0.172, 0.2155, 0.4394, 0.0653, 0.3406, 0.7724, 0.3921, 0.2541, 0.5799, 0.4062, 0.2194, 0.4473, 0.4687, 0.7109, 0.9327, 0.9815, 0.632, 0.1728, 0.6119, 0.3097, 0.1283, 0.4984, 0.5068, 0.4279, 0.0173, 0.4388, 0.043, 0.4671, 0.7119, 0.1011, 0.8477, 0.4726, 0.1777, 0.9923, 0.4042, 0.1869, 0.7795, 0.9946, 0.9689, 0.1366, 0.3671, 0.7011, 0.6234, 0.9867, 0.5585, 0.6985, 0.5609, 0.8788, 0.9928, 0.5697, 0.8511, 0.6711, 0.9406, 0.8751, 0.7496, 0.165, 0.1049, 0.1559, 0.2514, 0.7012, 0.4056, 0.7879, 0.3461, 0.0415, 0.2998, 0.5094, 0.3727, 0.5482, 0.0502],
"ort_out_of_bounds_degenerate_rois_half_pixel_input_x": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74],
"ort_out_of_bounds_degenerate_rois_half_pixel_input_rois": [7, 5, 7, 5, -15, -15, -15, -15, -10, 21, -10, 21, 13, 8, 13, 8, -14, 19, -14, 19]
},
"cases": [
{
"name": "onnx_default_adaptive_sampling_omitted",
"provenance": {
"source": "https://onnx.ai/onnx/operators/onnx__RoiAlign.html",
"test": "RoiAlign sampling_ratio default",
"notes": "Omitted sampling_ratio, mode, and spatial_scale exercise their ONNX defaults (0, avg, and 1). The adaptive grid produces 0.625 for this nonlinear feature map; a fixed one-sample grid would produce 2.5."
},
"attrs": { "coordinate_transformation_mode": "half_pixel" },
"inputs": {
"x": {
"dtype": "float32",
"shape": [1, 1, 4, 4],
"data": {
"kind": "values",
"values": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 10.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
}
},
"rois": { "dtype": "float32", "shape": [1, 4], "data": { "kind": "values", "values": [0.0, 0.0, 4.0, 4.0] } },
"batch_indices": { "dtype": "uint32", "shape": [1], "data": { "kind": "values", "values": [0] } }
},
"outputs": {
"y": {
"dtype": "float32",
"shape": [1, 1, 1, 1],
"tolerance": 0.000001,
"data": { "kind": "values", "values": [0.625] }
}
}
},
{
"name": "avg_half_pixel_exact_subnormal_pixel_gpu_gap",
"skipGpu": {
"category": "permanent",
"reason": "Portable WGSL floating-point semantics do not guarantee preservation of the subnormal values required by this fixture. Backend evidence: Metal flushes denormals to zero in the ALU; RoiAlign interpolation/pooling arithmetic flushes the subnormal pixel on GPU. Permanent FTZ limitation."
},
"provenance": {
"notes": "A zero-area half-pixel ROI samples exactly at pixel (0, 0); the positive subnormal payload should survive avg mode."
},
"attrs": {
"spatial_scale": 1,
"sampling_ratio": 1,
"mode": "avg",
"coordinate_transformation_mode": "half_pixel",
"output_height": 1,
"output_width": 1
},
"inputs": {
"x": {
"dtype": "float32",
"shape": [1, 1, 2, 2],
"data": { "kind": "values", "values": [1e-40, 0.0, 0.0, 0.0] }
},
"rois": { "dtype": "float32", "shape": [1, 4], "data": { "kind": "values", "values": [0.5, 0.5, 0.5, 0.5] } },
"batch_indices": { "dtype": "uint32", "shape": [1], "data": { "kind": "values", "values": [0] } }
},
"outputs": { "y": { "dtype": "float32", "shape": [1, 1, 1, 1], "tolerance": 0 } }
},
{
"name": "max_half_pixel_exact_subnormal_pixel_gpu_gap",
"skipGpu": {
"category": "permanent",
"reason": "Portable WGSL floating-point semantics do not guarantee preservation of the subnormal values required by this fixture. Backend evidence: Metal flushes denormals to zero in the ALU; RoiAlign interpolation/pooling arithmetic flushes the subnormal pixel on GPU. Permanent FTZ limitation."
},
"provenance": {
"notes": "Max mode must preserve the exact positive subnormal sample because it is greater than every zero-valued neighbor."
},
"attrs": {
"spatial_scale": 1,
"sampling_ratio": 1,
"mode": "max",
"coordinate_transformation_mode": "half_pixel",
"output_height": 1,
"output_width": 1
},
"inputs": {
"x": {
"dtype": "float32",
"shape": [1, 1, 2, 2],
"data": { "kind": "values", "values": [1e-40, 0.0, 0.0, 0.0] }
},
"rois": { "dtype": "float32", "shape": [1, 4], "data": { "kind": "values", "values": [0.5, 0.5, 0.5, 0.5] } },
"batch_indices": { "dtype": "uint32", "shape": [1], "data": { "kind": "values", "values": [0] } }
},
"outputs": { "y": { "dtype": "float32", "shape": [1, 1, 1, 1], "tolerance": 0 } }
},
{
"name": "max_half_pixel_fractional_sample_matches_ort",
"provenance": {
"source": "onnxruntime/test/providers/cpu/object_detection/roialign_test.cc",
"test": "RoiAlignTest.MaxModePositive",
"notes": "Max mode takes the maximum weighted corner contribution at a fractional sample point; this pins the unintuitive fractional-sample behavior."
},
"attrs": {
"spatial_scale": 1,
"sampling_ratio": 1,
"mode": "max",
"coordinate_transformation_mode": "half_pixel",
"output_height": 1,
"output_width": 1
},
"inputs": {
"x": { "dtype": "float32", "shape": [1, 1, 2, 2], "data": { "kind": "values", "values": [1.0, 2.0, 3.0, 4.0] } },
"rois": { "dtype": "float32", "shape": [1, 4], "data": { "kind": "values", "values": [0.0, 0.0, 2.0, 2.0] } },
"batch_indices": { "dtype": "uint32", "shape": [1], "data": { "kind": "values", "values": [0] } }
},
"outputs": {
"y": {
"dtype": "float32",
"shape": [1, 1, 1, 1],
"tolerance": 0.000001,
"data": { "kind": "values", "values": [1.0] }
}
}
},
{
"name": "dispatch_cliff_nchw_over_16m_elements",
"attrs": { "spatial_scale": 1, "sampling_ratio": 1, "mode": "avg", "output_height": 64, "output_width": 64 },
"inputs": {
"x": { "dtype": "float32", "shape": [1, 256, 16, 16] },
"rois": { "dtype": "float32", "shape": [16, 4], "data": { "kind": "cycle", "values": [0.0, 0.0, 15.0, 15.0] } },
"batch_indices": { "dtype": "uint32", "shape": [16], "data": { "kind": "constant", "value": 0 } }
},
"outputs": { "y": { "dtype": "float32", "shape": [16, 256, 64, 64], "tolerance": 0.001 } }
},
{
"name": "avg_single_roi_f32",
"attrs": { "spatial_scale": 1, "sampling_ratio": 2, "mode": "avg", "output_height": 2, "output_width": 2 },
"inputs": {
"x": {
"dtype": "float32",
"shape": [1, 1, 4, 4],
"data": { "kind": "values", "values": { "$ref": "#/fixtureArrays/avg_single_roi_f32_input_x" } }
},
"rois": { "dtype": "float32", "shape": [1, 4], "data": { "kind": "values", "values": [0.0, 0.0, 3.0, 3.0] } },
"batch_indices": { "dtype": "uint32", "shape": [1], "data": { "kind": "values", "values": [0] } }
},
"outputs": { "y": { "dtype": "float32", "shape": [1, 1, 2, 2], "tolerance": 0.000001 } }
},
{
"name": "max_two_rois_f16",
"attrs": { "spatial_scale": 1, "sampling_ratio": 1, "mode": "max", "output_height": 1, "output_width": 1 },
"inputs": {
"x": {
"dtype": "float16",
"shape": [1, 1, 4, 4],
"data": {
"kind": "values",
"values": [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0]
}
},
"rois": {
"dtype": "float16",
"shape": [2, 4],
"data": { "kind": "values", "values": [0.0, 0.0, 2.0, 2.0, 1.0, 1.0, 2.0, 2.0] }
},
"batch_indices": { "dtype": "uint32", "shape": [2], "data": { "kind": "values", "values": [0, 0] } }
},
"outputs": { "y": { "dtype": "float16", "shape": [2, 1, 1, 1], "tolerance": 0.002 } }
},
{
"name": "ort_f16_half_pixel_8x8_sampling2",
"provenance": {
"source": "onnxruntime/test/providers/cpu/object_detection/roialign_test.cc",
"test": "RoiAlignTest.Float16_HalfPixel_Opset16"
},
"attrs": {
"spatial_scale": 1,
"sampling_ratio": 2,
"mode": "avg",
"coordinate_transformation_mode": "half_pixel",
"output_height": 2,
"output_width": 2
},
"inputs": {
"x": {
"dtype": "float16",
"shape": [1, 1, 8, 8],
"data": { "kind": "values", "values": { "$ref": "#/fixtureArrays/ort_f16_half_pixel_8x8_sampling2_input_x" } }
},
"rois": { "dtype": "float16", "shape": [1, 4], "data": { "kind": "values", "values": [0.0, 0.0, 7.0, 7.0] } },
"batch_indices": { "dtype": "uint32", "shape": [1], "data": { "kind": "values", "values": [0] } }
},
"outputs": { "y": { "dtype": "float16", "shape": [1, 1, 2, 2], "tolerance": 0.01 } }
},
{
"name": "ort_f16_output_half_pixel_2x2_sampling1",
"provenance": {
"source": "onnxruntime/test/providers/cpu/object_detection/roialign_test.cc",
"test": "RoiAlignTest.Float16_Opset22"
},
"attrs": {
"spatial_scale": 1,
"sampling_ratio": 1,
"mode": "avg",
"coordinate_transformation_mode": "output_half_pixel",
"output_height": 1,
"output_width": 1
},
"inputs": {
"x": { "dtype": "float16", "shape": [1, 1, 2, 2], "data": { "kind": "values", "values": [1.0, 2.0, 1.0, 1.0] } },
"rois": { "dtype": "float16", "shape": [1, 4], "data": { "kind": "values", "values": [0.0, 0.0, 1.0, 1.0] } },
"batch_indices": { "dtype": "uint32", "shape": [1], "data": { "kind": "values", "values": [0] } }
},
"outputs": { "y": { "dtype": "float16", "shape": [1, 1, 1, 1], "tolerance": 0.01 } }
},
{
"name": "half_pixel_small_roi_no_min_size_f32",
"attrs": { "spatial_scale": 1, "sampling_ratio": 1, "mode": "avg", "output_height": 1, "output_width": 1 },
"inputs": {
"x": {
"dtype": "float32",
"shape": [1, 1, 4, 4],
"data": { "kind": "values", "values": { "$ref": "#/fixtureArrays/avg_single_roi_f32_input_x" } }
},
"rois": { "dtype": "float32", "shape": [1, 4], "data": { "kind": "values", "values": [1.0, 1.0, 1.5, 1.5] } },
"batch_indices": { "dtype": "uint32", "shape": [1], "data": { "kind": "values", "values": [0] } }
},
"outputs": { "y": { "dtype": "float32", "shape": [1, 1, 1, 1], "tolerance": 0.000001 } }
},
{
"name": "avg_output_half_pixel_mode",
"attrs": {
"spatial_scale": 1,
"sampling_ratio": 2,
"mode": "avg",
"coordinate_transformation_mode": "output_half_pixel",
"output_height": 2,
"output_width": 2
},
"inputs": {
"x": {
"dtype": "float32",
"shape": [1, 1, 4, 4],
"data": { "kind": "values", "values": { "$ref": "#/fixtureArrays/avg_single_roi_f32_input_x" } }
},
"rois": { "dtype": "float32", "shape": [1, 4], "data": { "kind": "values", "values": [0.0, 0.0, 3.0, 3.0] } },
"batch_indices": { "dtype": "uint32", "shape": [1], "data": { "kind": "values", "values": [0] } }
},
"outputs": { "y": { "dtype": "float32", "shape": [1, 1, 2, 2], "tolerance": 0.000001 } }
},
{
"name": "avg_two_batches_two_channels",
"attrs": { "spatial_scale": 1, "sampling_ratio": 1, "mode": "avg", "output_height": 1, "output_width": 1 },
"inputs": {
"x": {
"dtype": "float32",
"shape": [2, 2, 3, 3],
"data": {
"kind": "values",
"values": [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 20.0, 21.0, 22.0, 23.0, 24.0, 25.0, 26.0, 27.0, 28.0, 30.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0]
}
},
"rois": {
"dtype": "float32",
"shape": [2, 4],
"data": { "kind": "values", "values": [0.0, 0.0, 2.0, 2.0, 1.0, 1.0, 2.0, 2.0] }
},
"batch_indices": { "dtype": "uint32", "shape": [2], "data": { "kind": "values", "values": [0, 1] } }
},
"outputs": { "y": { "dtype": "float32", "shape": [2, 2, 1, 1], "tolerance": 0.000001 } }
},
{
"name": "onnx_backend_aligned_false_5x5",
"provenance": {
"source": "cmake/external/onnx/onnx/backend/test/case/node/roialign.py",
"test": "test_roialign_aligned_false"
},
"attrs": {
"spatial_scale": 1,
"sampling_ratio": 2,
"mode": "avg",
"coordinate_transformation_mode": "output_half_pixel",
"output_height": 5,
"output_width": 5
},
"inputs": {
"x": {
"dtype": "float32",
"shape": [1, 1, 10, 10],
"data": { "kind": "values", "values": { "$ref": "#/fixtureArrays/onnx_backend_aligned_false_5x5_input_x" } }
},
"rois": {
"dtype": "float32",
"shape": [3, 4],
"data": { "kind": "values", "values": [0.0, 0.0, 9.0, 9.0, 0.0, 5.0, 4.0, 9.0, 5.0, 5.0, 9.0, 9.0] }
},
"batch_indices": { "dtype": "uint32", "shape": [3], "data": { "kind": "values", "values": [0, 0, 0] } }
},
"outputs": { "y": { "dtype": "float32", "shape": [3, 1, 5, 5], "tolerance": 0.0002 } }
},
{
"name": "onnx_backend_aligned_true_5x5",
"provenance": {
"source": "cmake/external/onnx/onnx/backend/test/case/node/roialign.py",
"test": "test_roialign_aligned_true"
},
"attrs": {
"spatial_scale": 1,
"sampling_ratio": 2,
"mode": "avg",
"coordinate_transformation_mode": "half_pixel",
"output_height": 5,
"output_width": 5
},
"inputs": {
"x": {
"dtype": "float32",
"shape": [1, 1, 10, 10],
"data": { "kind": "values", "values": { "$ref": "#/fixtureArrays/onnx_backend_aligned_false_5x5_input_x" } }
},
"rois": {
"dtype": "float32",
"shape": [3, 4],
"data": { "kind": "values", "values": [0.0, 0.0, 9.0, 9.0, 0.0, 5.0, 4.0, 9.0, 5.0, 5.0, 9.0, 9.0] }
},
"batch_indices": { "dtype": "uint32", "shape": [3], "data": { "kind": "values", "values": [0, 0, 0] } }
},
"outputs": { "y": { "dtype": "float32", "shape": [3, 1, 5, 5], "tolerance": 0.0002 } }
},
{
"name": "ort_out_of_bounds_degenerate_rois_half_pixel",
"provenance": {
"source": "onnxruntime/test/providers/cpu/object_detection/roialign_test.cc",
"test": "RoiAlignTest.AvgModePositive_half_pixel"
},
"attrs": {
"spatial_scale": 0.0625,
"sampling_ratio": 2,
"mode": "avg",
"coordinate_transformation_mode": "half_pixel",
"output_height": 3,
"output_width": 4
},
"inputs": {
"x": {
"dtype": "float32",
"shape": [1, 3, 5, 5],
"data": {
"kind": "values",
"values": { "$ref": "#/fixtureArrays/ort_out_of_bounds_degenerate_rois_half_pixel_input_x" }
}
},
"rois": {
"dtype": "float32",
"shape": [5, 4],
"data": {
"kind": "values",
"values": { "$ref": "#/fixtureArrays/ort_out_of_bounds_degenerate_rois_half_pixel_input_rois" }
}
},
"batch_indices": { "dtype": "uint32", "shape": [5], "data": { "kind": "values", "values": [0, 0, 0, 0, 0] } }
},
"outputs": { "y": { "dtype": "float32", "shape": [5, 3, 3, 4], "tolerance": 0.00001 } }
},
{
"name": "ort_out_of_bounds_degenerate_rois_output_half_pixel",
"provenance": {
"source": "onnxruntime/test/providers/cpu/object_detection/roialign_test.cc",
"test": "RoiAlignTest.AvgModePositive_output_half_pixel"
},
"attrs": {
"spatial_scale": 0.0625,
"sampling_ratio": 2,
"mode": "avg",
"coordinate_transformation_mode": "output_half_pixel",
"output_height": 3,
"output_width": 4
},
"inputs": {
"x": {
"dtype": "float32",
"shape": [1, 3, 5, 5],
"data": {
"kind": "values",
"values": { "$ref": "#/fixtureArrays/ort_out_of_bounds_degenerate_rois_half_pixel_input_x" }
}
},
"rois": {
"dtype": "float32",
"shape": [5, 4],
"data": {
"kind": "values",
"values": { "$ref": "#/fixtureArrays/ort_out_of_bounds_degenerate_rois_half_pixel_input_rois" }
}
},
"batch_indices": { "dtype": "uint32", "shape": [5], "data": { "kind": "values", "values": [0, 0, 0, 0, 0] } }
},
"outputs": { "y": { "dtype": "float32", "shape": [5, 3, 3, 4], "tolerance": 0.00001 } }
},
{
"name": "onnx_backend_roialign_aligned_false",
"provenance": {
"source": "cmake/external/onnx/onnx/backend/test/data/node/test_roialign_aligned_false",
"notes": "Representable ONNX int64 batch_indices values are stored in uint32 slots."
},
"attrs": {
"spatial_scale": 1,
"sampling_ratio": 2,
"mode": "avg",
"coordinate_transformation_mode": "output_half_pixel",
"output_height": 5,
"output_width": 5
},
"inputs": {
"x": {
"dtype": "float32",
"shape": [1, 1, 10, 10],
"data": { "kind": "values", "values": { "$ref": "#/fixtureArrays/onnx_backend_roialign_input_x" } }
},
"rois": {
"dtype": "float32",
"shape": [3, 4],
"data": { "kind": "values", "values": [0.0, 0.0, 9.0, 9.0, 0.0, 5.0, 4.0, 9.0, 5.0, 5.0, 9.0, 9.0] }
},
"batch_indices": { "dtype": "uint32", "shape": [3], "data": { "kind": "values", "values": [0, 0, 0] } }
},
"outputs": { "y": { "dtype": "float32", "shape": [3, 1, 5, 5], "tolerance": 0.0002 } }
},
{
"name": "onnx_backend_roialign_aligned_true",
"provenance": {
"source": "cmake/external/onnx/onnx/backend/test/data/node/test_roialign_aligned_true",
"notes": "Representable ONNX int64 batch_indices values are stored in uint32 slots."
},
"attrs": {
"spatial_scale": 1,
"sampling_ratio": 2,
"mode": "avg",
"coordinate_transformation_mode": "half_pixel",
"output_height": 5,
"output_width": 5
},
"inputs": {
"x": {
"dtype": "float32",
"shape": [1, 1, 10, 10],
"data": { "kind": "values", "values": { "$ref": "#/fixtureArrays/onnx_backend_roialign_input_x" } }
},
"rois": {
"dtype": "float32",
"shape": [3, 4],
"data": { "kind": "values", "values": [0.0, 0.0, 9.0, 9.0, 0.0, 5.0, 4.0, 9.0, 5.0, 5.0, 9.0, 9.0] }
},
"batch_indices": { "dtype": "uint32", "shape": [3], "data": { "kind": "values", "values": [0, 0, 0] } }
},
"outputs": { "y": { "dtype": "float32", "shape": [3, 1, 5, 5], "tolerance": 0.0002 } }
},
{
"name": "onnx_backend_roialign_mode_max",
"provenance": {
"source": "cmake/external/onnx/onnx/backend/test/data/node/test_roialign_mode_max",
"notes": "Representable ONNX int64 batch_indices values are stored in uint32 slots."
},
"attrs": {
"spatial_scale": 1,
"sampling_ratio": 2,
"mode": "max",
"coordinate_transformation_mode": "output_half_pixel",
"output_height": 5,
"output_width": 5
},
"inputs": {
"x": {
"dtype": "float32",
"shape": [1, 1, 10, 10],
"data": { "kind": "values", "values": { "$ref": "#/fixtureArrays/onnx_backend_roialign_input_x" } }
},
"rois": {
"dtype": "float32",
"shape": [3, 4],
"data": { "kind": "values", "values": [0.0, 0.0, 9.0, 9.0, 0.0, 5.0, 4.0, 9.0, 5.0, 5.0, 9.0, 9.0] }
},
"batch_indices": { "dtype": "uint32", "shape": [3], "data": { "kind": "values", "values": [0, 0, 0] } }
},
"outputs": { "y": { "dtype": "float32", "shape": [3, 1, 5, 5], "tolerance": 0.0002 } }
},
{
"name": "ort_f16_adaptive_sampling_half_pixel",
"provenance": {
"source": "onnxruntime/test/providers/cpu/object_detection/roialign_test.cc",
"test": "RoiAlignTest.Float16_AdaptiveSampling_Opset16",
"notes": "Exercises adaptive per-bin sampling with sampling_ratio=0 and half_pixel coordinates in float16."
},
"attrs": {
"spatial_scale": 1,
"sampling_ratio": 0,
"mode": "avg",
"coordinate_transformation_mode": "half_pixel",
"output_height": 2,
"output_width": 2
},
"inputs": {
"x": {
"dtype": "float16",
"shape": [1, 1, 8, 8],
"data": { "kind": "values", "values": { "$ref": "#/fixtureArrays/ort_f16_half_pixel_8x8_sampling2_input_x" } }
},
"rois": { "dtype": "float16", "shape": [1, 4], "data": { "kind": "values", "values": [0.0, 0.0, 7.0, 7.0] } },
"batch_indices": { "dtype": "uint32", "shape": [1], "data": { "kind": "values", "values": [0] } }
},
"outputs": {
"y": {
"dtype": "float16",
"shape": [1, 1, 2, 2],
"tolerance": 0.01,
"data": { "kind": "values", "values": [11.39062, 14.875, 39.26562, 42.75] }
}
}
},
{
"name": "ort_f32_adaptive_sampling_half_pixel",
"provenance": {
"source": "onnxruntime/test/providers/cpu/object_detection/roialign_test.cc",
"test": "RoiAlignTest.Float16_AdaptiveSampling_Opset16",
"notes": "Exercises adaptive per-bin sampling with sampling_ratio=0 and half_pixel coordinates in float32."
},
"attrs": {
"spatial_scale": 1,
"sampling_ratio": 0,
"mode": "avg",
"coordinate_transformation_mode": "half_pixel",
"output_height": 2,
"output_width": 2
},
"inputs": {
"x": {
"dtype": "float32",
"shape": [1, 1, 8, 8],
"data": { "kind": "values", "values": { "$ref": "#/fixtureArrays/ort_f16_half_pixel_8x8_sampling2_input_x" } }
},
"rois": { "dtype": "float32", "shape": [1, 4], "data": { "kind": "values", "values": [0.0, 0.0, 7.0, 7.0] } },
"batch_indices": { "dtype": "uint32", "shape": [1], "data": { "kind": "values", "values": [0] } }
},
"outputs": {
"y": {
"dtype": "float32",
"shape": [1, 1, 2, 2],
"tolerance": 0.00001,
"data": { "kind": "values", "values": [11.390625, 14.875, 39.265625, 42.75] }
}
}
},
{
"name": "adaptive_avg_output_half_pixel",
"provenance": {
"source": "onnxruntime/test/providers/cpu/object_detection/roialign_test.cc",
"test": "RoiAlignTest.Float16_AdaptiveSampling_Opset16",
"notes": "Exercises adaptive average pooling with sampling_ratio=0 and output_half_pixel coordinates."
},
"attrs": {
"spatial_scale": 1,
"sampling_ratio": 0,
"mode": "avg",
"coordinate_transformation_mode": "output_half_pixel",
"output_height": 2,
"output_width": 2
},
"inputs": {
"x": {
"dtype": "float32",
"shape": [1, 1, 4, 4],
"data": { "kind": "values", "values": { "$ref": "#/fixtureArrays/avg_single_roi_f32_input_x" } }
},
"rois": { "dtype": "float32", "shape": [1, 4], "data": { "kind": "values", "values": [0.0, 0.0, 4.0, 4.0] } },
"batch_indices": { "dtype": "uint32", "shape": [1], "data": { "kind": "values", "values": [0] } }
},
"outputs": {
"y": {
"dtype": "float32",
"shape": [1, 1, 2, 2],
"tolerance": 0.00001,
"data": { "kind": "values", "values": [5.0, 6.75, 12.0, 13.75] }
}
}
},
{
"name": "ort_max_out_of_bounds_degenerate_rois_output_half_pixel",
"provenance": {
"source": "onnxruntime/test/providers/cpu/object_detection/roialign_test.cc",
"test": "RoiAlignTest.MaxModePositive",
"notes": "Opset-10 RoiAlign behavior maps to output_half_pixel in current ONNX attributes."
},
"attrs": {
"spatial_scale": 0.0625,
"sampling_ratio": 2,
"mode": "max",
"coordinate_transformation_mode": "output_half_pixel",
"output_height": 3,
"output_width": 4
},
"inputs": {
"x": {
"dtype": "float32",
"shape": [1, 3, 5, 5],
"data": {
"kind": "values",
"values": { "$ref": "#/fixtureArrays/ort_out_of_bounds_degenerate_rois_half_pixel_input_x" }
}
},
"rois": {
"dtype": "float32",
"shape": [5, 4],
"data": {
"kind": "values",
"values": { "$ref": "#/fixtureArrays/ort_out_of_bounds_degenerate_rois_half_pixel_input_rois" }
}
},
"batch_indices": { "dtype": "uint32", "shape": [5], "data": { "kind": "values", "values": [0, 0, 0, 0, 0] } }
},
"outputs": { "y": { "dtype": "float32", "shape": [5, 3, 3, 4], "tolerance": 0.00001 } }
},
{
"name": "empty_input_zero_dim",
"attrs": { "spatial_scale": 1, "sampling_ratio": 2, "mode": "avg", "output_height": 4, "output_width": 4 },
"inputs": {
"x": { "dtype": "float32", "shape": [0, 1, 4, 4], "data": { "kind": "values", "values": [] } },
"rois": { "dtype": "float32", "shape": [0, 4], "data": { "kind": "values", "values": [] } },
"batch_indices": { "dtype": "uint32", "shape": [0], "data": { "kind": "values", "values": [] } }
},
"outputs": { "y": { "dtype": "float32", "shape": [0, 1, 4, 4], "tolerance": 0 } }
},
{
"name": "adaptive_sampling_zero_constant_input_avg_grid_bounds",
"provenance": {
"notes": "sampling_ratio=0 selects an adaptive grid with at least one sample per axis. Constant input makes every bilinear sample equal to that constant regardless of the grid, so the inline expected output is exact."
},
"attrs": {
"spatial_scale": 1,
"sampling_ratio": 0,
"mode": "avg",
"coordinate_transformation_mode": "half_pixel",
"output_height": 4,
"output_width": 4
},
"inputs": {
"x": { "dtype": "float32", "shape": [1, 2, 16, 16], "data": { "kind": "constant", "value": 3.5 } },
"rois": { "dtype": "float32", "shape": [1, 4], "data": { "kind": "values", "values": [1.0, 1.0, 14.0, 14.0] } },
"batch_indices": { "dtype": "uint32", "shape": [1], "data": { "kind": "values", "values": [0] } }
},
"outputs": {
"y": {
"dtype": "float32",
"shape": [1, 2, 4, 4],
"tolerance": 0.00001,
"data": { "kind": "constant", "value": 3.5 }
}
}
},
{
"name": "adaptive_sampling_zero_area_roi_grid_clamp_no_divzero",
"provenance": {
"notes": "For a zero-area ROI with sampling_ratio=0, each zero-sized bin clamps its adaptive grid to one sample, avoiding division by zero. Constant input makes every expected sample exactly 2.0."
},
"attrs": {
"spatial_scale": 1,
"sampling_ratio": 0,
"mode": "avg",
"coordinate_transformation_mode": "half_pixel",
"output_height": 2,
"output_width": 2
},
"inputs": {
"x": { "dtype": "float32", "shape": [1, 1, 8, 8], "data": { "kind": "constant", "value": 2.0 } },
"rois": { "dtype": "float32", "shape": [1, 4], "data": { "kind": "values", "values": [3.0, 3.0, 3.0, 3.0] } },
"batch_indices": { "dtype": "uint32", "shape": [1], "data": { "kind": "values", "values": [0] } }
},
"outputs": {
"y": {
"dtype": "float32",
"shape": [1, 1, 2, 2],
"tolerance": 0.00001,
"data": { "kind": "constant", "value": 2.0 }
}
}
},
{
"name": "dispatch_fold_over_16m_constant_input_exact",
"provenance": {
"notes": "Y=16,842,752 > 16,777,216 engages the gid.y 2D-fold; constant input 1.0 with fully in-bounds ROIs makes every output exactly 1.0, so fold-arithmetic or last-row-guard bugs corrupt the high rows and fail an exact compare."
},
"attrs": {
"spatial_scale": 1,
"sampling_ratio": 1,
"mode": "avg",
"coordinate_transformation_mode": "output_half_pixel",
"output_height": 256,
"output_width": 257
},
"inputs": {
"x": { "dtype": "float32", "shape": [1, 4, 32, 32], "data": { "kind": "constant", "value": 1.0 } },
"rois": { "dtype": "float32", "shape": [64, 4], "data": { "kind": "cycle", "values": [0.0, 0.0, 31.0, 31.0] } },
"batch_indices": { "dtype": "uint32", "shape": [64], "data": { "kind": "constant", "value": 0 } }
},
"outputs": {
"y": {
"dtype": "float32",
"shape": [64, 4, 256, 257],
"tolerance": 0.00001,
"data": { "kind": "constant", "value": 1.0 }
}
}
},
{
"name": "adaptive_cooperative_constant_64x64_1x1_exact",
"provenance": {
"notes": "With sampling_ratio=0 on a 64x64 input, one output bin uses an adaptive sample grid of roughly 63x63 points. A constant input of 2.5 makes the cooperative reduction and final divisor exactly observable at tolerance zero."
},
"attrs": {
"spatial_scale": 1,
"sampling_ratio": 0,
"mode": "avg",
"coordinate_transformation_mode": "half_pixel",
"output_height": 1,
"output_width": 1
},
"inputs": {
"x": { "dtype": "float32", "shape": [1, 1, 64, 64], "data": { "kind": "constant", "value": 2.5 } },
"rois": { "dtype": "float32", "shape": [1, 4], "data": { "kind": "values", "values": [0.0, 0.0, 63.0, 63.0] } },
"batch_indices": { "dtype": "uint32", "shape": [1], "data": { "kind": "values", "values": [0] } }
},
"outputs": {
"y": {
"dtype": "float32",
"shape": [1, 1, 1, 1],
"tolerance": 0,
"data": { "kind": "values", "values": [2.5] }
}
}
},
{
"name": "adaptive_cooperative_varying_128x128_2x2",
"provenance": {
"notes": "A nonconstant input with a 2-by-2 output produces an adaptive grid of about 64-by-64 samples per bin. The input-to-pooled-area ratio of 4,096 exercises dense adaptive sampling."
},
"attrs": {
"spatial_scale": 1,
"sampling_ratio": 0,
"mode": "avg",
"coordinate_transformation_mode": "half_pixel",
"output_height": 2,
"output_width": 2
},
"inputs": {
"x": { "dtype": "float32", "shape": [1, 1, 128, 128], "data": { "kind": "linspace", "start": 0.0, "end": 4.0 } },
"rois": {
"dtype": "float32",
"shape": [1, 4],
"data": { "kind": "values", "values": [0.0, 0.0, 127.0, 127.0] }
},
"batch_indices": { "dtype": "uint32", "shape": [1], "data": { "kind": "values", "values": [0] } }
},
"outputs": { "y": { "dtype": "float32", "shape": [1, 1, 2, 2], "tolerance": 0.0001 } }
},
{
"name": "adaptive_cooperative_max_64x64_1x1",
"provenance": {
"notes": "Max mode over the adaptive grid exercises cooperative tree reduction. Exact associativity and identical per-sample bilinear arithmetic permit zero tolerance."
},
"attrs": {
"spatial_scale": 1,
"sampling_ratio": 0,
"mode": "max",
"coordinate_transformation_mode": "half_pixel",
"output_height": 1,
"output_width": 1
},
"inputs": {
"x": {
"dtype": "float32",
"shape": [1, 1, 64, 64],
"data": { "kind": "linspace", "start": -5.0, "end": 100.0 }
},
"rois": { "dtype": "float32", "shape": [1, 4], "data": { "kind": "values", "values": [0.0, 0.0, 63.0, 63.0] } },
"batch_indices": { "dtype": "uint32", "shape": [1], "data": { "kind": "values", "values": [0] } }
},
"outputs": { "y": { "dtype": "float32", "shape": [1, 1, 1, 1], "tolerance": 0 } }
},
{
"name": "adaptive_shallow_bins_large_feature_map_scalar",
"provenance": {
"notes": "A realistic 7x7 pooled ROI on a 128x128 feature map has a 5x5 adaptive grid per bin and remains on the one-thread-per-output path. Constant input makes every expected output exactly 3.0."
},
"attrs": {
"spatial_scale": 1,
"sampling_ratio": 0,
"mode": "avg",
"coordinate_transformation_mode": "half_pixel",
"output_height": 7,
"output_width": 7
},
"inputs": {
"x": { "dtype": "float32", "shape": [1, 1, 128, 128], "data": { "kind": "constant", "value": 3.0 } },
"rois": {
"dtype": "float32",
"shape": [1, 4],
"data": { "kind": "values", "values": [16.0, 16.0, 48.0, 48.0] }
},
"batch_indices": { "dtype": "uint32", "shape": [1], "data": { "kind": "values", "values": [0] } }
},
"outputs": {
"y": {
"dtype": "float32",
"shape": [1, 1, 7, 7],
"tolerance": 0.00001,
"data": { "kind": "constant", "value": 3.0 }
}
}
},
{
"name": "adaptive_split_varying_257x257_1x1_channel_tail",
"provenance": {
"notes": "A non-divisible 256-by-255 adaptive grid over three output channels creates many empty split partitions and verifies partial normalization and combine indexing."
},
"attrs": {
"spatial_scale": 1,
"sampling_ratio": 0,
"mode": "avg",
"coordinate_transformation_mode": "half_pixel",
"output_height": 1,
"output_width": 1
},
"inputs": {
"x": {
"dtype": "float32",
"shape": [1, 3, 257, 257],
"data": { "kind": "linspace", "start": -2.0, "end": 5.0 }
},
"rois": {
"dtype": "float32",
"shape": [1, 4],
"data": { "kind": "values", "values": [0.25, 1.5, 256.0, 256.0] }
},
"batch_indices": { "dtype": "uint32", "shape": [1], "data": { "kind": "values", "values": [0] } }
},
"outputs": { "y": { "dtype": "float32", "shape": [1, 3, 1, 1], "tolerance": 0.0002 } }
},
{
"name": "adaptive_split_max_256x256_1x1",
"provenance": {
"notes": "A 256x256 adaptive grid exercises the max-mode split combine. The small tolerance covers float32 contraction and rounding in bilinear sample evaluation without hiding an incorrect maximum."
},
"attrs": {
"spatial_scale": 1,
"sampling_ratio": 0,
"mode": "max",
"coordinate_transformation_mode": "half_pixel",
"output_height": 1,
"output_width": 1
},
"inputs": {
"x": {
"dtype": "float32",
"shape": [1, 1, 256, 256],
"data": { "kind": "linspace", "start": -3.0, "end": 9.0 }
},
"rois": {
"dtype": "float32",
"shape": [1, 4],
"data": { "kind": "values", "values": [0.0, 0.0, 255.0, 255.0] }
},
"batch_indices": { "dtype": "uint32", "shape": [1], "data": { "kind": "values", "values": [0] } }
},
"outputs": { "y": { "dtype": "float32", "shape": [1, 1, 1, 1], "tolerance": 0.0005 } }
},
{
"name": "adaptive_cooperative_constant_64x64_1x1_exact_f16",
"provenance": {
"notes": "A float16 cooperative adaptive-sampling case uses constant 2.5 input, so every bilinear sample and the reduced average are exactly 2.5 regardless of reduction order."
},
"attrs": {
"spatial_scale": 1,
"sampling_ratio": 0,
"mode": "avg",
"coordinate_transformation_mode": "half_pixel",
"output_height": 1,
"output_width": 1
},
"inputs": {
"x": { "dtype": "float16", "shape": [1, 1, 64, 64], "data": { "kind": "constant", "value": 2.5 } },
"rois": { "dtype": "float16", "shape": [1, 4], "data": { "kind": "values", "values": [0.0, 0.0, 63.0, 63.0] } },
"batch_indices": { "dtype": "uint32", "shape": [1], "data": { "kind": "values", "values": [0] } }
},
"outputs": {
"y": {
"dtype": "float16",
"shape": [1, 1, 1, 1],
"tolerance": 0,
"data": { "kind": "values", "values": [2.5] }
}
}
},
{
"name": "adaptive_split_constant_256x256_1x1_exact_f16",
"provenance": {
"notes": "A float16 256-by-256 input pooled to 1-by-1 reaches the 65,536 input-to-output area ratio for split adaptive sampling. Constant input makes the average exact, verifying split partials and their combine at zero tolerance."
},
"attrs": {
"spatial_scale": 1,
"sampling_ratio": 0,
"mode": "avg",
"coordinate_transformation_mode": "half_pixel",
"output_height": 1,
"output_width": 1
},
"inputs": {
"x": { "dtype": "float16", "shape": [1, 1, 256, 256], "data": { "kind": "constant", "value": 2.5 } },
"rois": {
"dtype": "float16",
"shape": [1, 4],
"data": { "kind": "values", "values": [0.0, 0.0, 255.0, 255.0] }
},
"batch_indices": { "dtype": "uint32", "shape": [1], "data": { "kind": "values", "values": [0] } }
},
"outputs": {
"y": {
"dtype": "float16",
"shape": [1, 1, 1, 1],
"tolerance": 0,
"data": { "kind": "values", "values": [2.5] }
}
}
},
{
"name": "max_all_negative_infinity_samples",
"provenance": {
"notes": "Every bilinear weight at this single centre sample is strictly positive, so the pooled value is exactly -Infinity with no 0 * Infinity ambiguity. The max reductions used a finite -FLT_MAX identity that a sampled -Infinity could not replace, and reported the sentinel instead."
},
"attrs": {
"mode": "max",
"sampling_ratio": 1,
"coordinate_transformation_mode": "output_half_pixel",
"output_height": 1,
"output_width": 1
},
"inputs": {
"x": {
"dtype": "float32",
"shape": [1, 1, 2, 2],
"data": { "kind": "values", "values": ["-Infinity", "-Infinity", "-Infinity", "-Infinity"] }
},
"rois": { "dtype": "float32", "shape": [1, 4], "data": { "kind": "values", "values": [0.0, 0.0, 1.0, 1.0] } },
"batch_indices": { "dtype": "uint32", "shape": [1], "data": { "kind": "values", "values": [0] } }
},
"outputs": { "y": { "dtype": "float32", "shape": [1, 1, 1, 1], "tolerance": 0 } }
}
]
}