From 67d5f16ea94187e2f1dec714f50ea136ef28bfcd Mon Sep 17 00:00:00 2001 From: Anjok07 <68268275+Anjok07@users.noreply.github.com> Date: Thu, 7 Apr 2022 02:34:01 -0500 Subject: [PATCH] Add files via upload --- img/UVR-Icon.ico | Bin 0 -> 21662 bytes img/UVR-banner-2.png | Bin 0 -> 20696 bytes img/UVR-banner.png | Bin 0 -> 21127 bytes img/UVRV5.png | Bin 0 -> 56897 bytes img/refresh.png | Bin 0 -> 1619 bytes lib_v5/__pycache__/dataset.cpython-37.pyc | Bin 0 -> 5328 bytes lib_v5/__pycache__/dataset.cpython-39.pyc | Bin 0 -> 5341 bytes lib_v5/__pycache__/layers.cpython-37.pyc | Bin 0 -> 4181 bytes lib_v5/__pycache__/layers.cpython-39.pyc | Bin 0 -> 4256 bytes .../layers_123821KB.cpython-39.pyc | Bin 0 -> 4113 bytes .../layers_537238KB.cpython-39.pyc | Bin 0 -> 4272 bytes .../model_param_init.cpython-39.pyc | Bin 0 -> 1625 bytes lib_v5/__pycache__/nets.cpython-37.pyc | Bin 0 -> 3170 bytes lib_v5/__pycache__/nets.cpython-39.pyc | Bin 0 -> 3333 bytes .../__pycache__/nets_123812KB.cpython-39.pyc | Bin 0 -> 3438 bytes .../__pycache__/nets_123821KB.cpython-39.pyc | Bin 0 -> 3438 bytes .../__pycache__/nets_537238KB.cpython-39.pyc | Bin 0 -> 3461 bytes lib_v5/__pycache__/spec_utils.cpython-37.pyc | Bin 0 -> 4999 bytes lib_v5/__pycache__/spec_utils.cpython-39.pyc | Bin 0 -> 12790 bytes lib_v5/dataset.py | 170 +++++++ lib_v5/layers_123812KB .py | 116 +++++ lib_v5/layers_123821KB.py | 116 +++++ lib_v5/layers_537238KB.py | 122 +++++ lib_v5/model_param_init.py | 60 +++ lib_v5/modelparams/1band_sr32000_hl512.json | 19 + lib_v5/modelparams/1band_sr44100_hl256.json | 19 + lib_v5/modelparams/1band_sr44100_hl512.json | 19 + lib_v5/modelparams/2band_32000.json | 30 ++ lib_v5/modelparams/2band_44100_lofi.json | 30 ++ lib_v5/modelparams/2band_48000.json | 30 ++ lib_v5/modelparams/3band_44100.json | 42 ++ lib_v5/modelparams/3band_44100_mid.json | 43 ++ lib_v5/modelparams/3band_44100_msb2.json | 43 ++ lib_v5/modelparams/4band_44100.json | 54 ++ lib_v5/modelparams/4band_44100_mid.json | 55 ++ lib_v5/modelparams/4band_44100_msb.json | 55 ++ lib_v5/modelparams/4band_44100_msb2.json | 55 ++ lib_v5/modelparams/4band_44100_reverse.json | 55 ++ lib_v5/modelparams/4band_44100_sw.json | 55 ++ lib_v5/modelparams/4band_v2.json | 54 ++ lib_v5/modelparams/4band_v2_sn.json | 55 ++ lib_v5/modelparams/ensemble.json | 43 ++ lib_v5/nets_123812KB.py | 112 +++++ lib_v5/nets_123821KB.py | 112 +++++ lib_v5/nets_537238KB.py | 113 +++++ lib_v5/spec_utils.py | 472 ++++++++++++++++++ 46 files changed, 2149 insertions(+) create mode 100644 img/UVR-Icon.ico create mode 100644 img/UVR-banner-2.png create mode 100644 img/UVR-banner.png create mode 100644 img/UVRV5.png create mode 100644 img/refresh.png create mode 100644 lib_v5/__pycache__/dataset.cpython-37.pyc create mode 100644 lib_v5/__pycache__/dataset.cpython-39.pyc create mode 100644 lib_v5/__pycache__/layers.cpython-37.pyc create mode 100644 lib_v5/__pycache__/layers.cpython-39.pyc create mode 100644 lib_v5/__pycache__/layers_123821KB.cpython-39.pyc create mode 100644 lib_v5/__pycache__/layers_537238KB.cpython-39.pyc create mode 100644 lib_v5/__pycache__/model_param_init.cpython-39.pyc create mode 100644 lib_v5/__pycache__/nets.cpython-37.pyc create mode 100644 lib_v5/__pycache__/nets.cpython-39.pyc create mode 100644 lib_v5/__pycache__/nets_123812KB.cpython-39.pyc create mode 100644 lib_v5/__pycache__/nets_123821KB.cpython-39.pyc create mode 100644 lib_v5/__pycache__/nets_537238KB.cpython-39.pyc create mode 100644 lib_v5/__pycache__/spec_utils.cpython-37.pyc create mode 100644 lib_v5/__pycache__/spec_utils.cpython-39.pyc create mode 100644 lib_v5/dataset.py create mode 100644 lib_v5/layers_123812KB .py create mode 100644 lib_v5/layers_123821KB.py create mode 100644 lib_v5/layers_537238KB.py create mode 100644 lib_v5/model_param_init.py create mode 100644 lib_v5/modelparams/1band_sr32000_hl512.json create mode 100644 lib_v5/modelparams/1band_sr44100_hl256.json create mode 100644 lib_v5/modelparams/1band_sr44100_hl512.json create mode 100644 lib_v5/modelparams/2band_32000.json create mode 100644 lib_v5/modelparams/2band_44100_lofi.json create mode 100644 lib_v5/modelparams/2band_48000.json create mode 100644 lib_v5/modelparams/3band_44100.json create mode 100644 lib_v5/modelparams/3band_44100_mid.json create mode 100644 lib_v5/modelparams/3band_44100_msb2.json create mode 100644 lib_v5/modelparams/4band_44100.json create mode 100644 lib_v5/modelparams/4band_44100_mid.json create mode 100644 lib_v5/modelparams/4band_44100_msb.json create mode 100644 lib_v5/modelparams/4band_44100_msb2.json create mode 100644 lib_v5/modelparams/4band_44100_reverse.json create mode 100644 lib_v5/modelparams/4band_44100_sw.json create mode 100644 lib_v5/modelparams/4band_v2.json create mode 100644 lib_v5/modelparams/4band_v2_sn.json create mode 100644 lib_v5/modelparams/ensemble.json create mode 100644 lib_v5/nets_123812KB.py create mode 100644 lib_v5/nets_123821KB.py create mode 100644 lib_v5/nets_537238KB.py create mode 100644 lib_v5/spec_utils.py diff --git a/img/UVR-Icon.ico b/img/UVR-Icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..944b30e86d2996342926669460644679bf7ddf37 GIT binary patch literal 21662 zcmeI4_itQP7RSdk)ib{u^h{=g!>8o97wZ6MGySoapAgx$oTeeW&01;_+nY-*xLe z`fr2h*rgs%naAVl(4tkI<65XUe=hcTPUS~Rq{93w`tMws!(fgF=6GO^2mZ!9kdfh) zjEsyp9*ER=U3D2sN8M>!+C}QlJzK)sii=C6xus1S8=IuQzCKo(np&ixv01XRvJ6In zKtO8i>ZPfov zaj`60wmd0qy<&SVVB%bZ*XxzCvU2I}>6Ol|F6rp#Fr~AzQ@Xl)q^-SEva++yy0f!` z(%952T@E_vq3!7Gl7hmb7(ThVxl&zSEj2YYV+uICW!X8WzuG;zBP%;c{FwpCP`sGC z*Xxr&R!}knVB^*`=$o;{t_#e;5Pn>}dUaf(ZqcGeF`2b({!Ul0tE#G!?(Xh{rKP1s zkn6t_ChoPuhhD!gLGeq5&lkfckl~Sb?^%G@K1e)Zw!rX z)1%mBM)Ao~o~crd!v2|+FEdYFPsGlsEiTsY#JJ&whd)7{YM{Kcm&OU6Nlh#@1 zq&*w=UVSe?uSary9?5jbb++opLglTjsE%aLIZBtWbRjKP2ly1*!mNPgsn6_<@|j=z z$x|BWX=m4!t$LU~{od33$k@=*#?oc#`zcbo+|0~a`%G<cnRzVlx{l~04L^GpBIvUwKU5=o13L1I}%@%sSK=9 zn&sMOVU!LWS5#NY&bC%*DTu@uyqkGB9$8o5k)B`#OYrPgzmTyntgn+`)V?=`g0ii( zMb_3-$KJzC-~%rVgmf)B$A;|F_>5MR%fX&*SzKNo!)KAwZ7$aJC`N^f0rP8C+xMT& z4%ySuF5zIrf38qHaiP*&tojt244q%`SzlKxd%HTNvnUdWz=K1I`6bvT9iQLev!Jw8 z_IG#5mgXkOiQ?0hACdz)AKn94&jdD+c}Lb-qH97P?6?IgFYpFe>d+y@iU~RrTViDq zey>v>pjzVuAUJsY%>%`=+aS`1F~I_6P$5bp6Ytwn{;Bs{21dOjScc&<@45pg0#GYsp4=p+k?*r z)dRa!|258{JPb06{islV=CpO`z!Lc`(OiVp7wH&dy8A>=jjBz=mVniC_dnbFD^h%x zC_aOVkJb6jjq0D&MSYV*V}Z;3`SazftFDs!@4sK}yYD_Zbm)+Y)sn4+SbzKW?b571inGrG zwF9H0qq2DMVv{RyKI6Vr{hi&rcS~Pi-&xOx;e)MKKE-!yaQMs4IfKpS&70-zx8IiE zfB#*6{q|-Y-f9W5ARza$<|Hx6+dr*`m9TohwyU~^-muDwbx#gAAa~j zjvYH@-aYxwd+)the);7WdHU(61uWcc$=!eZ?YDC6wb#bw{lEuo-hKDoG5D0L&-cU= zPnfYTzx?tsecCaK)n~h)u1;2HzA@b~7(8Tsc{{$nqC58P-D~*ekw+fUJ)Pp%oXLeg z`|Pvw(@#Ii`t|E$^|tK|H{2lb*fY;O6W4A$d^T;`B;SAkz2Q5svVFO)HLCxJId-(R znpoKVe5QV*hwr)P9>XX5_U((CFM7vfaN~_P8eMGXMY|`Td{X}W^H2Hw^UuxRhJBU{ zA98b#KmNGE^zh-spXV|Sd)kej_IS1~~1Rrv= zH{EoTu|cf)op;_bcCMnL!u0RN2OG{f*!qt@{#ZWv-~$;P92_$b_q+#c?l zZ@cZbI6anZ9pp<)?n(1Rp|coYoC!WlmoAlWzWK)JXLQolS6^-P`_ZFEWB6d(k-rBY zd{9oDI3b^X_L-4k{7-ayGF)sudHD;}r)B>lH;wopyCpgn?;}whlPW&gH1I%YW82VC z8#it=e$Zo&JtjqJZ~FWDjm-V=#~(3Y6a9}b^~oon$o1D>KdxU0M(khUuaQSfXZ()e zvs8UU-bJGLB2|3gmq#CcRDS&NM?JH#%#n;__UzeX z3is$A{Lrmiw@%1ImY33b1s`(f>_xIy>mDmreApvrjo7VL_1(<7R^5giVdvMaTW9tk zt^W*G&=AYQdpmaQF!((6)Kdv#Gdn->*I~`cpf}TLzv#PO<1Tmyp0(rKYby84c2aL?!eDlp_-_hdZj=#Y4jW^yfyfvO3E7M%`R^2DLK=(9k&fd;> zCa2n=*1Ub6!xi;;X_P;4^4b}*=3iFd0%$z&iEpcUu)^oeVr^m zcieG@k*DXLdrrRm@=GH}&bc)-G#DQUopa@tSDM%~QGCj|2=w?wI>^Qs-7^qhv}rzO zxV+5ldpg&|{bcdMZ-FmZ|EsUQDz&w>aqm8;@&Ja|sfQkV$k?w$_|T4=2pC&`$vvl; z{B7fl13h|1PWO`BV^0^MAW`?K1d~DAJY$g;WvKz>8JA6 zTW=ZrW@QaM1GdN=&(QA&4;~yhekZ;dvGGL$yW(EQRDNSCId_ogJ#bcv_#NMEy!aIP zA|@pt=C(<8Zsb*;fBt!+d$9lLadJHr^f5jq?Qg&Rb{Q}CLw`2DI8Wn?bo$SB?#Zs` z4f12mnHbVZhtEQe5WNC6=pW)yd#=|>YwzI;`oc#h=7-*vTW-0<*eqgsOP}n@-Zpvj zZav44PX8I6!AGxB|HrxCo@`zd)q~k|&`i{a(LWk@;onX~JC)}X#TQfQ`&?*i;tQ4G zjT&EY7Gt)oiJWTb496GP%GrVs@x}Jm7P+XQ{;b9qe^tCHRflt?VslfYIUkhHc?OhM ziSg`t!E}x_U40{8_-n{mBEMw1#sL$~VR5#vDmTaYqm0eI3H9(XV_`2^^}JoL=6h?^ z*4a6cUl=YclP2|(tnI>gdwZm}xX9#k$wwpGN3?FCuHEEjR5x)}{Zc(| zNM78orC0Y059v9;O{xd%J`{N*&JdDQ;;bBFaW?LMdIpPqlJ@9#Pn=O9FSkYe993V2 z{RrOIGTn}i zF$egC{rSa;O`FaYexe?p+o1cr{km6Y^>evI7_#gX>-%e_k5s&whzuV6f9VO_j?FtBpN?*K7}K6BFAJttcSJ#-cuTMvI3 zesGM%{)p)_T1Q)Gu$xXFn7+`7_8rhC_t4O z&-g>@(-L&iK@S~$IM+DYb#P`VsP>6C!(GU4yWiPl`#lpnuxM7f=~BKeipq7C)-BZU zBG%})BksbtBJC=FcHLF_?ZirdV%ibygKtw(nHOs(htKyh#BcVF<3Ehy^hm?oL8{hp5e43h?V&|ubiJhgVr$@5Y zrn}pv>o;f9IQv7Mpi=D)<3!|3^`PD-Dv9I^8FLrpi@s8wyOA%ocjOM-g=eYuHx+v3 zkH12(Hk)_Ix3zBBx4&n4j#F7*I@+QGIXA#}U+j;&3;fTXO*+P&4Sj+S-w?9@nW(S_ zXz}r?ZHL!PQD2%p9tt`llkb|N`k8N?b3*wN$}iMs!3Z5Znj4b5f@1Nhj-L(K*f}Ei z>K_?I~vE6nd-Ak)xOvQ+VneEU!Cne$=xx$_Dw`xxgUKFCp6{~ra;AaFK=!WqtR zxLk_#|K~vdc<<~zmz0)CX}HWhhX&e`l2UD7q5k0MSade>$=sY%_fzIDo5O652j+Mn S0S{=^+@CoF<`75+0{;gupv0;G literal 0 HcmV?d00001 diff --git a/img/UVR-banner-2.png b/img/UVR-banner-2.png new file mode 100644 index 0000000000000000000000000000000000000000..4819e915c722e28252d89446ed53084b4b0cf6d6 GIT binary patch literal 20696 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 literal 0 HcmV?d00001 diff --git a/img/UVR-banner.png b/img/UVR-banner.png new file mode 100644 index 0000000000000000000000000000000000000000..768498ab0dfdf842ebb341a8e14331abe5ecd31c GIT binary patch literal 21127 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�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 C^;OLP literal 0 HcmV?d00001 diff --git a/img/refresh.png b/img/refresh.png new file mode 100644 index 0000000000000000000000000000000000000000..d1541d3a0bc522804f8eaa5afca3bafca8aa43f0 GIT binary patch literal 1619 zcmV-Z2CVssP)pQ`B)JVMIah|Q}hx&LW6YSNHnV%!XT0a0 zyUy3W=VQDrSloN}*=Ozl`k%G;J$vu9#TbJoA~FMb5@-e5fM<+f` z#+XmC0F|ZGX@w%vNU8Gx%Yljs5RnPMBu5)vS`Qoqx?P{$z~L++P9*>s6|u}$L}VnE z#3hbSiwBJ!5!nj72W&US9E*8>G%?1MDbNHMkG`(e_1sqn+y!g~`VT#e0SPh&L zh9iz9LI6+zRs#DHblOi30S^H6!-4?dX5hyR9QW!zV0pC!_>BRfA|e+8ZvwL;RPP5m zf&IV%=d;Ukq`{?QfmztGV?v0{W?-X;d=1=hjM-Iz8un71|spHlY*nYbb7!x}* z;S%6p;9cO~khYEkD>CTDjHUa2i_4Zz482$+Tbw)#YD0z8IiIArXNLBfkUMM0Z_r4N``F#!r0 zPe&l*oty}m2>h+!c{ULOJdL$FWc;EucxN62IJh2H@N~NC_^t|9Dk9Pf+=5-~++~c} zlxPF-uuQ|QJ$U6}W6WM4nFtup3hbmj3LY7{UdZNIM#ABrK;L(G+x;jF+9ly`$0++E;S;4BwIU(hScC>FB$=jP$b|yr9wJeQTa${1pFTfD2V{A3)B(;eM(sg0rg6SS|VVK zU)c}=2bBu7M1VG+{{ck;x;+;Mfe~pU%2+f4y1}1-0x&a8L>Wsc0a_P`vg>=MNQ+Vy z7y(dQ1k6{;4nmQD14@OOAV5SW0@IaCUEmO4jM)SH>Z#BoBIDA9mx;_*%6`XAkV@7A z-uF}z;F@$WWh&PxWt)vNO$;Ic;Gt9?Wh5ff0Nk!z+I;$(YtCGcT?g>ao9E^|pRZya z;9Zu|au6p`Q;XoOj;{b^Yl3ac4U0wO$|S*MB&%?yydG&U z`K5%-hm?m+N8aHaGxSGOOv7{Q_OiOl&8_JBY76srECvDX3jRT0W+(xUf%S@k9_)rf z?hb}Hze>SwfH&0oK1QaX=j81N&duA&0OzNpCu#QsQz8@K7<~nWk!;0i zbY1}426&YWk|%*1(GxM;4`fkfdodetLf>d~Gru0VGzG`60JaCTZLq2O&9UrO0AvjI zBv%lSL1*+`N)_h@u&H`$@&9{s>lP|FP*qWijED#}|7H#TNAHGY5c?PP8Sp7KYqJ;V zHO8E9>=l6X9fzkmp9`?*ZecP2JP)ih#tg>wrP{D;!5&Zudpbc~<_P`+Y?P;7Rd-9O ze_jRbsDg;Nx)Yd}2=*k5xQMt3_{e#(Njp7&O@X~FNz93-$pJX4$xDD`z+&{x$tco` z9r?Ea+l(=XlR;RNR0t?(z%ETKz|PbrV^?V=yS^KW2d3S+2iReZIhiKD{{VWE3MTT` Ra&`a!002ovPDHLkV1ng&&pH4A literal 0 HcmV?d00001 diff --git a/lib_v5/__pycache__/dataset.cpython-37.pyc b/lib_v5/__pycache__/dataset.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..68d09377a9d654c35b9ab7f0c1a454f5efd513ea GIT binary patch literal 5328 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 Iy@Ge)Ke;~b7XSbN literal 0 HcmV?d00001 diff --git a/lib_v5/__pycache__/dataset.cpython-39.pyc b/lib_v5/__pycache__/dataset.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0367e6771b18cf328cf7662a48f6db6bcd289def GIT binary patch literal 5341 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 literal 0 HcmV?d00001 diff --git a/lib_v5/__pycache__/layers.cpython-39.pyc b/lib_v5/__pycache__/layers.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7ebf5774a54eb57009a8cf4dc580385f3e753218 GIT binary patch literal 4256 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 F{{<~RH1hxe literal 0 HcmV?d00001 diff --git a/lib_v5/__pycache__/layers_537238KB.cpython-39.pyc b/lib_v5/__pycache__/layers_537238KB.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4b7493f34a310d6d9ef1eb72ffcefc9491477dae GIT binary patch literal 4272 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 literal 0 HcmV?d00001 diff --git a/lib_v5/__pycache__/nets.cpython-37.pyc b/lib_v5/__pycache__/nets.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c9a950d9bc83e8ea471b080ce15e7e1e705579da GIT binary patch literal 3170 zcmZuzOK%*<5$^7J?t@E;+C-G11dQ!Co+M_#hl9jc98;7n7`8Wt1qs1|z+kvNOAR$U zyY3lEv@iq$ONK8IkYkR!NB@Rg^9OS6Yfk(NKIN;P*(E7y7yV6jRllaX>Z`fEwA5ty zz4-Tk!`2dG|D(?QXG8c1E$;&)lRRa8dWw{dc%So1Cq`T_&PG<>HX18+MsDBb>@JhG zbe=Qm#Qey6X7zn&TxAxxOzn>$L_II;l|4y7gD#nxjUi@TzI8Je_^>?;|{reBT zdiTN3-TR;Jr^!M1cxOM0i+p49jiL~t+{n8C#yh;r*Z56-Q>+Of{!hCXqHAOR<^%E^ z{m5nHls&ZkF`#5qR`MC&7pLMBw>w2l)jb4(l%jNJSOKyN z*{Nj@vR%tQWXs3`H_CfKL#<+eb(MhLM*W1~8o_mf8w5WixCsb6^>aKlKhgZ57V#$9 z7TPx2j(UTJ8F-Th;l>A1nua08#llq`xT_ngKeCpH)lw z?;y-M#V`so`neBA0jE4?eXy8x@pKHcxQ1Dl_o93d$ynCxvbc7-{so!*2c4J6gy`ZK zt}nC;Yau&@JN0NgY=zAXnSd0~uf{fv-2>5_+d&TK`(~|H(LP#|KGt(&LpEO^pu&#P z5pA98mS3Y=DY@h~5T4aEHa@T#GOc27|*R1{!>$uL5Tbi@*86cK0ZfKQNx z_CXTmXMaa8=&EHr)b9x>qbi=bk{5@YVLE;i9z>Z8k#c&~s2(PV4;Q+MM3(l(+2gG{ zw|l#TB6+M^7`GK3s6-ydX3|zTJVqQW7NP;$7YA%#9-!!kv};zC+8Q4h+K-M;Hp98J zWh8GDorDMAm?rd-L!xAi9gz@-w z4R&f3_7PEw`^p@vnlVGsn|hb6rA4dLdNY1#O5h7|YMYgKX+wh;gof7j(HbBmP~53I zA5pr8lt%M0O^j*PW1PaCw$Wdz`(DvGS}r}rJpOo(mC~D^e~k@I627obJy@>%ldFH! zvsXcTw4-fio4NID`!%z1a8!Dcp$sj7?z|u~VA(pf?iKMncbaBwtu8fNah0GbG<1AJm;i^&N zlBcnDim`&h!esRx)anlees5<&fn)Fh(jj-ve0Il~%i)!uNdo9v=Wpk95!s6^BBtzmNDD+q`gQ%I=@ z9)Y_a*{X++q)T}~QA<{8Es9_p8G#Z@pL9}CMm)0fUSWNUB8=O!dWOanfwME}E!VCW9iz^qiQJ@g{QqZDjtdFI?Xx<}81s?goKj8G7 JqHV3N{~yCf&G`TT literal 0 HcmV?d00001 diff --git a/lib_v5/__pycache__/nets.cpython-39.pyc b/lib_v5/__pycache__/nets.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1e82eb8b752bee0503204b5806323fbbc79e9978 GIT binary patch literal 3333 zcmZu!TW=f36`q;Bl9Xs!W^CDY4I@ZXuxZpvR)AjI#J419imFB&=YdhNSaFv0Qsk1E zS;~sB0*Y8cUTU;IfqXR3AJK>Yih0eG-uj%PMZYs#Qk3Hr=Ht1{ZD-E;&MIDAtuj2v zfBVD!e^wd$j+Eucg>nZ?cL0(}-e)cP6@50~EzV~)G2nu6HgH<5wK#om;J17$yO4uc zz}d%4deT2((oc9VeD1U=umm!MB`hsf$se(1W<%f1kkA54FuojoBC8Yl?>u@Qgb5dzJ(v{u`Yq{Stm$f{s6qwq*SSNQMJ$$&E zp-OnF~a@358irI``!C#E9Pew?SnOuyu&5=HHPtaTK~xDI&bg| zew|+z8v=;GXN{!@+nm37n@(>2(AiOR-AB`hfPzg}!KZvr9E)Sz@C0#HYA!THRH-4# zCeA|hp}C|T3rJoe3V(_jAp4NLQVt-yr5r+btSoS=e79Lqm$1H~mr-vJTqdB~RM!Z8 zL~xzp$AD&_Zs5o8Bg3BK%V0=BR6*zvX}dlfR+WdVnItUpb6-+z7^{aKs{%E z&;|6+&Q;4-daE+Te4ebx>I;NdRJS%FvNPL-*VxtyF8MVCYjklYN$(12>oNphvP4na zRg@j4cL?qg+yp3M21UGa`Zd8{03U(g-TgGy&4wcGRa*pL_Tx-O z$Un1gO;6J9lZ9=@D698}+2Qtsd%Jhrd3tDS=(ip1t5kLqJ7_!Vj1drviKxS^zT)j!} zwa5+on(x4*DanXMkPM=+Xbs*FRiw$YjaMS*j8EqAN#iM;saZbxCyu$`6EmmB`Xs3zuf6`KG*U zE8+`r?Ae)k;lY9cgoXGDp@N#`Pr-J_!MsNibWv{>eX8hFEBpAlJ6VCgTIyk5?_DTD z1U&xm9&1H7-~R^dP+IseoMWugyZCpm{#uS+2OH9go*nHijrLwM8auaZUMhlepR{JM zG%9$_sGtZ72i4QF7!Y=xN2uzPhQvJB%|B$AzcIOteqt&%P|X{tt!I{*ZqukTOCzL+ zBh$fI`k0DJM*XxM=SkBsUYa55j5CU*alwsAtDfrUa0m`1s!aM_iVnv9{Xz4J@nw?7 zD2!gaKg<$Ev4WbJK1+<34;35^W>vp}S^b*eHolosc)Qak}DTds}{@NSm#mP?JCq9Dk6$L+l)VoRXotf8Kg(XqXd15 zl8;nVKP5MbDDi_>A1sl%EiXZ5sGi13et>?O_Q80_LvdZKahKoVH~uFa@n7Ft=W9r; zHER_p)np4f^(i%XS-y;ho7*od4cF@I=hxP6@9fg9rXo%)Q1GSWN=H8 zIf@2xS3M>>o!bx2YNQgGf*aw}_WK`HQ{`{J_Fc=qsP*sCRGS39Ah6tQH}Gdte@XDx z0xZMX3QI)ZMALLSp;&3G{LGSjv!?z;-HBXVmu%2&X4z(EoMC6fEbg1?nXEoVFZ?H9 uzrHNX+ekA0?7Ps`h*`-v+k%yBaD=yKp9=3&&CyhSLQw2FeRVkNH~$a%o%dn@ literal 0 HcmV?d00001 diff --git a/lib_v5/__pycache__/nets_123812KB.cpython-39.pyc b/lib_v5/__pycache__/nets_123812KB.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c5e969c7232e4a1bffe078acff2b41a556dec59a GIT binary patch literal 3438 zcmZ`*&u<&Y6`q;>Ns6LmnTch`HH@Nl!=zCo$^p{W4Q$y?+Bg-|I!*vW#bU)-(o2y` zb#^5y#tJBE2f5Th?!Ayl{~!G;=Gv341$qh4qTiccQk3K_Ip5B_H^27Hd*7RIak0wq z{OjM3cK=>y?4Q(_e{3}FqNHtrWRee9o8Dr;hP=&rArnI`7-vJPZ5xR-aE5N%71xz2xA_Kg_8aN$XLd6_Ck!s1fQB&V>{=$kY=@sle54vG69)rz)-XcBXHU)Cfq?T-Hu{upcQ!M$~=~#7Ue5fp&{S z)!xITGm??gc9eA14Ymw!7`&~kbVR=&$%8?p?J(Wn*WQDu93rF6ZEXY58Hj*=FXd!(??)6*X>t z;=H+vAx*9vjB2_xOA-zv_)#?ohQ>KiuLZ%M55hsAF=wKFPHQffC*Fx@;kh0C7+OW! zGTuqd_S7h}STq~#>84=p4Z0QZM<(x}?4UQUIDr(ZXLai0K0K9Anqqe0e zGEQz17=x3Y)dB(W$H^waUBIW{dV4nx)04lT)oiFGywo}Y#aF=~m(r}a9t=j$g55BY z0U}Ya7}3+X_jD#xmoPvt-XA50tp}T1_c~d8s29+$73`{5_98Q=6?6~a5wnS?!^V7v zjk6sTosf3TtWsN}gG~G3!O?m!t+h0E~uvp`Tjv>>h7r9O{1(Sidb=ypxe!q zvBxYp%xAubHByQ)q7g)cXv|83H$)Y2@_hB28_fu1t26abnxIk^!ze9mKIdaLVc-%z z=6G`)8j|+6Vv0HIi*H5Ox@vS|Yl7T$73CT`wllj=JmX#%V;3VP$cSU_tTwl4cA9U( zdnP}=63332iRTU^a6?Flv3!&Ym`i;*UJu!4)~AX-3uPZSv&S{G7t6Mv)%#01 zMIV0nj^*5+?thhaDLC9$)-hJ;U;3V_zm=m`z=yP=V@5l3qn$U5#?H-}mvgV&C#~tt zjq=_w%FF%SLN0X-dW2o;F>?I(LfyiQ4ea{tDIlL;E$t@3>(a*=RNi4%*hKvQzIWKg zx#(tqvFGNxIL~~)JFM96V~jKT-h?kg(~|M`wPu1t7dO!_7Qz5PxNl)D)8IcRNHF}1eMoCK16;ap2UQb17 z8XrapUfLSQN7^ACc!oO$B3k{7x=|H(ieZ@U%_R+!#=P!GJqwkjJ*8g&827m^u8U=E z^Beree}yIf<2oyR8S%Spqykq0lKGtalr4L{{Vx4^)<=Kau=+%uObQ4$Vx^|Y?YuDGk3Yo8)+Ei#K+Tu4nyDl*jR7EH}JiGQcKntVce Q&V08IMqd#%Yvtzu0JGZ*hyVZp literal 0 HcmV?d00001 diff --git a/lib_v5/__pycache__/nets_123821KB.cpython-39.pyc b/lib_v5/__pycache__/nets_123821KB.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..250765aab71d1ce17c02132b005ed0c1038bad09 GIT binary patch literal 3438 zcmZ`*TW=f36`q;Bl9VV}W@6cK4WmfivTf9ea)7jT17DNoQbDcb6d+VAR-7fh61ik& zm$G84fTDJgmm2VUU&u%QkN%2z?UVjOfENAE?2@7+cggv7=A60hnRC7~;qr2o;W>K! z<=#K*jQyJ$i;s=QU6iy9kWBJEYtviw*?_k>FJxlC1>@dz^j7q%ED7 zOga(Y_g`4;3M8)dAn{5`Rr1HI>7QVJw%z1fBnfb(AATFDG}vryecamo@_vWZiw|v# zp7a(VVr?#2TS)hN*5y)2>t&^F6-&46@0rco4i@or?S7a>_a5);Y)9D}>x3pb@d;J| zo!OkIV+dm&iiMK?0LWOzbM`_^#1x;JSra?wxsYbHsgtw7F){&}Xuwdk3nO<6IZ2_j z&*;2T2Pt&U8J!PZrH}$$^suHD)~P~XgTz}HW0h+yl{$Z6t(k7Q)K!eG*yBuBFLm7L zxSYvXB!k_m+b3j(6G6ZM$|WH4C}X{KQY;aWqPeP_bUccbA|q-)2;wBpfI&biGew|+z>jH@1 z^TvX=ZOp9DAuG-vG9el10ZMuZ$k~MDe9Cvlu{g$QPvB!^%SH>{Rkq-96Kmdb(Xy#^ zEKqZDk-JmOfVzviQ`SAy?XvEpZkf8k3G?k{MP0`FiatiYL+~yEovgY>@E*Z+f*%2z zp1OgT=0}=8)gszNX`yVP+*a>XHv>PRPVj(E*zX4c%{Dhz9VV-bs#xOYC(fIz7}Dg* z!KkK7vn1glf*)0bU|^gB^`#*A>p1Ke8gnMJkR%h7@HO{1(Sidb=ypxe!qvBx|(%xC@_ zYoruqL?eg>(U_M8Z-^@5#EUBtSNHWRg`P&*v{;I;u-hC7`qrTMMj)>XSKOav(tQ2-ZS~}l{j|H zOgwiWfg3_XjOC+Lz*OM7V{g_Y_j<@a^FCGdsg-@)%$_Wvy4SYx|I%c%9Fxq*`Xzbjqc{%sWebSoV!YJ=8qrBYD zE#y+iphwuX9wW!U7U~veY+%=CPXYP-YH2qKUY9=3pz`wPt_NsdPogFQz5PxNl)D)8IcRNHGGDgMoCK16;ap2UQb178XrapUfLSO zN7^ACc!oO$B3k{Fx=|H(ib0qjEF=w+#=P!OJqwkjJ*8g(827m^u8UP}^Beree}yIf z<2q}674f@jqykq0lKGtalr4L){;qKOSN!+l`IYnWU9NT}x@{~dz!6%U!V6NJTOR2}74sHeleiD!&CjyZEhTU%H3j@2L-H z!VQ975tvk9wh>VCLjuE~1`MH^j81vuXDBJz$QMhE>Mu+#Y1Y&qX$HQwa6@PaUnG+smM^LTQD`_B>tV^YVrx?IrH5<7=2AF IS!*}{2M59msQ>@~ literal 0 HcmV?d00001 diff --git a/lib_v5/__pycache__/nets_537238KB.cpython-39.pyc b/lib_v5/__pycache__/nets_537238KB.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..68e9ff74ec47558bc5546a21f4724306df756dae GIT binary patch literal 3461 zcmZ`+TW=f36`sr9NJ*3|GqLO#shbuC*fc^V*-aX_sc&`K#u0=n4q8IMV#QffOOZ=< zb}3)50*cr{UTVNUfqe99e?x!8zV=CfAwY|MXLdh z^VR-8YmEJyD)Wzp%3YLXAE21xJ=QFKc~hV+daN&-k{3FwF9qYQZ#NyIkv+HXH7lHb z$&{t+S4`QV>{egO<^nX1a-nfc&7$JFtl^zt9=6@!xrk%naxZuu>cqdj_37r;XJ6fK zk$L{11=5q;1ca=~6~n@uA6T0!q2#MdQx;PhJ^M(6C65iY0+1U=$xAKGr zIq?Wq0IlhmkkN%P7e%5ZKLS#g@{GL{V==*}rgCg$JQK>yHnB72+eRm#6LoADt-|P? zLQh)QtTQ&Zv_T7-ea7a&Rw=YV2QB18VxB7W3(&Z8ePlV;Vrlc{=9=1;N?XO)iZxDc zwbI6ojjO4CSuyNeb^C<2;Y1K{fOZIId$ifTH8Ly`kfE`X+sSAcYE7G%d%hpVQR@4- zQygm3{e9dTs8Hut7`HYIZW`P&c&k~ZBl>!vM!hh%f@C<%-G^b>MTMa)NdoWMyBBu{hkFmh zT?f zUgLGX#;^11VodH$h}1jyK!WqiW-#IZQWp^xEeWz9kj zPFB|7cw;%MIjC7wI~I`aOk~akBS3Z_+okM6wo2K9ER8I1(0sd5(W{tWUnZb0((e(x zPe7-vuM%7%_yEvw^>zH@{8`QqauIHzY@%$T+|oa#W(Gc@MsS2y(Chg=jWOG<8n&z^ zs$!9wSDfFjqDzBo8@(D1jS>g_5bjj<{l4)L$cw)Jw^7h5EapsfgXUZ+555)B#B(e9 z39OoyWt_AEA)yoSM6G5t7YK(UfS%-6fGOb^x915X) z`9YAh0u`!~e$F@mIm3)?{)NhUwjn-wiG%d5RL*2Ob;d4Y6%>otF>C|YK)q;NF?JVB zbZQ5CpzfKm7ShG;5|+(juc+#4xRzftI^wlc-SRthD;Zb(8XVQXR7lFcLbX-p0WTZg zSlHH-WlruA+$XpJ&=f72XyoKOg1-YEf%2{WC`cN0y^OkEC!o+OIOI~2b~gOp;HkeK z#L7ny=Bq|^5Ooe_I(-QpnoAD`@zLhP``h^n?pxvgwuOrn7O{Y!2J%TgL2BHRA z^9{DnHqdl9xno9Exg3nr+zUp}HvFlyX(YEFJoEQKK2_+4qtwXGpxsWwv>}Qxv17m8 zPPOs9SzMUU{1|g26jsC_2n11|l{&ABDnjJN+BpxJamjXT>YOwH`7#wlCYxA%#>Z^J zKqGw2@yl^uNZa328aJ4+uJ~TG@0bkvS{&PEB%ayOzyqNnvVyN5$2k*F-LX4uk+~h@pIMtK+ANf9oYWdGqP|qt zy|mU{&M5Hk;yYF{Z@T_9)~2{{Udv<5(!KPC>wlEJS3!j|qiuTIbG_|%^v24~oR>4V zTqn)x&h>KN(aX)eOd^}w23^9o+(njuBlJy-SjVc*o&qxZ)pFkyC|!9tgUSc&3Y&=k z-}Vl>I2PRv(D&R}7sr`zcZU`0-9@lE6+Dy540rxBZ1bU5rqEhNN-%`lL`vVG8h@l8k?Af~yi^CcWW*i)The_&IyoFXMLMJWq<=<= zTF~j}FiE1LFvd?V`_Z$eO+4@vw+uwI{y8-x5x0tdkQ~nCi;u|Uwg>uYpcO4Yc?@9O z^q*pOB-_A5Oi^RQvU_>=z9e8(GAONYSVt^_k)h!B|Yujh20wJP(`h@3tM9T-2kUm z`AzWI#cwU!(iH@MuKooLNUW%TNnlceS;k+f`U!zyPy?sQobpBkC80g?#A3brvB@Qk zCH*xtxgC%C!{_)XV_4AoW#fJ8alGCh#mETtX`)$^WOAptoto@a hB&*Za7|HmHcc-|Ze8JH%p$jtH1@yiu7Uk-V{{hQl5eEPO literal 0 HcmV?d00001 diff --git a/lib_v5/__pycache__/spec_utils.cpython-37.pyc b/lib_v5/__pycache__/spec_utils.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2f12e316ce216685784f64730df1eb80c3cf68ff GIT binary patch literal 4999 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 literal 0 HcmV?d00001 diff --git a/lib_v5/__pycache__/spec_utils.cpython-39.pyc b/lib_v5/__pycache__/spec_utils.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..30559f2dc0806e6b6b9080a1f53e830a8877eb9e GIT binary patch literal 12790 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 0: + h = h[:, :, :, self.offset:-self.offset] + assert h.size()[3] > 0 + + return h diff --git a/lib_v5/nets_123821KB.py b/lib_v5/nets_123821KB.py new file mode 100644 index 0000000..d32b5c0 --- /dev/null +++ b/lib_v5/nets_123821KB.py @@ -0,0 +1,112 @@ +import torch +from torch import nn +import torch.nn.functional as F + +from lib_v5 import layers_123821KB as layers + + +class BaseASPPNet(nn.Module): + + def __init__(self, nin, ch, dilations=(4, 8, 16)): + super(BaseASPPNet, self).__init__() + self.enc1 = layers.Encoder(nin, ch, 3, 2, 1) + self.enc2 = layers.Encoder(ch, ch * 2, 3, 2, 1) + self.enc3 = layers.Encoder(ch * 2, ch * 4, 3, 2, 1) + self.enc4 = layers.Encoder(ch * 4, ch * 8, 3, 2, 1) + + self.aspp = layers.ASPPModule(ch * 8, ch * 16, dilations) + + self.dec4 = layers.Decoder(ch * (8 + 16), ch * 8, 3, 1, 1) + self.dec3 = layers.Decoder(ch * (4 + 8), ch * 4, 3, 1, 1) + self.dec2 = layers.Decoder(ch * (2 + 4), ch * 2, 3, 1, 1) + self.dec1 = layers.Decoder(ch * (1 + 2), ch, 3, 1, 1) + + def __call__(self, x): + h, e1 = self.enc1(x) + h, e2 = self.enc2(h) + h, e3 = self.enc3(h) + h, e4 = self.enc4(h) + + h = self.aspp(h) + + h = self.dec4(h, e4) + h = self.dec3(h, e3) + h = self.dec2(h, e2) + h = self.dec1(h, e1) + + return h + + +class CascadedASPPNet(nn.Module): + + def __init__(self, n_fft): + super(CascadedASPPNet, self).__init__() + self.stg1_low_band_net = BaseASPPNet(2, 32) + self.stg1_high_band_net = BaseASPPNet(2, 32) + + self.stg2_bridge = layers.Conv2DBNActiv(34, 16, 1, 1, 0) + self.stg2_full_band_net = BaseASPPNet(16, 32) + + self.stg3_bridge = layers.Conv2DBNActiv(66, 32, 1, 1, 0) + self.stg3_full_band_net = BaseASPPNet(32, 64) + + self.out = nn.Conv2d(64, 2, 1, bias=False) + self.aux1_out = nn.Conv2d(32, 2, 1, bias=False) + self.aux2_out = nn.Conv2d(32, 2, 1, bias=False) + + self.max_bin = n_fft // 2 + self.output_bin = n_fft // 2 + 1 + + self.offset = 128 + + def forward(self, x, aggressiveness=None): + mix = x.detach() + x = x.clone() + + x = x[:, :, :self.max_bin] + + bandw = x.size()[2] // 2 + aux1 = torch.cat([ + self.stg1_low_band_net(x[:, :, :bandw]), + self.stg1_high_band_net(x[:, :, bandw:]) + ], dim=2) + + h = torch.cat([x, aux1], dim=1) + aux2 = self.stg2_full_band_net(self.stg2_bridge(h)) + + h = torch.cat([x, aux1, aux2], dim=1) + h = self.stg3_full_band_net(self.stg3_bridge(h)) + + mask = torch.sigmoid(self.out(h)) + mask = F.pad( + input=mask, + pad=(0, 0, 0, self.output_bin - mask.size()[2]), + mode='replicate') + + if self.training: + aux1 = torch.sigmoid(self.aux1_out(aux1)) + aux1 = F.pad( + input=aux1, + pad=(0, 0, 0, self.output_bin - aux1.size()[2]), + mode='replicate') + aux2 = torch.sigmoid(self.aux2_out(aux2)) + aux2 = F.pad( + input=aux2, + pad=(0, 0, 0, self.output_bin - aux2.size()[2]), + mode='replicate') + return mask * mix, aux1 * mix, aux2 * mix + else: + if aggressiveness: + mask[:, :, :aggressiveness['split_bin']] = torch.pow(mask[:, :, :aggressiveness['split_bin']], 1 + aggressiveness['value'] / 3) + mask[:, :, aggressiveness['split_bin']:] = torch.pow(mask[:, :, aggressiveness['split_bin']:], 1 + aggressiveness['value']) + + return mask * mix + + def predict(self, x_mag, aggressiveness=None): + h = self.forward(x_mag, aggressiveness) + + if self.offset > 0: + h = h[:, :, :, self.offset:-self.offset] + assert h.size()[3] > 0 + + return h diff --git a/lib_v5/nets_537238KB.py b/lib_v5/nets_537238KB.py new file mode 100644 index 0000000..566e3f9 --- /dev/null +++ b/lib_v5/nets_537238KB.py @@ -0,0 +1,113 @@ +import torch +import numpy as np +from torch import nn +import torch.nn.functional as F + +from lib_v5 import layers_537238KB as layers + + +class BaseASPPNet(nn.Module): + + def __init__(self, nin, ch, dilations=(4, 8, 16)): + super(BaseASPPNet, self).__init__() + self.enc1 = layers.Encoder(nin, ch, 3, 2, 1) + self.enc2 = layers.Encoder(ch, ch * 2, 3, 2, 1) + self.enc3 = layers.Encoder(ch * 2, ch * 4, 3, 2, 1) + self.enc4 = layers.Encoder(ch * 4, ch * 8, 3, 2, 1) + + self.aspp = layers.ASPPModule(ch * 8, ch * 16, dilations) + + self.dec4 = layers.Decoder(ch * (8 + 16), ch * 8, 3, 1, 1) + self.dec3 = layers.Decoder(ch * (4 + 8), ch * 4, 3, 1, 1) + self.dec2 = layers.Decoder(ch * (2 + 4), ch * 2, 3, 1, 1) + self.dec1 = layers.Decoder(ch * (1 + 2), ch, 3, 1, 1) + + def __call__(self, x): + h, e1 = self.enc1(x) + h, e2 = self.enc2(h) + h, e3 = self.enc3(h) + h, e4 = self.enc4(h) + + h = self.aspp(h) + + h = self.dec4(h, e4) + h = self.dec3(h, e3) + h = self.dec2(h, e2) + h = self.dec1(h, e1) + + return h + + +class CascadedASPPNet(nn.Module): + + def __init__(self, n_fft): + super(CascadedASPPNet, self).__init__() + self.stg1_low_band_net = BaseASPPNet(2, 64) + self.stg1_high_band_net = BaseASPPNet(2, 64) + + self.stg2_bridge = layers.Conv2DBNActiv(66, 32, 1, 1, 0) + self.stg2_full_band_net = BaseASPPNet(32, 64) + + self.stg3_bridge = layers.Conv2DBNActiv(130, 64, 1, 1, 0) + self.stg3_full_band_net = BaseASPPNet(64, 128) + + self.out = nn.Conv2d(128, 2, 1, bias=False) + self.aux1_out = nn.Conv2d(64, 2, 1, bias=False) + self.aux2_out = nn.Conv2d(64, 2, 1, bias=False) + + self.max_bin = n_fft // 2 + self.output_bin = n_fft // 2 + 1 + + self.offset = 128 + + def forward(self, x, aggressiveness=None): + mix = x.detach() + x = x.clone() + + x = x[:, :, :self.max_bin] + + bandw = x.size()[2] // 2 + aux1 = torch.cat([ + self.stg1_low_band_net(x[:, :, :bandw]), + self.stg1_high_band_net(x[:, :, bandw:]) + ], dim=2) + + h = torch.cat([x, aux1], dim=1) + aux2 = self.stg2_full_band_net(self.stg2_bridge(h)) + + h = torch.cat([x, aux1, aux2], dim=1) + h = self.stg3_full_band_net(self.stg3_bridge(h)) + + mask = torch.sigmoid(self.out(h)) + mask = F.pad( + input=mask, + pad=(0, 0, 0, self.output_bin - mask.size()[2]), + mode='replicate') + + if self.training: + aux1 = torch.sigmoid(self.aux1_out(aux1)) + aux1 = F.pad( + input=aux1, + pad=(0, 0, 0, self.output_bin - aux1.size()[2]), + mode='replicate') + aux2 = torch.sigmoid(self.aux2_out(aux2)) + aux2 = F.pad( + input=aux2, + pad=(0, 0, 0, self.output_bin - aux2.size()[2]), + mode='replicate') + return mask * mix, aux1 * mix, aux2 * mix + else: + if aggressiveness: + mask[:, :, :aggressiveness['split_bin']] = torch.pow(mask[:, :, :aggressiveness['split_bin']], 1 + aggressiveness['value'] / 3) + mask[:, :, aggressiveness['split_bin']:] = torch.pow(mask[:, :, aggressiveness['split_bin']:], 1 + aggressiveness['value']) + + return mask * mix + + def predict(self, x_mag, aggressiveness=None): + h = self.forward(x_mag, aggressiveness) + + if self.offset > 0: + h = h[:, :, :, self.offset:-self.offset] + assert h.size()[3] > 0 + + return h diff --git a/lib_v5/spec_utils.py b/lib_v5/spec_utils.py new file mode 100644 index 0000000..a889ef6 --- /dev/null +++ b/lib_v5/spec_utils.py @@ -0,0 +1,472 @@ +import os + +import librosa +import numpy as np +import soundfile as sf +import math +import json +import hashlib +from tqdm import tqdm + + +def crop_center(h1, h2): + h1_shape = h1.size() + h2_shape = h2.size() + + if h1_shape[3] == h2_shape[3]: + return h1 + elif h1_shape[3] < h2_shape[3]: + raise ValueError('h1_shape[3] must be greater than h2_shape[3]') + + # s_freq = (h2_shape[2] - h1_shape[2]) // 2 + # e_freq = s_freq + h1_shape[2] + s_time = (h1_shape[3] - h2_shape[3]) // 2 + e_time = s_time + h2_shape[3] + h1 = h1[:, :, :, s_time:e_time] + + return h1 + + +def wave_to_spectrogram(wave, hop_length, n_fft, mid_side=False, mid_side_b2=False, reverse=False): + if reverse: + wave_left = np.flip(np.asfortranarray(wave[0])) + wave_right = np.flip(np.asfortranarray(wave[1])) + elif mid_side: + wave_left = np.asfortranarray(np.add(wave[0], wave[1]) / 2) + wave_right = np.asfortranarray(np.subtract(wave[0], wave[1])) + elif mid_side_b2: + wave_left = np.asfortranarray(np.add(wave[1], wave[0] * .5)) + wave_right = np.asfortranarray(np.subtract(wave[0], wave[1] * .5)) + else: + wave_left = np.asfortranarray(wave[0]) + wave_right = np.asfortranarray(wave[1]) + + spec_left = librosa.stft(wave_left, n_fft, hop_length=hop_length) + spec_right = librosa.stft(wave_right, n_fft, hop_length=hop_length) + + spec = np.asfortranarray([spec_left, spec_right]) + + return spec + + +def wave_to_spectrogram_mt(wave, hop_length, n_fft, mid_side=False, mid_side_b2=False, reverse=False): + import threading + + if reverse: + wave_left = np.flip(np.asfortranarray(wave[0])) + wave_right = np.flip(np.asfortranarray(wave[1])) + elif mid_side: + wave_left = np.asfortranarray(np.add(wave[0], wave[1]) / 2) + wave_right = np.asfortranarray(np.subtract(wave[0], wave[1])) + elif mid_side_b2: + wave_left = np.asfortranarray(np.add(wave[1], wave[0] * .5)) + wave_right = np.asfortranarray(np.subtract(wave[0], wave[1] * .5)) + else: + wave_left = np.asfortranarray(wave[0]) + wave_right = np.asfortranarray(wave[1]) + + def run_thread(**kwargs): + global spec_left + spec_left = librosa.stft(**kwargs) + + thread = threading.Thread(target=run_thread, kwargs={'y': wave_left, 'n_fft': n_fft, 'hop_length': hop_length}) + thread.start() + spec_right = librosa.stft(wave_right, n_fft, hop_length=hop_length) + thread.join() + + spec = np.asfortranarray([spec_left, spec_right]) + + return spec + + +def combine_spectrograms(specs, mp): + l = min([specs[i].shape[2] for i in specs]) + spec_c = np.zeros(shape=(2, mp.param['bins'] + 1, l), dtype=np.complex64) + offset = 0 + bands_n = len(mp.param['band']) + + for d in range(1, bands_n + 1): + h = mp.param['band'][d]['crop_stop'] - mp.param['band'][d]['crop_start'] + spec_c[:, offset:offset+h, :l] = specs[d][:, mp.param['band'][d]['crop_start']:mp.param['band'][d]['crop_stop'], :l] + offset += h + + if offset > mp.param['bins']: + raise ValueError('Too much bins') + + # lowpass fiter + if mp.param['pre_filter_start'] > 0: # and mp.param['band'][bands_n]['res_type'] in ['scipy', 'polyphase']: + if bands_n == 1: + spec_c = fft_lp_filter(spec_c, mp.param['pre_filter_start'], mp.param['pre_filter_stop']) + else: + gp = 1 + for b in range(mp.param['pre_filter_start'] + 1, mp.param['pre_filter_stop']): + g = math.pow(10, -(b - mp.param['pre_filter_start']) * (3.5 - gp) / 20.0) + gp = g + spec_c[:, b, :] *= g + + return np.asfortranarray(spec_c) + + +def spectrogram_to_image(spec, mode='magnitude'): + if mode == 'magnitude': + if np.iscomplexobj(spec): + y = np.abs(spec) + else: + y = spec + y = np.log10(y ** 2 + 1e-8) + elif mode == 'phase': + if np.iscomplexobj(spec): + y = np.angle(spec) + else: + y = spec + + y -= y.min() + y *= 255 / y.max() + img = np.uint8(y) + + if y.ndim == 3: + img = img.transpose(1, 2, 0) + img = np.concatenate([ + np.max(img, axis=2, keepdims=True), img + ], axis=2) + + return img + + +def reduce_vocal_aggressively(X, y, softmask): + v = X - y + y_mag_tmp = np.abs(y) + v_mag_tmp = np.abs(v) + + v_mask = v_mag_tmp > y_mag_tmp + y_mag = np.clip(y_mag_tmp - v_mag_tmp * v_mask * softmask, 0, np.inf) + + return y_mag * np.exp(1.j * np.angle(y)) + + +def mask_silence(mag, ref, thres=0.2, min_range=64, fade_size=32): + if min_range < fade_size * 2: + raise ValueError('min_range must be >= fade_area * 2') + + mag = mag.copy() + + idx = np.where(ref.mean(axis=(0, 1)) < thres)[0] + starts = np.insert(idx[np.where(np.diff(idx) != 1)[0] + 1], 0, idx[0]) + ends = np.append(idx[np.where(np.diff(idx) != 1)[0]], idx[-1]) + uninformative = np.where(ends - starts > min_range)[0] + if len(uninformative) > 0: + starts = starts[uninformative] + ends = ends[uninformative] + old_e = None + for s, e in zip(starts, ends): + if old_e is not None and s - old_e < fade_size: + s = old_e - fade_size * 2 + + if s != 0: + weight = np.linspace(0, 1, fade_size) + mag[:, :, s:s + fade_size] += weight * ref[:, :, s:s + fade_size] + else: + s -= fade_size + + if e != mag.shape[2]: + weight = np.linspace(1, 0, fade_size) + mag[:, :, e - fade_size:e] += weight * ref[:, :, e - fade_size:e] + else: + e += fade_size + + mag[:, :, s + fade_size:e - fade_size] += ref[:, :, s + fade_size:e - fade_size] + old_e = e + + return mag + + +def align_wave_head_and_tail(a, b): + l = min([a[0].size, b[0].size]) + + return a[:l,:l], b[:l,:l] + + +def cache_or_load(mix_path, inst_path, mp): + mix_basename = os.path.splitext(os.path.basename(mix_path))[0] + inst_basename = os.path.splitext(os.path.basename(inst_path))[0] + + cache_dir = 'mph{}'.format(hashlib.sha1(json.dumps(mp.param, sort_keys=True).encode('utf-8')).hexdigest()) + mix_cache_dir = os.path.join('cache', cache_dir) + inst_cache_dir = os.path.join('cache', cache_dir) + + os.makedirs(mix_cache_dir, exist_ok=True) + os.makedirs(inst_cache_dir, exist_ok=True) + + mix_cache_path = os.path.join(mix_cache_dir, mix_basename + '.npy') + inst_cache_path = os.path.join(inst_cache_dir, inst_basename + '.npy') + + if os.path.exists(mix_cache_path) and os.path.exists(inst_cache_path): + X_spec_m = np.load(mix_cache_path) + y_spec_m = np.load(inst_cache_path) + else: + X_wave, y_wave, X_spec_s, y_spec_s = {}, {}, {}, {} + + for d in range(len(mp.param['band']), 0, -1): + bp = mp.param['band'][d] + + if d == len(mp.param['band']): # high-end band + X_wave[d], _ = librosa.load( + mix_path, bp['sr'], False, dtype=np.float32, res_type=bp['res_type']) + y_wave[d], _ = librosa.load( + inst_path, bp['sr'], False, dtype=np.float32, res_type=bp['res_type']) + else: # lower bands + X_wave[d] = librosa.resample(X_wave[d+1], mp.param['band'][d+1]['sr'], bp['sr'], res_type=bp['res_type']) + y_wave[d] = librosa.resample(y_wave[d+1], mp.param['band'][d+1]['sr'], bp['sr'], res_type=bp['res_type']) + + X_wave[d], y_wave[d] = align_wave_head_and_tail(X_wave[d], y_wave[d]) + + X_spec_s[d] = wave_to_spectrogram(X_wave[d], bp['hl'], bp['n_fft'], mp.param['mid_side'], mp.param['mid_side_b2'], mp.param['reverse']) + y_spec_s[d] = wave_to_spectrogram(y_wave[d], bp['hl'], bp['n_fft'], mp.param['mid_side'], mp.param['mid_side_b2'], mp.param['reverse']) + + del X_wave, y_wave + + X_spec_m = combine_spectrograms(X_spec_s, mp) + y_spec_m = combine_spectrograms(y_spec_s, mp) + + if X_spec_m.shape != y_spec_m.shape: + raise ValueError('The combined spectrograms are different: ' + mix_path) + + _, ext = os.path.splitext(mix_path) + + np.save(mix_cache_path, X_spec_m) + np.save(inst_cache_path, y_spec_m) + + return X_spec_m, y_spec_m + + +def spectrogram_to_wave(spec, hop_length, mid_side, mid_side_b2, reverse): + spec_left = np.asfortranarray(spec[0]) + spec_right = np.asfortranarray(spec[1]) + + wave_left = librosa.istft(spec_left, hop_length=hop_length) + wave_right = librosa.istft(spec_right, hop_length=hop_length) + + if reverse: + return np.asfortranarray([np.flip(wave_left), np.flip(wave_right)]) + elif mid_side: + return np.asfortranarray([np.add(wave_left, wave_right / 2), np.subtract(wave_left, wave_right / 2)]) + elif mid_side_b2: + return np.asfortranarray([np.add(wave_right / 1.25, .4 * wave_left), np.subtract(wave_left / 1.25, .4 * wave_right)]) + else: + return np.asfortranarray([wave_left, wave_right]) + + +def spectrogram_to_wave_mt(spec, hop_length, mid_side, reverse, mid_side_b2): + import threading + + spec_left = np.asfortranarray(spec[0]) + spec_right = np.asfortranarray(spec[1]) + + def run_thread(**kwargs): + global wave_left + wave_left = librosa.istft(**kwargs) + + thread = threading.Thread(target=run_thread, kwargs={'stft_matrix': spec_left, 'hop_length': hop_length}) + thread.start() + wave_right = librosa.istft(spec_right, hop_length=hop_length) + thread.join() + + if reverse: + return np.asfortranarray([np.flip(wave_left), np.flip(wave_right)]) + elif mid_side: + return np.asfortranarray([np.add(wave_left, wave_right / 2), np.subtract(wave_left, wave_right / 2)]) + elif mid_side_b2: + return np.asfortranarray([np.add(wave_right / 1.25, .4 * wave_left), np.subtract(wave_left / 1.25, .4 * wave_right)]) + else: + return np.asfortranarray([wave_left, wave_right]) + + +def cmb_spectrogram_to_wave(spec_m, mp, extra_bins_h=None, extra_bins=None): + wave_band = {} + bands_n = len(mp.param['band']) + offset = 0 + + for d in range(1, bands_n + 1): + bp = mp.param['band'][d] + spec_s = np.ndarray(shape=(2, bp['n_fft'] // 2 + 1, spec_m.shape[2]), dtype=complex) + h = bp['crop_stop'] - bp['crop_start'] + spec_s[:, bp['crop_start']:bp['crop_stop'], :] = spec_m[:, offset:offset+h, :] + + offset += h + if d == bands_n: # higher + if extra_bins_h: # if --high_end_process bypass + max_bin = bp['n_fft'] // 2 + spec_s[:, max_bin-extra_bins_h:max_bin, :] = extra_bins[:, :extra_bins_h, :] + if bp['hpf_start'] > 0: + spec_s = fft_hp_filter(spec_s, bp['hpf_start'], bp['hpf_stop'] - 1) + if bands_n == 1: + wave = spectrogram_to_wave(spec_s, bp['hl'], mp.param['mid_side'], mp.param['mid_side_b2'], mp.param['reverse']) + else: + wave = np.add(wave, spectrogram_to_wave(spec_s, bp['hl'], mp.param['mid_side'], mp.param['mid_side_b2'], mp.param['reverse'])) + else: + sr = mp.param['band'][d+1]['sr'] + if d == 1: # lower + spec_s = fft_lp_filter(spec_s, bp['lpf_start'], bp['lpf_stop']) + wave = librosa.resample(spectrogram_to_wave(spec_s, bp['hl'], mp.param['mid_side'], mp.param['mid_side_b2'], mp.param['reverse']), bp['sr'], sr, res_type="sinc_fastest") + else: # mid + spec_s = fft_hp_filter(spec_s, bp['hpf_start'], bp['hpf_stop'] - 1) + spec_s = fft_lp_filter(spec_s, bp['lpf_start'], bp['lpf_stop']) + wave2 = np.add(wave, spectrogram_to_wave(spec_s, bp['hl'], mp.param['mid_side'], mp.param['mid_side_b2'], mp.param['reverse'])) + wave = librosa.resample(wave2, bp['sr'], sr, res_type="sinc_fastest") + + return wave.T + + +def fft_lp_filter(spec, bin_start, bin_stop): + g = 1.0 + for b in range(bin_start, bin_stop): + g -= 1 / (bin_stop - bin_start) + spec[:, b, :] = g * spec[:, b, :] + + spec[:, bin_stop:, :] *= 0 + + return spec + + +def fft_hp_filter(spec, bin_start, bin_stop): + g = 1.0 + for b in range(bin_start, bin_stop, -1): + g -= 1 / (bin_start - bin_stop) + spec[:, b, :] = g * spec[:, b, :] + + spec[:, 0:bin_stop+1, :] *= 0 + + return spec + + +def mirroring(a, spec_m, input_high_end, mp): + if 'mirroring' == a: + mirror = np.flip(np.abs(spec_m[:, mp.param['pre_filter_start']-10-input_high_end.shape[1]:mp.param['pre_filter_start']-10, :]), 1) + mirror = mirror * np.exp(1.j * np.angle(input_high_end)) + + return np.where(np.abs(input_high_end) <= np.abs(mirror), input_high_end, mirror) + + if 'mirroring2' == a: + mirror = np.flip(np.abs(spec_m[:, mp.param['pre_filter_start']-10-input_high_end.shape[1]:mp.param['pre_filter_start']-10, :]), 1) + mi = np.multiply(mirror, input_high_end * 1.7) + + return np.where(np.abs(input_high_end) <= np.abs(mi), input_high_end, mi) + + +def ensembling(a, specs): + for i in range(1, len(specs)): + if i == 1: + spec = specs[0] + + ln = min([spec.shape[2], specs[i].shape[2]]) + spec = spec[:,:,:ln] + specs[i] = specs[i][:,:,:ln] + + if 'min_mag' == a: + spec = np.where(np.abs(specs[i]) <= np.abs(spec), specs[i], spec) + if 'max_mag' == a: + spec = np.where(np.abs(specs[i]) >= np.abs(spec), specs[i], spec) + + return spec + + +if __name__ == "__main__": + import cv2 + import sys + import time + import argparse + from model_param_init import ModelParameters + + p = argparse.ArgumentParser() + p.add_argument('--algorithm', '-a', type=str, choices=['invert', 'invert_p', 'min_mag', 'max_mag', 'deep', 'align'], default='min_mag') + p.add_argument('--model_params', '-m', type=str, default=os.path.join('modelparams', '1band_sr44100_hl512.json')) + p.add_argument('--output_name', '-o', type=str, default='output') + p.add_argument('--vocals_only', '-v', action='store_true') + p.add_argument('input', nargs='+') + args = p.parse_args() + + start_time = time.time() + + if args.algorithm.startswith('invert') and len(args.input) != 2: + raise ValueError('There should be two input files.') + + if not args.algorithm.startswith('invert') and len(args.input) < 2: + raise ValueError('There must be at least two input files.') + + wave, specs = {}, {} + mp = ModelParameters(args.model_params) + + for i in range(len(args.input)): + spec = {} + + for d in range(len(mp.param['band']), 0, -1): + bp = mp.param['band'][d] + + if d == len(mp.param['band']): # high-end band + wave[d], _ = librosa.load( + args.input[i], bp['sr'], False, dtype=np.float32, res_type=bp['res_type']) + + if len(wave[d].shape) == 1: # mono to stereo + wave[d] = np.array([wave[d], wave[d]]) + else: # lower bands + wave[d] = librosa.resample(wave[d+1], mp.param['band'][d+1]['sr'], bp['sr'], res_type=bp['res_type']) + + spec[d] = wave_to_spectrogram(wave[d], bp['hl'], bp['n_fft'], mp.param['mid_side'], mp.param['mid_side_b2'], mp.param['reverse']) + + specs[i] = combine_spectrograms(spec, mp) + + del wave + + if args.algorithm == 'deep': + d_spec = np.where(np.abs(specs[0]) <= np.abs(spec[1]), specs[0], spec[1]) + v_spec = d_spec - specs[1] + sf.write(os.path.join('{}.wav'.format(args.output_name)), cmb_spectrogram_to_wave(v_spec, mp), mp.param['sr']) + + if args.algorithm.startswith('invert'): + ln = min([specs[0].shape[2], specs[1].shape[2]]) + specs[0] = specs[0][:,:,:ln] + specs[1] = specs[1][:,:,:ln] + + if 'invert_p' == args.algorithm: + X_mag = np.abs(specs[0]) + y_mag = np.abs(specs[1]) + max_mag = np.where(X_mag >= y_mag, X_mag, y_mag) + v_spec = specs[1] - max_mag * np.exp(1.j * np.angle(specs[0])) + else: + specs[1] = reduce_vocal_aggressively(specs[0], specs[1], 0.2) + v_spec = specs[0] - specs[1] + + if not args.vocals_only: + X_mag = np.abs(specs[0]) + y_mag = np.abs(specs[1]) + v_mag = np.abs(v_spec) + + X_image = spectrogram_to_image(X_mag) + y_image = spectrogram_to_image(y_mag) + v_image = spectrogram_to_image(v_mag) + + cv2.imwrite('{}_X.png'.format(args.output_name), X_image) + cv2.imwrite('{}_y.png'.format(args.output_name), y_image) + cv2.imwrite('{}_v.png'.format(args.output_name), v_image) + + sf.write('{}_X.wav'.format(args.output_name), cmb_spectrogram_to_wave(specs[0], mp), mp.param['sr']) + sf.write('{}_y.wav'.format(args.output_name), cmb_spectrogram_to_wave(specs[1], mp), mp.param['sr']) + + sf.write('{}_v.wav'.format(args.output_name), cmb_spectrogram_to_wave(v_spec, mp), mp.param['sr']) + else: + if not args.algorithm == 'deep': + sf.write(os.path.join('ensembled','{}.wav'.format(args.output_name)), cmb_spectrogram_to_wave(ensembling(args.algorithm, specs), mp), mp.param['sr']) + + if args.algorithm == 'align': + + trackalignment = [ + { + 'file1':'"{}"'.format(args.input[0]), + 'file2':'"{}"'.format(args.input[1]) + } + ] + + for i,e in tqdm(enumerate(trackalignment), desc="Performing Alignment..."): + os.system(f"python lib/align_tracks.py {e['file1']} {e['file2']}") + + #print('Total time: {0:.{1}f}s'.format(time.time() - start_time, 1))