Download src/runtime/fixed_graph_detection.inc from Arm/Arm-Runtime-for-YOLO26-on-Raspberry-Pi-5: direct link, hf CLI and curl.
- Browser
- Download file 98.9 kB
-
https://huggingface.co/Arm/Arm-Runtime-for-YOLO26-on-Raspberry-Pi-5/resolve/main/src/runtime/fixed_graph_detection.inc
- Command line
-
hf download hf://Arm/Arm-Runtime-for-YOLO26-on-Raspberry-Pi-5/src/runtime/fixed_graph_detection.inc
-
curl -L -o fixed_graph_detection.inc https://huggingface.co/Arm/Arm-Runtime-for-YOLO26-on-Raspberry-Pi-5/resolve/main/src/runtime/fixed_graph_detection.inc
98.9 kB
| // Fixed bottom-up detection-neck and head partitions. P3, P4, and P5 are the | |
| // stride-8, stride-16, and stride-32 detection scales. Reserved values preserve | |
| // XNNPACK's performance-sensitive declaration inventory without entering data | |
| // flow. | |
| // Completes the model.16 P3 block, emits the finest detection feature, and | |
| // downsamples toward the P4 detection path. | |
| bool BuildDetectionP3Path(const GraphContext& context) { | |
| FixedGraphBuilder graph(context, GraphId::kDetectionP3Path, DetectionP3PathBindings::kCount); | |
| if (!graph.Begin()) return false; | |
| const GraphValue main_input = graph.DefineInput( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(8), ResolutionDivided(8), Constant(32)}, | |
| DetectionP3PathBindings::kMainInput); | |
| [[maybe_unused]] const GraphValue reserved_value_1 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(8), ResolutionDivided(8), Constant(32)}); | |
| const GraphValue skip_input = graph.DefineInput( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(8), ResolutionDivided(8), Constant(32)}, | |
| DetectionP3PathBindings::kSkipInput); | |
| [[maybe_unused]] const GraphValue reserved_value_3 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(8), ResolutionDivided(8), Constant(32)}); | |
| const GraphValue neck_p4_input = graph.DefineInput( | |
| ValueType::kFp16, {Constant(1), Constant(128), ResolutionDivided(16), ResolutionDivided(16)}, | |
| DetectionP3PathBindings::kNeckP4Input); | |
| const GraphValue transpose_1_output = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(16), ResolutionDivided(16), Constant(128)}); | |
| const GraphValue model16_m0_cv1_conv_weight = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(16), Constant(1), Constant(1), Constant(32)}, | |
| WeightSlot::kModel16M0Cv1ConvWeight); | |
| [[maybe_unused]] const GraphValue reserved_value_7 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(8), ResolutionDivided(8), Constant(16)}); | |
| const GraphValue model16_m0_cv1_conv_bias = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(16)}, WeightSlot::kModel16M0Cv1ConvBias); | |
| const GraphValue model16_m0_cv2_conv_weight = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(16), Constant(1), Constant(1), Constant(32)}, | |
| WeightSlot::kModel16M0Cv2ConvWeight); | |
| [[maybe_unused]] const GraphValue reserved_value_10 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(8), ResolutionDivided(8), Constant(16)}); | |
| const GraphValue model16_m0_cv2_conv_bias = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(16)}, WeightSlot::kModel16M0Cv2ConvBias); | |
| [[maybe_unused]] const GraphValue reserved_value_12 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(8), ResolutionDivided(8), Constant(16)}); | |
| [[maybe_unused]] const GraphValue reserved_value_13 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(8), ResolutionDivided(8), Constant(16)}); | |
| const GraphValue model16_m0_cv1_conv_output = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(8), ResolutionDivided(8), Constant(16)}); | |
| const GraphValue model16_m0_cv2_conv_output = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(8), ResolutionDivided(8), Constant(16)}); | |
| const GraphValue model16_m0_m0_cv1_conv_weight = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(16), Constant(3), Constant(3), Constant(16)}, | |
| WeightSlot::kModel16M0M0Cv1ConvWeight); | |
| const GraphValue model16_m0_m0_cv1_conv_output = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(8), ResolutionDivided(8), Constant(16)}); | |
| const GraphValue model16_m0_m0_cv1_conv_bias = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(16)}, WeightSlot::kModel16M0M0Cv1ConvBias); | |
| [[maybe_unused]] const GraphValue reserved_value_19 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(8), ResolutionDivided(8), Constant(16)}); | |
| const GraphValue model16_m0_m0_cv1_conv_activation = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(8), ResolutionDivided(8), Constant(16)}); | |
| const GraphValue model16_m0_m0_cv2_conv_weight = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(16), Constant(3), Constant(3), Constant(16)}, | |
| WeightSlot::kModel16M0M0Cv2ConvWeight); | |
| const GraphValue model16_m0_m0_cv2_conv_output = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(8), ResolutionDivided(8), Constant(16)}); | |
| const GraphValue model16_m0_m0_cv2_conv_bias = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(16)}, WeightSlot::kModel16M0M0Cv2ConvBias); | |
| [[maybe_unused]] const GraphValue reserved_value_24 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(8), ResolutionDivided(8), Constant(16)}); | |
| const GraphValue model16_m0_m0_cv2_conv_activation = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(8), ResolutionDivided(8), Constant(16)}); | |
| const GraphValue residual_sum_1 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(8), ResolutionDivided(8), Constant(16)}); | |
| const GraphValue model16_m0_m1_cv1_conv_weight = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(16), Constant(3), Constant(3), Constant(16)}, | |
| WeightSlot::kModel16M0M1Cv1ConvWeight); | |
| const GraphValue model16_m0_m1_cv1_conv_output = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(8), ResolutionDivided(8), Constant(16)}); | |
| const GraphValue model16_m0_m1_cv1_conv_bias = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(16)}, WeightSlot::kModel16M0M1Cv1ConvBias); | |
| [[maybe_unused]] const GraphValue reserved_value_30 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(8), ResolutionDivided(8), Constant(16)}); | |
| const GraphValue model16_m0_m1_cv1_conv_activation = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(8), ResolutionDivided(8), Constant(16)}); | |
| const GraphValue model16_m0_m1_cv2_conv_weight = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(16), Constant(3), Constant(3), Constant(16)}, | |
| WeightSlot::kModel16M0M1Cv2ConvWeight); | |
| const GraphValue model16_m0_m1_cv2_conv_output = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(8), ResolutionDivided(8), Constant(16)}); | |
| const GraphValue model16_m0_m1_cv2_conv_bias = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(16)}, WeightSlot::kModel16M0M1Cv2ConvBias); | |
| [[maybe_unused]] const GraphValue reserved_value_35 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(8), ResolutionDivided(8), Constant(16)}); | |
| const GraphValue model16_m0_m1_cv2_conv_activation = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(8), ResolutionDivided(8), Constant(16)}); | |
| const GraphValue residual_sum_2 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(8), ResolutionDivided(8), Constant(16)}); | |
| const GraphValue concatenation_1 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(8), ResolutionDivided(8), Constant(32)}); | |
| const GraphValue model16_m0_cv3_conv_weight = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(32), Constant(1), Constant(1), Constant(32)}, | |
| WeightSlot::kModel16M0Cv3ConvWeight); | |
| [[maybe_unused]] const GraphValue reserved_value_40 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(8), ResolutionDivided(8), Constant(32)}); | |
| const GraphValue model16_m0_cv3_conv_bias = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(32)}, WeightSlot::kModel16M0Cv3ConvBias); | |
| [[maybe_unused]] const GraphValue reserved_value_42 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(8), ResolutionDivided(8), Constant(32)}); | |
| const GraphValue model16_m0_cv3_conv_output = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(8), ResolutionDivided(8), Constant(32)}); | |
| const GraphValue concatenation_2 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(8), ResolutionDivided(8), Constant(96)}); | |
| const GraphValue model16_cv2_conv_weight = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(64), Constant(1), Constant(1), Constant(96)}, | |
| WeightSlot::kModel16Cv2ConvWeight); | |
| [[maybe_unused]] const GraphValue reserved_value_46 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(8), ResolutionDivided(8), Constant(64)}); | |
| const GraphValue model16_cv2_conv_bias = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(64)}, WeightSlot::kModel16Cv2ConvBias); | |
| [[maybe_unused]] const GraphValue reserved_value_48 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(8), ResolutionDivided(8), Constant(64)}); | |
| const GraphValue detection_p3_output = graph.DefineOutput( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(8), ResolutionDivided(8), Constant(64)}, | |
| DetectionP3PathBindings::kDetectionP3Output); | |
| [[maybe_unused]] const GraphValue reserved_value_50 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), Constant(64), ResolutionDivided(8), ResolutionDivided(8)}); | |
| const GraphValue model17_conv_weight = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(64), Constant(3), Constant(3), Constant(64)}, | |
| WeightSlot::kModel17ConvWeight); | |
| const GraphValue model17_conv_output = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(16), ResolutionDivided(16), Constant(64)}); | |
| const GraphValue model17_conv_bias = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(64)}, WeightSlot::kModel17ConvBias); | |
| [[maybe_unused]] const GraphValue reserved_value_54 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(16), ResolutionDivided(16), Constant(64)}); | |
| const GraphValue model17_conv_activation = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(16), ResolutionDivided(16), Constant(64)}); | |
| const GraphValue concatenation_3 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(16), ResolutionDivided(16), Constant(192)}); | |
| const GraphValue model19_cv1_conv_weight = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(128), Constant(1), Constant(1), Constant(192)}, | |
| WeightSlot::kModel19Cv1ConvWeight); | |
| [[maybe_unused]] const GraphValue reserved_value_58 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(16), ResolutionDivided(16), Constant(128)}); | |
| const GraphValue model19_cv1_conv_bias = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(128)}, WeightSlot::kModel19Cv1ConvBias); | |
| [[maybe_unused]] const GraphValue reserved_value_60 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(16), ResolutionDivided(16), Constant(128)}); | |
| const GraphValue model19_cv1_conv_output = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(16), ResolutionDivided(16), Constant(128)}); | |
| const GraphValue p4_projection_output = graph.DefineOutput( | |
| ValueType::kFp16, {Constant(1), Constant(128), ResolutionDivided(16), ResolutionDivided(16)}, | |
| DetectionP3PathBindings::kP4ProjectionOutput); | |
| if (!graph.DefinitionsValid()) return false; | |
| if (!graph.Transpose(neck_p4_input, transpose_1_output, | |
| {Constant(0), Constant(2), Constant(3), Constant(1)}, 0)) | |
| return false; | |
| if (!graph.Convolution( | |
| main_input, model16_m0_cv1_conv_weight, model16_m0_cv1_conv_bias, | |
| model16_m0_cv1_conv_output, Padding{Constant(0), Constant(0), Constant(0), Constant(0)}, | |
| Kernel{Constant(1), Constant(1)}, Stride{Constant(1), Constant(1)}, | |
| Dilation{Constant(1), Constant(1)}, Groups{Constant(1), Constant(32), Constant(16)}, | |
| XNN_FLAG_YOLO26_GEMM_SILU_FINAL_STORE)) | |
| return false; | |
| if (!graph.Convolution( | |
| main_input, model16_m0_cv2_conv_weight, model16_m0_cv2_conv_bias, | |
| model16_m0_cv2_conv_output, Padding{Constant(0), Constant(0), Constant(0), Constant(0)}, | |
| Kernel{Constant(1), Constant(1)}, Stride{Constant(1), Constant(1)}, | |
| Dilation{Constant(1), Constant(1)}, Groups{Constant(1), Constant(32), Constant(16)}, | |
| XNN_FLAG_YOLO26_GEMM_SILU_FINAL_STORE)) | |
| return false; | |
| if (!graph.Convolution(model16_m0_cv1_conv_output, model16_m0_m0_cv1_conv_weight, | |
| model16_m0_m0_cv1_conv_bias, model16_m0_m0_cv1_conv_output, | |
| Padding{Constant(1), Constant(1), Constant(1), Constant(1)}, | |
| Kernel{Constant(3), Constant(3)}, Stride{Constant(1), Constant(1)}, | |
| Dilation{Constant(1), Constant(1)}, | |
| Groups{Constant(1), Constant(16), Constant(16)}, 0)) | |
| return false; | |
| if (!graph.Silu(model16_m0_m0_cv1_conv_output, model16_m0_m0_cv1_conv_activation, 0)) | |
| return false; | |
| if (!graph.Convolution(model16_m0_m0_cv1_conv_activation, model16_m0_m0_cv2_conv_weight, | |
| model16_m0_m0_cv2_conv_bias, model16_m0_m0_cv2_conv_output, | |
| Padding{Constant(1), Constant(1), Constant(1), Constant(1)}, | |
| Kernel{Constant(3), Constant(3)}, Stride{Constant(1), Constant(1)}, | |
| Dilation{Constant(1), Constant(1)}, | |
| Groups{Constant(1), Constant(16), Constant(16)}, 0)) | |
| return false; | |
| if (!graph.Silu(model16_m0_m0_cv2_conv_output, model16_m0_m0_cv2_conv_activation, 0)) | |
| return false; | |
| if (!graph.Add(model16_m0_cv1_conv_output, model16_m0_m0_cv2_conv_activation, residual_sum_1, 0)) | |
| return false; | |
| if (!graph.Convolution(residual_sum_1, model16_m0_m1_cv1_conv_weight, model16_m0_m1_cv1_conv_bias, | |
| model16_m0_m1_cv1_conv_output, | |
| Padding{Constant(1), Constant(1), Constant(1), Constant(1)}, | |
| Kernel{Constant(3), Constant(3)}, Stride{Constant(1), Constant(1)}, | |
| Dilation{Constant(1), Constant(1)}, | |
| Groups{Constant(1), Constant(16), Constant(16)}, 0)) | |
| return false; | |
| if (!graph.Silu(model16_m0_m1_cv1_conv_output, model16_m0_m1_cv1_conv_activation, 0)) | |
| return false; | |
| if (!graph.Convolution(model16_m0_m1_cv1_conv_activation, model16_m0_m1_cv2_conv_weight, | |
| model16_m0_m1_cv2_conv_bias, model16_m0_m1_cv2_conv_output, | |
| Padding{Constant(1), Constant(1), Constant(1), Constant(1)}, | |
| Kernel{Constant(3), Constant(3)}, Stride{Constant(1), Constant(1)}, | |
| Dilation{Constant(1), Constant(1)}, | |
| Groups{Constant(1), Constant(16), Constant(16)}, 0)) | |
| return false; | |
| if (!graph.Silu(model16_m0_m1_cv2_conv_output, model16_m0_m1_cv2_conv_activation, 0)) | |
| return false; | |
| if (!graph.Add(residual_sum_1, model16_m0_m1_cv2_conv_activation, residual_sum_2, 0)) | |
| return false; | |
| if (!graph.Concatenate({residual_sum_2, model16_m0_cv2_conv_output}, concatenation_1, Constant(3), | |
| 0)) | |
| return false; | |
| if (!graph.Convolution( | |
| concatenation_1, model16_m0_cv3_conv_weight, model16_m0_cv3_conv_bias, | |
| model16_m0_cv3_conv_output, Padding{Constant(0), Constant(0), Constant(0), Constant(0)}, | |
| Kernel{Constant(1), Constant(1)}, Stride{Constant(1), Constant(1)}, | |
| Dilation{Constant(1), Constant(1)}, Groups{Constant(1), Constant(32), Constant(32)}, | |
| XNN_FLAG_YOLO26_GEMM_SILU_FINAL_STORE)) | |
| return false; | |
| if (!graph.Concatenate({skip_input, main_input, model16_m0_cv3_conv_output}, concatenation_2, | |
| Constant(3), 0)) | |
| return false; | |
| if (!graph.Convolution( | |
| concatenation_2, model16_cv2_conv_weight, model16_cv2_conv_bias, detection_p3_output, | |
| Padding{Constant(0), Constant(0), Constant(0), Constant(0)}, | |
| Kernel{Constant(1), Constant(1)}, Stride{Constant(1), Constant(1)}, | |
| Dilation{Constant(1), Constant(1)}, Groups{Constant(1), Constant(96), Constant(64)}, | |
| XNN_FLAG_YOLO26_GEMM_SILU_FINAL_STORE)) | |
| return false; | |
| if (!graph.Convolution( | |
| detection_p3_output, model17_conv_weight, model17_conv_bias, model17_conv_output, | |
| Padding{Constant(1), Constant(1), Constant(1), Constant(1)}, | |
| Kernel{Constant(3), Constant(3)}, Stride{Constant(2), Constant(2)}, | |
| Dilation{Constant(1), Constant(1)}, Groups{Constant(1), Constant(64), Constant(64)}, 0)) | |
| return false; | |
| if (!graph.Silu(model17_conv_output, model17_conv_activation, 0)) return false; | |
| if (!graph.Concatenate({model17_conv_activation, transpose_1_output}, concatenation_3, | |
| Constant(3), 0)) | |
| return false; | |
| if (!graph.Convolution( | |
| concatenation_3, model19_cv1_conv_weight, model19_cv1_conv_bias, model19_cv1_conv_output, | |
| Padding{Constant(0), Constant(0), Constant(0), Constant(0)}, | |
| Kernel{Constant(1), Constant(1)}, Stride{Constant(1), Constant(1)}, | |
| Dilation{Constant(1), Constant(1)}, Groups{Constant(1), Constant(192), Constant(128)}, | |
| XNN_FLAG_YOLO26_GEMM_SILU_FINAL_STORE)) | |
| return false; | |
| if (!graph.Transpose(model19_cv1_conv_output, p4_projection_output, | |
| {Constant(0), Constant(3), Constant(1), Constant(2)}, 0)) | |
| return false; | |
| return graph.Finish(); | |
| } | |
| // Completes the model.19 P4 block, emits the middle detection feature, and | |
| // downsamples toward the P5 attention head. | |
| bool BuildDetectionP4Path(const GraphContext& context) { | |
| FixedGraphBuilder graph(context, GraphId::kDetectionP4Path, DetectionP4PathBindings::kCount); | |
| if (!graph.Begin()) return false; | |
| const GraphValue main_input = graph.DefineInput( | |
| ValueType::kFp16, {Constant(1), Constant(64), ResolutionDivided(16), ResolutionDivided(16)}, | |
| DetectionP4PathBindings::kMainInput); | |
| const GraphValue transpose_1_output = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(16), ResolutionDivided(16), Constant(64)}); | |
| const GraphValue skip_input = graph.DefineInput( | |
| ValueType::kFp16, {Constant(1), Constant(64), ResolutionDivided(16), ResolutionDivided(16)}, | |
| DetectionP4PathBindings::kSkipInput); | |
| const GraphValue transpose_2_output = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(16), ResolutionDivided(16), Constant(64)}); | |
| const GraphValue backbone_p5_input = graph.DefineInput( | |
| ValueType::kFp16, {Constant(1), Constant(256), ResolutionDivided(32), ResolutionDivided(32)}, | |
| DetectionP4PathBindings::kBackboneP5Input); | |
| const GraphValue transpose_3_output = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(32), ResolutionDivided(32), Constant(256)}); | |
| const GraphValue model19_m0_cv1_conv_weight = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(32), Constant(1), Constant(1), Constant(64)}, | |
| WeightSlot::kModel19M0Cv1ConvWeight); | |
| [[maybe_unused]] const GraphValue reserved_value_7 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(16), ResolutionDivided(16), Constant(32)}); | |
| const GraphValue model19_m0_cv1_conv_bias = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(32)}, WeightSlot::kModel19M0Cv1ConvBias); | |
| const GraphValue model19_m0_cv2_conv_weight = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(32), Constant(1), Constant(1), Constant(64)}, | |
| WeightSlot::kModel19M0Cv2ConvWeight); | |
| [[maybe_unused]] const GraphValue reserved_value_10 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(16), ResolutionDivided(16), Constant(32)}); | |
| const GraphValue model19_m0_cv2_conv_bias = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(32)}, WeightSlot::kModel19M0Cv2ConvBias); | |
| [[maybe_unused]] const GraphValue reserved_value_12 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(16), ResolutionDivided(16), Constant(32)}); | |
| [[maybe_unused]] const GraphValue reserved_value_13 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(16), ResolutionDivided(16), Constant(32)}); | |
| const GraphValue model19_m0_cv1_conv_output = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(16), ResolutionDivided(16), Constant(32)}); | |
| const GraphValue model19_m0_cv2_conv_output = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(16), ResolutionDivided(16), Constant(32)}); | |
| const GraphValue model19_m0_m0_cv1_conv_weight = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(32), Constant(3), Constant(3), Constant(32)}, | |
| WeightSlot::kModel19M0M0Cv1ConvWeight); | |
| const GraphValue model19_m0_m0_cv1_conv_output = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(16), ResolutionDivided(16), Constant(32)}); | |
| const GraphValue model19_m0_m0_cv1_conv_bias = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(32)}, WeightSlot::kModel19M0M0Cv1ConvBias); | |
| [[maybe_unused]] const GraphValue reserved_value_19 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(16), ResolutionDivided(16), Constant(32)}); | |
| const GraphValue model19_m0_m0_cv1_conv_activation = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(16), ResolutionDivided(16), Constant(32)}); | |
| const GraphValue model19_m0_m0_cv2_conv_weight = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(32), Constant(3), Constant(3), Constant(32)}, | |
| WeightSlot::kModel19M0M0Cv2ConvWeight); | |
| const GraphValue model19_m0_m0_cv2_conv_output = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(16), ResolutionDivided(16), Constant(32)}); | |
| const GraphValue model19_m0_m0_cv2_conv_bias = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(32)}, WeightSlot::kModel19M0M0Cv2ConvBias); | |
| [[maybe_unused]] const GraphValue reserved_value_24 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(16), ResolutionDivided(16), Constant(32)}); | |
| const GraphValue model19_m0_m0_cv2_conv_activation = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(16), ResolutionDivided(16), Constant(32)}); | |
| const GraphValue residual_sum_1 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(16), ResolutionDivided(16), Constant(32)}); | |
| const GraphValue model19_m0_m1_cv1_conv_weight = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(32), Constant(3), Constant(3), Constant(32)}, | |
| WeightSlot::kModel19M0M1Cv1ConvWeight); | |
| const GraphValue model19_m0_m1_cv1_conv_output = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(16), ResolutionDivided(16), Constant(32)}); | |
| const GraphValue model19_m0_m1_cv1_conv_bias = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(32)}, WeightSlot::kModel19M0M1Cv1ConvBias); | |
| [[maybe_unused]] const GraphValue reserved_value_30 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(16), ResolutionDivided(16), Constant(32)}); | |
| const GraphValue model19_m0_m1_cv1_conv_activation = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(16), ResolutionDivided(16), Constant(32)}); | |
| const GraphValue model19_m0_m1_cv2_conv_weight = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(32), Constant(3), Constant(3), Constant(32)}, | |
| WeightSlot::kModel19M0M1Cv2ConvWeight); | |
| const GraphValue model19_m0_m1_cv2_conv_output = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(16), ResolutionDivided(16), Constant(32)}); | |
| const GraphValue model19_m0_m1_cv2_conv_bias = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(32)}, WeightSlot::kModel19M0M1Cv2ConvBias); | |
| [[maybe_unused]] const GraphValue reserved_value_35 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(16), ResolutionDivided(16), Constant(32)}); | |
| const GraphValue model19_m0_m1_cv2_conv_activation = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(16), ResolutionDivided(16), Constant(32)}); | |
| const GraphValue residual_sum_2 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(16), ResolutionDivided(16), Constant(32)}); | |
| const GraphValue concatenation_1 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(16), ResolutionDivided(16), Constant(64)}); | |
| const GraphValue model19_m0_cv3_conv_weight = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(64), Constant(1), Constant(1), Constant(64)}, | |
| WeightSlot::kModel19M0Cv3ConvWeight); | |
| [[maybe_unused]] const GraphValue reserved_value_40 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(16), ResolutionDivided(16), Constant(64)}); | |
| const GraphValue model19_m0_cv3_conv_bias = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(64)}, WeightSlot::kModel19M0Cv3ConvBias); | |
| [[maybe_unused]] const GraphValue reserved_value_42 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(16), ResolutionDivided(16), Constant(64)}); | |
| const GraphValue model19_m0_cv3_conv_output = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(16), ResolutionDivided(16), Constant(64)}); | |
| const GraphValue concatenation_2 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(16), ResolutionDivided(16), Constant(192)}); | |
| const GraphValue model19_cv2_conv_weight = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(128), Constant(1), Constant(1), Constant(192)}, | |
| WeightSlot::kModel19Cv2ConvWeight); | |
| [[maybe_unused]] const GraphValue reserved_value_46 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(16), ResolutionDivided(16), Constant(128)}); | |
| const GraphValue model19_cv2_conv_bias = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(128)}, WeightSlot::kModel19Cv2ConvBias); | |
| [[maybe_unused]] const GraphValue reserved_value_48 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(16), ResolutionDivided(16), Constant(128)}); | |
| const GraphValue detection_p4_output = graph.DefineOutput( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(16), ResolutionDivided(16), Constant(128)}, | |
| DetectionP4PathBindings::kDetectionP4Output); | |
| [[maybe_unused]] const GraphValue reserved_value_50 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), Constant(128), ResolutionDivided(16), ResolutionDivided(16)}); | |
| const GraphValue model20_conv_weight = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(128), Constant(3), Constant(3), Constant(128)}, | |
| WeightSlot::kModel20ConvWeight); | |
| const GraphValue model20_conv_output = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(32), ResolutionDivided(32), Constant(128)}); | |
| const GraphValue model20_conv_bias = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(128)}, WeightSlot::kModel20ConvBias); | |
| [[maybe_unused]] const GraphValue reserved_value_54 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(32), ResolutionDivided(32), Constant(128)}); | |
| const GraphValue model20_conv_activation = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(32), ResolutionDivided(32), Constant(128)}); | |
| const GraphValue concatenation_3 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(32), ResolutionDivided(32), Constant(384)}); | |
| const GraphValue model22_cv1_conv_weight = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(256), Constant(1), Constant(1), Constant(384)}, | |
| WeightSlot::kModel22Cv1ConvWeight); | |
| [[maybe_unused]] const GraphValue reserved_value_58 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(32), ResolutionDivided(32), Constant(256)}); | |
| const GraphValue model22_cv1_conv_bias = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(256)}, WeightSlot::kModel22Cv1ConvBias); | |
| [[maybe_unused]] const GraphValue reserved_value_60 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(32), ResolutionDivided(32), Constant(256)}); | |
| const GraphValue p5_projection_output = graph.DefineOutput( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(32), ResolutionDivided(32), Constant(256)}, | |
| DetectionP4PathBindings::kP5ProjectionOutput); | |
| [[maybe_unused]] const GraphValue reserved_value_62 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), Constant(256), ResolutionDivided(32), ResolutionDivided(32)}); | |
| if (!graph.DefinitionsValid()) return false; | |
| if (!graph.Transpose(main_input, transpose_1_output, | |
| {Constant(0), Constant(2), Constant(3), Constant(1)}, 0)) | |
| return false; | |
| if (!graph.Transpose(skip_input, transpose_2_output, | |
| {Constant(0), Constant(2), Constant(3), Constant(1)}, 0)) | |
| return false; | |
| if (!graph.Transpose(backbone_p5_input, transpose_3_output, | |
| {Constant(0), Constant(2), Constant(3), Constant(1)}, 0)) | |
| return false; | |
| if (!graph.Convolution( | |
| transpose_1_output, model19_m0_cv1_conv_weight, model19_m0_cv1_conv_bias, | |
| model19_m0_cv1_conv_output, Padding{Constant(0), Constant(0), Constant(0), Constant(0)}, | |
| Kernel{Constant(1), Constant(1)}, Stride{Constant(1), Constant(1)}, | |
| Dilation{Constant(1), Constant(1)}, Groups{Constant(1), Constant(64), Constant(32)}, | |
| XNN_FLAG_YOLO26_GEMM_SILU_FINAL_STORE)) | |
| return false; | |
| if (!graph.Convolution( | |
| transpose_1_output, model19_m0_cv2_conv_weight, model19_m0_cv2_conv_bias, | |
| model19_m0_cv2_conv_output, Padding{Constant(0), Constant(0), Constant(0), Constant(0)}, | |
| Kernel{Constant(1), Constant(1)}, Stride{Constant(1), Constant(1)}, | |
| Dilation{Constant(1), Constant(1)}, Groups{Constant(1), Constant(64), Constant(32)}, | |
| XNN_FLAG_YOLO26_GEMM_SILU_FINAL_STORE)) | |
| return false; | |
| if (!graph.Convolution(model19_m0_cv1_conv_output, model19_m0_m0_cv1_conv_weight, | |
| model19_m0_m0_cv1_conv_bias, model19_m0_m0_cv1_conv_output, | |
| Padding{Constant(1), Constant(1), Constant(1), Constant(1)}, | |
| Kernel{Constant(3), Constant(3)}, Stride{Constant(1), Constant(1)}, | |
| Dilation{Constant(1), Constant(1)}, | |
| Groups{Constant(1), Constant(32), Constant(32)}, 0)) | |
| return false; | |
| if (!graph.Silu(model19_m0_m0_cv1_conv_output, model19_m0_m0_cv1_conv_activation, 0)) | |
| return false; | |
| if (!graph.Convolution(model19_m0_m0_cv1_conv_activation, model19_m0_m0_cv2_conv_weight, | |
| model19_m0_m0_cv2_conv_bias, model19_m0_m0_cv2_conv_output, | |
| Padding{Constant(1), Constant(1), Constant(1), Constant(1)}, | |
| Kernel{Constant(3), Constant(3)}, Stride{Constant(1), Constant(1)}, | |
| Dilation{Constant(1), Constant(1)}, | |
| Groups{Constant(1), Constant(32), Constant(32)}, 0)) | |
| return false; | |
| if (!graph.Silu(model19_m0_m0_cv2_conv_output, model19_m0_m0_cv2_conv_activation, 0)) | |
| return false; | |
| if (!graph.Add(model19_m0_cv1_conv_output, model19_m0_m0_cv2_conv_activation, residual_sum_1, 0)) | |
| return false; | |
| if (!graph.Convolution(residual_sum_1, model19_m0_m1_cv1_conv_weight, model19_m0_m1_cv1_conv_bias, | |
| model19_m0_m1_cv1_conv_output, | |
| Padding{Constant(1), Constant(1), Constant(1), Constant(1)}, | |
| Kernel{Constant(3), Constant(3)}, Stride{Constant(1), Constant(1)}, | |
| Dilation{Constant(1), Constant(1)}, | |
| Groups{Constant(1), Constant(32), Constant(32)}, 0)) | |
| return false; | |
| if (!graph.Silu(model19_m0_m1_cv1_conv_output, model19_m0_m1_cv1_conv_activation, 0)) | |
| return false; | |
| if (!graph.Convolution(model19_m0_m1_cv1_conv_activation, model19_m0_m1_cv2_conv_weight, | |
| model19_m0_m1_cv2_conv_bias, model19_m0_m1_cv2_conv_output, | |
| Padding{Constant(1), Constant(1), Constant(1), Constant(1)}, | |
| Kernel{Constant(3), Constant(3)}, Stride{Constant(1), Constant(1)}, | |
| Dilation{Constant(1), Constant(1)}, | |
| Groups{Constant(1), Constant(32), Constant(32)}, 0)) | |
| return false; | |
| if (!graph.Silu(model19_m0_m1_cv2_conv_output, model19_m0_m1_cv2_conv_activation, 0)) | |
| return false; | |
| if (!graph.Add(residual_sum_1, model19_m0_m1_cv2_conv_activation, residual_sum_2, 0)) | |
| return false; | |
| if (!graph.Concatenate({residual_sum_2, model19_m0_cv2_conv_output}, concatenation_1, Constant(3), | |
| 0)) | |
| return false; | |
| if (!graph.Convolution( | |
| concatenation_1, model19_m0_cv3_conv_weight, model19_m0_cv3_conv_bias, | |
| model19_m0_cv3_conv_output, Padding{Constant(0), Constant(0), Constant(0), Constant(0)}, | |
| Kernel{Constant(1), Constant(1)}, Stride{Constant(1), Constant(1)}, | |
| Dilation{Constant(1), Constant(1)}, Groups{Constant(1), Constant(64), Constant(64)}, | |
| XNN_FLAG_YOLO26_GEMM_SILU_FINAL_STORE)) | |
| return false; | |
| if (!graph.Concatenate({transpose_2_output, transpose_1_output, model19_m0_cv3_conv_output}, | |
| concatenation_2, Constant(3), 0)) | |
| return false; | |
| if (!graph.Convolution( | |
| concatenation_2, model19_cv2_conv_weight, model19_cv2_conv_bias, detection_p4_output, | |
| Padding{Constant(0), Constant(0), Constant(0), Constant(0)}, | |
| Kernel{Constant(1), Constant(1)}, Stride{Constant(1), Constant(1)}, | |
| Dilation{Constant(1), Constant(1)}, Groups{Constant(1), Constant(192), Constant(128)}, | |
| XNN_FLAG_YOLO26_GEMM_SILU_FINAL_STORE)) | |
| return false; | |
| if (!graph.Convolution( | |
| detection_p4_output, model20_conv_weight, model20_conv_bias, model20_conv_output, | |
| Padding{Constant(1), Constant(1), Constant(1), Constant(1)}, | |
| Kernel{Constant(3), Constant(3)}, Stride{Constant(2), Constant(2)}, | |
| Dilation{Constant(1), Constant(1)}, Groups{Constant(1), Constant(128), Constant(128)}, 0)) | |
| return false; | |
| if (!graph.Silu(model20_conv_output, model20_conv_activation, 0)) return false; | |
| if (!graph.Concatenate({model20_conv_activation, transpose_3_output}, concatenation_3, | |
| Constant(3), 0)) | |
| return false; | |
| if (!graph.Convolution( | |
| concatenation_3, model22_cv1_conv_weight, model22_cv1_conv_bias, p5_projection_output, | |
| Padding{Constant(0), Constant(0), Constant(0), Constant(0)}, | |
| Kernel{Constant(1), Constant(1)}, Stride{Constant(1), Constant(1)}, | |
| Dilation{Constant(1), Constant(1)}, Groups{Constant(1), Constant(384), Constant(256)}, | |
| XNN_FLAG_YOLO26_GEMM_SILU_FINAL_STORE)) | |
| return false; | |
| return graph.Finish(); | |
| } | |
| // Projects the model.22 residual branch into two heads of query, key, and value | |
| // channels; the schedule performs the channel split. | |
| bool BuildDetectionP5Qkv(const GraphContext& context) { | |
| FixedGraphBuilder graph(context, GraphId::kDetectionP5Qkv, DetectionP5QkvBindings::kCount); | |
| if (!graph.Begin()) return false; | |
| [[maybe_unused]] const GraphValue reserved_value_0 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), Constant(128), ResolutionDivided(32), ResolutionDivided(32)}); | |
| const GraphValue main_input = graph.DefineInput( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(32), ResolutionDivided(32), Constant(128)}, | |
| DetectionP5QkvBindings::kMainInput); | |
| const GraphValue model22_m00_cv1_conv_weight = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(64), Constant(3), Constant(3), Constant(128)}, | |
| WeightSlot::kModel22M00Cv1ConvWeight); | |
| const GraphValue model22_m00_cv1_conv_output = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(32), ResolutionDivided(32), Constant(64)}); | |
| const GraphValue model22_m00_cv1_conv_bias = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(64)}, WeightSlot::kModel22M00Cv1ConvBias); | |
| [[maybe_unused]] const GraphValue reserved_value_5 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(32), ResolutionDivided(32), Constant(64)}); | |
| const GraphValue model22_m00_cv1_conv_activation = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(32), ResolutionDivided(32), Constant(64)}); | |
| const GraphValue model22_m00_cv2_conv_weight = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(128), Constant(3), Constant(3), Constant(64)}, | |
| WeightSlot::kModel22M00Cv2ConvWeight); | |
| const GraphValue model22_m00_cv2_conv_output = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(32), ResolutionDivided(32), Constant(128)}); | |
| const GraphValue model22_m00_cv2_conv_bias = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(128)}, WeightSlot::kModel22M00Cv2ConvBias); | |
| [[maybe_unused]] const GraphValue reserved_value_10 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(32), ResolutionDivided(32), Constant(128)}); | |
| const GraphValue model22_m00_cv2_conv_activation = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(32), ResolutionDivided(32), Constant(128)}); | |
| const GraphValue residual_output = graph.DefineOutput( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(32), ResolutionDivided(32), Constant(128)}, | |
| DetectionP5QkvBindings::kResidualOutput); | |
| [[maybe_unused]] const GraphValue reserved_value_13 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), Constant(128), ResolutionDivided(32), ResolutionDivided(32)}); | |
| const GraphValue model22_m01_attn_qkv_conv_weight = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(256), Constant(1), Constant(1), Constant(128)}, | |
| WeightSlot::kModel22M01AttnQkvConvWeight); | |
| const GraphValue model22_m01_attn_qkv_conv_output = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(32), ResolutionDivided(32), Constant(256)}); | |
| const GraphValue model22_m01_attn_qkv_conv_bias = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(256)}, WeightSlot::kModel22M01AttnQkvConvBias); | |
| const GraphValue transpose_1_output = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), Constant(256), ResolutionDivided(32), ResolutionDivided(32)}); | |
| const GraphValue qkv_output = graph.DefineOutput( | |
| ValueType::kFp16, {Constant(1), Constant(2), Constant(128), ResolutionDividedSquared(32)}, | |
| DetectionP5QkvBindings::kQkvOutput); | |
| if (!graph.DefinitionsValid()) return false; | |
| if (!graph.Convolution( | |
| main_input, model22_m00_cv1_conv_weight, model22_m00_cv1_conv_bias, | |
| model22_m00_cv1_conv_output, Padding{Constant(1), Constant(1), Constant(1), Constant(1)}, | |
| Kernel{Constant(3), Constant(3)}, Stride{Constant(1), Constant(1)}, | |
| Dilation{Constant(1), Constant(1)}, Groups{Constant(1), Constant(128), Constant(64)}, 0)) | |
| return false; | |
| if (!graph.Silu(model22_m00_cv1_conv_output, model22_m00_cv1_conv_activation, 0)) return false; | |
| if (!graph.Convolution( | |
| model22_m00_cv1_conv_activation, model22_m00_cv2_conv_weight, model22_m00_cv2_conv_bias, | |
| model22_m00_cv2_conv_output, Padding{Constant(1), Constant(1), Constant(1), Constant(1)}, | |
| Kernel{Constant(3), Constant(3)}, Stride{Constant(1), Constant(1)}, | |
| Dilation{Constant(1), Constant(1)}, Groups{Constant(1), Constant(64), Constant(128)}, 0)) | |
| return false; | |
| if (!graph.Silu(model22_m00_cv2_conv_output, model22_m00_cv2_conv_activation, 0)) return false; | |
| if (!graph.Add(main_input, model22_m00_cv2_conv_activation, residual_output, 0)) return false; | |
| if (!graph.Convolution(residual_output, model22_m01_attn_qkv_conv_weight, | |
| model22_m01_attn_qkv_conv_bias, model22_m01_attn_qkv_conv_output, | |
| Padding{Constant(0), Constant(0), Constant(0), Constant(0)}, | |
| Kernel{Constant(1), Constant(1)}, Stride{Constant(1), Constant(1)}, | |
| Dilation{Constant(1), Constant(1)}, | |
| Groups{Constant(1), Constant(128), Constant(256)}, 0)) | |
| return false; | |
| if (!graph.Transpose(model22_m01_attn_qkv_conv_output, transpose_1_output, | |
| {Constant(0), Constant(3), Constant(1), Constant(2)}, 0)) | |
| return false; | |
| if (!graph.Reshape(transpose_1_output, qkv_output, | |
| {Constant(1), Constant(2), Constant(128), ResolutionDividedSquared(32)}, 0)) | |
| return false; | |
| return graph.Finish(); | |
| } | |
| // Scales and transposes the detection-head queries for QK multiplication. | |
| bool BuildDetectionP5AttentionScale(const GraphContext& context) { | |
| FixedGraphBuilder graph(context, GraphId::kDetectionP5AttentionScale, | |
| DetectionP5AttentionScaleBindings::kCount); | |
| if (!graph.Begin()) return false; | |
| const GraphValue query_input = graph.DefineInput( | |
| ValueType::kFp16, {Constant(1), Constant(2), Constant(32), ResolutionDividedSquared(32)}, | |
| DetectionP5AttentionScaleBindings::kQueryInput); | |
| const GraphValue scale_input = graph.DefineInput(ValueType::kFp16, {Constant(1)}, | |
| DetectionP5AttentionScaleBindings::kScaleInput); | |
| const GraphValue product_1 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), Constant(2), Constant(32), ResolutionDividedSquared(32)}); | |
| const GraphValue scaled_query_output = graph.DefineOutput( | |
| ValueType::kFp16, {Constant(1), Constant(2), ResolutionDividedSquared(32), Constant(32)}, | |
| DetectionP5AttentionScaleBindings::kScaledQueryOutput); | |
| if (!graph.DefinitionsValid()) return false; | |
| if (!graph.Multiply(query_input, scale_input, product_1, 0)) return false; | |
| if (!graph.Transpose(product_1, scaled_query_output, | |
| {Constant(0), Constant(1), Constant(3), Constant(2)}, 0)) | |
| return false; | |
| return graph.Finish(); | |
| } | |
| // Computes and normalizes the detection-head attention matrices. | |
| bool BuildDetectionP5AttentionMatrix(const GraphContext& context) { | |
| FixedGraphBuilder graph(context, GraphId::kDetectionP5AttentionMatrix, | |
| DetectionP5AttentionMatrixBindings::kCount); | |
| if (!graph.Begin()) return false; | |
| const GraphValue reshape_1_output = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(2), Constant(32), ResolutionDividedSquared(32)}); | |
| const GraphValue key_input = graph.DefineInput( | |
| ValueType::kFp16, {Constant(1), Constant(2), Constant(32), ResolutionDividedSquared(32)}, | |
| DetectionP5AttentionMatrixBindings::kKeyInput); | |
| const GraphValue reshape_2_output = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(2), ResolutionDividedSquared(32), Constant(32)}); | |
| const GraphValue query_input = graph.DefineInput( | |
| ValueType::kFp16, {Constant(1), Constant(2), ResolutionDividedSquared(32), Constant(32)}, | |
| DetectionP5AttentionMatrixBindings::kQueryInput); | |
| const GraphValue matrix_product_1 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(2), ResolutionDividedSquared(32), ResolutionDividedSquared(32)}); | |
| const GraphValue reshape_3_output = graph.DefineIntermediate( | |
| ValueType::kFp16, | |
| {Constant(1), Constant(2), ResolutionDividedSquared(32), ResolutionDividedSquared(32)}); | |
| const GraphValue softmax_1_output = graph.DefineIntermediate( | |
| ValueType::kFp16, | |
| {Constant(1), Constant(2), ResolutionDividedSquared(32), ResolutionDividedSquared(32)}); | |
| const GraphValue matrix_output = graph.DefineOutput( | |
| ValueType::kFp16, | |
| {Constant(1), Constant(2), ResolutionDividedSquared(32), ResolutionDividedSquared(32)}, | |
| DetectionP5AttentionMatrixBindings::kMatrixOutput); | |
| if (!graph.DefinitionsValid()) return false; | |
| if (!graph.Reshape(key_input, reshape_1_output, | |
| {Constant(2), Constant(32), ResolutionDividedSquared(32)}, 0)) | |
| return false; | |
| if (!graph.Reshape(query_input, reshape_2_output, | |
| {Constant(2), ResolutionDividedSquared(32), Constant(32)}, 0)) | |
| return false; | |
| if (!graph.BatchMatrixMultiply(reshape_2_output, reshape_1_output, matrix_product_1, 0)) | |
| return false; | |
| if (!graph.Reshape( | |
| matrix_product_1, reshape_3_output, | |
| {Constant(1), Constant(2), ResolutionDividedSquared(32), ResolutionDividedSquared(32)}, | |
| 0)) | |
| return false; | |
| if (!graph.Softmax(reshape_3_output, softmax_1_output, 0)) return false; | |
| if (!graph.Transpose(softmax_1_output, matrix_output, | |
| {Constant(0), Constant(1), Constant(3), Constant(2)}, 0)) | |
| return false; | |
| return graph.Finish(); | |
| } | |
| // Applies attention, completes model.22, and produces box-distribution outputs | |
| // at P3, P4, and P5 before concatenating and decoding them to four coordinates. | |
| bool BuildDetectionP5AndBoxes(const GraphContext& context) { | |
| FixedGraphBuilder graph(context, GraphId::kDetectionP5AndBoxes, | |
| DetectionP5AndBoxesBindings::kCount); | |
| if (!graph.Begin()) return false; | |
| [[maybe_unused]] const GraphValue reserved_value_0 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), Constant(64), ResolutionDivided(8), ResolutionDivided(8)}); | |
| const GraphValue p3_input = graph.DefineInput( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(8), ResolutionDivided(8), Constant(64)}, | |
| DetectionP5AndBoxesBindings::kP3Input); | |
| [[maybe_unused]] const GraphValue reserved_value_2 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), Constant(128), ResolutionDivided(16), ResolutionDivided(16)}); | |
| const GraphValue p4_input = graph.DefineInput( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(16), ResolutionDivided(16), Constant(128)}, | |
| DetectionP5AndBoxesBindings::kP4Input); | |
| [[maybe_unused]] const GraphValue reserved_value_4 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), Constant(128), ResolutionDivided(32), ResolutionDivided(32)}); | |
| const GraphValue residual_input = graph.DefineInput( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(32), ResolutionDivided(32), Constant(128)}, | |
| DetectionP5AndBoxesBindings::kResidualInput); | |
| [[maybe_unused]] const GraphValue reserved_value_6 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), Constant(128), ResolutionDivided(32), ResolutionDivided(32)}); | |
| const GraphValue skip_input = graph.DefineInput( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(32), ResolutionDivided(32), Constant(128)}, | |
| DetectionP5AndBoxesBindings::kSkipInput); | |
| [[maybe_unused]] const GraphValue reserved_value_8 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), Constant(128), ResolutionDivided(32), ResolutionDivided(32)}); | |
| const GraphValue main_input = graph.DefineInput( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(32), ResolutionDivided(32), Constant(128)}, | |
| DetectionP5AndBoxesBindings::kMainInput); | |
| const GraphValue model23_cv200_conv_weight = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(16), Constant(3), Constant(3), Constant(64)}, | |
| WeightSlot::kModel23Cv200ConvWeight); | |
| const GraphValue model23_cv200_conv_output = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(8), ResolutionDivided(8), Constant(16)}); | |
| const GraphValue model23_cv200_conv_bias = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(16)}, WeightSlot::kModel23Cv200ConvBias); | |
| [[maybe_unused]] const GraphValue reserved_value_13 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(8), ResolutionDivided(8), Constant(16)}); | |
| const GraphValue model23_cv200_conv_activation = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(8), ResolutionDivided(8), Constant(16)}); | |
| const GraphValue model23_cv201_conv_weight = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(16), Constant(3), Constant(3), Constant(16)}, | |
| WeightSlot::kModel23Cv201ConvWeight); | |
| const GraphValue model23_cv201_conv_output = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(8), ResolutionDivided(8), Constant(16)}); | |
| const GraphValue model23_cv201_conv_bias = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(16)}, WeightSlot::kModel23Cv201ConvBias); | |
| [[maybe_unused]] const GraphValue reserved_value_18 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(8), ResolutionDivided(8), Constant(16)}); | |
| const GraphValue model23_cv201_conv_activation = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(8), ResolutionDivided(8), Constant(16)}); | |
| const GraphValue model23_cv202_weight = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(4), Constant(1), Constant(1), Constant(16)}, | |
| WeightSlot::kModel23Cv202Weight); | |
| const GraphValue model23_cv202_output = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(8), ResolutionDivided(8), Constant(4)}); | |
| const GraphValue model23_cv202_bias = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(4)}, WeightSlot::kModel23Cv202Bias); | |
| const GraphValue transpose_1_output = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), Constant(4), ResolutionDivided(8), ResolutionDivided(8)}); | |
| const GraphValue reshape_1_output = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), Constant(4), ResolutionDividedSquared(8)}); | |
| const GraphValue model23_cv210_conv_weight = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(16), Constant(3), Constant(3), Constant(128)}, | |
| WeightSlot::kModel23Cv210ConvWeight); | |
| const GraphValue model23_cv210_conv_output = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(16), ResolutionDivided(16), Constant(16)}); | |
| const GraphValue model23_cv210_conv_bias = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(16)}, WeightSlot::kModel23Cv210ConvBias); | |
| [[maybe_unused]] const GraphValue reserved_value_28 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(16), ResolutionDivided(16), Constant(16)}); | |
| const GraphValue model23_cv210_conv_activation = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(16), ResolutionDivided(16), Constant(16)}); | |
| const GraphValue model23_cv211_conv_weight = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(16), Constant(3), Constant(3), Constant(16)}, | |
| WeightSlot::kModel23Cv211ConvWeight); | |
| const GraphValue model23_cv211_conv_output = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(16), ResolutionDivided(16), Constant(16)}); | |
| const GraphValue model23_cv211_conv_bias = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(16)}, WeightSlot::kModel23Cv211ConvBias); | |
| [[maybe_unused]] const GraphValue reserved_value_33 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(16), ResolutionDivided(16), Constant(16)}); | |
| const GraphValue model23_cv211_conv_activation = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(16), ResolutionDivided(16), Constant(16)}); | |
| const GraphValue model23_cv212_weight = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(4), Constant(1), Constant(1), Constant(16)}, | |
| WeightSlot::kModel23Cv212Weight); | |
| const GraphValue model23_cv212_output = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(16), ResolutionDivided(16), Constant(4)}); | |
| const GraphValue model23_cv212_bias = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(4)}, WeightSlot::kModel23Cv212Bias); | |
| const GraphValue transpose_2_output = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), Constant(4), ResolutionDivided(16), ResolutionDivided(16)}); | |
| const GraphValue reshape_2_output = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), Constant(4), ResolutionDividedSquared(16)}); | |
| const GraphValue reshape_3_output = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(2), Constant(64), ResolutionDividedSquared(32)}); | |
| const GraphValue value_copy_input = graph.DefineInput( | |
| ValueType::kFp16, {Constant(1), Constant(2), Constant(64), ResolutionDividedSquared(32)}, | |
| DetectionP5AndBoxesBindings::kValueCopyInput); | |
| const GraphValue reshape_4_output = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), Constant(128), ResolutionDivided(32), ResolutionDivided(32)}); | |
| const GraphValue value_input = graph.DefineInput( | |
| ValueType::kFp16, {Constant(1), Constant(2), Constant(64), ResolutionDividedSquared(32)}, | |
| DetectionP5AndBoxesBindings::kValueInput); | |
| const GraphValue transpose_3_output = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(32), ResolutionDivided(32), Constant(128)}); | |
| const GraphValue model22_m01_attn_pe_conv_weight = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(1), Constant(3), Constant(3), Constant(128)}, | |
| WeightSlot::kModel22M01AttnPeConvWeight); | |
| const GraphValue model22_m01_attn_pe_conv_output = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(32), ResolutionDivided(32), Constant(128)}); | |
| const GraphValue model22_m01_attn_pe_conv_bias = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(128)}, WeightSlot::kModel22M01AttnPeConvBias); | |
| const GraphValue reshape_5_output = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(2), ResolutionDividedSquared(32), ResolutionDividedSquared(32)}); | |
| const GraphValue matrix_input = graph.DefineInput( | |
| ValueType::kFp16, | |
| {Constant(1), Constant(2), ResolutionDividedSquared(32), ResolutionDividedSquared(32)}, | |
| DetectionP5AndBoxesBindings::kMatrixInput); | |
| const GraphValue matrix_product_1 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(2), Constant(64), ResolutionDividedSquared(32)}); | |
| const GraphValue reshape_6_output = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), Constant(2), Constant(64), ResolutionDividedSquared(32)}); | |
| const GraphValue reshape_7_output = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), Constant(128), ResolutionDivided(32), ResolutionDivided(32)}); | |
| const GraphValue transpose_4_output = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(32), ResolutionDivided(32), Constant(128)}); | |
| const GraphValue residual_sum_1 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(32), ResolutionDivided(32), Constant(128)}); | |
| const GraphValue model22_m01_attn_proj_conv_weight = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(128), Constant(1), Constant(1), Constant(128)}, | |
| WeightSlot::kModel22M01AttnProjConvWeight); | |
| const GraphValue model22_m01_attn_proj_conv_output = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(32), ResolutionDivided(32), Constant(128)}); | |
| const GraphValue model22_m01_attn_proj_conv_bias = graph.DefineWeight( | |
| ValueType::kFp32, {Constant(128)}, WeightSlot::kModel22M01AttnProjConvBias); | |
| const GraphValue residual_sum_2 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(32), ResolutionDivided(32), Constant(128)}); | |
| const GraphValue model22_m01_ffn0_conv_weight = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(256), Constant(1), Constant(1), Constant(128)}, | |
| WeightSlot::kModel22M01Ffn0ConvWeight); | |
| [[maybe_unused]] const GraphValue reserved_value_60 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(32), ResolutionDivided(32), Constant(256)}); | |
| const GraphValue model22_m01_ffn0_conv_bias = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(256)}, WeightSlot::kModel22M01Ffn0ConvBias); | |
| [[maybe_unused]] const GraphValue reserved_value_62 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(32), ResolutionDivided(32), Constant(256)}); | |
| const GraphValue model22_m01_ffn0_conv_output = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(32), ResolutionDivided(32), Constant(256)}); | |
| const GraphValue model22_m01_ffn1_conv_weight = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(128), Constant(1), Constant(1), Constant(256)}, | |
| WeightSlot::kModel22M01Ffn1ConvWeight); | |
| const GraphValue model22_m01_ffn1_conv_output = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(32), ResolutionDivided(32), Constant(128)}); | |
| const GraphValue model22_m01_ffn1_conv_bias = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(128)}, WeightSlot::kModel22M01Ffn1ConvBias); | |
| const GraphValue residual_sum_3 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(32), ResolutionDivided(32), Constant(128)}); | |
| const GraphValue concatenation_1 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(32), ResolutionDivided(32), Constant(384)}); | |
| const GraphValue model22_cv2_conv_weight = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(256), Constant(1), Constant(1), Constant(384)}, | |
| WeightSlot::kModel22Cv2ConvWeight); | |
| [[maybe_unused]] const GraphValue reserved_value_70 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(32), ResolutionDivided(32), Constant(256)}); | |
| const GraphValue model22_cv2_conv_bias = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(256)}, WeightSlot::kModel22Cv2ConvBias); | |
| [[maybe_unused]] const GraphValue reserved_value_72 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(32), ResolutionDivided(32), Constant(256)}); | |
| const GraphValue p5_output = graph.DefineOutput( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(32), ResolutionDivided(32), Constant(256)}, | |
| DetectionP5AndBoxesBindings::kP5Output); | |
| [[maybe_unused]] const GraphValue reserved_value_74 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), Constant(256), ResolutionDivided(32), ResolutionDivided(32)}); | |
| const GraphValue model23_cv220_conv_weight = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(16), Constant(3), Constant(3), Constant(256)}, | |
| WeightSlot::kModel23Cv220ConvWeight); | |
| const GraphValue model23_cv220_conv_output = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(32), ResolutionDivided(32), Constant(16)}); | |
| const GraphValue model23_cv220_conv_bias = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(16)}, WeightSlot::kModel23Cv220ConvBias); | |
| [[maybe_unused]] const GraphValue reserved_value_78 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(32), ResolutionDivided(32), Constant(16)}); | |
| const GraphValue model23_cv220_conv_activation = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(32), ResolutionDivided(32), Constant(16)}); | |
| const GraphValue model23_cv221_conv_weight = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(16), Constant(3), Constant(3), Constant(16)}, | |
| WeightSlot::kModel23Cv221ConvWeight); | |
| const GraphValue model23_cv221_conv_output = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(32), ResolutionDivided(32), Constant(16)}); | |
| const GraphValue model23_cv221_conv_bias = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(16)}, WeightSlot::kModel23Cv221ConvBias); | |
| [[maybe_unused]] const GraphValue reserved_value_83 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(32), ResolutionDivided(32), Constant(16)}); | |
| const GraphValue model23_cv221_conv_activation = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(32), ResolutionDivided(32), Constant(16)}); | |
| const GraphValue model23_cv222_weight = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(4), Constant(1), Constant(1), Constant(16)}, | |
| WeightSlot::kModel23Cv222Weight); | |
| const GraphValue model23_cv222_output = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(32), ResolutionDivided(32), Constant(4)}); | |
| const GraphValue model23_cv222_bias = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(4)}, WeightSlot::kModel23Cv222Bias); | |
| const GraphValue transpose_5_output = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), Constant(4), ResolutionDivided(32), ResolutionDivided(32)}); | |
| const GraphValue reshape_8_output = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), Constant(4), ResolutionDividedSquared(32)}); | |
| const GraphValue box_regression_output = | |
| graph.DefineOutput(ValueType::kFp16, {Constant(1), Constant(4), DetectionPositions()}, | |
| DetectionP5AndBoxesBindings::kBoxRegressionOutput); | |
| if (!graph.DefinitionsValid()) return false; | |
| if (!graph.Convolution( | |
| p3_input, model23_cv200_conv_weight, model23_cv200_conv_bias, model23_cv200_conv_output, | |
| Padding{Constant(1), Constant(1), Constant(1), Constant(1)}, | |
| Kernel{Constant(3), Constant(3)}, Stride{Constant(1), Constant(1)}, | |
| Dilation{Constant(1), Constant(1)}, Groups{Constant(1), Constant(64), Constant(16)}, 0)) | |
| return false; | |
| if (!graph.Silu(model23_cv200_conv_output, model23_cv200_conv_activation, 0)) return false; | |
| if (!graph.Convolution( | |
| model23_cv200_conv_activation, model23_cv201_conv_weight, model23_cv201_conv_bias, | |
| model23_cv201_conv_output, Padding{Constant(1), Constant(1), Constant(1), Constant(1)}, | |
| Kernel{Constant(3), Constant(3)}, Stride{Constant(1), Constant(1)}, | |
| Dilation{Constant(1), Constant(1)}, Groups{Constant(1), Constant(16), Constant(16)}, 0)) | |
| return false; | |
| if (!graph.Silu(model23_cv201_conv_output, model23_cv201_conv_activation, 0)) return false; | |
| if (!graph.Convolution( | |
| model23_cv201_conv_activation, model23_cv202_weight, model23_cv202_bias, | |
| model23_cv202_output, Padding{Constant(0), Constant(0), Constant(0), Constant(0)}, | |
| Kernel{Constant(1), Constant(1)}, Stride{Constant(1), Constant(1)}, | |
| Dilation{Constant(1), Constant(1)}, Groups{Constant(1), Constant(16), Constant(4)}, 0)) | |
| return false; | |
| if (!graph.Transpose(model23_cv202_output, transpose_1_output, | |
| {Constant(0), Constant(3), Constant(1), Constant(2)}, 0)) | |
| return false; | |
| if (!graph.Reshape(transpose_1_output, reshape_1_output, {Constant(1), Constant(4), Constant(0)}, | |
| 0)) | |
| return false; | |
| if (!graph.Convolution( | |
| p4_input, model23_cv210_conv_weight, model23_cv210_conv_bias, model23_cv210_conv_output, | |
| Padding{Constant(1), Constant(1), Constant(1), Constant(1)}, | |
| Kernel{Constant(3), Constant(3)}, Stride{Constant(1), Constant(1)}, | |
| Dilation{Constant(1), Constant(1)}, Groups{Constant(1), Constant(128), Constant(16)}, 0)) | |
| return false; | |
| if (!graph.Silu(model23_cv210_conv_output, model23_cv210_conv_activation, 0)) return false; | |
| if (!graph.Convolution( | |
| model23_cv210_conv_activation, model23_cv211_conv_weight, model23_cv211_conv_bias, | |
| model23_cv211_conv_output, Padding{Constant(1), Constant(1), Constant(1), Constant(1)}, | |
| Kernel{Constant(3), Constant(3)}, Stride{Constant(1), Constant(1)}, | |
| Dilation{Constant(1), Constant(1)}, Groups{Constant(1), Constant(16), Constant(16)}, 0)) | |
| return false; | |
| if (!graph.Silu(model23_cv211_conv_output, model23_cv211_conv_activation, 0)) return false; | |
| if (!graph.Convolution( | |
| model23_cv211_conv_activation, model23_cv212_weight, model23_cv212_bias, | |
| model23_cv212_output, Padding{Constant(0), Constant(0), Constant(0), Constant(0)}, | |
| Kernel{Constant(1), Constant(1)}, Stride{Constant(1), Constant(1)}, | |
| Dilation{Constant(1), Constant(1)}, Groups{Constant(1), Constant(16), Constant(4)}, 0)) | |
| return false; | |
| if (!graph.Transpose(model23_cv212_output, transpose_2_output, | |
| {Constant(0), Constant(3), Constant(1), Constant(2)}, 0)) | |
| return false; | |
| if (!graph.Reshape(transpose_2_output, reshape_2_output, {Constant(1), Constant(4), Constant(0)}, | |
| 0)) | |
| return false; | |
| if (!graph.Reshape(value_copy_input, reshape_3_output, | |
| {Constant(2), Constant(64), ResolutionDividedSquared(32)}, 0)) | |
| return false; | |
| if (!graph.Reshape(value_input, reshape_4_output, | |
| {Constant(1), Constant(128), ResolutionDivided(32), ResolutionDivided(32)}, 0)) | |
| return false; | |
| if (!graph.Transpose(reshape_4_output, transpose_3_output, | |
| {Constant(0), Constant(2), Constant(3), Constant(1)}, 0)) | |
| return false; | |
| if (!graph.DepthwiseConvolution( | |
| transpose_3_output, model22_m01_attn_pe_conv_weight, model22_m01_attn_pe_conv_bias, | |
| model22_m01_attn_pe_conv_output, | |
| Padding{Constant(1), Constant(1), Constant(1), Constant(1)}, | |
| Kernel{Constant(3), Constant(3)}, Stride{Constant(1), Constant(1)}, | |
| Dilation{Constant(1), Constant(1)}, Groups{Constant(128), Constant(1), Constant(1)}, 0)) | |
| return false; | |
| if (!graph.Reshape(matrix_input, reshape_5_output, | |
| {Constant(2), ResolutionDividedSquared(32), ResolutionDividedSquared(32)}, 0)) | |
| return false; | |
| if (!graph.BatchMatrixMultiply(reshape_3_output, reshape_5_output, matrix_product_1, 0)) | |
| return false; | |
| if (!graph.Reshape(matrix_product_1, reshape_6_output, | |
| {Constant(1), Constant(2), Constant(64), ResolutionDividedSquared(32)}, 0)) | |
| return false; | |
| if (!graph.Reshape(reshape_6_output, reshape_7_output, | |
| {Constant(1), Constant(128), ResolutionDivided(32), ResolutionDivided(32)}, 0)) | |
| return false; | |
| if (!graph.Transpose(reshape_7_output, transpose_4_output, | |
| {Constant(0), Constant(2), Constant(3), Constant(1)}, 0)) | |
| return false; | |
| if (!graph.Add(transpose_4_output, model22_m01_attn_pe_conv_output, residual_sum_1, 0)) | |
| return false; | |
| if (!graph.Convolution(residual_sum_1, model22_m01_attn_proj_conv_weight, | |
| model22_m01_attn_proj_conv_bias, model22_m01_attn_proj_conv_output, | |
| Padding{Constant(0), Constant(0), Constant(0), Constant(0)}, | |
| Kernel{Constant(1), Constant(1)}, Stride{Constant(1), Constant(1)}, | |
| Dilation{Constant(1), Constant(1)}, | |
| Groups{Constant(1), Constant(128), Constant(128)}, 0)) | |
| return false; | |
| if (!graph.Add(residual_input, model22_m01_attn_proj_conv_output, residual_sum_2, 0)) | |
| return false; | |
| if (!graph.Convolution( | |
| residual_sum_2, model22_m01_ffn0_conv_weight, model22_m01_ffn0_conv_bias, | |
| model22_m01_ffn0_conv_output, Padding{Constant(0), Constant(0), Constant(0), Constant(0)}, | |
| Kernel{Constant(1), Constant(1)}, Stride{Constant(1), Constant(1)}, | |
| Dilation{Constant(1), Constant(1)}, Groups{Constant(1), Constant(128), Constant(256)}, | |
| XNN_FLAG_YOLO26_GEMM_SILU_FINAL_STORE)) | |
| return false; | |
| if (!graph.Convolution( | |
| model22_m01_ffn0_conv_output, model22_m01_ffn1_conv_weight, model22_m01_ffn1_conv_bias, | |
| model22_m01_ffn1_conv_output, Padding{Constant(0), Constant(0), Constant(0), Constant(0)}, | |
| Kernel{Constant(1), Constant(1)}, Stride{Constant(1), Constant(1)}, | |
| Dilation{Constant(1), Constant(1)}, Groups{Constant(1), Constant(256), Constant(128)}, 0)) | |
| return false; | |
| if (!graph.Add(residual_sum_2, model22_m01_ffn1_conv_output, residual_sum_3, 0)) return false; | |
| if (!graph.Concatenate({skip_input, main_input, residual_sum_3}, concatenation_1, Constant(3), 0)) | |
| return false; | |
| if (!graph.Convolution(concatenation_1, model22_cv2_conv_weight, model22_cv2_conv_bias, p5_output, | |
| Padding{Constant(0), Constant(0), Constant(0), Constant(0)}, | |
| Kernel{Constant(1), Constant(1)}, Stride{Constant(1), Constant(1)}, | |
| Dilation{Constant(1), Constant(1)}, | |
| Groups{Constant(1), Constant(384), Constant(256)}, | |
| XNN_FLAG_YOLO26_GEMM_SILU_FINAL_STORE)) | |
| return false; | |
| if (!graph.Convolution( | |
| p5_output, model23_cv220_conv_weight, model23_cv220_conv_bias, model23_cv220_conv_output, | |
| Padding{Constant(1), Constant(1), Constant(1), Constant(1)}, | |
| Kernel{Constant(3), Constant(3)}, Stride{Constant(1), Constant(1)}, | |
| Dilation{Constant(1), Constant(1)}, Groups{Constant(1), Constant(256), Constant(16)}, 0)) | |
| return false; | |
| if (!graph.Silu(model23_cv220_conv_output, model23_cv220_conv_activation, 0)) return false; | |
| if (!graph.Convolution( | |
| model23_cv220_conv_activation, model23_cv221_conv_weight, model23_cv221_conv_bias, | |
| model23_cv221_conv_output, Padding{Constant(1), Constant(1), Constant(1), Constant(1)}, | |
| Kernel{Constant(3), Constant(3)}, Stride{Constant(1), Constant(1)}, | |
| Dilation{Constant(1), Constant(1)}, Groups{Constant(1), Constant(16), Constant(16)}, 0)) | |
| return false; | |
| if (!graph.Silu(model23_cv221_conv_output, model23_cv221_conv_activation, 0)) return false; | |
| if (!graph.Convolution( | |
| model23_cv221_conv_activation, model23_cv222_weight, model23_cv222_bias, | |
| model23_cv222_output, Padding{Constant(0), Constant(0), Constant(0), Constant(0)}, | |
| Kernel{Constant(1), Constant(1)}, Stride{Constant(1), Constant(1)}, | |
| Dilation{Constant(1), Constant(1)}, Groups{Constant(1), Constant(16), Constant(4)}, 0)) | |
| return false; | |
| if (!graph.Transpose(model23_cv222_output, transpose_5_output, | |
| {Constant(0), Constant(3), Constant(1), Constant(2)}, 0)) | |
| return false; | |
| if (!graph.Reshape(transpose_5_output, reshape_8_output, {Constant(1), Constant(4), Constant(0)}, | |
| 0)) | |
| return false; | |
| if (!graph.Concatenate({reshape_1_output, reshape_2_output, reshape_8_output}, | |
| box_regression_output, Constant(2), 0)) | |
| return false; | |
| return graph.Finish(); | |
| } | |
| // Produces class logits at all three scales, concatenates them with decoded box | |
| // coordinates, and converts the combined head output to the public layout. | |
| bool BuildClassificationAndDecode(const GraphContext& context) { | |
| FixedGraphBuilder graph(context, GraphId::kClassificationAndDecode, | |
| ClassificationAndDecodeBindings::kCount); | |
| if (!graph.Begin()) return false; | |
| [[maybe_unused]] const GraphValue reserved_value_0 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), Constant(64), ResolutionDivided(8), ResolutionDivided(8)}); | |
| const GraphValue p3_input = graph.DefineInput( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(8), ResolutionDivided(8), Constant(64)}, | |
| ClassificationAndDecodeBindings::kP3Input); | |
| [[maybe_unused]] const GraphValue reserved_value_2 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), Constant(128), ResolutionDivided(16), ResolutionDivided(16)}); | |
| const GraphValue p4_input = graph.DefineInput( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(16), ResolutionDivided(16), Constant(128)}, | |
| ClassificationAndDecodeBindings::kP4Input); | |
| [[maybe_unused]] const GraphValue reserved_value_4 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), Constant(256), ResolutionDivided(32), ResolutionDivided(32)}); | |
| const GraphValue p5_input = graph.DefineInput( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(32), ResolutionDivided(32), Constant(256)}, | |
| ClassificationAndDecodeBindings::kP5Input); | |
| const GraphValue model23_cv3000_conv_weight = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(1), Constant(3), Constant(3), Constant(64)}, | |
| WeightSlot::kModel23Cv3000ConvWeight); | |
| const GraphValue model23_cv3000_conv_output = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(8), ResolutionDivided(8), Constant(64)}); | |
| const GraphValue model23_cv3000_conv_bias = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(64)}, WeightSlot::kModel23Cv3000ConvBias); | |
| [[maybe_unused]] const GraphValue reserved_value_9 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(8), ResolutionDivided(8), Constant(64)}); | |
| const GraphValue model23_cv3000_conv_activation = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(8), ResolutionDivided(8), Constant(64)}); | |
| const GraphValue model23_cv3001_conv_weight = graph.DefineWeight( | |
| ValueType::kFp32, {ClassificationWidth(), Constant(1), Constant(1), Constant(64)}, | |
| WeightSlot::kModel23Cv3001ConvWeight); | |
| [[maybe_unused]] const GraphValue reserved_value_12 = graph.DefineIntermediate( | |
| ValueType::kFp16, | |
| {Constant(1), ResolutionDivided(8), ResolutionDivided(8), ClassificationWidth()}); | |
| const GraphValue model23_cv3001_conv_bias = graph.DefineWeight( | |
| ValueType::kFp32, {ClassificationWidth()}, WeightSlot::kModel23Cv3001ConvBias); | |
| [[maybe_unused]] const GraphValue reserved_value_14 = graph.DefineIntermediate( | |
| ValueType::kFp16, | |
| {Constant(1), ResolutionDivided(8), ResolutionDivided(8), ClassificationWidth()}); | |
| const GraphValue model23_cv3001_conv_output = graph.DefineIntermediate( | |
| ValueType::kFp16, | |
| {Constant(1), ResolutionDivided(8), ResolutionDivided(8), ClassificationWidth()}); | |
| const GraphValue model23_cv3010_conv_weight = graph.DefineWeight( | |
| ValueType::kFp32, {Constant(1), Constant(3), Constant(3), ClassificationWidth()}, | |
| WeightSlot::kModel23Cv3010ConvWeight); | |
| const GraphValue model23_cv3010_conv_output = graph.DefineIntermediate( | |
| ValueType::kFp16, | |
| {Constant(1), ResolutionDivided(8), ResolutionDivided(8), ClassificationWidth()}); | |
| const GraphValue model23_cv3010_conv_bias = graph.DefineWeight( | |
| ValueType::kFp32, {ClassificationWidth()}, WeightSlot::kModel23Cv3010ConvBias); | |
| [[maybe_unused]] const GraphValue reserved_value_19 = graph.DefineIntermediate( | |
| ValueType::kFp16, | |
| {Constant(1), ResolutionDivided(8), ResolutionDivided(8), ClassificationWidth()}); | |
| const GraphValue model23_cv3010_conv_activation = graph.DefineIntermediate( | |
| ValueType::kFp16, | |
| {Constant(1), ResolutionDivided(8), ResolutionDivided(8), ClassificationWidth()}); | |
| const GraphValue model23_cv3011_conv_weight = graph.DefineWeight( | |
| ValueType::kFp32, {ClassificationWidth(), Constant(1), Constant(1), ClassificationWidth()}, | |
| WeightSlot::kModel23Cv3011ConvWeight); | |
| [[maybe_unused]] const GraphValue reserved_value_22 = graph.DefineIntermediate( | |
| ValueType::kFp16, | |
| {Constant(1), ResolutionDivided(8), ResolutionDivided(8), ClassificationWidth()}); | |
| const GraphValue model23_cv3011_conv_bias = graph.DefineWeight( | |
| ValueType::kFp32, {ClassificationWidth()}, WeightSlot::kModel23Cv3011ConvBias); | |
| [[maybe_unused]] const GraphValue reserved_value_24 = graph.DefineIntermediate( | |
| ValueType::kFp16, | |
| {Constant(1), ResolutionDivided(8), ResolutionDivided(8), ClassificationWidth()}); | |
| const GraphValue model23_cv3011_conv_output = graph.DefineIntermediate( | |
| ValueType::kFp16, | |
| {Constant(1), ResolutionDivided(8), ResolutionDivided(8), ClassificationWidth()}); | |
| const GraphValue model23_cv302_weight = graph.DefineWeight( | |
| ValueType::kFp32, {ClassCount(), Constant(1), Constant(1), ClassificationWidth()}, | |
| WeightSlot::kModel23Cv302Weight); | |
| const GraphValue model23_cv302_output = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(8), ResolutionDivided(8), ClassCount()}); | |
| const GraphValue model23_cv302_bias = | |
| graph.DefineWeight(ValueType::kFp32, {ClassCount()}, WeightSlot::kModel23Cv302Bias); | |
| const GraphValue transpose_1_output = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ClassCount(), ResolutionDivided(8), ResolutionDivided(8)}); | |
| const GraphValue reshape_1_output = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ClassCount(), ResolutionDividedSquared(8)}); | |
| const GraphValue model23_cv3100_conv_weight = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(1), Constant(3), Constant(3), Constant(128)}, | |
| WeightSlot::kModel23Cv3100ConvWeight); | |
| const GraphValue model23_cv3100_conv_output = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(16), ResolutionDivided(16), Constant(128)}); | |
| const GraphValue model23_cv3100_conv_bias = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(128)}, WeightSlot::kModel23Cv3100ConvBias); | |
| [[maybe_unused]] const GraphValue reserved_value_34 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(16), ResolutionDivided(16), Constant(128)}); | |
| const GraphValue model23_cv3100_conv_activation = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(16), ResolutionDivided(16), Constant(128)}); | |
| const GraphValue model23_cv3101_conv_weight = graph.DefineWeight( | |
| ValueType::kFp32, {ClassificationWidth(), Constant(1), Constant(1), Constant(128)}, | |
| WeightSlot::kModel23Cv3101ConvWeight); | |
| [[maybe_unused]] const GraphValue reserved_value_37 = graph.DefineIntermediate( | |
| ValueType::kFp16, | |
| {Constant(1), ResolutionDivided(16), ResolutionDivided(16), ClassificationWidth()}); | |
| const GraphValue model23_cv3101_conv_bias = graph.DefineWeight( | |
| ValueType::kFp32, {ClassificationWidth()}, WeightSlot::kModel23Cv3101ConvBias); | |
| [[maybe_unused]] const GraphValue reserved_value_39 = graph.DefineIntermediate( | |
| ValueType::kFp16, | |
| {Constant(1), ResolutionDivided(16), ResolutionDivided(16), ClassificationWidth()}); | |
| const GraphValue model23_cv3101_conv_output = graph.DefineIntermediate( | |
| ValueType::kFp16, | |
| {Constant(1), ResolutionDivided(16), ResolutionDivided(16), ClassificationWidth()}); | |
| const GraphValue model23_cv3110_conv_weight = graph.DefineWeight( | |
| ValueType::kFp32, {Constant(1), Constant(3), Constant(3), ClassificationWidth()}, | |
| WeightSlot::kModel23Cv3110ConvWeight); | |
| const GraphValue model23_cv3110_conv_output = graph.DefineIntermediate( | |
| ValueType::kFp16, | |
| {Constant(1), ResolutionDivided(16), ResolutionDivided(16), ClassificationWidth()}); | |
| const GraphValue model23_cv3110_conv_bias = graph.DefineWeight( | |
| ValueType::kFp32, {ClassificationWidth()}, WeightSlot::kModel23Cv3110ConvBias); | |
| [[maybe_unused]] const GraphValue reserved_value_44 = graph.DefineIntermediate( | |
| ValueType::kFp16, | |
| {Constant(1), ResolutionDivided(16), ResolutionDivided(16), ClassificationWidth()}); | |
| const GraphValue model23_cv3110_conv_activation = graph.DefineIntermediate( | |
| ValueType::kFp16, | |
| {Constant(1), ResolutionDivided(16), ResolutionDivided(16), ClassificationWidth()}); | |
| const GraphValue model23_cv3111_conv_weight = graph.DefineWeight( | |
| ValueType::kFp32, {ClassificationWidth(), Constant(1), Constant(1), ClassificationWidth()}, | |
| WeightSlot::kModel23Cv3111ConvWeight); | |
| [[maybe_unused]] const GraphValue reserved_value_47 = graph.DefineIntermediate( | |
| ValueType::kFp16, | |
| {Constant(1), ResolutionDivided(16), ResolutionDivided(16), ClassificationWidth()}); | |
| const GraphValue model23_cv3111_conv_bias = graph.DefineWeight( | |
| ValueType::kFp32, {ClassificationWidth()}, WeightSlot::kModel23Cv3111ConvBias); | |
| [[maybe_unused]] const GraphValue reserved_value_49 = graph.DefineIntermediate( | |
| ValueType::kFp16, | |
| {Constant(1), ResolutionDivided(16), ResolutionDivided(16), ClassificationWidth()}); | |
| const GraphValue model23_cv3111_conv_output = graph.DefineIntermediate( | |
| ValueType::kFp16, | |
| {Constant(1), ResolutionDivided(16), ResolutionDivided(16), ClassificationWidth()}); | |
| const GraphValue model23_cv312_weight = graph.DefineWeight( | |
| ValueType::kFp32, {ClassCount(), Constant(1), Constant(1), ClassificationWidth()}, | |
| WeightSlot::kModel23Cv312Weight); | |
| const GraphValue model23_cv312_output = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(16), ResolutionDivided(16), ClassCount()}); | |
| const GraphValue model23_cv312_bias = | |
| graph.DefineWeight(ValueType::kFp32, {ClassCount()}, WeightSlot::kModel23Cv312Bias); | |
| const GraphValue transpose_2_output = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ClassCount(), ResolutionDivided(16), ResolutionDivided(16)}); | |
| const GraphValue reshape_2_output = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ClassCount(), ResolutionDividedSquared(16)}); | |
| const GraphValue model23_cv3200_conv_weight = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(1), Constant(3), Constant(3), Constant(256)}, | |
| WeightSlot::kModel23Cv3200ConvWeight); | |
| const GraphValue model23_cv3200_conv_output = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(32), ResolutionDivided(32), Constant(256)}); | |
| const GraphValue model23_cv3200_conv_bias = | |
| graph.DefineWeight(ValueType::kFp32, {Constant(256)}, WeightSlot::kModel23Cv3200ConvBias); | |
| [[maybe_unused]] const GraphValue reserved_value_59 = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(32), ResolutionDivided(32), Constant(256)}); | |
| const GraphValue model23_cv3200_conv_activation = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(32), ResolutionDivided(32), Constant(256)}); | |
| const GraphValue model23_cv3201_conv_weight = graph.DefineWeight( | |
| ValueType::kFp32, {ClassificationWidth(), Constant(1), Constant(1), Constant(256)}, | |
| WeightSlot::kModel23Cv3201ConvWeight); | |
| [[maybe_unused]] const GraphValue reserved_value_62 = graph.DefineIntermediate( | |
| ValueType::kFp16, | |
| {Constant(1), ResolutionDivided(32), ResolutionDivided(32), ClassificationWidth()}); | |
| const GraphValue model23_cv3201_conv_bias = graph.DefineWeight( | |
| ValueType::kFp32, {ClassificationWidth()}, WeightSlot::kModel23Cv3201ConvBias); | |
| [[maybe_unused]] const GraphValue reserved_value_64 = graph.DefineIntermediate( | |
| ValueType::kFp16, | |
| {Constant(1), ResolutionDivided(32), ResolutionDivided(32), ClassificationWidth()}); | |
| const GraphValue model23_cv3201_conv_output = graph.DefineIntermediate( | |
| ValueType::kFp16, | |
| {Constant(1), ResolutionDivided(32), ResolutionDivided(32), ClassificationWidth()}); | |
| const GraphValue model23_cv3210_conv_weight = graph.DefineWeight( | |
| ValueType::kFp32, {Constant(1), Constant(3), Constant(3), ClassificationWidth()}, | |
| WeightSlot::kModel23Cv3210ConvWeight); | |
| const GraphValue model23_cv3210_conv_output = graph.DefineIntermediate( | |
| ValueType::kFp16, | |
| {Constant(1), ResolutionDivided(32), ResolutionDivided(32), ClassificationWidth()}); | |
| const GraphValue model23_cv3210_conv_bias = graph.DefineWeight( | |
| ValueType::kFp32, {ClassificationWidth()}, WeightSlot::kModel23Cv3210ConvBias); | |
| [[maybe_unused]] const GraphValue reserved_value_69 = graph.DefineIntermediate( | |
| ValueType::kFp16, | |
| {Constant(1), ResolutionDivided(32), ResolutionDivided(32), ClassificationWidth()}); | |
| const GraphValue model23_cv3210_conv_activation = graph.DefineIntermediate( | |
| ValueType::kFp16, | |
| {Constant(1), ResolutionDivided(32), ResolutionDivided(32), ClassificationWidth()}); | |
| const GraphValue model23_cv3211_conv_weight = graph.DefineWeight( | |
| ValueType::kFp32, {ClassificationWidth(), Constant(1), Constant(1), ClassificationWidth()}, | |
| WeightSlot::kModel23Cv3211ConvWeight); | |
| [[maybe_unused]] const GraphValue reserved_value_72 = graph.DefineIntermediate( | |
| ValueType::kFp16, | |
| {Constant(1), ResolutionDivided(32), ResolutionDivided(32), ClassificationWidth()}); | |
| const GraphValue model23_cv3211_conv_bias = graph.DefineWeight( | |
| ValueType::kFp32, {ClassificationWidth()}, WeightSlot::kModel23Cv3211ConvBias); | |
| [[maybe_unused]] const GraphValue reserved_value_74 = graph.DefineIntermediate( | |
| ValueType::kFp16, | |
| {Constant(1), ResolutionDivided(32), ResolutionDivided(32), ClassificationWidth()}); | |
| const GraphValue model23_cv3211_conv_output = graph.DefineIntermediate( | |
| ValueType::kFp16, | |
| {Constant(1), ResolutionDivided(32), ResolutionDivided(32), ClassificationWidth()}); | |
| const GraphValue model23_cv322_weight = graph.DefineWeight( | |
| ValueType::kFp32, {ClassCount(), Constant(1), Constant(1), ClassificationWidth()}, | |
| WeightSlot::kModel23Cv322Weight); | |
| const GraphValue model23_cv322_output = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ResolutionDivided(32), ResolutionDivided(32), ClassCount()}); | |
| const GraphValue model23_cv322_bias = | |
| graph.DefineWeight(ValueType::kFp32, {ClassCount()}, WeightSlot::kModel23Cv322Bias); | |
| const GraphValue transpose_3_output = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ClassCount(), ResolutionDivided(32), ResolutionDivided(32)}); | |
| const GraphValue reshape_3_output = graph.DefineIntermediate( | |
| ValueType::kFp16, {Constant(1), ClassCount(), ResolutionDividedSquared(32)}); | |
| const GraphValue concatenation_1 = | |
| graph.DefineIntermediate(ValueType::kFp16, {Constant(1), ClassCount(), DetectionPositions()}); | |
| const GraphValue anchors_input = | |
| graph.DefineInput(ValueType::kFp16, {Constant(1), Constant(2), DetectionPositions()}, | |
| ClassificationAndDecodeBindings::kAnchorsInput); | |
| const GraphValue box_lower_input = | |
| graph.DefineInput(ValueType::kFp16, {Constant(1), Constant(2), DetectionPositions()}, | |
| ClassificationAndDecodeBindings::kBoxLowerInput); | |
| const GraphValue difference_1 = | |
| graph.DefineIntermediate(ValueType::kFp16, {Constant(1), Constant(2), DetectionPositions()}); | |
| const GraphValue box_upper_input = | |
| graph.DefineInput(ValueType::kFp16, {Constant(1), Constant(2), DetectionPositions()}, | |
| ClassificationAndDecodeBindings::kBoxUpperInput); | |
| const GraphValue residual_sum_1 = | |
| graph.DefineIntermediate(ValueType::kFp16, {Constant(1), Constant(2), DetectionPositions()}); | |
| const GraphValue residual_sum_2 = | |
| graph.DefineIntermediate(ValueType::kFp16, {Constant(1), Constant(2), DetectionPositions()}); | |
| const GraphValue quotient_1 = | |
| graph.DefineIntermediate(ValueType::kFp16, {Constant(1), Constant(2), DetectionPositions()}); | |
| const GraphValue center_divisor_input = graph.DefineInput( | |
| ValueType::kFp16, {Constant(1)}, ClassificationAndDecodeBindings::kCenterDivisorInput); | |
| const GraphValue difference_2 = | |
| graph.DefineIntermediate(ValueType::kFp16, {Constant(1), Constant(2), DetectionPositions()}); | |
| const GraphValue concatenation_2 = | |
| graph.DefineIntermediate(ValueType::kFp16, {Constant(1), Constant(4), DetectionPositions()}); | |
| const GraphValue strides_input = | |
| graph.DefineInput(ValueType::kFp16, {Constant(1), DetectionPositions()}, | |
| ClassificationAndDecodeBindings::kStridesInput); | |
| const GraphValue product_1 = | |
| graph.DefineIntermediate(ValueType::kFp16, {Constant(1), Constant(4), DetectionPositions()}); | |
| const GraphValue sigmoid_1_output = | |
| graph.DefineIntermediate(ValueType::kFp16, {Constant(1), ClassCount(), DetectionPositions()}); | |
| const GraphValue detections_output = | |
| graph.DefineOutput(ValueType::kFp16, {Constant(1), DetectionChannels(), DetectionPositions()}, | |
| ClassificationAndDecodeBindings::kDetectionsOutput); | |
| if (!graph.DefinitionsValid()) return false; | |
| if (!graph.DepthwiseConvolution( | |
| p3_input, model23_cv3000_conv_weight, model23_cv3000_conv_bias, | |
| model23_cv3000_conv_output, Padding{Constant(1), Constant(1), Constant(1), Constant(1)}, | |
| Kernel{Constant(3), Constant(3)}, Stride{Constant(1), Constant(1)}, | |
| Dilation{Constant(1), Constant(1)}, Groups{Constant(64), Constant(1), Constant(1)}, 0)) | |
| return false; | |
| if (!graph.Silu(model23_cv3000_conv_output, model23_cv3000_conv_activation, 0)) return false; | |
| if (!graph.Convolution(model23_cv3000_conv_activation, model23_cv3001_conv_weight, | |
| model23_cv3001_conv_bias, model23_cv3001_conv_output, | |
| Padding{Constant(0), Constant(0), Constant(0), Constant(0)}, | |
| Kernel{Constant(1), Constant(1)}, Stride{Constant(1), Constant(1)}, | |
| Dilation{Constant(1), Constant(1)}, | |
| Groups{Constant(1), Constant(64), ClassificationWidth()}, | |
| XNN_FLAG_YOLO26_GEMM_SILU_FINAL_STORE)) | |
| return false; | |
| if (!graph.DepthwiseConvolution( | |
| model23_cv3001_conv_output, model23_cv3010_conv_weight, model23_cv3010_conv_bias, | |
| model23_cv3010_conv_output, Padding{Constant(1), Constant(1), Constant(1), Constant(1)}, | |
| Kernel{Constant(3), Constant(3)}, Stride{Constant(1), Constant(1)}, | |
| Dilation{Constant(1), Constant(1)}, | |
| Groups{ClassificationWidth(), Constant(1), Constant(1)}, 0)) | |
| return false; | |
| if (!graph.Silu(model23_cv3010_conv_output, model23_cv3010_conv_activation, 0)) return false; | |
| if (!graph.Convolution(model23_cv3010_conv_activation, model23_cv3011_conv_weight, | |
| model23_cv3011_conv_bias, model23_cv3011_conv_output, | |
| Padding{Constant(0), Constant(0), Constant(0), Constant(0)}, | |
| Kernel{Constant(1), Constant(1)}, Stride{Constant(1), Constant(1)}, | |
| Dilation{Constant(1), Constant(1)}, | |
| Groups{Constant(1), ClassificationWidth(), ClassificationWidth()}, | |
| XNN_FLAG_YOLO26_GEMM_SILU_FINAL_STORE)) | |
| return false; | |
| if (!graph.Convolution(model23_cv3011_conv_output, model23_cv302_weight, model23_cv302_bias, | |
| model23_cv302_output, | |
| Padding{Constant(0), Constant(0), Constant(0), Constant(0)}, | |
| Kernel{Constant(1), Constant(1)}, Stride{Constant(1), Constant(1)}, | |
| Dilation{Constant(1), Constant(1)}, | |
| Groups{Constant(1), ClassificationWidth(), ClassCount()}, 0)) | |
| return false; | |
| if (!graph.Transpose(model23_cv302_output, transpose_1_output, | |
| {Constant(0), Constant(3), Constant(1), Constant(2)}, 0)) | |
| return false; | |
| if (!graph.Reshape(transpose_1_output, reshape_1_output, {Constant(1), ClassCount(), Constant(0)}, | |
| 0)) | |
| return false; | |
| if (!graph.DepthwiseConvolution( | |
| p4_input, model23_cv3100_conv_weight, model23_cv3100_conv_bias, | |
| model23_cv3100_conv_output, Padding{Constant(1), Constant(1), Constant(1), Constant(1)}, | |
| Kernel{Constant(3), Constant(3)}, Stride{Constant(1), Constant(1)}, | |
| Dilation{Constant(1), Constant(1)}, Groups{Constant(128), Constant(1), Constant(1)}, 0)) | |
| return false; | |
| if (!graph.Silu(model23_cv3100_conv_output, model23_cv3100_conv_activation, 0)) return false; | |
| if (!graph.Convolution(model23_cv3100_conv_activation, model23_cv3101_conv_weight, | |
| model23_cv3101_conv_bias, model23_cv3101_conv_output, | |
| Padding{Constant(0), Constant(0), Constant(0), Constant(0)}, | |
| Kernel{Constant(1), Constant(1)}, Stride{Constant(1), Constant(1)}, | |
| Dilation{Constant(1), Constant(1)}, | |
| Groups{Constant(1), Constant(128), ClassificationWidth()}, | |
| XNN_FLAG_YOLO26_GEMM_SILU_FINAL_STORE)) | |
| return false; | |
| if (!graph.DepthwiseConvolution( | |
| model23_cv3101_conv_output, model23_cv3110_conv_weight, model23_cv3110_conv_bias, | |
| model23_cv3110_conv_output, Padding{Constant(1), Constant(1), Constant(1), Constant(1)}, | |
| Kernel{Constant(3), Constant(3)}, Stride{Constant(1), Constant(1)}, | |
| Dilation{Constant(1), Constant(1)}, | |
| Groups{ClassificationWidth(), Constant(1), Constant(1)}, 0)) | |
| return false; | |
| if (!graph.Silu(model23_cv3110_conv_output, model23_cv3110_conv_activation, 0)) return false; | |
| if (!graph.Convolution(model23_cv3110_conv_activation, model23_cv3111_conv_weight, | |
| model23_cv3111_conv_bias, model23_cv3111_conv_output, | |
| Padding{Constant(0), Constant(0), Constant(0), Constant(0)}, | |
| Kernel{Constant(1), Constant(1)}, Stride{Constant(1), Constant(1)}, | |
| Dilation{Constant(1), Constant(1)}, | |
| Groups{Constant(1), ClassificationWidth(), ClassificationWidth()}, | |
| XNN_FLAG_YOLO26_GEMM_SILU_FINAL_STORE)) | |
| return false; | |
| if (!graph.Convolution(model23_cv3111_conv_output, model23_cv312_weight, model23_cv312_bias, | |
| model23_cv312_output, | |
| Padding{Constant(0), Constant(0), Constant(0), Constant(0)}, | |
| Kernel{Constant(1), Constant(1)}, Stride{Constant(1), Constant(1)}, | |
| Dilation{Constant(1), Constant(1)}, | |
| Groups{Constant(1), ClassificationWidth(), ClassCount()}, 0)) | |
| return false; | |
| if (!graph.Transpose(model23_cv312_output, transpose_2_output, | |
| {Constant(0), Constant(3), Constant(1), Constant(2)}, 0)) | |
| return false; | |
| if (!graph.Reshape(transpose_2_output, reshape_2_output, {Constant(1), ClassCount(), Constant(0)}, | |
| 0)) | |
| return false; | |
| if (!graph.DepthwiseConvolution( | |
| p5_input, model23_cv3200_conv_weight, model23_cv3200_conv_bias, | |
| model23_cv3200_conv_output, Padding{Constant(1), Constant(1), Constant(1), Constant(1)}, | |
| Kernel{Constant(3), Constant(3)}, Stride{Constant(1), Constant(1)}, | |
| Dilation{Constant(1), Constant(1)}, Groups{Constant(256), Constant(1), Constant(1)}, 0)) | |
| return false; | |
| if (!graph.Silu(model23_cv3200_conv_output, model23_cv3200_conv_activation, 0)) return false; | |
| if (!graph.Convolution(model23_cv3200_conv_activation, model23_cv3201_conv_weight, | |
| model23_cv3201_conv_bias, model23_cv3201_conv_output, | |
| Padding{Constant(0), Constant(0), Constant(0), Constant(0)}, | |
| Kernel{Constant(1), Constant(1)}, Stride{Constant(1), Constant(1)}, | |
| Dilation{Constant(1), Constant(1)}, | |
| Groups{Constant(1), Constant(256), ClassificationWidth()}, | |
| XNN_FLAG_YOLO26_GEMM_SILU_FINAL_STORE)) | |
| return false; | |
| if (!graph.DepthwiseConvolution( | |
| model23_cv3201_conv_output, model23_cv3210_conv_weight, model23_cv3210_conv_bias, | |
| model23_cv3210_conv_output, Padding{Constant(1), Constant(1), Constant(1), Constant(1)}, | |
| Kernel{Constant(3), Constant(3)}, Stride{Constant(1), Constant(1)}, | |
| Dilation{Constant(1), Constant(1)}, | |
| Groups{ClassificationWidth(), Constant(1), Constant(1)}, 0)) | |
| return false; | |
| if (!graph.Silu(model23_cv3210_conv_output, model23_cv3210_conv_activation, 0)) return false; | |
| if (!graph.Convolution(model23_cv3210_conv_activation, model23_cv3211_conv_weight, | |
| model23_cv3211_conv_bias, model23_cv3211_conv_output, | |
| Padding{Constant(0), Constant(0), Constant(0), Constant(0)}, | |
| Kernel{Constant(1), Constant(1)}, Stride{Constant(1), Constant(1)}, | |
| Dilation{Constant(1), Constant(1)}, | |
| Groups{Constant(1), ClassificationWidth(), ClassificationWidth()}, | |
| XNN_FLAG_YOLO26_GEMM_SILU_FINAL_STORE)) | |
| return false; | |
| if (!graph.Convolution(model23_cv3211_conv_output, model23_cv322_weight, model23_cv322_bias, | |
| model23_cv322_output, | |
| Padding{Constant(0), Constant(0), Constant(0), Constant(0)}, | |
| Kernel{Constant(1), Constant(1)}, Stride{Constant(1), Constant(1)}, | |
| Dilation{Constant(1), Constant(1)}, | |
| Groups{Constant(1), ClassificationWidth(), ClassCount()}, 0)) | |
| return false; | |
| if (!graph.Transpose(model23_cv322_output, transpose_3_output, | |
| {Constant(0), Constant(3), Constant(1), Constant(2)}, 0)) | |
| return false; | |
| if (!graph.Reshape(transpose_3_output, reshape_3_output, {Constant(1), ClassCount(), Constant(0)}, | |
| 0)) | |
| return false; | |
| if (!graph.Concatenate({reshape_1_output, reshape_2_output, reshape_3_output}, concatenation_1, | |
| Constant(2), 0)) | |
| return false; | |
| if (!graph.Subtract(anchors_input, box_lower_input, difference_1, 0)) return false; | |
| if (!graph.Add(anchors_input, box_upper_input, residual_sum_1, 0)) return false; | |
| if (!graph.Add(difference_1, residual_sum_1, residual_sum_2, 0)) return false; | |
| if (!graph.Divide(residual_sum_2, center_divisor_input, quotient_1, 0)) return false; | |
| if (!graph.Subtract(residual_sum_1, difference_1, difference_2, 0)) return false; | |
| if (!graph.Concatenate({quotient_1, difference_2}, concatenation_2, Constant(1), 0)) return false; | |
| if (!graph.Multiply(concatenation_2, strides_input, product_1, 0)) return false; | |
| if (!graph.Sigmoid(concatenation_1, sigmoid_1_output, 0)) return false; | |
| if (!graph.Concatenate({product_1, sigmoid_1_output}, detections_output, Constant(1), 0)) | |
| return false; | |
| return graph.Finish(); | |
| } | |