From 86f40f352e963be061f4ab722ea0ba99789f96c5 Mon Sep 17 00:00:00 2001 From: Smirnov Egor Date: Thu, 2 Sep 2021 21:28:04 +0300 Subject: [PATCH 1/4] add tests for resize+concat optimization --- testdata/dnn/tensorflow/generate_tf_models.py | 8 ++++++++ .../tensorflow/resize_concat_optimization_in.npy | Bin 0 -> 488 bytes .../tensorflow/resize_concat_optimization_net.pb | Bin 0 -> 600 bytes .../tensorflow/resize_concat_optimization_out.npy | Bin 0 -> 848 bytes 4 files changed, 8 insertions(+) create mode 100644 testdata/dnn/tensorflow/resize_concat_optimization_in.npy create mode 100644 testdata/dnn/tensorflow/resize_concat_optimization_net.pb create mode 100644 testdata/dnn/tensorflow/resize_concat_optimization_out.npy diff --git a/testdata/dnn/tensorflow/generate_tf_models.py b/testdata/dnn/tensorflow/generate_tf_models.py index 06b88aaaa..c83778e69 100644 --- a/testdata/dnn/tensorflow/generate_tf_models.py +++ b/testdata/dnn/tensorflow/generate_tf_models.py @@ -1019,6 +1019,14 @@ def pad_depth(x, desired_channels): input_down = tf.image.resize(conv, size=[hi, wi], method=0, name='resize_down') save(inp, input_down, 'resize_bilinear_down') ################################################################################ +inp = tf.placeholder(tf.float32, [1, None, None, 3], 'input') +biased = tf.nn.bias_add(inp, [1, 2, 3], data_format='NHWC') +resized1 = tf.image.resize(biased, [5, 6]) +concat = tf.concat([resized1, biased], 3) +# blob = np.random.standard_normal([1, 5, 6, 3]).astype(tf.float32.as_numpy_dtype()) +# writeBlob(blob, 'resize_concat_optimization_in') +save(inp, concat, 'resize_concat_optimization', optimize=False, is_gen_data=False) +################################################################################ # Uncomment to print the final graph. # with tf.gfile.FastGFile('fused_batch_norm_net.pb', 'rb') as f: diff --git a/testdata/dnn/tensorflow/resize_concat_optimization_in.npy b/testdata/dnn/tensorflow/resize_concat_optimization_in.npy new file mode 100644 index 0000000000000000000000000000000000000000..a56e39e32e38dc6d2557428443b832e2fd9844ca GIT binary patch literal 488 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+l>qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I$-Its=*3Z^;=W|}$*wF+baF4t!z_P+Bg>=ope?-%brWdGG-(f%tQ|Mp2# zF4*s?nQDJvnydZcx&wAr=Q#Esw9wvnQL}sh9j(Lrtz~)b{SK+vcQa4hC&n$k&+vWW zeii9S_Wn{l_N&ca*e5)myx(#TyS=dxiGy zZ>Q|5ZoIJnQsL%(>T6fqx!pZ(Z&Sl+7vSqu z+FondPW$RD-|VK$+`R9CY0ZB59TN5exkmQ&>s#&5-F|ErYs+MJa-WD@Yx}`{Q@K?4 zCp_2Q_w(`LePKE!cJIoB?5`Uv-FM<%-2Tfg|Mz(`-rF;$Qg`39@}m8R&L7yA2)ZT(66V%JF60{~L)$zA{e literal 0 HcmV?d00001 diff --git a/testdata/dnn/tensorflow/resize_concat_optimization_net.pb b/testdata/dnn/tensorflow/resize_concat_optimization_net.pb new file mode 100644 index 0000000000000000000000000000000000000000..27256c1e8fafc0cb8ff3be2619b0a2e510c30e02 GIT binary patch literal 600 zcmZ{h-%GaQ>had~o<60oj}{V=vC`L7#@`(8m(n%m!*Z+D@h*_@8Sw zwvLS%5^_iGzW2EcJONYbWLgGS*JwW^B9w8KL^9`>U=^{LNIdT~(PReN?02=c9FtLQ zgB6vZI^1jrPRD1fsH@It&$Az4)5|v7kqqFIIYkY63@|yJ!4n(5f(jd(8ROSVm z7lgZju}H?jM9pLpgfcCcFVF=i%+gTkFYC0#Ozj#j<+$ph;n#H!q-Riwp;2Wb(?6m` go;%*Z-E7cTnTwip`XQRG$pLC370vY2Y1I;vKd-x@`Tzg` literal 0 HcmV?d00001 diff --git a/testdata/dnn/tensorflow/resize_concat_optimization_out.npy b/testdata/dnn/tensorflow/resize_concat_optimization_out.npy new file mode 100644 index 0000000000000000000000000000000000000000..759289158833df27595fe5e4aed267da4673f785 GIT binary patch literal 848 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+l>qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I$-Itpew3Z_6(Q%9jzfegT}R|V+gD+dY`>)3#$nx& zTlONq_S*F*U$$RbD(bNKU9!WGa1Mv7OL!bM=W{!FaV@l$Xbf~n;ns6F>hQ&0{=S}r z=-n8H{%dj$vn4OvOFV6~=g?DgaG9;+aNxR=Lshkm!!>0NhqvCG4)XKP+i$B{YcJCL z%ASe+y!}xpeuq7CRUDp1YCHIOa5$v#D>(dhvU5n&Fm;ehVs_wortVPE@y}l3n~KA( zTa69}LRsy*|D-qw@9B5gcA>*Tadn)-j8}d3(-!vGEBP`w Date: Wed, 8 Sep 2021 18:45:49 +0300 Subject: [PATCH 2/4] add test for prelu negative slope access pattern --- testdata/dnn/onnx/data/input_PReLU_slope.npy | Bin 0 -> 228 bytes testdata/dnn/onnx/data/output_PReLU_slope.npy | Bin 0 -> 228 bytes testdata/dnn/onnx/generate_onnx_models.py | 21 ++++++++++++++++++ testdata/dnn/onnx/models/PReLU_slope.onnx | Bin 0 -> 180 bytes 4 files changed, 21 insertions(+) create mode 100644 testdata/dnn/onnx/data/input_PReLU_slope.npy create mode 100644 testdata/dnn/onnx/data/output_PReLU_slope.npy create mode 100644 testdata/dnn/onnx/models/PReLU_slope.onnx diff --git a/testdata/dnn/onnx/data/input_PReLU_slope.npy b/testdata/dnn/onnx/data/input_PReLU_slope.npy new file mode 100644 index 0000000000000000000000000000000000000000..b850fc49b46072258df1fea0d724391acb6e02ab GIT binary patch literal 228 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+l>qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I$-ItoB!3PhSZ3bhJk0IpvrZtuM{tKPml{Qo|!8&3A$J>=})c+A}Q)Wcz) zlFe6p-M$@m(@s3JT{Smw|JOf?_5m?p_rG@L-#=#}hkar21v`88Q+EELSM2;$5AM(N cV{%xwpUo~dX2#w>XS?@r*nYz9u91X20HhjDMgRZ+ literal 0 HcmV?d00001 diff --git a/testdata/dnn/onnx/data/output_PReLU_slope.npy b/testdata/dnn/onnx/data/output_PReLU_slope.npy new file mode 100644 index 0000000000000000000000000000000000000000..e8d0d5d207dbcf9efef4a2e6e6e3ebf93f0a69e3 GIT binary patch literal 228 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+l>qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I$-ItoB!3PhSZ3bhJk0IpvrZtuA@tKPml{Qq998&3A$J>=})c+A}U)Wcz~ zlFe6p-M$@m(@s3JT{Smw-`78i_5m?p_q}%J-#2F>hkar21v`88Q+EELSM2;$5AMtJ cV{%xwpUo~dX2zaBXS?@p*nYz9u91X20HOp=JOBUy literal 0 HcmV?d00001 diff --git a/testdata/dnn/onnx/generate_onnx_models.py b/testdata/dnn/onnx/generate_onnx_models.py index 942bf7b39..3b996fb12 100644 --- a/testdata/dnn/onnx/generate_onnx_models.py +++ b/testdata/dnn/onnx/generate_onnx_models.py @@ -8,6 +8,7 @@ import numpy as np import os.path import onnx +import onnxsim import google.protobuf.text_format import io @@ -72,6 +73,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) @@ -127,6 +136,18 @@ def save_onnx_data_and_model(input, output, name, operation, *args, **kwargs): relu = nn.ReLU(inplace=True) save_data_and_model("ReLU", input, relu) +class PReLU_slope(nn.Module): + def __init__(self, *args, **kwargs): + super(PReLU_slope, self).__init__() + + def forward(self, x): + return nn.PReLU()(x) + +model = PReLU_slope() +input_ = Variable(torch.randn(1, 1, 5, 5, dtype=torch.float32)) +save_data_and_model("PReLU_slope", input_, model, export_params=True) +simplify('models/PReLU_slope.onnx', False) + input = Variable(torch.randn(2, 3)) dropout = nn.Dropout() diff --git a/testdata/dnn/onnx/models/PReLU_slope.onnx b/testdata/dnn/onnx/models/PReLU_slope.onnx new file mode 100644 index 0000000000000000000000000000000000000000..b0d72218b8b7d1f5fbced9a2d4a29c2203a39d57 GIT binary patch literal 180 zcmd;J6Jjr@EXglQ&X8g@)U&jj&B!Io#hRH{P+G#pXez{LCdD2Ql$ui-Z>q!!W(Wy@ zRqJMDmguHd6yz6`XbEyKf}jAS6QijY3j;%gU6ef33?VTt5e`Nn0WKyEMkr Date: Thu, 9 Sep 2021 14:41:35 +0300 Subject: [PATCH 3/4] Merge pull request #902 from rogday:split_slice_shenanigans tests for Normalize subgraph, Slice, Mul and Expand --- testdata/dnn/onnx/data/input_expand.npy | Bin 0 -> 224 bytes .../dnn/onnx/data/input_expand_identity.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 .../dnn/onnx/data/output_expand_identity.npy | Bin 0 -> 224 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 -> 168 bytes .../dnn/onnx/data/output_split_neg_axis.npy | Bin 0 -> 168 bytes testdata/dnn/onnx/generate_onnx_models.py | 87 ++++++++++++++++++ testdata/dnn/onnx/models/expand.onnx | Bin 0 -> 185 bytes testdata/dnn/onnx/models/expand_identity.onnx | Bin 0 -> 173 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 -> 165 bytes testdata/dnn/onnx/models/split_neg_axis.onnx | 22 +++++ 20 files changed, 128 insertions(+) create mode 100644 testdata/dnn/onnx/data/input_expand.npy create mode 100644 testdata/dnn/onnx/data/input_expand_identity.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_expand_identity.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/expand_identity.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_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+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..796895eaf4fe024771dfd342b3d2cb005fe6123f GIT binary patch literal 168 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+l>qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I$-ItqpcnmP)#3giMV_pf*DUjDwje+l#I{ktTR?eENRu@8EmX&V`uYS-b* OYcH)Mvj3;mBE&@M6n 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..7aa3924e7a54826749513ad25915597af383ac52 GIT binary patch literal 168 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+l>qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I$-ItqpcnmP)#3giN=MfWG}`?7>%-xIG-_L0)=4!1YG+P9Ex%|5@cC-$FP PIM?30d6WJ6XH)F~hUPMa 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+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+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..796895eaf4fe024771dfd342b3d2cb005fe6123f GIT binary patch literal 168 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+l>qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I$-ItqpcnmP)#3giMV_pf*DUjDwje+l#I{ktTR?eENRu@8EmX&V`uYS-b* OYcH)Mvj3;mBE&@M6n 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..7aa3924e7a54826749513ad25915597af383ac52 GIT binary patch literal 168 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+l>qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I$-ItqpcnmP)#3giN=MfWG}`?7>%-xIG-_L0)=4!1YG+P9Ex%|5@cC-$FP PIM?30d6WJ6XH)F~hUPMa literal 0 HcmV?d00001 diff --git a/testdata/dnn/onnx/generate_onnx_models.py b/testdata/dnn/onnx/generate_onnx_models.py index 942bf7b39..ab31636aa 100644 --- a/testdata/dnn/onnx/generate_onnx_models.py +++ b/testdata/dnn/onnx/generate_onnx_models.py @@ -8,6 +8,7 @@ import numpy as np import os.path import onnx +import onnxsim import google.protobuf.text_format import io @@ -72,6 +73,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) @@ -412,6 +421,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.randn(1, 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), @@ -573,6 +593,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, 1) + +model = SplitAxis() +input_ = Variable(torch.randn(1, 10, dtype=torch.float32)) +save_data_and_model("split_neg_axis", input_, model) + class SplitMax(nn.Module): def __init__(self): @@ -840,6 +872,32 @@ 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 ExpandIdentity(nn.Module): + def __init__(self): + super(ExpandIdentity, self).__init__() + + def forward(self, x): + return x.expand(1, 3, -1, -1) + +input = Variable(torch.randn(1, 3, 2, 4)) +model = ExpandIdentity() +model.eval() +save_data_and_model("expand_identity", input, model, export_params=True, version=12) +simplify('models/expand_identity.onnx', False) + class Expand(nn.Module): def __init__(self, shape): super(Expand, self).__init__() @@ -908,6 +966,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) @@ -1148,6 +1223,18 @@ def forward(self, x0, x1, x2): input_2 = Variable(torch.ones(2, 1, 4, 1, dtype=torch.float32)) save_data_and_model_multy_inputs("scale_broadcast", model, input_0, input_1, input_2) +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/expand_identity.onnx b/testdata/dnn/onnx/models/expand_identity.onnx new file mode 100644 index 0000000000000000000000000000000000000000..ddec80015e2aaec2455056e6a002c1886f05dfdc GIT binary patch literal 173 zcmd;J6Jjr@EXglQ&X8g@)U&jj!pJ4f#c06AXd%RCDaGMhQIMFI5^t`=24M*afYs_| zWtQlsRutqHm1t>lun4d_F@Gn9t$VRRJ8WFavw5e`Nn0WKyEMj&PeVkRJF RNdih*;*xY?;bIWr0RVX_7M%b9 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..07c0c9966cd4d882eb8854de6b1035cc442c10c5 GIT binary patch literal 165 zcmd;J6Jjr@EXglQ&X8g@)U&keW8@0pVl)t9G?Zcw&dE$pjWikf0bBTX9KZQ3*o$KO<0FNC0esZdPWAZfZqAeo;x3Fvt!* bE*=g>Ar3Ak4n`p6N&*TRq6<1P32*`cy`?Ub literal 0 HcmV?d00001 diff --git a/testdata/dnn/onnx/models/split_neg_axis.onnx b/testdata/dnn/onnx/models/split_neg_axis.onnx new file mode 100644 index 000000000..b2b5fceb7 --- /dev/null +++ b/testdata/dnn/onnx/models/split_neg_axis.onnx @@ -0,0 +1,22 @@ +pytorch1.9:É +S +tensor12345Split_0"Split* +axisÿÿÿÿÿÿÿÿÿ * +split@@@@@  +1 +1 +2 +3 +4 +56Concat_1"Concat* +axis torch-jit-exportZ +tensor +  + + +b +6 +  + + +B \ No newline at end of file From 5f1b3ac7cec964e6bd29b4ebfc05dc92631eaf87 Mon Sep 17 00:00:00 2001 From: Zihao Mu Date: Sun, 12 Sep 2021 00:24:58 +0800 Subject: [PATCH 4/4] Merge pull request #909 from zihaomu:tf_biasadd_bug DNN: Test data of biasadd in tf_importer * Add files via upload * Update generate_tf_models.py --- testdata/dnn/tensorflow/bias_add_1_in.npy | Bin 0 -> 224 bytes testdata/dnn/tensorflow/bias_add_1_net.pb | Bin 0 -> 248 bytes testdata/dnn/tensorflow/bias_add_1_out.npy | Bin 0 -> 224 bytes testdata/dnn/tensorflow/generate_tf_models.py | 5 +++++ 4 files changed, 5 insertions(+) create mode 100644 testdata/dnn/tensorflow/bias_add_1_in.npy create mode 100644 testdata/dnn/tensorflow/bias_add_1_net.pb create mode 100644 testdata/dnn/tensorflow/bias_add_1_out.npy diff --git a/testdata/dnn/tensorflow/bias_add_1_in.npy b/testdata/dnn/tensorflow/bias_add_1_in.npy new file mode 100644 index 0000000000000000000000000000000000000000..2e749acdddbce29a778e5eec3b5e42b9d87cbbfc GIT binary patch literal 224 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+l>qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I$-ItnH_3Pw5##+o_`wF+bau3G|XcFlIe`^}!3*_VEuz5iy|iv6+sciWv8 z)wW+X^S@p4HcqoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I$-ItnH_3Pw5##+o_`wF+baE}279?0+=fw3}0O+kV07_md|GP%=bof}#Aa`MyG?Qqvotsy9NvoTKQMc}-JP6G_6eO*4l8(? a?PDq**xxuKZSTM)ykCJY$8NzDj{N`|B}rQV literal 0 HcmV?d00001 diff --git a/testdata/dnn/tensorflow/generate_tf_models.py b/testdata/dnn/tensorflow/generate_tf_models.py index c83778e69..2a08c38ed 100644 --- a/testdata/dnn/tensorflow/generate_tf_models.py +++ b/testdata/dnn/tensorflow/generate_tf_models.py @@ -1027,6 +1027,11 @@ def pad_depth(x, desired_channels): # writeBlob(blob, 'resize_concat_optimization_in') save(inp, concat, 'resize_concat_optimization', optimize=False, is_gen_data=False) ################################################################################ +inp = tf.placeholder(tf.float32, [1, 2, 3, 4], 'input') +sub = inp - 3.0 +sub = 4.0 + sub +save(inp, sub, prefix + 'bias_add_1', optimize=False) +################################################################################ # Uncomment to print the final graph. # with tf.gfile.FastGFile('fused_batch_norm_net.pb', 'rb') as f: