diff --git a/testdata/dnn/download_models.py b/testdata/dnn/download_models.py index 819b2c2d6..0fc3a4e6c 100755 --- a/testdata/dnn/download_models.py +++ b/testdata/dnn/download_models.py @@ -963,13 +963,12 @@ def is_archive(self): sha='2b181b55d1d7af718eaca6cabdeb741217b64c73', filename='wechat_2021-01/sr.caffemodel'), Model( - name='yolov7_not_simplified', + name='yolov7', url=[ - 'https://docs.google.com/uc?export=download&id=1ljSh81ydO5ylsnDoV_mt3zj5RX_cgLu8', - 'https://dl.opencv.org/models/yolov7/yolov7_not_simplified.onnx' + 'https://dl.opencv.org/models/yolov7/yolov7.onnx' ], - sha='fcd0fa401c83bf2b29e18239a9c2c989c9b8669d', - filename='onnx/models/yolov7_not_simplified.onnx'), + sha='9f5199c266418462771a26a7b8ea25a90412ce2e', + filename='onnx/models/yolov7.onnx'), Model( name='yolox_s_inf_decoder', url=[ @@ -988,6 +987,13 @@ def is_archive(self): url='https://dl.opencv.org/models/yolov8/yolov8n.onnx', sha='136807b88d0b02bc226bdeb9741141d857752e10', filename='onnx/models/yolov8n.onnx'), + + Model( + name='yolo_nas_s', + url='https://dl.opencv.org/models/yolo-nas/yolo_nas_s.onnx', + sha='089942fbdf8591875a7a6ff10ac50fb6864e7aa4', + filename='onnx/models/yolo_nas_s.onnx'), + Model( name='NanoTrackV1 (ONNX, backbone)', url='https://raw.githubusercontent.com/zihaomu/opencv_extra_data_backup/main/NanoTrack/models/nanotrack_backbone_sim.onnx', diff --git a/testdata/dnn/onnx/conformance/node/test_group_normalization_epsilon/model.onnx b/testdata/dnn/onnx/conformance/node/test_group_normalization_epsilon/model.onnx new file mode 100644 index 000000000..8e101324c Binary files /dev/null and b/testdata/dnn/onnx/conformance/node/test_group_normalization_epsilon/model.onnx differ diff --git a/testdata/dnn/onnx/conformance/node/test_group_normalization_epsilon/test_data_set_0/input_0.pb b/testdata/dnn/onnx/conformance/node/test_group_normalization_epsilon/test_data_set_0/input_0.pb new file mode 100644 index 000000000..fe9ab9da0 --- /dev/null +++ b/testdata/dnn/onnx/conformance/node/test_group_normalization_epsilon/test_data_set_0/input_0.pb @@ -0,0 +1 @@ +BxJx?h>z?j@$ ?.z8s?bhdӽ9>(>%?^B?0= B>]ת>=?RiJ>Z/d#S'?K]?=C@(Hm;= ?2??>>Ec! >*z??Oƾmǚ6&õgڿ?xFKྙ[ G? \ No newline at end of file diff --git a/testdata/dnn/onnx/conformance/node/test_group_normalization_epsilon/test_data_set_0/input_1.pb b/testdata/dnn/onnx/conformance/node/test_group_normalization_epsilon/test_data_set_0/input_1.pb new file mode 100644 index 000000000..7282ad4ad --- /dev/null +++ b/testdata/dnn/onnx/conformance/node/test_group_normalization_epsilon/test_data_set_0/input_1.pb @@ -0,0 +1 @@ +BscaleJ4οYL=e> \ No newline at end of file diff --git a/testdata/dnn/onnx/conformance/node/test_group_normalization_epsilon/test_data_set_0/input_2.pb b/testdata/dnn/onnx/conformance/node/test_group_normalization_epsilon/test_data_set_0/input_2.pb new file mode 100644 index 000000000..92aff8b7e --- /dev/null +++ b/testdata/dnn/onnx/conformance/node/test_group_normalization_epsilon/test_data_set_0/input_2.pb @@ -0,0 +1 @@ +BbiasJ kQN> \ No newline at end of file diff --git a/testdata/dnn/onnx/conformance/node/test_group_normalization_epsilon/test_data_set_0/output_0.pb b/testdata/dnn/onnx/conformance/node/test_group_normalization_epsilon/test_data_set_0/output_0.pb new file mode 100644 index 000000000..ffa434be7 Binary files /dev/null and b/testdata/dnn/onnx/conformance/node/test_group_normalization_epsilon/test_data_set_0/output_0.pb differ diff --git a/testdata/dnn/onnx/conformance/node/test_group_normalization_example/model.onnx b/testdata/dnn/onnx/conformance/node/test_group_normalization_example/model.onnx new file mode 100644 index 000000000..a9e565e3c Binary files /dev/null and b/testdata/dnn/onnx/conformance/node/test_group_normalization_example/model.onnx differ diff --git a/testdata/dnn/onnx/conformance/node/test_group_normalization_example/test_data_set_0/input_0.pb b/testdata/dnn/onnx/conformance/node/test_group_normalization_example/test_data_set_0/input_0.pb new file mode 100644 index 000000000..fe9ab9da0 --- /dev/null +++ b/testdata/dnn/onnx/conformance/node/test_group_normalization_example/test_data_set_0/input_0.pb @@ -0,0 +1 @@ +BxJx?h>z?j@$ ?.z8s?bhdӽ9>(>%?^B?0= B>]ת>=?RiJ>Z/d#S'?K]?=C@(Hm;= ?2??>>Ec! >*z??Oƾmǚ6&õgڿ?xFKྙ[ G? \ No newline at end of file diff --git a/testdata/dnn/onnx/conformance/node/test_group_normalization_example/test_data_set_0/input_1.pb b/testdata/dnn/onnx/conformance/node/test_group_normalization_example/test_data_set_0/input_1.pb new file mode 100644 index 000000000..7282ad4ad --- /dev/null +++ b/testdata/dnn/onnx/conformance/node/test_group_normalization_example/test_data_set_0/input_1.pb @@ -0,0 +1 @@ +BscaleJ4οYL=e> \ No newline at end of file diff --git a/testdata/dnn/onnx/conformance/node/test_group_normalization_example/test_data_set_0/input_2.pb b/testdata/dnn/onnx/conformance/node/test_group_normalization_example/test_data_set_0/input_2.pb new file mode 100644 index 000000000..92aff8b7e --- /dev/null +++ b/testdata/dnn/onnx/conformance/node/test_group_normalization_example/test_data_set_0/input_2.pb @@ -0,0 +1 @@ +BbiasJ kQN> \ No newline at end of file diff --git a/testdata/dnn/onnx/conformance/node/test_group_normalization_example/test_data_set_0/output_0.pb b/testdata/dnn/onnx/conformance/node/test_group_normalization_example/test_data_set_0/output_0.pb new file mode 100644 index 000000000..a5bebd8a4 --- /dev/null +++ b/testdata/dnn/onnx/conformance/node/test_group_normalization_example/test_data_set_0/output_0.pb @@ -0,0 +1,2 @@ +ByJ!,>>()NKew?4U*=?:2?>z>@>D.!оu>J>8b?> ?G?86B?>|>+?@ YA\}Uz> +7?ڇo?Q<#>W>&>TV? \ No newline at end of file diff --git a/testdata/dnn/onnx/data/input_layer_norm_no_fusion.npy b/testdata/dnn/onnx/data/input_layer_norm_no_fusion.npy new file mode 100644 index 000000000..1e38e7947 Binary files /dev/null and b/testdata/dnn/onnx/data/input_layer_norm_no_fusion.npy differ diff --git a/testdata/dnn/onnx/data/output_layer_norm_no_fusion.npy b/testdata/dnn/onnx/data/output_layer_norm_no_fusion.npy new file mode 100644 index 000000000..f47a86caf Binary files /dev/null and b/testdata/dnn/onnx/data/output_layer_norm_no_fusion.npy differ diff --git a/testdata/dnn/onnx/generate_onnx_models_with_onnxscript.py b/testdata/dnn/onnx/generate_onnx_models_with_onnxscript.py index dc5942247..c908b7cf0 100644 --- a/testdata/dnn/onnx/generate_onnx_models_with_onnxscript.py +++ b/testdata/dnn/onnx/generate_onnx_models_with_onnxscript.py @@ -3,6 +3,8 @@ import onnx import onnxscript as ost from onnxscript import opset19 as op # opset19 is the lastest by 202309 +from onnxscript import opset11 +from onnxscript import opset13 np.random.seed(0) @@ -69,8 +71,6 @@ def greater_input_dtype_int64(x: ost.FLOAT[27, 9]) ->ost.BOOL[27, 9]: return y make_model_and_data(greater_input_dtype_int64, np.random.randint(0, 100, size=[27, 9], dtype=np.int64), force_saving_input_as_dtype_float32=True, force_saving_output_as_dtype_float32=True) -from onnxscript import opset11 - @ost.script() def two_resizes_with_shared_subgraphs(x: ost.FLOAT["batch", 1, "height", "width"], y: ost.FLOAT[1, 1, 3, 2], z: ost.FLOAT[1, 1, 2, 1]) ->ost.FLOAT["batch", 1, "height", "width"]: shape_src_1 = opset11.Shape(x) @@ -310,3 +310,32 @@ def einsum_const_inputs(input_0: ost.FLOAT[3, 2, 2, 4]) -> ost.FLOAT[3, 2, 2, 2] return op.Einsum(input_0, input_1, equation="bhwc, hkc -> bhwk") make_model_and_data(einsum_const_inputs, input_0_data) + +''' This subgraph looks the same as LayerNorm expanded, but it has + axes=1 in ReduceMean which does not meet the requirement of LayerNorm: + - axes[-1] = -1 or the axis of last dimension + - adjacent axes, e.g. [1, 2, 3] or [-3, -2, -1] +''' + +n = 1 +c = 4 +h = w = 8 +mul_weight = np.random.rand(c, 1, 1).astype(np.float32) +add_weight = np.random.rand(c, 1, 1).astype(np.float32) + +@ost.script() +def layer_norm_no_fusion(x: ost.FLOAT[n, c, h, w]) -> ost.FLOAT[n, c, h, w]: + reduce_mean = opset13.ReduceMean(x, axes=[1], keepdims=1) + sub = opset13.Sub(x, reduce_mean) + + pow = opset13.Pow(sub, opset13.Constant(value=onnx.helper.make_tensor("", onnx.TensorProto.FLOAT, [], np.array([2], dtype=np.float32)))) + reduce_mean_1 = opset13.ReduceMean(pow, axes=[1], keepdims=1) + add = opset13.Add(reduce_mean_1, opset13.Constant(value=onnx.helper.make_tensor("", onnx.TensorProto.FLOAT, [], np.array([9.999999974752427e-7], dtype=np.float32)))) + sqrt = opset13.Sqrt(add) + + div = opset13.Div(sub, sqrt) + mul = opset13.Mul(opset13.Constant(value=onnx.helper.make_tensor("", onnx.TensorProto.FLOAT, [c, 1, 1], mul_weight)), div) + add = opset13.Add(mul, opset13.Constant(value=onnx.helper.make_tensor("", onnx.TensorProto.FLOAT, [c, 1, 1], add_weight))) + + return add +make_model_and_data(layer_norm_no_fusion, np.random.rand(n, c, h, w).astype(np.float32)) diff --git a/testdata/dnn/onnx/models/layer_norm_no_fusion.onnx b/testdata/dnn/onnx/models/layer_norm_no_fusion.onnx new file mode 100644 index 000000000..2e080b8b5 Binary files /dev/null and b/testdata/dnn/onnx/models/layer_norm_no_fusion.onnx differ