From e2bb990e8fd2f7230880e2e5e9d3ca351c460707 Mon Sep 17 00:00:00 2001 From: Zihao Mu Date: Wed, 19 Oct 2022 21:44:26 +0800 Subject: [PATCH] add QDQ format onnx model. --- .../input_quantized_conv_int8_weights_qdq.npy | Bin 0 -> 1328 bytes ...t_quantized_conv_per_channel_weights_qdq.npy | Bin 0 -> 1328 bytes .../input_quantized_conv_uint8_weights_qdq.npy | Bin 0 -> 1328 bytes .../output_quantized_conv_int8_weights_qdq.npy | Bin 0 -> 628 bytes ...t_quantized_conv_per_channel_weights_qdq.npy | Bin 0 -> 628 bytes .../output_quantized_conv_uint8_weights_qdq.npy | Bin 0 -> 628 bytes .../dnn/onnx/generate_quantized_onnx_models.py | 16 +++++++++++----- .../models/quantized_conv_int8_weights_qdq.onnx | Bin 0 -> 1582 bytes .../quantized_conv_per_channel_weights_qdq.onnx | Bin 0 -> 1665 bytes .../quantized_conv_uint8_weights_qdq.onnx | Bin 0 -> 1582 bytes 10 files changed, 11 insertions(+), 5 deletions(-) create mode 100644 testdata/dnn/onnx/data/input_quantized_conv_int8_weights_qdq.npy create mode 100644 testdata/dnn/onnx/data/input_quantized_conv_per_channel_weights_qdq.npy create mode 100644 testdata/dnn/onnx/data/input_quantized_conv_uint8_weights_qdq.npy create mode 100644 testdata/dnn/onnx/data/output_quantized_conv_int8_weights_qdq.npy create mode 100644 testdata/dnn/onnx/data/output_quantized_conv_per_channel_weights_qdq.npy create mode 100644 testdata/dnn/onnx/data/output_quantized_conv_uint8_weights_qdq.npy create mode 100644 testdata/dnn/onnx/models/quantized_conv_int8_weights_qdq.onnx create mode 100644 testdata/dnn/onnx/models/quantized_conv_per_channel_weights_qdq.onnx create mode 100644 testdata/dnn/onnx/models/quantized_conv_uint8_weights_qdq.onnx diff --git a/testdata/dnn/onnx/data/input_quantized_conv_int8_weights_qdq.npy b/testdata/dnn/onnx/data/input_quantized_conv_int8_weights_qdq.npy new file mode 100644 index 0000000000000000000000000000000000000000..df711356edb4b0e4d75dbca3a837d39cc3f5fb06 GIT binary patch literal 1328 zcmb7<`B%+(7{|NSxt(-rU(|8CHK|ZqEv4`0K?-fAZIoqFT2<7&nOrH;Mkg6Y>x`H= zF(h%6q~YG@;mDAsxfr=Z%2IMli?k4p`4i@S&g+NQ>$i7tK&bz>;XIWeR5EO$VQ! zqW`^VM@Kuc?3q8wwJet?>%yRKLd?z>7}CAgOROqZ6ZREe!~^-mTwmZN=G1LZ$Brfg zzxIawP}z2{9~9Eses%d0!+BKFvXk5w@Ttkm8$-0FBkz?Le0o>N(meUt)-DC{y9D;A z`~s@*|+%+^bxD_^8 zMB!-h11#2)VYJb!qBt%~^*pXXm}Z^fk9|XXXUsx2m99kTu@S*-mp}ZlGn}Vi<}xgRtaD zmS>wrA@ju)qJ0%3RtCx|TLQs#WfJxjDe**;E>i@Bz=e$?Y^-u2d}*|#-fEzM+y<`1 z>=tt#iHBW9x#%J~g3mj7T*M|hlP=O=wo$KG>a6WJp6UktKugNXm0^at01CXSvB|NP zmHIx$r!FG8Cb)x>-*|(X+wbztWdgdZY{b@*EDD%V1zwtf{wZ9=lvWao^qdDwLqsYE zGAXI_HX8Y?h2@6taq;JuOICg1F!EA2TdLk);V5s|~SaXb0^pmO!_a2i5kwfGX309lo33 z^+zq}udT&{%QeX(b0>aKHz8MLCzIIQfWb&9OKTEQ?~^1-JY~g28j18WKnm+U>`}z zq0^DVl`?i#e;yX8*+J(KU2HXLXFXXOOr>%;{W||Svj~2`%CD@TjG~ZbI8?ESu77f;hck>J=xsjwbrIe^_5yR=&m)gJhDQuq*t$t|`t4agRwPabX+ba) z8O5<-dmlOzQp2SybJ%!1V$FaJR3+&^oVzK@yRv}37v5r4i9WFV^%Qm~w}ADVY4GEY zJNOp1vD|CTSfuAqiqY8+)N+d1NfVfG!6Ld~k%8j2rLbYM9eGRRD8@oa3dIywxamS{ zeK~6vrjufJI!&o)GDT(qYq$yY$t{Xi460MU^GVEUbVp&%3Oa0>49k8NL$6nt{9pTi BU>^Vg literal 0 HcmV?d00001 diff --git a/testdata/dnn/onnx/data/input_quantized_conv_per_channel_weights_qdq.npy b/testdata/dnn/onnx/data/input_quantized_conv_per_channel_weights_qdq.npy new file mode 100644 index 0000000000000000000000000000000000000000..d659c0821ba97058867a7b3a5619378998149bf5 GIT binary patch literal 1328 zcmb7=?KhNp9EWL+NFq_Gs7aWS*`lVX=Kg&*O)_e*Q;`T`43fx*pkB2JZ{lE;R`slt_Cx`#YQt^C~8QSv>?&(3!daF+|XF3w+Y6ma)* z|M!fmV~rvHz+Uxd6nbO4rJc7w?w zu~=~37t^X@p?H5Jb^SFEiwsrljnF9EdNv7le~&YFo?4*Kl@wASzC=Gbi7n7yk=Il)Rcy})8ndXXvL+vzQbDh{nIm6Pmg!p-h zm@O|h;Ex}KXm%;Yr4| z=p?BvGN;l<9BR_?`7<>if6MfP(d;X1*F`y7B)d$uHzlKYUj|dB2`v)@+vSc8h%cC=8^NI4L z1ZdoOHqp`!bCc#!cDITKN4_N`2}_`SSt{yYIyM~rrk|$joDeH7k&;#?&~;ZcoIBQ- zT&@QljZ2uUv3cMyxEp+&>}k4x9X;ysoQ~w)B7Ft%utD~O@(-S7!#7)#il``XPSi(! zU<`yj6f+*rUX#A5)4{*i3G2<(VA-sO($qB|Y+VZMtE<%1T?lUt~OhRh*kQ{4YxM{182Md!#<_kHn zW8*aJEwn(3YYk*jYX)c9*2CoLM{M1`E+S3g<4r9~E4{MF8BZY!eRe`pHbJARY2d}y z(YgcuB;0fzjn11O4r803^-nQ5XD-0J_YrW~EQ4v@X@JQ&Yv`Z6fiTqr-Dg62Idk<%Ce9U2weIibWE&S7NKrHU;nm0_*+3|+M?niw`8 zBs?n*&>Y{}pbPQB;HT@+P_dYPZ?h2BW%+|9+5$UW_EUM+J<*h(uF$tf%E{{Q{K@^{ zP{2)a$BCcEf+`!sBsQcqephGE=- zcSMpo69-D1FlJCnnzEDN-+~2HIhz5cUnu$*925P{ttW%a)2N_^!Hd?(SUeO-{{w9{ BUP=G} literal 0 HcmV?d00001 diff --git a/testdata/dnn/onnx/data/input_quantized_conv_uint8_weights_qdq.npy b/testdata/dnn/onnx/data/input_quantized_conv_uint8_weights_qdq.npy new file mode 100644 index 0000000000000000000000000000000000000000..ff2418d7a29d5011b66d1da82909e469a7a9a5ef GIT binary patch literal 1328 zcmb7&{WH{g9Kex0Hk3-S9@dFP8@rJ%eBbZpIL_r^b8%TxYRN;WT{6+bbvdOu*8{@J zC0%vZT%P92Y`dQ~9icppbD?geN1Q=jml_wY{)BtYyncAS3PQqzC6U@%d$qC!vN**K zxxkAr@QL>j2>F8eGjt7oR7Fx=}JbeAtjlSkcL-CPD9E?fgWwF#tEX-UR)O>eRswTL= z>t-zY=gp`u{*uNQXQGq$dfekKC6#uedaPv-v<6?poUH_>j#^-5StENS2);F5(FvV4 z>xlcsiUxytn#(1fEav<=bg31=k+(_)%GIcEVTD_r4xyw+j7efQmRS$9Kfx6fcgE7; zuu}G7I0B1ClhNhn3D8^B2noJP^bd^t47?-my!rwg8j7Zhb|bp7>l6#<)n)hAdVx~) z6mBpTBgZN>{Z|Gl%#x{i<}GW}nSwgm5oohB!mcVqoOjX_x0OAHvGp0)vpNWyOT?h_ zy$9r{r_vA{LbFOADzKgcUi1o_ojJ_bc=Bj-S}+xyo`tOwjhf#62Oz25gwua}P*HgV zie@~Rc|r>_8Q6|>p4r&pVoBc03Xty$B=C9eDIe+`0Wz>_`3+LqD(N% zyqRgF>+!W^5>QS9w5#%=`Pl|K?OX$Ak6PkY8$0UiS;bD?wCA+rn>C?F zEU>sO8D$GC@T*0eDTi-`=EGa)nX5hpmW!!n(31FXc5<0rRnW>;XuP&0W5PRK+NjdQ z?~ZY3xNep+l+FIiW^`yr(@*SRj4c)0 z^3ea40m`2naw|T|#5bHLIi3r`i5NdpD1=l!-U`_-0_fg=9w?*j*^)P-5aJMwr9vaj zH*&{2c4=f4eVds+eD8COFJ!Mv4C%7Ei5)eSA>Qs`&dMUzXmOBquZyt0UPL>ymeI?y zY34TWhgw1Av@Lu&UaYsqJ(W^){KJpB8Wz$f)jPO*kw+=*57YYGll_Hu9>^y+4PI>YfCK6eQJwwJ>NoqWGI@}%)-maX>K%Bi0%GQ*?&GtP~89k literal 0 HcmV?d00001 diff --git a/testdata/dnn/onnx/data/output_quantized_conv_int8_weights_qdq.npy b/testdata/dnn/onnx/data/output_quantized_conv_int8_weights_qdq.npy new file mode 100644 index 0000000000000000000000000000000000000000..38d0d37aa680ceff3b51a79c5fc9162fc483e4a6 GIT binary patch literal 628 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+l>qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I$-Itr!`q^YA&t3U?eGFhH#TXw?*j9ZHD+JX2#t(x~lEShYm%HwMXWbXxu zZRcFFm*d)OuowdnZ0A(51LD0PwU2M*+JP`okL|G~Hg=1})b<1Q>;tI>ithueu@x)a zvRACo#Qv&%D3H%=Gnwz3ZNwsBkbQRPwrjv<vpSSOT9Zh|&KG1{9ff4UdQw)^r()*fW9D$m({4ITXU9M_~lZrBHMS4{82eW(8@ z+P4(P0`)He%J?Yk_W|wNch&wX$bEZ&ZUgys572G_(f9wZ}*#Z5wAEXAT&j#vGkQufhGeBncE3W|i r4`c_(ji5N{I_+c+ayN(#^cOS^_Smh=>jsA_$ge=V!SMoeH^@!^Mq2`i literal 0 HcmV?d00001 diff --git a/testdata/dnn/onnx/data/output_quantized_conv_per_channel_weights_qdq.npy b/testdata/dnn/onnx/data/output_quantized_conv_per_channel_weights_qdq.npy new file mode 100644 index 0000000000000000000000000000000000000000..a9210ca1ef2e39fc9de5f1ab54ee5e9975c3995f GIT binary patch literal 628 zcmbVJ&r2IY6y735loCvZ2%(3qBCD`iq^_W5-UJj+*7PDpFS5jh62!@c%$zWIK<*_@tv^?LS^wQ8+7 z3zksWee+sWpGmB3$`&j$+`sZaWgg$(M2xBhYl|9yk5?cII-u3fYrFxtDl z3S*MYY-7UwR_`cAe@%IRlM>bxas1*-()%TQKDgR7-Cl>zxp}^*KBg&mgMn3h+fP*b zC{EYWIf|TqR=|WYDuSn|z{!{AFGw)&*PrP-{-XL5eC3?`^Zwo${fIhp#!uV6(`^vZ zd)p-g?L({#ZU(QhFmT6!kN;I~z*}SZ1W#VHSiH)8U=!v2POj7qrTiTNUVlt|lJi5s zj(mGA7?VEwKuO<%ZkHBZrLLO#3G0Nm>dSi28`rh?fbPwW>TKf}8A=Lyn|d7g;iD!R zjEu;6Y{c7AxhFih8WwLqoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I$-Itr!`q^YA&t3U?e$_-DqyEkE(-9J7No3^}uyM02Id*yl=?cIt@_RpQ- zy$>Xp_Cay~xr_QhHBMeC$69vNF3eEd9%R4j7dIe1Wsf0y zsy#^DbhGV#pg7RH#=TF!zqVVsJk$Q(1T}k*`Cqp^0*Twk&iG(kwtj{k-?^@RwPJC5 zf$p^hy2);B@S%M`Gr(d%d-p}OPY3F2+;_C{AIME0KkvO%%V7_455x{epc!2IeQ#ER z{J9t8HXz=2XrJJIkXxX3?FG3L=r^Fb_iV3Pdfo1~b)$Bn20RSpU B3c~;Z literal 0 HcmV?d00001 diff --git a/testdata/dnn/onnx/generate_quantized_onnx_models.py b/testdata/dnn/onnx/generate_quantized_onnx_models.py index 33a90190..6d812b88 100644 --- a/testdata/dnn/onnx/generate_quantized_onnx_models.py +++ b/testdata/dnn/onnx/generate_quantized_onnx_models.py @@ -5,9 +5,9 @@ import torch.nn as nn import torch.nn.functional as F import numpy as np import os -import onnx +import onnx # version >= 1.12.0 import onnxruntime as rt -from onnxruntime.quantization import quantize_static, CalibrationDataReader, QuantType +from onnxruntime.quantization import quantize_static, CalibrationDataReader, QuantType, QuantFormat class DataReader(CalibrationDataReader): def __init__(self, model_path, batchsize=5): @@ -20,16 +20,16 @@ class DataReader(CalibrationDataReader): def get_next(self): return next(self.enum_data_dicts, None) -def quantize_and_save_model(name, input, model, act_type="uint8", wt_type="uint8", per_channel=False): +def quantize_and_save_model(name, input, model, act_type="uint8", wt_type="uint8", per_channel=False, ops_version = 13, quanFormat=QuantFormat.QOperator): float_model_path = os.path.join("models", "dummy.onnx") quantized_model_path = os.path.join("models", name + ".onnx") type_dict = {"uint8" : QuantType.QUInt8, "int8" : QuantType.QInt8} model.eval() - torch.onnx.export(model, input, float_model_path, export_params=True, opset_version=12) + torch.onnx.export(model, input, float_model_path, export_params=True, opset_version=ops_version) dr = DataReader(float_model_path) - quantize_static(float_model_path, quantized_model_path, dr, per_channel=per_channel, + quantize_static(float_model_path, quantized_model_path, dr, quant_format=quanFormat, per_channel=per_channel, activation_type=type_dict[act_type], weight_type=type_dict[wt_type]) os.remove(float_model_path) @@ -53,10 +53,16 @@ np.random.seed(0) input = Variable(torch.randn(1, 3, 10, 10)) conv = nn.Conv2d(3, 5, kernel_size=3, stride=2, padding=1) +# generate QOperator qunatized model quantize_and_save_model("quantized_conv_uint8_weights", input, conv) quantize_and_save_model("quantized_conv_int8_weights", input, conv, wt_type="int8") quantize_and_save_model("quantized_conv_per_channel_weights", input, conv, per_channel=True) +# generate QDQ qunatized model +quantize_and_save_model("quantized_conv_uint8_weights_qdq", input, conv, quanFormat=QuantFormat.QDQ) +quantize_and_save_model("quantized_conv_int8_weights_qdq", input, conv, wt_type="int8", quanFormat=QuantFormat.QDQ) +quantize_and_save_model("quantized_conv_per_channel_weights_qdq", input, conv, per_channel=True, quanFormat=QuantFormat.QDQ) + input = Variable(torch.randn(1, 3)) linear = nn.Linear(3, 4, bias=True) quantize_and_save_model("quantized_matmul_uint8_weights", input, linear) diff --git a/testdata/dnn/onnx/models/quantized_conv_int8_weights_qdq.onnx b/testdata/dnn/onnx/models/quantized_conv_int8_weights_qdq.onnx new file mode 100644 index 0000000000000000000000000000000000000000..1f2a30980ce4c16f2370cd4a83d6c3bc263181a4 GIT binary patch literal 1582 zcmah~O=uHA6yC{ClfI^PvQ2-CKb2q)&S9;_KU!PEsuZiB6$+&uwwq+yjBa+fn~l*T z^dSBmtR6fFB3eAuKNJy>>cNAE2SJdkJt`j+X31KQLt0tSKVQ-JHN$BZ)0H8xloXHufs7gYpT$VBkS)s790-dIYCg~beP2OXx z!fg&=4=oxxz*H(55nPEt9K1}`vnDh-Q^7vY3ngYld1ScYbKYLKCK_oeXF(2dj?Vj4tIL?oBfr=0wqNWPtFFP&IrJQDg(iFrMveW! zz86<6&kWz*JU*kvzr0HgJ~sOIK3xAU@qJUrwhsfh*4#aPHMuu8ap}&F`=fI&&Mc%- zN8(eTc1)2O@!6KAAQr^Fv|$>dvSwU(SC+Ptr3n}9^km&T^!f9^!M-EEgVPI z`4L89&DJ#J*>GrZJL$F<4PyN^HRR!}XRNExefV|=`4Nx7NbS1A7&EkEw zN^ExwHsG?OUZP>uh;X$CY671+O3W}b!FnJGexl`vENF6WrNg+QP;rJ(M7Ea*6rGDR zqLJ2WD>%vmH-bqzV^y$hE+IvBp^{W_Vn+$8jbE&%_#f2~m@(Y{F`r#z?h2z0?v4T; zu~5et>Tv<5rhI!;sm|pVyH;YudR-ee9 z^F3?r#ybn&;^}1_v8i>}=HD1UKd|vY`t`4xOTsepe^0uipvpzp~ zcxmVEpZC%`;py0l3kCdo>-`^t{wq@-zO@_-+zuqVPfTBax#a3nz46AI`4_uS92x)G zcQp5EQNzhBLX=2@Tr;tHgtiF7JYL5zzdIR5nfm*8*9wL~U3Plp8K+r~aKCp`Y|Y&b zv3J`x#ooVJ8~gsSJBF4!-s?}g9>K|A&EM|M(hTEggAinS4m?4YE-zhRujE`{qcuuD zRX9uba4qrz5L0?i%8`_zoBDty;n6%cNDgb3nx!OK0aPM6BRrR-B@%!u%a)-Mjc93V z6@r#3FBA%c;6SEC2Q_^K)vTmtMp9fzo(JKwi@bq{2_BIuTy;QOl`Bb0+1qG3fzyq& jlt19Kx1?HF<5;5;zzL3M1K8k0_OmfWzce{q{N(%tGbkpa literal 0 HcmV?d00001 diff --git a/testdata/dnn/onnx/models/quantized_conv_uint8_weights_qdq.onnx b/testdata/dnn/onnx/models/quantized_conv_uint8_weights_qdq.onnx new file mode 100644 index 0000000000000000000000000000000000000000..5213aa32f36c44b265bdcdeb2ec43f6995768ff3 GIT binary patch literal 1582 zcmah~U1-x#6i)iHcE_&V#&)Yww^95J605}xWN3{FI`-hEPol=OyKAp&lbEJ<4nZGu zV+!h%FZ$qv3O=X|L_wJYe-M089|oc?GDS8S$P^WPuqJ5>{l$b!a=!E3@1Aq-$%)&= zv?#JX!XM8{vQ9=Z>kRXo`0&=d04jK6M9PRI*C6;SZ7~yzJ2h=`TD zx7R!!wrQs#pAf?#hxz0fXdWafNhgY&iPBN}I_=^-;7n*rRt*}KjSGNh7;7?4iJ7FN z;;21pH%UHlsM4S{r!)_NE2C><5ND#csLdc5B~d>Ja7Bvc;faW4Cxxm*W^0g|k{Ey* zP9u3b!ZH!D`Y>uYooUt;EuIvQ5uIy8HjX|m)RZw7Ky=8lElKqV<@L@jHTkE6io7_V z$^Gl~_XwrLxmFW8JoRGx;(9Z8kPA_j2?1sTUh>417vXUU{(p$?9wCsNm=4zrT3a9^3G)J!};n!GrY-$>k zoqO)Ay0i!^jPq;X&2vlUInM1wO+r=s>GkU&in_X;q7HOY)U%mUA7tcXxBE4MvmDxJ~ssDC0WVQS3fUEBM_sgTUsdjbS$im?O3v=tz~* zX*jGQ*iehm4s2XW^Jx;-l#DW@^LRwX8cAbWmr_QMUI2;kR=-WBkX`TtD%rXw5t+yd zgXM#k3Katig5QENywO#SPf1Ggaxxc3K4Ap}OA@MvPY|5r%cR<1X@wLo$IWTRb^%hf k1h1a7%9NLMEF)U$0I-51@(|V-pZTt3jo(5V7yb|b0He4Vd;kCd literal 0 HcmV?d00001 -- GitLab