From 1f5b973a54563f13acf21a1317ea306473b5ad4f Mon Sep 17 00:00:00 2001 From: Smirnov Egor Date: Wed, 25 Aug 2021 16:30:07 +0300 Subject: [PATCH 1/2] tests for Normalize subgraph, Slice, Mul and Expand --- testdata/dnn/onnx/data/input_expand.npy | Bin 0 -> 224 bytes .../onnx/data/input_reduceL2_subgraph2_2.npy | Bin 0 -> 224 bytes .../onnx/data/input_scale_broadcast_mid_0.npy | Bin 0 -> 160 bytes .../onnx/data/input_scale_broadcast_mid_1.npy | Bin 0 -> 288 bytes .../dnn/onnx/data/input_slice_neg_starts.npy | Bin 0 -> 168 bytes .../dnn/onnx/data/input_split_neg_axis.npy | Bin 0 -> 168 bytes testdata/dnn/onnx/data/output_expand.npy | Bin 0 -> 416 bytes .../onnx/data/output_reduceL2_subgraph2_2.npy | Bin 0 -> 224 bytes .../onnx/data/output_scale_broadcast_mid.npy | Bin 0 -> 288 bytes .../dnn/onnx/data/output_slice_neg_starts.npy | Bin 0 -> 132 bytes .../dnn/onnx/data/output_split_neg_axis.npy | Bin 0 -> 168 bytes testdata/dnn/onnx/generate_onnx_models.py | 74 ++++++++++++++++++ testdata/dnn/onnx/models/expand.onnx | Bin 0 -> 185 bytes .../dnn/onnx/models/reduceL2_subgraph2_2.onnx | Bin 0 -> 393 bytes .../dnn/onnx/models/scale_broadcast_mid.onnx | 19 +++++ .../dnn/onnx/models/slice_neg_starts.onnx | Bin 0 -> 157 bytes testdata/dnn/onnx/models/split_neg_axis.onnx | Bin 0 -> 216 bytes 17 files changed, 93 insertions(+) create mode 100644 testdata/dnn/onnx/data/input_expand.npy create mode 100644 testdata/dnn/onnx/data/input_reduceL2_subgraph2_2.npy create mode 100644 testdata/dnn/onnx/data/input_scale_broadcast_mid_0.npy create mode 100644 testdata/dnn/onnx/data/input_scale_broadcast_mid_1.npy create mode 100644 testdata/dnn/onnx/data/input_slice_neg_starts.npy create mode 100644 testdata/dnn/onnx/data/input_split_neg_axis.npy create mode 100644 testdata/dnn/onnx/data/output_expand.npy create mode 100644 testdata/dnn/onnx/data/output_reduceL2_subgraph2_2.npy create mode 100644 testdata/dnn/onnx/data/output_scale_broadcast_mid.npy create mode 100644 testdata/dnn/onnx/data/output_slice_neg_starts.npy create mode 100644 testdata/dnn/onnx/data/output_split_neg_axis.npy create mode 100644 testdata/dnn/onnx/models/expand.onnx create mode 100644 testdata/dnn/onnx/models/reduceL2_subgraph2_2.onnx create mode 100644 testdata/dnn/onnx/models/scale_broadcast_mid.onnx create mode 100644 testdata/dnn/onnx/models/slice_neg_starts.onnx create mode 100644 testdata/dnn/onnx/models/split_neg_axis.onnx diff --git a/testdata/dnn/onnx/data/input_expand.npy b/testdata/dnn/onnx/data/input_expand.npy new file mode 100644 index 0000000000000000000000000000000000000000..5c2c1c1217bc874fb7f5634c5b329e3e4d60bfda GIT binary patch literal 224 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+l>qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I$-Its=*3Pw5#CYm}5wF+bat~r_+``0&#?+;6tvWs@^Czwr}#?rhNc4=1Ls^ literal 0 HcmV?d00001 diff --git a/testdata/dnn/onnx/data/input_reduceL2_subgraph2_2.npy b/testdata/dnn/onnx/data/input_reduceL2_subgraph2_2.npy new file mode 100644 index 0000000000000000000000000000000000000000..a69a25a2a616ba7bcd198edd981426f23f0f3ddc GIT binary patch literal 224 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+l>qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I$-Its=*3Pw5#CYm}5wF+bauHPXn`wq;D-+Ni;qTL~#3HIOCf49HqoAIaUsO_*m=~X4l#&V(cT3DEP6dh= gXCxM+0{I$7Itqq53MQI53bhL40WJoH277!M04rA^f&c&j literal 0 HcmV?d00001 diff --git a/testdata/dnn/onnx/data/input_scale_broadcast_mid_1.npy b/testdata/dnn/onnx/data/input_scale_broadcast_mid_1.npy new file mode 100644 index 0000000000000000000000000000000000000000..4175e2dc7bfe8dde3ae97970325a4bb79489ea43 GIT binary patch literal 288 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+l>qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= gXCxM+0{I$7Itr#b3MQI53bhL40WJoH2K&K`0pUS8W&i*H literal 0 HcmV?d00001 diff --git a/testdata/dnn/onnx/data/input_slice_neg_starts.npy b/testdata/dnn/onnx/data/input_slice_neg_starts.npy new file mode 100644 index 0000000000000000000000000000000000000000..86f46753d4af7aa46038afbab349f31130db3bed GIT binary patch literal 168 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+l>qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= xXCxM+0{I$-20EHL3bhL411<(IXs`!T4nPFN4M4mAhz|hq10ZH_WMB|*1ONrZAvpj5 literal 0 HcmV?d00001 diff --git a/testdata/dnn/onnx/data/input_split_neg_axis.npy b/testdata/dnn/onnx/data/input_split_neg_axis.npy new file mode 100644 index 0000000000000000000000000000000000000000..86f46753d4af7aa46038afbab349f31130db3bed GIT binary patch literal 168 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+l>qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= xXCxM+0{I$-20EHL3bhL411<(IXs`!T4nPFN4M4mAhz|hq10ZH_WMB|*1ONrZAvpj5 literal 0 HcmV?d00001 diff --git a/testdata/dnn/onnx/data/output_expand.npy b/testdata/dnn/onnx/data/output_expand.npy new file mode 100644 index 0000000000000000000000000000000000000000..dd95e515f45f0538874f332f42949a1b9d77be5c GIT binary patch literal 416 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+l>qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I$-Its>MWTc~DqN$@$t3WE?nxmPqe|?kq{;+f@yI7aj{qIUF_IK{%J@AY} ze?N->i@jU7{Qm6x*nO*wf9?BJ>S^B|amQ9qt#d!y(|3C%b(;1^htJ%9`s)`vzQnov dqhiqoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I$-Its=*3Pw5#CYm}5wF+bauGG&?`(AzDwnuwonVp6qk3G}pBKv!s!uALL z*xPSf>bK9?B4oct-nxBmM}zjyJLR^|bGh`s+mD#`W*j_f*KT3Azhgd|z4W|-{Vn~> a`;DRl_BST=+AT>7+;3aOY2O&BydMCLTu6}s literal 0 HcmV?d00001 diff --git a/testdata/dnn/onnx/data/output_scale_broadcast_mid.npy b/testdata/dnn/onnx/data/output_scale_broadcast_mid.npy new file mode 100644 index 0000000000000000000000000000000000000000..4175e2dc7bfe8dde3ae97970325a4bb79489ea43 GIT binary patch literal 288 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+l>qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= gXCxM+0{I$7Itr#b3MQI53bhL40WJoH2K&K`0pUS8W&i*H literal 0 HcmV?d00001 diff --git a/testdata/dnn/onnx/data/output_slice_neg_starts.npy b/testdata/dnn/onnx/data/output_slice_neg_starts.npy new file mode 100644 index 0000000000000000000000000000000000000000..a72a83f31d7dff69ec8083d302178c070107fc65 GIT binary patch literal 132 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+l>qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= ZXCxM+0{I$-I+{8PwF(pfE(QhxM*zSR8>s*Q literal 0 HcmV?d00001 diff --git a/testdata/dnn/onnx/data/output_split_neg_axis.npy b/testdata/dnn/onnx/data/output_split_neg_axis.npy new file mode 100644 index 0000000000000000000000000000000000000000..86f46753d4af7aa46038afbab349f31130db3bed GIT binary patch literal 168 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+l>qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= xXCxM+0{I$-20EHL3bhL411<(IXs`!T4nPFN4M4mAhz|hq10ZH_WMB|*1ONrZAvpj5 literal 0 HcmV?d00001 diff --git a/testdata/dnn/onnx/generate_onnx_models.py b/testdata/dnn/onnx/generate_onnx_models.py index 35261ff2c..534aa8731 100644 --- a/testdata/dnn/onnx/generate_onnx_models.py +++ b/testdata/dnn/onnx/generate_onnx_models.py @@ -7,6 +7,7 @@ import numpy as np import os.path import onnx +import onnxsim import google.protobuf.text_format import io @@ -71,6 +72,14 @@ def save_onnx_data_and_model(input, output, name, operation, *args, **kwargs): model = onnx.helper.make_model(graph, producer_name=name) onnx.save(model, models_files) +def simplify(name, rename=False, **kwargs): + model, check = onnxsim.simplify(name, **kwargs) + assert check, "couldn't valide" + name = name[:-5] + if rename: + name += '_optimized' + onnx.save(model, name + '.onnx') + torch.manual_seed(0) np.random.seed(0) @@ -411,6 +420,17 @@ def forward(self, x): save_data_and_model("slice", input, model) save_data_and_model("slice_opset_11", input, model, version=11) +class SliceStarts(nn.Module): + def __init__(self, *args, **kwargs): + super(SliceStarts, self).__init__() + + def forward(self, x): + return x[-1:] + +model = SliceStarts() +input_ = Variable(torch.tensor(list(range(10)), dtype=torch.float32)) +save_data_and_model("slice_neg_starts", input_, model) + input_2 = Variable(torch.randn(6, 6)) custom_slice_list = [ slice(1, 3, 1), @@ -572,6 +592,18 @@ def forward(self, x): input_ = Variable(torch.tensor(list(range(20)), dtype=torch.float32)) save_data_and_model("split_sizes", input_, model) +class SplitAxis(nn.Module): + def __init__(self, *args, **kwargs): + super(SplitAxis, self).__init__() + + def forward(self, x): + tup = torch.split(x, 2, -1) + return torch.cat(tup) + +model = SplitAxis() +input_ = Variable(torch.tensor(list(range(10)), dtype=torch.float32)) +save_data_and_model("split_neg_axis", input_, model) + class SplitMax(nn.Module): def __init__(self): @@ -839,6 +871,19 @@ def forward(self, x): output = np.mean(x, axis=2, keepdims=True) save_onnx_data_and_model(x, output, 'reduce_mean_axis2', 'ReduceMean', axes=(2), keepdims=True) +class Expand(nn.Module): + def __init__(self): + super(Expand, self).__init__() + + def forward(self, x): + return x.expand(1, 3, -1, -1, -1) + +input = Variable(torch.randn(1, 3, 2, 4)) +model = Expand() +model.eval() +save_data_and_model("expand", input, model, export_params=True, version=12) +simplify('models/expand.onnx', False) + class Expand(nn.Module): def __init__(self, shape): super(Expand, self).__init__() @@ -907,6 +952,23 @@ def forward(self, x): x = Variable(torch.randn(1, 2, 3, 4)) save_data_and_model("reduceL2_subgraph_2", x, model) +class reduceL2_subgraph2_2(nn.Module): + def __init__(self): + super(reduceL2_subgraph2_2, self).__init__() + self.size = torch.Size([1, 3, 2, 4]) + + def forward(self, x): + norm = torch.norm(x, p=2, dim=1, keepdim=True) + clip = torch.clamp(norm, min=0) + expand = clip.expand([1, 3, 2, 4]) + return x / expand + +input = Variable(torch.randn(1, 3, 2, 4)) +model = reduceL2_subgraph2_2() +model.eval() +save_data_and_model("reduceL2_subgraph2_2", input, model, export_params=True, version=12) +simplify('models/reduceL2_subgraph2_2.onnx', False) + from torchvision.ops.misc import * n = 3 model = FrozenBatchNorm2d(n) @@ -1134,6 +1196,18 @@ def forward(self, x): model = Scale() save_data_and_model("scale", x, model) +class ScaleBroadcastMid(nn.Module): + def __init__(self, *args, **kwargs): + super(ScaleBroadcastMid, self).__init__() + + def forward(self, x0, x1): + return torch.mul(x0, x1) + +model = ScaleBroadcastMid() +input_0 = Variable(torch.ones(2, 1, 4, dtype=torch.float32)) +input_1 = Variable(torch.ones(2, 5, 4, dtype=torch.float32)) +save_data_and_model_multy_inputs("scale_broadcast_mid", model, input_0, input_1) + x = Variable(torch.randn(1, 3, 25)) conv1d = nn.Conv1d(3, 2, kernel_size=3, padding=2, stride=2, dilation=2, bias=False) save_data_and_model("conv1d", x, conv1d) diff --git a/testdata/dnn/onnx/models/expand.onnx b/testdata/dnn/onnx/models/expand.onnx new file mode 100644 index 0000000000000000000000000000000000000000..50fabecae443557051fbd75be668cca14103f48b GIT binary patch literal 185 zcmd;J6Jjr@EXglQ&X8g@)U&i&z{n-d#c06AXd%RCDaGMhQIMFI5^t`=24M*afYs_| zWtQlsRutqHm1r4qunMp{F@Gn9t$(dj6V4MJjEA{>lD0$fZSj6lo`#7scU bk|fW?XelJcB>|KaL6U?kaAM(N5a0m-ebg4> literal 0 HcmV?d00001 diff --git a/testdata/dnn/onnx/models/reduceL2_subgraph2_2.onnx b/testdata/dnn/onnx/models/reduceL2_subgraph2_2.onnx new file mode 100644 index 0000000000000000000000000000000000000000..141301bb41b5dc7e9391c39a92802995c3dd09de GIT binary patch literal 393 zcmZ{fT}#6-6oz}!(1zo{5=2H+kX{BRi>$@%N~Ycnue|i8%r#)=$HG=e{WtzZe}X5S zA5ieX;XTQdH*X>$8N2s-wO%}`(437YpA07mjRd3c&X#WrdwX6CQ}HwFJ>>JoZZ6>i zV!e;z$y!%dFPlDXFjNQznYq9~Law5#=gJi(sO#;w-1?jf=mE)NX@AE!!hOO|IsB`O$T~=YxS_}{Dc19tYiI6opKD4-WRn;Hr@aL literal 0 HcmV?d00001 diff --git a/testdata/dnn/onnx/models/scale_broadcast_mid.onnx b/testdata/dnn/onnx/models/scale_broadcast_mid.onnx new file mode 100644 index 000000000..766bdb73e --- /dev/null +++ b/testdata/dnn/onnx/models/scale_broadcast_mid.onnx @@ -0,0 +1,19 @@ +pytorch1.9:t + +0 +12Mul_0"Multorch-jit-exportZ +0 + + + +Z +1 + + + +b +2 + + + +B \ No newline at end of file diff --git a/testdata/dnn/onnx/models/slice_neg_starts.onnx b/testdata/dnn/onnx/models/slice_neg_starts.onnx new file mode 100644 index 0000000000000000000000000000000000000000..ae751453cf440a0288d29643e23420ae8b057d48 GIT binary patch literal 157 zcmd;J6Jjr@EXglQ&X8g@)U&i|W8@0pVl)t9G?Zcw&dE$pjWikf0bBTX9KZQ3*o$KO<0FNC0esZdPWAZfZqAeo;vjKgbR) ZE)EVxAr>ws4z47ifFY6qqZ5+=Cjdv Date: Wed, 8 Sep 2021 18:03:27 +0300 Subject: [PATCH 2/2] fix expand that does nothing --- testdata/dnn/onnx/data/input_expand_identity.npy | Bin 0 -> 224 bytes testdata/dnn/onnx/data/output_expand_identity.npy | Bin 0 -> 224 bytes testdata/dnn/onnx/generate_onnx_models.py | 13 +++++++++++++ testdata/dnn/onnx/models/expand_identity.onnx | Bin 0 -> 173 bytes 4 files changed, 13 insertions(+) create mode 100644 testdata/dnn/onnx/data/input_expand_identity.npy create mode 100644 testdata/dnn/onnx/data/output_expand_identity.npy create mode 100644 testdata/dnn/onnx/models/expand_identity.onnx diff --git a/testdata/dnn/onnx/data/input_expand_identity.npy b/testdata/dnn/onnx/data/input_expand_identity.npy new file mode 100644 index 0000000000000000000000000000000000000000..b2adf81deed14f2b68df44428c44a81e2cc5da5c GIT binary patch literal 224 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+l>qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I$-Its=*3Pw5#CYm}5wF+bau2$&@`@0$@@4x2VurF5i-ab*+Nc(1WL;Kt_ z3-=w2XFm|S>b+fjz2d&xCwJH{H1Du;E!MKDy&i9W{*}qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I$-Its=*3Pw5#CYm}5wF+bau2$&@`@0$@@4x2VurF5i-ab*+Nc(1WL;Kt_ z3-=w2XFm|S>b+fjz2d&xCwJH{H1Du;E!MKDy&i9W{*}lun4d_F@Gn9t$VRRJ8WFavw5e`Nn0WKyEMj&PeVkRJF RNdih*;*xY?;bIWr0RVX_7M%b9 literal 0 HcmV?d00001