From 7b70e7eec10bed4212ad4aef00642612e42a5373 Mon Sep 17 00:00:00 2001 From: iperov Date: Wed, 2 Jan 2019 17:26:12 +0400 Subject: [PATCH] added new model U-net Face Morpher. removed AVATAR - useless model was just for demo removed MIAEF128 - use UFM insted removed LIAEF128YAW - use model option sort by yaw on start for any model All models now ask some options on start. Session options (such as target epoch, batch_size, write_preview_history etc) can be overrided by special command arg. Converter now always ask options and no more support to define options via command line. fix bug when ConverterMasked always used not predicted mask. SampleGenerator now always generate samples with replicated border, exclude mask samples. refactorings --- README.md | 49 +-- doc/AVATAR_Navalniy_0.jpg | Bin 98128 -> 0 bytes doc/MIAEF128_Cage_fail.jpg | Bin 94345 -> 0 bytes doc/MIAEF128_Ford_0.jpg | Bin 77181 -> 0 bytes doc/MIAEF128_diagramm.png | Bin 31637 -> 0 bytes doc/merged-face.jpg | Bin 14771 -> 0 bytes main.py | 122 +------ mainscripts/Converter.py | 46 ++- mainscripts/Trainer.py | 12 +- models/ConverterBase.py | 5 +- models/ConverterImage.py | 2 +- models/ConverterMasked.py | 96 +++--- models/ModelBase.py | 138 +++++--- models/Model_AVATAR/Model.py | 251 --------------- models/Model_DF/Model.py | 21 +- models/Model_H128/Model.py | 20 +- models/Model_H64/Model.py | 22 +- models/Model_LIAEF128/Model.py | 23 +- models/Model_LIAEF128YAW/Model.py | 175 ---------- models/Model_LIAEF128YAW/__init__.py | 1 - models/Model_MIAEF128/Model.py | 225 ------------- models/Model_MIAEF128/__init__.py | 1 - models/Model_RecycleGAN/Model.py | 18 +- models/Model_UFM/Model.py | 298 ++++++++++++++++++ .../{Model_AVATAR => Model_UFM}/__init__.py | 0 nnlib/devicelib.py | 6 +- nnlib/nnlib.py | 149 ++++++--- samples/SampleProcessor.py | 2 +- utils/image_utils.py | 4 +- 29 files changed, 673 insertions(+), 1013 deletions(-) delete mode 100644 doc/AVATAR_Navalniy_0.jpg delete mode 100644 doc/MIAEF128_Cage_fail.jpg delete mode 100644 doc/MIAEF128_Ford_0.jpg delete mode 100644 doc/MIAEF128_diagramm.png delete mode 100644 doc/merged-face.jpg delete mode 100644 models/Model_AVATAR/Model.py delete mode 100644 models/Model_LIAEF128YAW/Model.py delete mode 100644 models/Model_LIAEF128YAW/__init__.py delete mode 100644 models/Model_MIAEF128/Model.py delete mode 100644 models/Model_MIAEF128/__init__.py create mode 100644 models/Model_UFM/Model.py rename models/{Model_AVATAR => Model_UFM}/__init__.py (100%) diff --git a/README.md b/README.md index 1794088..ba6b10e 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,5 @@ ## **DeepFaceLab** is a tool that utilizes deep learning to recognize and swap faces in pictures and videos. -Based on original FaceSwap repo. **Facesets** of FaceSwap or FakeApp are **not compatible** with this repo. You should to run extract again. - ### **Features**: - new models @@ -34,6 +32,8 @@ MTCNN produces less jitter. - standalone zero dependencies ready to work prebuilt binary for all windows versions, see below +### Warning: **Facesets** of FaceSwap or FakeApp are **not compatible** with this repo. You should to run extract again. + ### **Model types**: - **H64 (2GB+)** - half face with 64 resolution. It is as original FakeApp or FaceSwap, but with new TensorFlow 1.8 DSSIM Loss func and separated mask decoder + better ConverterMasked. for 2GB and 3GB VRAM model works in reduced mode. @@ -60,7 +60,7 @@ H128 asian face on blurry target: ![](https://github.com/iperov/DeepFaceLab/blob/master/doc/DF_Cage_0.jpg) -- **LIAEF128 (5GB+)** - new model. Result of combining DF, IAE, + experiments. Model tries to morph src face to dst, while keeping facial features of src face, but less agressive morphing. Model has problems with closed eyes recognizing. +- **LIAEF128 (5GB+)** - Less agressive Improved Autoencoder Fullface 128 model. Result of combining DF, IAE, + experiments. Model tries to morph src face to dst, while keeping facial features of src face, but less agressive morphing. Model has problems with closed eyes recognizing. LIAEF128 Cage: @@ -72,47 +72,10 @@ LIAEF128 Cage video: [![Watch the video](https://img.youtube.com/vi/mRsexePEVco/0.jpg)](https://www.youtube.com/watch?v=mRsexePEVco) -- **LIAEF128YAW (5GB+)** - currently testing. Useful when your src faceset has too many side faces vs dst faceset. It feeds NN by sorted samples by yaw. - -- **MIAEF128 (5GB+)** - as LIAEF128, but also it tries to match brightness/color features. - -MIAEF128 model diagramm: - -![](https://github.com/iperov/DeepFaceLab/blob/master/doc/MIAEF128_diagramm.png) - -MIAEF128 Ford success case: - -![](https://github.com/iperov/DeepFaceLab/blob/master/doc/MIAEF128_Ford_0.jpg) - -MIAEF128 Cage fail case: - -![](https://github.com/iperov/DeepFaceLab/blob/master/doc/MIAEF128_Cage_fail.jpg) - -- **AVATAR (4GB+)** - non GAN, 256x256 face controlling model. - -![](https://github.com/iperov/DeepFaceLab/blob/master/doc/AVATAR_Navalniy_0.jpg) - -Video: - -[![](https://img.youtube.com/vi/3M0E4QnWMqA/0.jpg)](https://www.youtube.com/watch?v=3M0E4QnWMqA) - -Usage: - -src - controllable face (Cage) - -dst - controller face (your face) - -converter --input-dir must contains *extracted dst faces* in sequence to be converted, its mean you can train on for example 1500 dst faces, but use for example 100 faces for convert. +- **UFM (4GB+)** - U-net Face Morpher model. If "match_style" option choosed, then this model tries to morph src face to target face and fill around face same background. UFM is result of combining modified U-Net, classic face autoencoder, DSSIM and style losses. ![](https://github.com/iperov/DeepFaceLab/blob/master/doc/DeepFaceLab_convertor_overview.png) -- Video comparison of different Cage facesets. -Vertical: 1 - mix of various Cage face shape and light conditions. 2,3,4 - without mix. -Horizontal: 1 - DF, 2 - LIAEF128. - -[![](https://img.youtube.com/vi/C1nFgrmtm_o/0.jpg)](https://youtu.be/C1nFgrmtm_o) - -Conclusion: **better not to mix and use only same shape faces with same light** ### **Sort tool**: @@ -164,6 +127,10 @@ CPU mode enabled by arg --cpu-only for all stages. Follow requirements-cpu.txt t Do not use DLIB extractor in CPU mode, its too slow. Only H64 model reasonable to train on home CPU. +### Mac/linux/docker script support. + +This repo supports only windows build of scripts. If you want to support mac/linux/docker - create such fork, it will be referenced here. + ### Prebuilt windows app: Windows 7,8,8.1,10 zero dependency (just install/update your GeForce Drivers) prebuilt DeepFaceLab (include GPU and CPU versions) can be downloaded from diff --git a/doc/AVATAR_Navalniy_0.jpg b/doc/AVATAR_Navalniy_0.jpg deleted file mode 100644 index 24b2f2d3e0d9f11a994eb6138ba25f15c520dda7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 98128 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

{9l^ie_SM<$N$-2+34ddG(CAJ67ut}}+Y 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

Zczh_$c0G)%(KY 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 diff --git a/doc/MIAEF128_Cage_fail.jpg b/doc/MIAEF128_Cage_fail.jpg deleted file mode 100644 index b3c7923462961ee5ae6bfc9457d72da4e0823606..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 94345 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μ4gA> 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�kGwnQJ7msz_4BPUYN?At`O% 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�u}V8)G%3fUoe^ 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�? z7g55Iozcj=?)Ek6)~=;M2DEhTq4U(%u}scx=bQLn#k%&Br^l!2x@^mF2-_p7@c8dq zAMlgjc!AnK?D?UFFXC~G*MEHty~6zPsc%v%4({C}+=vtpVOL^e?8-VF>lilV{Iwpl zc-X)-R?UsQ%#oj7Dh)zS%uQt_snHoL4bb8@z9Y4Xx*0(=pHEYWb42Vo@YGHHoLT z<_5Pc^METhX%;2Ac~Vu`t{=$?gO=c8hPT|gr|BxL&nu6WP6ZJ(<|Kzjx0=P$QMu$F zc=oO?{{Z3a*ON%M20NA9OkvmV*PzEL^aihKhBGz`0BV}KN=KII`aZp*@3*(L+Kcx{ z911)+r)&3m#P5A~Gb*WIhkz^Ao;~c_&=vKpnH3?tEULIXQjA^7bs9!CgMB00;Qs&t zAl8hRZML#wkL;SI%p`oS+t=}{Ou#K`b3Ga?q}f)<=D6PzNcR^EN!p;`3fjKEiqIX+ z^EXQ8^-H8H_lGq3T#ib$l{ScNU{>4m=kTpxB^Jei6+=m$IWoDRm!^xvXJ%%=?m|ikJgf~CVzO?+<=x?qf zOIaNlZpKd?e+uMvOK9%pX^B?~I78F%q>ojSOEL>?Zp3%2#??w&%s?L~Jm-#-0n6yR z{+r>u?Q2uHW&32(i+B}BDu86;(PXTd-5?X2jqdYKpy8{U98`FvaATf25KSxx0*C5%`cjQ94%aGoN)mOb8exs9gz zw`|69UZ3JG4Qck*Q%j(DsjRJJP{IPa<9+xHaz06NxD-hds7IPSD#+MR>zKpwSc zYa?z1cdu0VV9g$aBYwo!6QIH7T@b^K!n^AgOHDWA~#9wBK zipL`j*fp)8d_M5p@WyXeWNduQBqKBc%~Rq`*E^HQX%&Vz6~Oq5QGuqCK?6q5*w>=! zpAU4a6*K6X^G4YJ09QE-E6x0IWp{5e6Wv2F^-2KbZuZG3Z+d3kqj0G1QTGz9PqmQ! z#~o+_#kelwx{VD8i}0*#8*D1JI@eR6Tc0N+PzH7D6D9>h?hqZv^sV3Qu=1DUsOq*% ztiUMzr~;I7A28vN*6xQYwah^9cM79pWC{J^DCg3(>}}y&sP>Fug#dc|n3mLFVza!q zhFp$>*H7XNKl>-dSK4%ox5=Hh1Ko4QWNJ_ls_HoJUo~Dfk@pyRIY76iFu=j)xAgp- zxvpBlm`J-tZ)x*Oxkn@GT(Uc<)VAkD(C@d&1Eo?jO$YkBX(Y$@MOn4DEg!8*6ofJC z)snT&mfJ@;{{RV;ma;gw(r=N_{m&@#SUR`HOT8}WGif@6P@I6m9pL^|)#`T|mY;HN z5;eSppPnMQIH%d_{t48TzSR?H_c+5Wi^hGcuAeBSManyzvi{I|JKkDGVwI9(hm^!r zDfh1O*I%{OVH4Z9A%|+jZ4_C}Te6r?Jp&tY_V)ZjL7Z0G4~Q2hy~g zi4msai?QX}Lyj}Yy-~V3lWr?kK@=9{iRTr>d`R&WJ|FPK?x`ezG-yOXpS<2A?Wj(7sL>~0-cS3Hr|PDfWVB)0zmg=I-Jw(PE%u z{o2WHbYAB@CyZ_^8HD;(*vD|Wtl7RVM`t!(#_b1kV>QugQ%P+%n=C?T3HgRO6&Q!X z`jW6|QVAGxt}Ch*DMskUA0Bijx{B6DWoZrxC`K!@vDWQ%D|MdURdsQZgItB@fqWAs z$DJsK<&Qw4n!Ba=at$s-Z7t-E5`Wc`kSj?z*j%k{Y)lK?5-O&l@~$<cwl4;zmg3 zxlbBv5NWzx_megjB_w;A=7Q#(kf&3U7iWxq(b}p{;s`7e{!4L|1J|1IJ! zc=<(q^YF&mn(cit&THu30>GNu+7=dbZJ7Hy#<#Rzq>3quR|G&+gC4YMWLu zlw`Lz?uP5kp1V5LYl%V*O*+$hY2l`Q(qjbIKjN)TEbQc!pBNlgYgSJ+k%8iERNQOp z3~lm8d8(JUf!hU-L0sZ%5xvBcpS;I|ih$})({kq+^sczZ(L7v5M=Gajqg-rm4Q&0R zG5v8|mV@KeG44=_J30z-ywm zxrTH5=y_B9@$L1msy{tEn@+!y-e!Vz7%hSHJu&M{zPEWTWmGH!FWv{*r1+hti!!$n zpDh`(q;asHe@e!(*UV8YH$x4#o_hO=08b6*VjV(Rx0Pi-D92iVi?8_mJ-`Zp91wXw zO4so8(cD|^S;DC~1Rrnn`PRM0gQH!@lisf7Q_!F3KpqvZF#ADaaCUY8V~XW3jm+}5 z&4nEYsIOl5yQgTIgnCkl*$EBL73NyiyTu+s&*4BA5(gL#+zOLRfu+>dRD78Qjw(Bc z47*7Avs->2w12a-%8iqN52XNV`9EmXqQd8IA5Zg&Z;7v?n^5~a4g0%sw~p=JtN4di zO*-9Tfrr{;UaEfR{{SYiZEguUCnWcv4WuB{i&X7p&w9BT9jF1=rNE~Fnl^oC1K%{6 zqk>{v)K=a0uNvEJ4cff^O+kaO2fZ=1DJ1zxpbc3yKQB;VTZT0ImT5j^J!_TKZWu}* zHKC>JG5J6{bf5}18e2)O2^e>+%|dYnpO)NUQd!+w+};hPYiex?nWSc)8ou&F_?@$NT-?dkRX0X+hUbl&gGh$K)uR~rzbPHRLrG3HUO$Oh@ULKmp<}KxrfNSIb z03Y~r@55U3`gPI}s^23K)K`mMjor_uz+$wsIgK^^iNAT$x)|=DcvaM6+OXw}brjW< zqHPAaT{G2;uc_O3ep`8`5vu}m>ss?#DLa72y?M2T{FawXD3F4tyS+PDOT9f`a1KW` zjHtACP^hF`x3-O&Y=a{-nwN$&o5U?FE4#7BHC`LVj$xBpziEx31zV`5qS4x{(So`p zI(vk-3y-BuCghKSiqI{+t2e|~QQN4ENHP(eR&r9N~Z3)iXSkG?KA*k&81Pq}Q*N z;aZnGkDtvkiL;a?_W(F5%SX2mXuS~f`gi^9I8$M z`cW)|1C!FO=*apK;Rs>$6(zX&d8=0t<*-L#M#b6}9R+-Xh0nC+Xs?a) zo9yATxfR5)DaxKjO1IN}!o&})V=6|Fs(LPmEHYtKirALfc4SwXXu6EH_X@%I&3Yc6 zsmF7ttLL0oG^sStLXAZtcx>XB7~BFXo~7WOHh_tw|e49#3k~j!`2V)@HeT8h+_d&FNDmCTBL0m#JR4I{~i}{h>Tf zyZ$8>^6;RvgdV(Csrc7Xk4w>Ix?}UQkd^Z{k1k}myttZ2EY4q=@4#W-HQD21u|Dgu z$7^>6Nim<71Nl~Uv@Il@Wbx@!-YXeT_*MS^57@NR07=H*PkQzZArEPjH#>|C!a9{m`lPfo`t zbr~Bt{sB-(tFv`!-IU;CqKc(BM@$a2;_~Wye`e)vKIBJo2|Q-Hi+jsvj4^fm>y5fX zgCeWPcQWy~;)hHWta~4ZWwx3hk%2X@C6dU$D6b#z-n}i2;{NdMC#GxDw0(Xl?UlET zkx-y*84}%iU}`ZHe0yY82BY8`m}D;$WRLbuc6w%{g}(ReT2o&QoG_~PZ0L;ak2A8+ z=7w#Pw4d&hYoJ?WZ)kR|(T_^nnV^=$>fVtBV!hT0!3SZ+P3IJ89Mj9bg+K*_rT zyvO2Jx^6DM%90(a_px2BwSJ4I$ssswSB`j^;G4-D<+l^a{{Zz?_ij#FR4cnU^scVaSlbd%j%zo=uqwib132r7>Fn*5t=R3aHh&sD<@^`ue5TiO+TTZa zZ7W4I5(y)9I4Z#85$*^T^^bsjZ4bmh09)$OI>)M6k1FydJgk6o$M;*P{{ZV6`3ms< z^YE`h{gtlop!le^wzINZ+}cWRkaTdPEBJ$seb23ZN%_(3zYvUfngb&acKoD{LHDm9 zly8lpnUC(y)ok>yO!$Rx+a-@Y6fOAk{uSjn60vC$JQJ2aywC#adgbPccanU_SpDJr zC)Ty^yk|Ys1SQ8O9Sw39uFbe-?(ffBLf_^LSGTe&jr$G1uVew%D1n{)KfJa(=5t_&6pF#X(7ugakE$DpkHauGyP zfC;HJmuXQU?4u{#&<8Vk^2>12%G;TbG_c4+RlBQxI#nqUsh|xzJA>TTt)$?An&x4U zsT|ggozJ}hba5~}Y5xEvWy5p=^{H0qdj6CF>Gx8q&ci+HKJ!uX8zAPLs9W5dhr%~s zN~I>3b2n9Q`{sZdd8v8nn$Md3H~O zIsEIZhsDt1MyHt+p+q8aL@+diM&TO)1C5@_}4did%iZw zs+S&ojh&DG0DPLQGEN3OxBmdX4FFY?dAAw&uA{?{#x3)T=is)OwtT1m0KQFhIvjJV zf#pg60DPJN-_yc}=DIC7CzqP$VOf_4%YXai)$3XA5COJN`{d9D_FK;R1x<4-f*c=8 z%eB3cc_{w?_sv+6d1a68H~sTK8MlZX$*61}W}_JY0BWqw9L2xYxBc@_TUyL@D6<>= z@%%Ia`mJiDoC@MTJA6H~@qUKV!x&rm0c2n~emWZNtVhjK-k+FaxhEB4vW-Tiq3|xf zrrqh+(%D@=(MuB$%EJU!a==esE7<=4YO!cOC2fKfNBcN3l^=Na&3PTvg$5AdeB;t9pJm8VT`#Nd@*lzmMn6IG1mI_bP!Zv~&4 zzq~APsyQV6D~$2ik7CeuD~K-QX4KU|`#hg1Kt@JKYWMGh{{RJa%?DVt)jUN10BpU7 z_l6zWh8%PFkzXEsan;wv{{R|1Rj+RhmpY52Bz8pkK>aJCju)BToLHQ}y%RY<8fv$? z=CJqo)0rLl3(nN`6%T{_Ew6aD#87B{9nAI$!qdb0 z6|>E8aVP|V#7o_epcVQ<`#t<4@YljG3&m%nK^@MqG6Q+2v}1d}aK3`QnlVv{;NmCG zBgg&&e#ib8@b;eur|}PVt*bf*HZhz*2|bwq01>XQa~@eW=WLJo6lof7ulaf7g zUtQf=2W*w7qp?BSxMP`BN2C3lO{IO$FY?&QgWP&iHJgq>tIuxg!{ly*wLU1FxF~<` zn&whzo}y84TA1=jvOYnq`Q{=_V!9j47jKnOzwer-4u>PYO1I@#&2cy`=3-nj0B~zh zN%1pVN9DOVrr&7}vEWAE_sOnzP}8m!Q-ptSkkUyu3S6B|$vjsPZ0@Z~9~HvMg7xKV zYj&;kM&I|rs}`}|4v7B%_sOQ|qgdkFJ!yPVZyY44`LSI6*0>sWoz8N26~+GmriS~D zf8ZzDmu=k0RK)o|?3$HHT#A+4i2fpL=I-5)l6HEZ1Zc{sG*$DPSzBhA7#G3o7HZ-ewn zAIte$r*ZFFdT)fT-r$)nWnMALA5Z?hdIyGlKDO5CUL&{;GCFjv=>%gr|8^m{Z-zjF|n{}exFCsSo0KN@S z8eQtle{$b9e=O5cOgZh;?eyOo>;rR=^{u-<8pkFE{MVEl3)tHY12*C@`=jkznjNjj zm;*rLJ%nbCQT<@_yN?$}u$`xxnr-dU{qEbksdrrr5J z^UVJMg-0#erCZFY;*DP6?aCly$E9%Bl1U>S@iyY5jy|5%*lK!J^o%y!zd`>1EYG*K zXG7uZ;K82Vhst`#^!Beq4-}E*V&vtq&chV$;0T-U{{VN`S5M))8>}l8Ve*bK^s5?f zk8rc)(Ykc<{+`v@Xto<|#^{c5{mQztiaGG~-!`nDN3~?OjFmgF&TFByVlBwVII57w zRa6L@@~g4NOgoA&{42|nZfChErAe#wJ`-!pv&p-d{bV&~N!InPF6-@DX0Lx|KGL3T zwado)Pf?X1;;2%J`g8N+czCPDS5kkZc$-+4J$%dgTR)pt&Xakly6=+u>9RUB%yatJ zC8jGp+f-Lsrm2nvQ`pc3oviYcmyy^vUCeo_18YhCts6eIO4o*9c`KY&hn5c4UWHHw_u}E1KtWijpf*-J}wQmrR*|+>j7G#Q;9z!afq3+z9+Fqizk){7a(A82eynDS_GKHR#J_ZLv}V6UZi-!KVkr@rO@%x8&3t3=^TOvu z_?3NZv2Bh*T?RNHlRzB&Wf#MDQVpg+$`t_V%> zoxXqTlK%jOVEAuSd)vi{WDDwRV*Xv19#hD_S^&+woGW~mun(j|{3_m)Bn=ZZ_BPG+ zg@3}d^o=STiM+`OX#J{9XHSYaNwvpZVt_F2CX3Ad-KD-gq95T%brBliTSfl>dOGp}6Z6jO`%D>@U%W2B95U?R!^x7-eX42%J zPsCtXGj*i3vb!>`0QR5`PU6nhZTAZ}LH_`7Rt?gBrZ1NiYBSkIYj}eAtj!qU3d38( z`%;43=72or=i=|hlvA_fhm6l@ny#7atylN%k3lT z_2e=tmD}FCUxBFST#*8CwC1(N#d{~A*N6C#>lT{EtEyfbtzS~SzL@aR-A>ZEA66vS zL#B%oL7oVhW1PkfaXNggmkfmTHPmQnH2ikOe04_oo~P5{<9k@>Ba6dEJ+oO_%e(j< z*+~6GN#uA{f7R$V4o7dYrazTYx6$R1@(?jzIW`EC3= zrJ(G7#-HI=G)sMA(oE@h6KUK2_t@CO{{W!kx(jqB7tz}!lbt>;PjmNcuT%kPSI|@TlkN`> zNqv-M_-8}Xyftvwejn3p^qYoVtu=%T1Ci)i05zc}h;``X%Imt2IqELt{{R|$kC%~I z*Fi%XJ*7|PWP2K4%D&<8#SGUHUCkQFJiN&(C@$yJvE0M+s0E^H+5HM=A}**4@wn zS~hwuw5`14bHzlbF6NQLMSYT-cJ@gR?;=({>zbqF+cd>h6@5NYU5t7nunHG7B%T+9 z4>5-|i>)r^vBN|8QOYixX(j$!Wi;rEk6l3PW3_l9)g_9M*L64w$7xMTeF{Hrf%D{f!a;ryoy9iN%cl+3vM*y&N+SVSgN+t<)npHc~At1|0H2)l5>`r{T$ z?yMa2H9Yd>T8dPm$n-uL$F(You`P|aKgVkt?3NA`0DAJ->9)48T3kS}+(?6GpSe|!u@pmXc(NZaOt_I^Jbj-306&&a zYd^!jHkV&z(=}^IN1A`pn`t|L$gYc8(%_01wJ4_hJKL4sV{C6+bM>GLT7B9D^IuQZ z;@SYg%OC4nI&6aB{OE43K^z$7OfWx{dH(?XEj=Sl*9g0U=v&7pFC$}&fZrNDdC*Hg-_SVr=8rM|-D+r|op6ii=`IGtA zzUb;c(eh!CuHbuOzJL9;^;eSq-%Uqc#|hlH+`l$^kzRjd34PAnN3Cg%ZqCOT z+Uz~31J!hWV(Q)&AgEG$e6_ux%@(O}T4!Zk^S5s`;}+i#B8_&KVKE!MOC9QexLQPjT8G%FKH%ALJyxw~svqiN=4 z+MxEJ4F3Rz`d-Vg-Ud>vF^cw0BGxakZ4KM_g?#6A@h?r%wN1ZuLk@P=ruYNm28FHK zui5n#GkC|k{i^JIWh7=+ENhdF>H&I+2+ryN@`Ng_lDYcVr2fyhc7NKJ zqHqHXbAjq>%>c^en(6)&PHntE^9I23$RpOeu@SvCbx?MiJu*Bdq%b&k>0Q@{!o!Wj zw|d}hr;bfZ9j(>J73ubRdfZ#DmfKqciumkJK3OyCFj86@nsI=}9XguOP)cNUtScJ{ z?f8;VzMR#Mw!CrdGGhm>de<_BhrLRyY-uUXQOpm@&$Rm*)we)Va5~pLHOelV!Q@ID zVyNq0EL&J{6so*+W}zcVRI<6-v`w=m(MP$e^4(d(!I?=NaBIjeykV^B7d}mpmSNvu z;<^n6*H^oUeW4_e*EL?u;g%uX?j^ssbRszedjnYaw@fa^KJ7%djcp#)A2)WY<>V4= zc>e$sQt7l@Yc`ElkQE%&Olk1C}*NXONrc&-=`-m>JF`NZ!W9+k1; zr$j7C?Vgp!O?0m#ann63(5D-mb*1j3u+!$_5-|2P*m!;*=!Xh@E6#KagL5Qt4o^-i z*1R2H5-8ebW#hebSCyTOFt=|~>HR?|KQY}ZS11baSLz{OITVqQ1bFEc&L zQHh^tWguQoE2Pk^5Tb_}_pF(&BaYXO-RhR1;`pqg*&8SzRP#1#IK?ZTg9=(goU)Ip zsIM=rN6Hy%$F4kUe|L4|TKSTb{lS{(G*#8^qgI|d6F=Umii8Ha9>Lxi>6`y@_ zrLZculJG;$cU4{Go94|Y7L8R)no!HRFlw%%;Z)$$6^f233+CMs6)EapEzw6-0O@i+ zQ;Ou#$CKB;O6jhpBTbb(tB&&znYaC_>xHyDyh3W^*H#S0f=RW$m7JDR#Ub-0Cmz+; zNe#H&BQI}C!MK_qwG_$4Xs2ez5(J1 zWE+^jpnR>3-L*%MSkl;D?s{tG@8x zfi$ZtHJ0Q1LgOPP!Q71{mNo3rR^CtA|{I)iPe znH;0B?^Lw-8W+evO0H&%q}8-KI}!t7`TEoK2~i?ER(x$BYb;eZ&gM)*JAh%K}W zrq=bRwYX*f07fZvRn+owKsY(+gPO+iCWC(^)4lA8Ac!{Gl^jR`<8bvNfHi&@_@W7K zAxA(a$VDV`Uc;_TmU~yKgzxL8&ns zmX`bcurktdzyMGOjC?|uM$}|5+FQ*et&)Z)_g6RJoj+Hz))L(%n#H6)FP@DVYG#+> zJN+}nR^_4c;g;vil0zAhqxCyM9=$VO3eiS$*UPQFwreQpbRdw|+q56v0p zs3Zyi>^=j{t6Ayoqw2flESs&RXWld11Nzs7e$o$fdGT9Rk=(p-Ka!ao0H6$hV!n#_ zE2LanX=*O!XIpZ1vmQtt{{Spk%l`lnbr#jUNq2l?^E~MpkFg~FeP{!Syo|O-=~>dl zj@7?$4^k?P#2(ZEUgFXj81Ag;blgdlIT@?cN=e3P=-ns+Ye@D&tLQ3I5j@gCT6$~( zW&(gSj6|*&;c1Nxsa=T@yPo9MzOi89J+Y60a^i+ee=2&&-JYkXz>fdr$|5`1u$HY2v!6eE)&2%FBryP93fI9yG+55$MmBp~p zwe)W=sPg0_^UZbsH;e4BG0z<1n&y5E=#ty)`&QXJuk~^c<2+Pf9=uT=n=;vh^R{RM z%|0PtP4k85~)p3G-Dq7%VBwccCnI`r2&?5*Q} z_I)eo4IjjFSnZE3kVXhSy(`+hF|KM4qT1eRku<3=8<-A#>*q1_934aH zXtJ>~ax>Do8?!w$uM^GVpIFc=VQ8$<-X`g>GVNLk<2_b+jf@^0)ufwf#FznVveY#1 zwJNgn<&GB=Sl(S}?XYQ~n;(3hwX`Ozb4w1)y%$RH<X)|&cO-Cw*=b`yShR;fTAGsVRXS|Sx`9M{o0i8~$hu<-XWq88 z$(1rQT=nd`*aKK&<(ZRm^Su+mdn2?r{w|gtH2C9R?>p9A)%S>?m>JsKu6YRDiknH-yjiHQw}U{BY2eR1 zhmXRvS4DeUue541$0IQNiZB7L3ut>(r0$LV2G8xT1TnN%@fRRZgnjcWAdzgz1=n@NvqbrHrB4Me!&if zsToK7v@3MLa?#;|5#{6JRlnz73|HfA=LW#gNr^VKcmkExDs zrnF$Uykq{AZRNl5W2J4ws$JYK5qW5RY2=pW%}qvBDYG7Ha;aIDM5_>Mb5fNNNX>KC zvWAo8tPYr~6z`DvEso;3NiEo1la2#dT_O2!Y7gx7Yk4FK)0*0xwMQN%mEzfzs$CU_ zJY-o1LBmET$TmR%;^IT|;*IN~+wPNhCmIyIb_N#NZ{ zb1m)M*ALtvBnr;DhD#R8Wi}qHD_Tz+{72Q?T4}a6nr)kK#7DV^t6E=#ZZ0kb?xm>7 zInG@Oz%_>>-1MVTU0L7wMH25qfu}j&A5-+ML&Y8!n%$PaQmR==w+}ZW2`aYNOlK%iwVW@c4?XAiAV^M*O z`wI3On|N-aRA*tdaf)TFsJ3sGX)2@ct&HatEm?!0_yXtb=Hpt|uB4fV10#c1ZM0de z+hMu$kRA>>t&=V}EXV3;`<2$4jmTzg#lF}uqO+NrJnj{>GpJHCSohmmjwsm*F)K9t zm6dynK`}^6*ypNbokae4%JoMa!;*&QTf@XxfnS7>sLT==Ztl% zmOn2wXG^&9t^p?$0qFW3o-TNC!S7aE!Pc@qcKn^xjPq6eDXAb;1oGW0xY6z-l|t?0 zjvF0l1C_P##k4Md&koQJE=NjF7rm{PmE^>ycO}@Kr?xAv)tMr-k>3gcuP^atqPJI! zjfEdt0MPgq5Szzw%EK%^?nkMwr?smXudUqO1`N=Y2j0G4_%Ay}@ea;pUzR2Z9gjWh z>#r0|6uLUg8slM5IP5|Gv;p&mvEhkqHD_tGTTMpXzEg4#SDu8auS@uEWp}C|{?OB7 zw6=|Q@hdT5j9_pv`qh?;$<#d6IaWM_+Pd8)SdE&ZvW)e|AEf{qwZu9XgLMm=a0s-v zk&t8W9j9pg@n0MG!rmynO{m2RZHha&RTt0)I2HBJ#DZe*YT3tv`lZ5Kf&R}{Kaj7J zJWVoPc!K`sG4f4yBd5@@B7iyh;;M5+?OO9kp4C!l$E5&rF4$_8-SXI^o)R%dqGD_s z0MdlvMQdm;`|v9*N6S{UxxBlDKJ)?KX*y!vFU&KVxZV$e!*gS@*8+)-dJjk zMwJesYq*v9c@^lN417Nptf?NMp~q)y2pC?uIPIF&Re0|=51C2i8tb%~qI*?UARkHq zxuV!x*uqi|x`U6Ucn9qeCDc4ze60M399Pg9gsZ3Mlif3PPC2iiyisuXn#7kZI=Soh zpbj=Y65`=Pxol^>XleQa+g!xlH_R(id$SljK&tk)9!nZD`?h8K+*7qE+VxT; z?!vx8Q)*5p+)|{JQ#&sWDP0y8PCi`Kn5N#$u5s&6@a!xtBeeqsR~W3_V$N}P@uZwo za@^~V#NbJj(^r*UH=j7p)Gn)UHe zQ=@aj!AjK0Cc3vF^`z=WHsSKmcIXJ0wD2TOKfah&zYIf6$hF$pPvgNxvvjj zY3R|(Us$u^O+HqJL&wVe5n2$Ljq-l)Yp4Q*+5hDc)swpinn)_^hoHf!x;;n&mz zgf*-!6}ApDET1k%xEXK4zHnCK2Dg4Ud_;@Hy4Tn=?53MzBLpX`&(nX?1CPhnxXASt z1FZmRxb>>?AoQxEQD0hXU#>dP1`N!(#aC88Xk2>Ixuk?0YyplfE3+rA>W=^kp zB&G3^cJo?45;bY{78Y?a@{{io-nh9hFD%9_iB|QX4@>wzZ94eo-ZmW`zOKK5M)3N! zIgLYdYvSLAejwDXwdiG3c_iF1v}Bt4D^2kik9BQ5zR#kYTNqGzvs``YJ(N%fQ52Cl zCyJWZe=0y#xXp9gZ1R}be++tx*M>J_2buuC;>*{&(Ap5kXdL3amso~BIhA`F^nVsf z_Dv0ra7eE&`%senmtaOudH~7P8PSNx6<11DYxMsBdb$lt-WHE4Ijs8#(mTZe0D6Et zT0o+kyoKvkq?ne#H6^@m_|1A66?Bnu-PwUAw0tS4$)xy>()k;1*#fZj2a2H21+*EF z!1~s6>K4q{66E%*>P1Q|7fxKVO&?b1*SUpGbGdRV?3#z!qZb)CjO60D{{V-&jCzlR z^!wP`cIbjXKg2jSzK6{D2>DNH_{?P|3atCQ9e#R9>aBhvSlShKxC&W%w-tq~c*Dh- z)~vtqi|O|B#Js!6#AcG$K(oG{CAfiDD-NQ)L<@ew?fJJ6PiRa6+wOuWb&lV~^78 z{9CL-kZX1^TE(~*D%s6wYMN{4_fXu~vGPw0Ju9-A)U9XgOB}KJZUzr(hkG3qUz~XjJGvjWcxMXiGJf8in94`2Q?QuJ)&e8Avmg6c`8Y*2_s?JsNM_=P$@f@ z_n7KylJRwr)ot3xI9FlKbyxBQ4VvenVEUeO#%kkpmZeK*ZR#+I>|{`TSAl$Ivs70q zPIlv`UQK)a90yWs$bK?u`=Xek?lLjggY90f7FMWv6=TgwuOsK?k)ycJ`R`r7fVFnh z^=nJTa4=Li=Uir~8zlUWtJL?c9T<~u_m}0t{cGrAxuDVVac&h)t-L*d=EEGB%DRFp zQtMMTtdkBxoSNYN6zU6m;QL8;W#e6q_*Yn*+t3KBQU!IaWYfp(fb+`Ps z8?nGnE(s-?6E7{_5; z`<-fMAEZU%J!UkISkr}~1M`j9&1hfPzK?Yrw&a)_h8~sJ+!foND>qPB=Y^ttVAM3u zigL3m8J25c%6f{=nKF5(lYOnhhjv#yRlTK`H5WQLirB){3+6dEttpoRv#!Q7nhBJQ zi{iu_*DK;>d8ULTmD=LEZBk9D+}AfLGTn^y-C9%K9C(R)lJqrp2FLrg%=psN_e?0NsTj%6Ozm*R+4OI(qjJu7JGGn?!lJ$W>+-gC$Y9V?~qKD73Fx}&z#mmbxR;yX6` zV|=*J`!v{X8KYTa+!`=2Yt`kvZg~9GsN#Fyhi-(SNI4Zhims%KPH!icJu8*?YpH#s zO^iAD)L_>4iCnd+1m&5)ADwxXZy6rV3pkwIejvJn;6Zz8(LQ)$I?=1!UigWY*)=<> zIC_%@mq8<31qLoZLhX(IBbQj#wW zrit?03bCw2k}_T*g_?@F)&py#bUgPAiuQG;g`%Z50s)5o;cE367+Nt7mR=QW9} z#$8JSepA}DZ>0%X*E5~?^)+$$k;_^8jQCk(bzCb}{{V;Xyy!;e`Im!S`wF$8%wfJz zPs=9;zO4M{>tk$GvA#|!voJ8Lk4zeBNs0j5(_FKt71pee7L-dLnaQDJK!|4-$ zq$tl*T_=dITGGzmNTV`s2Z7f#0btt#zFr1#=~i_A00p+CG-~4t=Lgof@9phb+jrR{ z$MEf3@miW+kM&(T?kOaSNK8x!5=KDH0D8y69}n30YsXPT0L$YZV<*fGJASqF1+a?l z%*5v>1UEfv=C%0Mr(HF@!|4(Iv2Zs;yNUV%&30N(#p_#rI^y#0P1GTcQ<)93?a#T# z6am{Vmn1raL^<*#E0O8ceuks?rL8B1J{s#f$bGGCXv+!iC4Z4W@#Y8ctxpE)dUn5N zy1ksjMQcSa-H8O_^dh_)_RR5y>w6yt+spgLaeJr*ZUZ~*bFrzTnZ4?) zJ8Ik@Py~xBQnZbVmK8%=9ud-0Q`g|Pc>Ku0-6Hyd+JHH4GvuPyLFQtiDpf!<)FosF zfHoDlr^hBLvNq_!29P}fY}m>3j%%v5oukt?XBpsE52sCuloQ^%ZCdl}`dkty+!W-2 zKo&mCBwRNn^`~0+Q~OHcV^NLAwR4N&3)Yh{Te%*>wRE2u-&jtPd2FnwBXZCOsQfJO zy_SRGsNtS9X)p*ZJJ--UT+m6Un|8(s#eCzZ{8+P}$)4j+Lv)}F#4O;5}ydNAb0ep&}H7xQ11q>^@~&52(r+&<%Ex-ps2Dpw@y$En*M)pF zpj=-adqjOs;pFopmE+!V_}7(ADWlw%HLi`lALCY!aKuUHGH353EL43?D{dbj=r?Y0 zdI83Eup=LxY-zfh-0!sT{{V!cw~H8QCXH105>&}rmHp9?^=GTF`8|@^)8hWUQKHiV~%f`n&1-5 zeQSXDsbtbxN;|hbJ*&{|O1ht=a$gam4Q@fe+(#r=br#h_j_SzybHw(~71lZXo%{1i zp)m@>AaFYUO>Owz*KNaNpWTk#dHQi&{+zC}00_Yy{-(Z{4DS==F_Gk~?0Yxt{i*)$ zeKJPthE8kNtch7hYv-Sbw^HezBDc9y@{@+grfcY178Ba6h<@uJhu zTWWCGVrO7B`qOScF6j2^(X8<^$HDpQme;fkjb0NIUc5-d_hO{FfCJj}& zx3!8*@Wv5`_jstJy2Wx!bEYKsYz1R#Qh*ONV&dm_ddAgmFbSlPN_IwOuRqFptb1}= z;1laoYF9<%AXFCa1dE?q=z_CHpI%psIvb`RX^dnl^foStSu zJXJ^HD&Fcm+s0D5-W{j6rB=}9NTT;>Z^On)L4v54LG0Eb=)5 zxN$Mm@54>l+rQQ!wV2BzfD~3t-xuvIq>>w09$6ENfyH9#o*&ozO@AehpK%qkqWsdz zYa_zH418ar>asNYg_XoiNGt|_n67xnJx=H;^hVnJMez;&!$`I-vpr2l-xUN`e`aeb zt|!h4#xq?duYi{4oBd^)HW+B3K);1_T7QQ;H=^4A0HD}gqp0Rb8Dsg;B)S@|Wx11~ z__gk=_Fie1Ht8tide-H=$oo3%KQ1_?NS5u2=fLP<^#c|$o$Uc?Q=o5M9s;$WwBQyaGj-f7}I*f0GpP3DMf5WY3 z!&mm=(@;xk02z#2Ca3AHfKr(&M;&O5%Hy zgN9(K`491~_e9WQ(zMwlm4HM{m(KuqB>r>(#AsUmr+~g3>RQ#`$!wn`v>DoGkmqU- zsq5$gub6yAtlw+e{ob*t$>v<%N@S4w6WDtW0QMEte0%Z9@n?xmo}ZZXZ8_O3BM1Fq z&J3sA_Vgc(aEm||qiVAZhaGB)5-MokfHfhOyZ-=z7R`C$mcryDd1GE{43+CYvpj`$ zi-X!hwtzgI?luOifP2=}+yEYHHt|(@Py?;s_jsjds_NJjG@MWcnB*$pk6P%XxHIX& zTb?VFSp{wQeqku`vp@tlQdrz&MprfH-UQdYJ$8!@scCN^{{W_lD~Y?&r|~OS@=PtZgCMJt+9WtsOr|Yju-j zN!J}~rD!em$t0Knz0G*H#*JX!-!|DBYPJRi0C{hVui9&u48-$T@oy(1nzyOM?{vp@ zdGA)Nt&~PGpqc=);rN-@ZU+_B=;O=0ged+YS(-h#5rbQLOk1zv{{VPU2bZ7st7YF66rsX5PD4;DJj$Bk1mXU4A z!jaarFRx*RI*jABahmqOBV01Xxm@+lE=OZJwIdS6^D1Wtfn4sdb~02qJ?cB{QeB6h zYc?{|&6fOXqZW=S*1OPjDq2m(wRH8zEygOnyg07g;Fp5#JZIxbZJaV`)}%>!CO9B} z0QWVtDYnezS}==j=Pgi%;MPBl>`d0cpI-H~Ychsy-n6>3QQTYBv38M{*+34@`CaE6T6DKQuR7N5S^%*Y&S=3sp3a zD<6b%eCVGq^=PQGV*w%FvHW%2#KgwM9g> z-S?`trEL;N!4-1y?l_|@kTG0#wXQsqGNJiJPa`p@QZXmKDxK?`)~>QjgGqg=F<-q{ zv)q{^(w);TTta@(Hva&0RePvd zj1yXmw;`MRqM)1yIjHJ($Kgj0;;VUAc0D@}{lbazHpF=p|Wp>U-w?1VY*)~;xx?(KxvPa!>VU0sfgrNV*yg)Qrfz2(@d z?GdWdYE0exJZ93G(7WU-z>7-c^&u7P6>(xSZ6y!=TK0!8e9h?g6alhwcpM++R`i?qv$3XYnRth zBvyA*MJoUvE>{QNx8pz`SNLYbNs;JYk>WwzAacwqD$dF56T)#zAvYZ zztyMr0rfro2iCCuDtK2%@CU+mk`}s?R@CK=6qZYZe4+Q>Xc!#;UPtj)hf9!4ZX_P` z0Jka}DavVQhDeyJt~Q(+ zYJ;AX0X%L&uU7q={F}XMJ0@n{WoLC$$xy%jWBFH-D-qVNX?M3)H!E>xaU?RYM~#Rg zfHyAJE6rqHDJ{ixnuUz%As$nI-!(z>n}_+lr~d%HXafmjVtdj^rA2JXr%b#EpZ@tZ z1;&|hSN&7}0N*BnF`0;~I#uIa+^c83EyaxLf7Lhr@@lhM&cE`_zweVk9rlOfNR^O2 zE7W`&`0NCKk{8v;hv5%rK_99Tq?I$c{gVR!yCh%OL&Rf8RB|q{AxR zL_D_p!}w?e$242_w!DeKToC$4Z+_@V=d9+uRx4bT8Vr93YGZ zP@#GND`zIo$kDc@MXs5-L7(Ps_^ZhTa4r%xU!_X-A~f0ns#g=Ua!oE~Un)bUn;FGq z>QWZ`>g11_p?qjsfw}Pi0OB3ThqZ`dy^y_&9j&|g2d#V0g?vS4cMNxsT`Y+w%#06F zUnFXX3${gl1^XD==w3AN#-rfPRhr*Wvwu3u<~I4lo}=6f^RZZUEm7Zt$2w0_)u!QKzvE<^L;&B?AlNeX31h^&2$!}7$9MQTm~bs%^azRH!iH`z90BsR`G|3Bhs{} zNi2VPDIY9j)SCM5;opO7JR#v&belNF;4?J1=11;LMerBHS{8-iJ4rN)U>@o)^Gw{k zpL1P}$j3_Uqe&%m!^UGJIXJD6`RvylXJMZ8t!w+secA0<{{UoTa&o5x^~Gvw@Dxpl zrFr`EGw363RjG-s>B3;gj`hTA9v=p6+X&~kem<4z6Im9M83j&wti5kXByNd0$m8&? zx)pg?N(w9EK}o`LKKc0G!kAG@G@QD#aq>AHh{G>@LwWvOpN0 z;W)2GScK8!%MQ7XO+Qj-WCuS=>$DAWFrb&_yw)f#LuX@j{^6@g_t7uO8}$C+uR63; znbn7=>AlZd9wm%*lzw$y@5T18gPBHtwdA)~dXG#YcNJiXxe1@!P+GXKkx+DJpd>?9R2*uv}mhE0g`c|f%A9qTJPO_Lc z%@O|qzH4UI)s;WhoS$mV?u*ey>MhyW>bdF#G!c$XPjzhaN~EbA4%J?3X-6SX2%TnusJM8Sj{Asm(F>POaRnocA3m+Cre*}TjESXKQk=63ss z@~T#PUZP}DVI%(8pKog2(=4WoZs^+R6w8~!nuiLk|@gM+4Ig0 zG5FW3{8x!1@SJk8z{{FV?-Y z!G8=iJwC-`)vX}Dn1D~(A`%S!4Kv{8i3XLU$2^g*pKv!ZBb6P6dL^+f7-i>gQ9u;* zF9dixR?B!(Livv$@hyx00Ew>GMerxX{{SsRcr(MLvB_;J5B?^y^gofl;akj=(OvN%NnsPdH(VBpbA>=hrB(kq)V&l8fE%INkzJ}j!?PkKwxp456D+1srVDX zs?G<4bR|*TX>jB8TJGakkysPYAaPlGg`AQ{CR3bbb3h(D@f+c9gf;Cgt*msr9WvoT zFi>JR8^>pgndz}vSFbK1CX zirPKDh`c)Xvt!PW=C_j{b-%#$pbt6l92!oeYbBlblW#TBuM!({EKr^Z$mXuMgdmSt zTkCB*`yHb{FhY69)02wt@4Ovt3jM0b zTvv_Le)$h1oadbSeP{xQjWjJ53z%oN(=AnIUz#%<;csaLPLmdH~qJfApsx zXN2JQj8sbO5Bz(>kNV~++LV^ziN{))!kc;u09`&PC10A(+wqBi!jn{n*;nPVw?9ai z{3x}T%ad(u>3U(j%#PSx^q>xE+}M`eE}3X~{wsAq(u>Hn_2qQSEP8#Nf5N>3Pw>5! z#G6WfHCtZrQHo{qq*EJE2M2DtV=)b-*=PQ}ll&?><*-AP(`?2+>D_s%j*v}>zb z3G$hf)CvHCZE`^#NM5~m)N$)`F~`gK3WjYd&YIFUUe%Erx;_c%Kpi|9q{X@~1d${{W>&{`CNLcKSx2{91jl;{yKxg<4G;OJUBJW`4Ho{uQom zHjYIm0&$A@7gDO~&#;Ul`WevZdN%K$MAO^rYMqU)=);vg58+uC+AfPBXa2_1_nu3Akup!$70{)$Vm-x11yi^{TM8>TQhm*SsYxx4 zWBVsej(wlmc0qCf06yvd6+C(#j8U2Nn->`GY=MlwvE?5Vp?xuDTQDJ9u*_p?DC|KM*7B7h`? zl!o;H*N18ltQU-mcMR}r=`#4Ix;|eQIVZW)S^QS`rDbZi)?X65U2h5uBv9+OD5^bx zd;C|bR~wp4n)W#(*z>I4Q|bt(ksRl;dBea`$cwes~dGXY98{!1Zf9$Zqg{S9ZwsmvwX*D`-XGLjWeOX29<|fii41va#!gC0Q?4+l zDo@=!TjEr$b>Ps9a21y(xNi;Ewa%d#34pQ!KTLn0deZS0uO;7xSql=37a6S|g|_j@ zGR-3VsyRKY=?{fH3s3Vc>|-W9%%B6#0j`TdxRT>*f<95u8pl3U!?Y3?Z%_v!tXS$6 zIz&%mDRo=d_}R|mhF8SF9QXQ0DWN%{P4-;+(K15NJc8H?}+T}xzt)UoxXQ3{2+9o53J$w9fZ1a-9X4Zzz777 z)~j7>UV6BTkCbuLn({qnV7}^q&syaCK#aT8jxm+`it&9f;+KmO{L1%N5-WR>0QMi1b~<0g3)|?^`(oLo zw|)eQfmwa}b3hyy#fZ(mwH@qBv6yabC>iJ1y>uP}xwO5|0=jN^`<6Jt&Ic7+<75&4 z0B6HIcxd+!7HavhqlN2_m(Xg#O{LV0r{tV8B%>@*cKp$Ftm2L8JI&|E%pR8ZnpWVLR2Ol!m$WnY|@qN_UYqnAJ zt)B|`(_PlDk{7(g6Um?tsBLa-Ahq*LFFgq&qL)yHNe;(eortd^@n*YuqWDHR<&(^1 z9GdctOX9||Wp5@xzL=m7sC5Ygt1&qwdaZMM=QeWXcxVzWQ(*^aehs0Nk@Ee$z7~OIR6~WzV=q_02y#Q^A zws6L^v^hM>xPU*zD}}h#!#@VLJTI$%r$RS>5TFmFCxnSMP=w|)5jm8YeXG#+%n zc$$)BQrX3Ptxb=(qfMo8JS}Q`@2z(>b`AD@%aU>0xScj*Z+rkdb6s3o>RLvsZWKN` zb*^qk&q|!56kXqS2;w*T;-$CMTpg1_-<4r%9}ul9oFwzceR!y@J|Jl?Z{~TCeBJtD zuaTo=iHbT~i@3=o@rr`ti0|pVPJr9mTVu&u4%US_X@L5sD_8B zD5pQ2Qi75=>tb4GL#@f?+p?+L;2eS4xhP~|YqaM)@N1xHZR3TK+GUZtHX9^YC3|(` z%_2x~^Aq?}f@#?E>r{0W&pG(9sXd{YB7dDuaz{$?tJ{aWxHCuqX6v+IS6%UgQ8H^% zKspozn&MRFrG0K+PSCmXxY;gi55*_rK+P5CoL6Vm3v4$GFKX1ax7!H$X}VNPw{z9$ z7zMzug{dR&Xy}GplCl76pwX>jl!LdebBejRT%2UrQ)6*!X9|{)bBe<3>WhieX*zU4 zM$tyIV4HFmn!uCBmKG&^$>UynlTuvx<4u;|aJYrCI_{>qk!qw8>q&Ji9Rm-} zy!PkCT8#eyxVDRGryH2yRJv%^F5k?S@+FVH4r!>l9962MbXvKNK*31PD~Hq!lHN36 z-~(Muf;b^NCs|({;MXg8IEzwk%G@YCeih>Pnw+vq}GD{2MTI4U_C^()5Go>EQcU zjQl&gWQs6JAddCx`W%cj&_O4KCLaf7`gvpg_CK9Rs@g^rpSCw&?ho_p`PTwGORugP9WNoe zWMZmnn$L>7pEltwVNdP``KrC6Mv;U&oun~Cxr5v@pZ5p(_5A8agJ=&NgpRp5uRGEF zO*DFpaokFSalsYaYL{VjR(+>#!a)^rsLOGMjoWM6cwyT#zmFg1{{Yuf+-r6RaxA$$ z&mZUi0M}kitY4ef5sQge*&CBr{5#+&FH~O3f2hYFQVwxY=G!uof=7DS)^o{)m=o!d z{(t>-%J}Wbg_RqFNq3=H>GDSQH}gD*c?{K&@e1a6batHNb|if$ce#f$X`|0I=~aBf z&A5)k{{YooKDTtGfZogdv;05(YPqfIFDpM*$m#w?aC(L0jWEEI{a-w1xc0A44+&WD zF%ycOr>6K8?5PKS?m6S>?Ovaw$g|mpQ(i0Z=4W{ka>sOIjC)tF_*@mS3<(@^57w}) z7N(B+GER%PW9FN|j|y%B?x?QQ;miUp65RPf7a1o$zO}~8jC?Yq2WfB*=U#{4=;mv9 zQZk}A@q&GE$giS45a>3=96Ol4)#$|a_Qha$i&jY>V$sJTM#3vE%aAde>aJ|w=G)5% z53=K$#n!wbdv$7|Lhi{JP=7iA$MD{@cK1tfW#vS}{bYr6f$S^3`vt_hDVkf0i9SM0 zIaD9gyw}9u7S{YXZnp`030V$G#NRUgYm(J1HN95#P4|d4#1AON`h7Znv;nu`+Zdlx zVijDI+=Kj$H^Mpv`)bQ2oNlt)u#jYQ$JV!g8h8mctLVXs=4fF6G@~&iej}gCy^c>0 zL8V%GpzfP$#JD_#9=*?M0Nd2`2s}mb#^S|-tn)$Ddp1ADzDB&!WwO*|wz{`vmKh2- zBcTSq$@o8c71otKwCkB-bN7k+y(`PUFL)B$UGW9dpk$e4E}h5jZf#w~+d(Z{%h)X2j4%xo(wzvw%*yr@(xUU4r*4pK}2P(21tU&C3 zwd%ErfggykH~3qi9dA@ye>I{iRHFqaBp!Nu57K}=qrz}O zCW4Y$L=>xJvwXvN!RkA5D^hE?Tp4E@BqIeCFjpV_YUO+%s1FVJisMU~N0v5}#OjNj zw>V%k{QYat?+~jNkv???1%c!GiU9DNTix-f&2DKQyh`JAwmDH<--PYVh`dk+zMC4u zADbsZSpFu|7V1n+$IDKOn&>r4S&h2K8k*%b?H2vUBZ-)?-~m7ud^@Sx8-;>9NZYp} zy1i#Yx4F`M;b(3MU+xO>+l1GAGbol#J+jB;Emd_t7x?#6Wr{ntwuAeKLX3TA0zVe% zF~fYyu?6R_r+5<1_8$;iyhz)3jQuNX!2TE2{6nh8=UzO!aAd&T5940NYv7wrCe36h zq10!k09^Q&;UDdf2Btj@CSSjMSQ9>*N)+mXwKzq5J!6ZbK$MbTCRsJu6}6L zf(>|=#V?2E_glPuJb6+H32lR|0C1iQ(Po)JO9N4p=2U$A z3g~<*8#bW^2l0vk`vsUs2no`NWHOQg=dh}m68`T#hnjwyEG=-WyPVg_PgZ_`N!}#a zk%x5>FjBonaB1J#S~aZdm$zw>K2%Sb{x#C-S|z3ShO?CY^mzM+mlda_!=Xi|q;hFC z@!$;p>*mkarZQJ4(vvwC*E}0*8ol+bOy@gPMA8%Z3a@Kwd`qbtcr?>zZ!Bfwl1pH@ z^y95}u^$Y?cfqB*%ugX=6lzxiE!J~rEkPkb&&+FgB+)UV@2S9ePs2^4Up!LT1rT;7<@qKl&evZ*A>y^Fq6DN2Y4Zzxq>KWT|6-!?kH!>C=S*Tlt+w@aBkA z!#{{RrRh1Gmzb#rdJV8}?udk*zV)xKJ& z!*rRcpe1YUsK=HG9}!+$({?Poe6=1=tv>;&Hjhfw%=+dt<-#e@xsc#hc_jVT4{9uC zUpNf+uY;NT1uaox?=7_n+C@G~%`(_1zP*iow{u(fnk~Mep!wK7YK;87O;;U)}NV+=ZA4qo(QcgTPwy)z5IneGfp)uV>&lyIcecxVK>?y@=2uI^X@zo z^sZ0h0}DGhyUsR}GhUUcGF!mFws`7m$-ih@v1RbdZ&33k*3Zz@(tgsSM?HExl-oR) z$6By9va>!5t8w^Om3^aq=69Z-*0lU*t-SD4Gbi5HuIYH9R?>FSv)Z9UMcX7NhGs}<`@9yHSfM13c49m0VG!*D@h~Xpe z$ny;sdQEJYU$~t=8uZOINw-1mT#eR{VYs*004j<7Ypb@oSduh7fUlpu&!Bq|>k&!4 zah!WpR=4n2$QjBje|WCrT~3{A4ehtgI@Y#}q3L$;uzMtt-}sqxRco0iW^z(^_rsQv zhHG6%RJb4V%@b?f74OtXgCUk|ECyOhVY)^CWeQf@lcpAF7mNo#i>bn#D? z%%yh|mb>tKn~$_<*IrWO?&BnVE1jFeKN4;A_mfBQr0Zhb7-SoVeuBLlPr34Ek~SUs zR+6d}^CBfru&cG5%=e9sA41T)OAXPNSh`DvZj2XgMe!2MPvP02Ad&`n`d4dk?Vp*m zist-I$kult_Cx%tWUk0sA2e$gSiEIO*|4W0AN^|Mu5FZFFEXj}v(MJO7f_8J`r~L} zg=}DS{VR^Rk9Feik(7wLfnM$&KH@%W871x7J70!2X!Atn$zXsIMl;sEOG$;Ifrj4o z!+bD+7LP6u$_7ZsueEx9p9-y$3}+R?ihlY%Y&>m2za!?WZ8aOg_a(9WqqrZ&x_=Jd z#cgA6jk{TEFH3mk@Wu7EM(GrRS=O@5meE8>CO!@Yd#A)6ouKL|_O02%ch5EG8X&j4 zw@C7%zA@6gQ$@UZ!tZ7o;O4vk01fK++0SefyQKhkI+ud<&05sQI-vx0HHB^PlfzM5 ztfI+f=Q&_;#cyaj<+qlpBkpDY0BW|sw(b0^E01nCGyz`2PPNkQF$`#kqoSze{412y zHCuUaT~~ChhmfH0^{t;1>jAXsLIIajGoF>^dVjC7 z{115@rnCY<{t0r{OE1gB03N&k@#!z2G3i+ zYl}GijmjC-N6K<~`&WB^;t0%N-s7PrfHC|@r^c2pk>QXjz^@AUSEfkX?x}BwSRi>} zM~$|$d2`?JAFX>&Lerg>t?b)h4#MYiq}4bB~ywJ&%5) z`B!agEN0zC&{c;AkId$PK55f!@pP(3dh}lnG&b-qNX>Dk+`~5dvks#oow=Y7QPOT9 zo>d11y1N}B+Uhkb6d$E|H-_~lS5jKNBf|R9?NDBT7scNV-&wcEnT&MJb2@jyI8yCi z>f%R0bF_4?UDCB^oj_+5rS|J!okvOl=6p5b{XfI@J8f-}Fr%m(n#k8R1fJ=mnsrcm zE^BYbdZ>#|l)^^sryTdL2Sn98H>X*>&b4-u-bzckX8XRvfIDx7a$4GIO&k(`tj_|d z_~HX$;wdIP2@Y$|WcaV7>6)Q^E(Lw3hRs8&d|{7Ky;(I&RWLUM=NO<5M1Kcp-X*mL z>eU>u`@@4!*!(5Ybh*6vB5aPEj%vTd4;AUxauKK9Z-DZuPb=+R-Tt)^xBJ7T0CIY+ ziEj)g6-NTTQuw`Kbl)FdN4E;^xPCSDcD1R-+rDb~%l3+c&hbQdQ7%I!7>WSnG+S@9 zTq@x5eJjvBBcepNkd{Bh4l!JxgUY1Ky?fWA=q(r8A}jsjKpw?(O3LVcYKqA4TyFQP zGETDI7BtJ$5-t>1$;kZ@F|#{g3+q9wl^FD`yIoCRJ8?M zw@T+~%M%x?gW9wb_g<=h-l6#ETjDK(G+D4L}Zn%mkj{;Ks9M`4z zH^rJ=&xYf;T*0tr(!`fMud_>Y&_?8uA#B!bp^{x2l#5u{ubG|awVALKM zEELHig2brKKN^ckzm=mgwsJT;)J)P2S@iVgyRz8cvOLV)+JijY=QQ-ktw9uny-El@E9_D5C8&tT zDfp-&II9YH=~f5T8iCtz$SXaicy0rG)vM`)-Q;&Q1>$c`1$-2?KSGRb&fmhC&^BQU zcCFZT3wQZiH9v)UmXgxIxdhhUo2a*#GS$x`ww;ed)7}Pek`!OUo#H4G<4$DHBav8I zZlnZY=BRkP#4l~8%JGt9DnbE7WX)YPW9l00GG2X+NoI`gY<8~K!V9|7*@bx(zNckn zrkk7T5;C2c&&|&wHs~uByYW2w$~%< zpoZ=1Sbj0ptgfOd_op6VB&jpQyiQ8Y7d?j`g=N{~ z%sH!i{N_uH9>8|?srkvn=8jrUh!=Z`#T;wX1u&-#;$!X9k)u$v5T!Lt@XJd^UZ1-#wgo?skLl*(36k# zVxo~e#Km}4vGfM-h4o;n6t#5rdcJT0>t1hf43T`wYiC2eD>8?srC{W_=oXg}PTtiu z^hCv+)jcZd3;@)6=Bk#~Qp(5fsmIo}jFB!UJ9(+@)SlW1T4qD@9>Tg$4#?h61|p=_ zn^^d+*GICN>hzeyId^PlkEL`z9P!Sbs@Q#}OS@SV91up*DH=szLvLPrt#1UrNimax zz;vyhK1F*~Dte0IX7RLlTDSH}MI_HB84L2($A|Bq%4nG3k+4No?n{l04N^^+Ij&z& zogFR}*o9>|t<73O(34(y@h;+9T@G1dW>z@|6fI?AIs2;Toa**ME6azBIoz*|cKs`c zz69R|X(dzT4y*557aF@m9FI4d^G0!8+S@a7HouSEg7o7O#BJ76y&kZc@M?!3tx?S z;9F;!D}jb307v>wYRjxce zb*ahcPL9Gc@}jpD@7^TQQufYEdpMB05y8OXsOf$dYa1NgBvCGS8;3Lj$oxOkXVH8; z74$)sqAc#2sNbEmd&P3XYy=e&~~mLP>Ov$nlee+#B+{)HPPP~pok)1U{D5ZXkh4TPfOM$w_rC`T#vb_lW@5d0p97JC3R8z&(^gg@l)d) z{{UL@n|sL;Ok~#1l_ZxFDycls2W6;gml}(Go-$9EG4!tw__1Yu7O^#oyqV5J1Jqa0 zJ`U5Oh7&xX7h%S0GsT`5v%b9hL&T-MaX=q5Y5Gm=hAt#7!_d^4ou%%i%I9*%odBJ@YjZ7Yh2F;-}k5k8{s5(It_>0!EY}+TQ%sZ;zybgM4i29mfAJ3 z(qyr~3d6N>4GqSdaQ5;NLLLvb0CZZGwt5$?AI5gis@w)3pGvhnuQk9q;2ONU83siF za=L$q-X{-(T~>i$!txyUVOmyjMs4$ob&QD}^lSdr0CxI(qE?Pm{{SrjIQrI$ZC1go zNe|g(0Z7`7kIJ+nxbqM;YvkpKcz{xh?Ggb69%JOqt5ym7S0a(jJ zrksbvH|}woyW#spk=o)_4W0&TGU*yA0+4HF!eoxwK{(=~JDa)trgp2~e-CPUfV#TV zJ!>v+h?+!7;2$u?4sgI% zRASl2=M?oW!=%NgGYF&L^<&<$?>1W9Ga}$UVdx(h{5#?uN?Qn@V@BISW7O8=(M!n{ zqF_g{rBahxvsgZx!httQ1UF1-2Ia<4#ZHt8NV0=9IUg@)8EX16xy(9YMq1L5sr^Ul11n{oM& zHWdC8X}=5f%|0?TySeS*ZcHJvwY;}+0ll06D!tE*bX!nkdx5!n^Ib8EIb|e8ZJ&TCV`uz8mQarsZTy?rV^87C@-y?hagnj0Vp=y?21 zdvDDhyBuT@UUl$_!YJ%*WK~=$dVANWZQXADFa>z{sotVKu8b{7`Wz0me(fSEw?q}8 zqsnBn%b%E6J8;>RPu}?jY3Xu>93Hjg$o8Wx4u;ezOk$QeO3WO3)H-AC9cyCFAp8+o zGel|WcQ}L$_NM)q>l(5^?f#D+GJDh(@GzJlI34RpNpyzRNdf!KjMYWlQf42B{0SDJ zeoPXDfw(b|(yOn+WVU2$Tc)>0KQLZ1T`OvkKzF>L0qSc;-^N-5*1k;lk*Q9+)pD>? z=w|7D6SC1{Ng_UDj!QQ+9;0veU07Wp{oLaX>}tf`EYRm>iq`TIx7EgJpKOBq)siU@ zuyQbKMH?eGCvqF--5%a+&pt6Z8VOYglU|E;81nh_uQ2%Gaw5{z0pyeXsHLpYHJ|R= zJYQRXF2%#{&dvu;)y`>gGhPP_!{r&{-n6_ybt7&#-?d!6xwuQY65}3VbCc_yYZk^SZSLcr{&}!&X)ZN&)HUm-R$a&x zvZ?9DKc#&U@aIcyD!KwmX2<1HC<87|?%Zaw^tlyS5>7k%)}(kRBY~blJtzV3MvVBu z+O4TF1n#MCJ=gJheRnkC@i>t>J;KNN2fs`#597Z-Z2{pN4)IZ9qvbtA4oowlf9C zwrB&Elf*tHx^J`=x+Ag4rrzq_A`9kDZrN01mSS;UroRcHpHK4i-x%sJ#>C||M)=N7 zGmQSVPV3;Vr!DKeQRX%jeL$C~Z+CW}(jR`2Ct z*dT+>aacOP!%YiCk)(rFytr)evNHV5>%gr|CI{2>wzO<3XE-zgmSZuw0OS+Tt!t*B zR>IEO%~DCkQWqKfm_1MCD<@EpE3slrFswZm-tSZK16=NvVT_Tz8y|%Lbx^8V-5D-P znn&b-1{749r-&{sY~vBEN*T5i+~9wo=TXUOeC^vyFvkav%CdY^e$c|k-X~{P-uqiP z80kO`OW_T{V^Lgc26=kcHlaBZVw-Cz-PV9Q2wN*sbr`BvGG%(z*v4oAF>ks|fn7I* z;8>f?aniDE;soavv12HTGxVShtwY4HX>jhEK)4(V<2*_6RI3%XKz_BA;_W9~*Do1u zT~Rw1JXU6j@UO)87n_<(2?lyR*v$YLUJHWQH%5E|`kDZ-;a?xmB+8dWa(dTUd?D1K^V0;C z&P93Mufq=(+rQc`&Ab75AU@2$x(o412$`O6og`7J}fA7{MtmGcGr=`ieP>22DKpvZ^TeEK``^5gWO3L8HDMvh4 zP2!Cz_ea&I()9?MIiopTkG!X$u5(bgXpZc0Uo~2ri$3CoUTB>Li8$H_u8T>yK>XJO zr`<9UwX0&*_H1AteQTClowVe3`hvqO8;2|fW8Ye8S2}Zjn^B6@huti>G`cj>Tt-7x zyNhO$Hi|*=xa?{pqdHcnKd1P6O_t(E@ukJZ>_I_{D-j-jz^!dbJ{Z{9J+_nKsArO3 zRW~DX$8u{vTa8~wxG^=5)Gb?}&&;B(uZr#3$VF@6DL&ArgChKZ{cEZ<5*x$DYg3i* z{{VorO9+wXu#OV)5`{ifp0(9!@k6JURA$;b7NQrsyqoPek%21?5mySIN;PO2D_zWL zYgXn~6r&hfBMZm6+SurKx9o7RLdQP%;=WXpMw(}pxoH@?A5uR zyvx})xc>lPde@97A4>N!dOWL{pD&$O=Fk8%D)UmRdQ-xBSG;`H$Z%>!;8WOO;*gpK zd+pnu*dCPqKIE%~CYv-4SReLjzFyYiz8RzLqS`ur9$-l3x?MJ9ILWRDO}S(^&2L!W zvf{ClI;qU-Z;~ls$m?0MTk4ZRAhnh_c8(e7vAKEI0wc47Ca8s6>3~kgkZEX{8^~SZ>P_2Tjho_-;l46ym6>K?yY%t=O$N> z&2#b(rF_TYgNJn(>ixaz(aULDQ|Gg4-s?!`iu+6(!3XpFe}9=TV;V@a`A4(%?~y1?(%d^BCK< zI%2al8xs|jN|^aq(zVvz&9j#5E5WGmQ2MS{8c)#kTd**JMoEZNc2_MMZ9cU%%mjIT z{{VD4RW=xqoE|HWq1?7QZ5r$n25YC&W*8Ocx_!}&^P1?iy-%R5WR2k?y0a+f>MJK# z(tJmJt!t&+!)p?p`O*xEqYk4ekxJ*2T|J%iOQ$pvjH|CWr3n=%YH+jsKJg9NG2VF2 z7SH_ij;O`(n))k`-)oV`jCqlGHNSZk?w4@WTF7Kf=W7E|$>S|XHS*4$8NP>1{37t>rli-mm-m+=sRBZxx)?k;Wv5<6bD|lN9Q^9i76zzV-fMcP9%O9{KAUk} zRg`ijpS6Yn6sJ)%XDCKGBCf4;7CsMZ@Q;p~l$STc6lNg->GZE)*Cr9HnQU-t#JqWJ z_N&PyV8@oh1OEW6SA|!d&P-I&rq3(ZE+uI&bN4z0t)B$NBg~99ACz|Y6%E#w?{R^+ z{_JPv`g>P%@asii-IwdMbr}AY>{Y2~A3ukq%~t23_)ZhHz1&{STP#rgyiIan((6UJaS8yim}v`DYBcKD|fsuG&ag zM%;Gwu1m^A*PxdeWte|D`jhj+u(y?xM(4K`t7CYaeL2l!O%rX%ro$;l+V(rz}|g=P60uN;9` z{whT~<+hV+dJ5IhS~(#RVO~ZfIsX9l)}-DGn)xF!Tm@F;z~R3-0P{9^`+ul!?{=!h8U|>UKhR7RGXD%+tBqO{VSdEW!o7RCi$_`fHCfS&;&9} zlU_#@vV})sxrx97y>+@t(VoHNx0)|5JeN4e(eKi@T|H6ONv7Gfe5=1ap1fndYiY?G z#UKl|CSkk`;Qk_jE$W)H-Arw?q;01^yj1zI?Vgoy!xnb>U8%U#Wb!U1!2RLqr#R1X z->qrb>CnKxa3ZMS4w%R5Svt+lwAzue)9hloorvEfbY4bsdi0+xDc4Ug#e7-i0wTI!I7V_2b@Ur8t6)%gfJd1sV^FS1C@3N%kux{@B+l`>q7Z-$r zGf`WiX*U`G*R@}lHKU{d0LVfw_l0FgCKm#)=yHF=#u5J5pbx)4X}^c-u4!wmX|REJ zYB($WL%22bEzo1W38O0_95Rv6*WKSN(X>-2WO0HGc)!O_gM$0a*0crLILkC@IDf5q z_2{V{{tp$)?z83@QcG)qaq=;)i%-0=TWm@Gvm8}Da>nAu;jOQ&-YF2^s|w6uLt#(h zUQ4B^?5fJz9ZrR=TSa;0xxgm7Yi}xeRzzUR!-HNts>;R5t=|s#p{&tuW}D>C%eeHc zfu&M&&rBN-CD)H@Xeh0 zYgw8m^dlmx>13kuT9C}cl56NN@pR*3HaduFqAPO5m0=chw$Zd>L>KU%UaEW+elr`Hw8+W3hi!4eP7thb3H zRl`cZolmo8bZSDz-NIWhMFP2x8R{`x#BX46`@Pxe~D94z80{^Jgaf*-!lD@I~xa@+mZY}mX$gZO6Zy)Z8!`7sUR{)NcidvmtVKWj&Rcz$- ztvfrYkwbT^`403YNCbYhQCas8UxC(~soc&r8as_ERkD)`>;n%|U51NwZ!Ag`)c!T% zl1Pf%gSO%6S9DJi+*n*-NX)tKSbG+k(;CUEGu-2f!Pt4A5!_adt+tOE?pr8Xy;*C^ zG`|=`>I=z_Vry9V(%vY!kbN^+#+n~DnciGnTQcksB7xW_6@%i9UJDx*JF)3po!5@7 zh$nu1vs@34JX<~dtcc7Mbmpy7Ov=cY6OXU-s><&?yNaKgI}fL|cVX$M>Uj97j(QfYE$6tLGAnJ`GxGgCtJAy{V9cFr*-q1ePNV`YyRUN9)dKXh0HX7 zskD6_&I1?kri0J8Y<=co%74H?AC7D456=fOB(`ZHkCl)b&5$pcRAaAN*3e=f*pMMR zil)rt(~767TA0|nFUox=0vK9I^XPhtxVL{OA$G7nxU7|&#-I`JQ#7hT+S`3WGy&T9 zS6Yj5Gr!HBn{o86=EuefZpsXsOK?5w!DpUZX^fFK%G{h9(zn%~NI^+HZup=NpqIw> z!V~9}&N(5oP+a)7&F$HmO{zIwde?=vsVH5AkLSe;s?386CPsUXv;pZ__lcvPFDV&t ze~UHd+SS8c>JH@aI29b%(l;cX$EW`Qs+UI7^$l-RO+QJtmhR$1jghYGA5wb{tpHiK zSk^e9J5L*!=b=CSYTVM9V;elos`9*aKU$Z@-WWaMC0l5g#%mm5`E7F}P$<2QjHBNtk=pR7O1FxAiSLU$!tYw_onmZ>LDH z@e_aFGy#bse6>}~2Rs zTYuj)+nA?M;D7t%&R3`sIjK5)}Mv=c^mrm>U6P{{X&CY1`|!tJBQ? z0KQECeH%8Zr%ap}>YVo)e$r0L@TmMvs15;_{`oaCc&hxzgXVwVCV)LZUet8-iG*PR z_OBuF<>#At!4Dax-D_8qXFg~B@@pSbY3DnO!#HuPYLQ0H1<+SW~_EjgDORR(Hg6L<*HsF@b!+br^#t{nMoH1ish9Q&bnC1 zEzi#D-;y)NJ!_fOqMCLkRkr8vXQg}R?IrN$&%*vFjte`<8XK&(3JkB~Tu+94FQ!TM zXPeEFbc8aO;MQMPXRA*Tq>ni8wu9n*V^~`a8XL=r7~m{QNYA~FQd zN0yoMTDO`TBV|>AU^v))swdEAbs0wK{nJ(M*v|63u5&u2?b|}itnApXCtQl=S7OL= zdFfuEsd#GOsYv2%u;=$@+uE=%{4sy#lxtV$FnqJ>J*#?BNXDctw>-*yK4#tfmixKL zUw@@drsy{_O~ftG{{Roa(!DQ9@V(2-R!d1RL0(fHp4HjtUKzKAmHy7$WPHN9)m3B6 zsYBk-C;aiq5fGf|$R=$U)gQIO* zG;KnN@@p$yVUg*Yysx!!Sz6OG?NtY@amG&Q@2Zz0)Wf(k9jH0^MPTaIwW^2p;7>Z z^y{{s)&MCj5$WA3)U_q0%6XN`G7=eIj^e66+Kc?DCt@%<*KeF9!zbyus_wGYMS3fot1Y+ z{=ab4XcBL^gQwcu9l?tejO2>1tm*eG8z^z~uE}(XRAMNcmg|_!R@HQS?VCg=o__63 z^(Ut1nzoN|CCFr(5gY7dK z8KGc8{{RwKOlu@^PL1`ro)yr9HtV^0!0qfSv9%2pAyiRg1WS*X^s8*BtD5JjQOTWj zD8>tMibF5WRW*p!ZTExDX=j`(@IOkWs7%r*Ra4i}vQ6_NYMi`}Q|0YH{c?RpdY8oC z`1Z5<5B&tuMSVf}>BVV3@#y~m@1N&OtAEFsqKW|JCi~0&^)gT4qKW`X{{YnripTE1 z)`}L;gSaD58K9R{kHL{#9zj{yby<0CfKVHKK|D>aTy}?W#FG-bQ#Q9uZvdWm~|D58J}KJ{o@ecC9X3%36Ndal|30LRpS zS}33o(M>=8KjZ%Zb-$Hqzux>PqOy_H_8$*Qv-~tsSt4V(^FQsS{{SNW7=MPE-+S<)ibzj#t=HZZ`2Okt0CtKhgotMA_z&q-rvCt0{{R90v{75r zIqGyEPxb5c{{RZR5Bj9~e_AN5BusWML-%ULU($*zj(eR{$5b~Tc8V%i=92hW!Tdk& zij{kPD59!clOKf&zjHZW^ zS*^`T*Y6MW=|tb_mWnEcEsCf9K0n|!Zqxlr{{WuUQB?X76692qQAI(rBmOFEpLU8U K`$%&5S^wFmM8K5* diff --git a/doc/MIAEF128_Ford_0.jpg b/doc/MIAEF128_Ford_0.jpg deleted file mode 100644 index 51c7f9e8e101444c0fefd370adf4dfa541667d82..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 77181 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 diff --git a/doc/MIAEF128_diagramm.png b/doc/MIAEF128_diagramm.png deleted file mode 100644 index a940d52c3a5a323843969c4c72f5768ad4b33c41..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31637 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 diff --git a/doc/merged-face.jpg b/doc/merged-face.jpg deleted file mode 100644 index 27ed67fa686b68bead7cfb146e368d374461a64e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14771 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 box_pts and i <= a_len-box_pts-1: + # af0 = alignments[ a[i] ][0] ##first face + # m0 = LandmarksProcessor.get_transform_mat (af0, 256, face_type=FaceType.FULL) + # + # points = [] + # + # for j in range(-box_pts, box_pts+1): + # af = alignments[ a[i+j] ][0] ##first face + # m = LandmarksProcessor.get_transform_mat (af, 256, face_type=FaceType.FULL) + # p = LandmarksProcessor.transform_points (af, m) + # points.append (p) + # + # points = np.array(points) + # points_len = len(points) + # t_points = np.transpose(points, [1,0,2]) + # + # p1 = np.array ( [ int(np.convolve(x[:,0], box, mode='same')[points_len//2]) for x in t_points ] ) + # p2 = np.array ( [ int(np.convolve(x[:,1], box, mode='same')[points_len//2]) for x in t_points ] ) + # + # new_points = np.concatenate( [np.expand_dims(p1,-1),np.expand_dims(p2,-1)], -1 ) + # + # alignments[ a[i] ][0] = LandmarksProcessor.transform_points (new_points, m0, True).astype(np.int32) + files_processed, faces_processed = ConvertSubprocessor ( converter = converter.copy_and_set_predictor( model_process_predictor(model_sq,model_cq,model_lock) ), input_path_image_paths = Path_utils.get_image_paths(input_path), diff --git a/mainscripts/Trainer.py b/mainscripts/Trainer.py index 6f7ccef..8b45dcd 100644 --- a/mainscripts/Trainer.py +++ b/mainscripts/Trainer.py @@ -11,7 +11,7 @@ from utils import Path_utils from utils import image_utils import cv2 -def trainerThread (input_queue, output_queue, training_data_src_dir, training_data_dst_dir, model_path, model_name, save_interval_min=10, debug=False, target_epoch=0, **in_options): +def trainerThread (input_queue, output_queue, training_data_src_dir, training_data_dst_dir, model_path, model_name, save_interval_min=10, debug=False, **in_options): while True: try: @@ -29,8 +29,6 @@ def trainerThread (input_queue, output_queue, training_data_src_dir, training_da if not model_path.exists(): model_path.mkdir(exist_ok=True) - - import models model = models.import_model(model_name)( @@ -40,7 +38,7 @@ def trainerThread (input_queue, output_queue, training_data_src_dir, training_da debug=debug, **in_options) - is_reached_goal = (target_epoch > 0 and model.get_epoch() >= target_epoch) + is_reached_goal = model.is_reached_epoch_goal() def model_save(): if not debug and not is_reached_goal: @@ -58,11 +56,11 @@ def trainerThread (input_queue, output_queue, training_data_src_dir, training_da if model.is_first_run(): model_save() - if target_epoch != 0: + if model.get_target_epoch() != 0: if is_reached_goal: print ('Model already trained to target epoch. You can use preview.') else: - print('Starting. Target epoch: %d. Press "Enter" to stop training and save model.' % (target_epoch) ) + print('Starting. Target epoch: %d. Press "Enter" to stop training and save model.' % ( model.get_target_epoch() ) ) else: print('Starting. Press "Enter" to stop training and save model.') @@ -73,7 +71,7 @@ def trainerThread (input_queue, output_queue, training_data_src_dir, training_da loss_string = model.train_one_epoch() print (loss_string, end='\r') - if target_epoch != 0 and model.get_epoch() >= target_epoch: + if model.get_target_epoch() != 0 and model.is_reached_epoch_goal(): print ('Reached target epoch.') model_save() is_reached_goal = True diff --git a/models/ConverterBase.py b/models/ConverterBase.py index 250c7d0..b03e5a8 100644 --- a/models/ConverterBase.py +++ b/models/ConverterBase.py @@ -11,11 +11,12 @@ class ConverterBase(object): #overridable def __init__(self, predictor): self.predictor = predictor - + #overridable def get_mode(self): #MODE_FACE calls convert_face - #MODE_IMAGE calls convert_image + #MODE_IMAGE calls convert_image without landmarks + #MODE_IMAGE_WITH_LANDMARKS calls convert_image with landmarks return ConverterBase.MODE_FACE #overridable diff --git a/models/ConverterImage.py b/models/ConverterImage.py index 2cbfac3..3155a2f 100644 --- a/models/ConverterImage.py +++ b/models/ConverterImage.py @@ -34,7 +34,7 @@ class ConverterImage(ConverterBase): self.predictor ( np.zeros ( (self.predictor_input_size, self.predictor_input_size,3), dtype=np.float32) ) #override - def convert_image (self, img_bgr, debug): + def convert_image (self, img_bgr, img_landmarks, debug): img_size = img_bgr.shape[1], img_bgr.shape[0] predictor_input_bgr = cv2.resize ( img_bgr, (self.predictor_input_size, self.predictor_input_size), cv2.INTER_LANCZOS4 ) diff --git a/models/ConverterMasked.py b/models/ConverterMasked.py index dcf6f62..e5689aa 100644 --- a/models/ConverterMasked.py +++ b/models/ConverterMasked.py @@ -4,47 +4,53 @@ from facelib import FaceType import cv2 import numpy as np from utils import image_utils - +from utils.console_utils import * + class ConverterMasked(ConverterBase): #override def __init__(self, predictor, predictor_input_size=0, output_size=0, - face_type=FaceType.FULL, - clip_border_mask_per = 0, - masked_hist_match = True, - hist_match_threshold = 255, - mode='seamless', - use_predicted_mask = True, - erode_mask_modifier=0, - blur_mask_modifier=0, - seamless_erode_mask_modifier=0, - output_face_scale_modifier=0.0, - transfercolor=False, - final_image_color_degrade_power=0, - alpha=False, + face_type=FaceType.FULL, + base_erode_mask_modifier = 0, + base_blur_mask_modifier = 0, + **in_options): super().__init__(predictor) - self.predictor_input_size = predictor_input_size self.output_size = output_size - self.face_type = face_type - self.use_predicted_mask = use_predicted_mask - self.clip_border_mask_per = clip_border_mask_per - self.masked_hist_match = masked_hist_match - self.hist_match_threshold = hist_match_threshold - self.mode = mode - self.erode_mask_modifier = erode_mask_modifier - self.blur_mask_modifier = blur_mask_modifier - self.seamless_erode_mask_modifier = seamless_erode_mask_modifier - self.output_face_scale = np.clip(1.0 + output_face_scale_modifier*0.01, 0.5, 1.5) - self.transfercolor = transfercolor + self.face_type = face_type self.TFLabConverter = None - self.final_image_color_degrade_power = np.clip (final_image_color_degrade_power, 0, 100) - self.alpha = alpha - + + mode = input_int ("Choose mode: (1) overlay, (2) hist match, (3) hist match bw, (4) seamless (default), (5) seamless hist match : ", 4) + self.mode = {1:'overlay', + 2:'hist-match', + 3:'hist-match-bw', + 4:'seamless', + 5:'seamless-hist-match'}.get (mode, 'seamless') + + if self.mode == 'hist-match' or self.mode == 'hist-match-bw': + self.masked_hist_match = input_bool("Masked hist match? (y/n skip:y) : ", True) + + if self.mode == 'hist-match' or self.mode == 'hist-match-bw' or self.mode == 'seamless-hist-match': + self.hist_match_threshold = np.clip ( input_int("Hist match threshold [0..255] (skip:255) : ", 255), 0, 255) + + self.use_predicted_mask = input_bool("Use predicted mask? (y/n skip:y) : ", True) + self.erode_mask_modifier = base_erode_mask_modifier + np.clip ( input_int ("Choose erode mask modifier [-200..200] (skip:0) : ", 0), -200, 200) + self.blur_mask_modifier = base_blur_mask_modifier + np.clip ( input_int ("Choose blur mask modifier [-200..200] (skip:0) : ", 0), -200, 200) + + self.seamless_erode_mask_modifier = 0 + if self.mode == 'seamless' or self.mode == 'seamless-hist-match': + self.seamless_erode_mask_modifier = np.clip ( input_int ("Choose seamless erode mask modifier [-100..100] (skip:0) : ", 0), -100, 100) + + self.output_face_scale = np.clip ( 1.0 + input_int ("Choose output face scale modifier [-50..50] (skip:0) : ", 0)*0.01, 0.5, 1.5) + self.transfercolor = input_bool("Transfer color from dst face to converted final face? (y/n skip:n) : ", False) + self.final_image_color_degrade_power = np.clip ( input_int ("Degrade color power of final image [0..100] (skip:0) : ", 0), 0, 100) + self.alpha = input_bool("Export png with alpha channel? (y/n skip:n) : ", False) + print ("") + #override def get_mode(self): return ConverterBase.MODE_FACE @@ -79,7 +85,7 @@ class ConverterMasked(ConverterBase): if not self.use_predicted_mask: prd_face_mask_a_0 = predictor_input_mask_a_0 - + prd_face_mask_a_0[ prd_face_mask_a_0 < 0.001 ] = 0.0 prd_face_mask_a = np.expand_dims (prd_face_mask_a_0, axis=-1) @@ -145,16 +151,6 @@ class ConverterMasked(ConverterBase): print ("blur_size = %d" % (blur) ) img_mask_blurry_aaa = np.clip( img_mask_blurry_aaa, 0, 1.0 ) - - #if self.clip_border_mask_per > 0: - # prd_border_rect_mask_a = np.ones ( prd_face_mask_a.shape, dtype=prd_face_mask_a.dtype) - # prd_border_size = int ( prd_border_rect_mask_a.shape[1] * self.clip_border_mask_per ) - # - # prd_border_rect_mask_a[0:prd_border_size,:,:] = 0 - # prd_border_rect_mask_a[-prd_border_size:,:,:] = 0 - # prd_border_rect_mask_a[:,0:prd_border_size,:] = 0 - # prd_border_rect_mask_a[:,-prd_border_size:,:] = 0 - # prd_border_rect_mask_a = np.expand_dims(cv2.blur(prd_border_rect_mask_a, (prd_border_size, prd_border_size) ),-1) if self.mode == 'hist-match-bw': prd_face_bgr = cv2.cvtColor(prd_face_bgr, cv2.COLOR_BGR2GRAY) @@ -174,22 +170,21 @@ class ConverterMasked(ConverterBase): hist_match_2 = dst_face_bgr*hist_mask_a + (1.0-hist_mask_a)* np.ones ( prd_face_bgr.shape[:2] + (1,) , dtype=prd_face_bgr.dtype) hist_match_2[ hist_match_1 > 1.0 ] = 1.0 - - new_prd_face_bgr = image_utils.color_hist_match(hist_match_1, hist_match_2, self.hist_match_threshold ) - prd_face_bgr = new_prd_face_bgr + prd_face_bgr = image_utils.color_hist_match(hist_match_1, hist_match_2, self.hist_match_threshold ) if self.mode == 'hist-match-bw': prd_face_bgr = prd_face_bgr.astype(np.float32) - - out_img = cv2.warpAffine( prd_face_bgr, face_output_mat, img_size, out_img, cv2.WARP_INVERSE_MAP | cv2.INTER_LANCZOS4, cv2.BORDER_TRANSPARENT ) - + if debug: debugs += [out_img.copy()] debugs += [img_mask_blurry_aaa.copy()] + if self.mode == 'overlay': + pass + if self.mode == 'seamless' or self.mode == 'seamless-hist-match': out_img = np.clip( img_bgr*(1-img_face_mask_aaa) + (out_img*img_face_mask_aaa) , 0, 1.0 ) if debug: @@ -200,14 +195,7 @@ class ConverterMasked(ConverterBase): if debug: debugs += [out_img.copy()] - - #if self.clip_border_mask_per > 0: - # img_prd_border_rect_mask_a = cv2.warpAffine( prd_border_rect_mask_a, face_output_mat, img_size, np.zeros(img_bgr.shape, dtype=np.float32), cv2.WARP_INVERSE_MAP | cv2.INTER_LANCZOS4, cv2.BORDER_TRANSPARENT ) - # img_prd_border_rect_mask_a = np.expand_dims (img_prd_border_rect_mask_a, -1) - # - # out_img = out_img * img_prd_border_rect_mask_a + img_bgr * (1.0 - img_prd_border_rect_mask_a) - # img_mask_blurry_aaa *= img_prd_border_rect_mask_a - + out_img = np.clip( img_bgr*(1-img_mask_blurry_aaa) + (out_img*img_mask_blurry_aaa) , 0, 1.0 ) if self.mode == 'seamless-hist-match': diff --git a/models/ModelBase.py b/models/ModelBase.py index 5403a48..06f44f5 100644 --- a/models/ModelBase.py +++ b/models/ModelBase.py @@ -7,6 +7,7 @@ from pathlib import Path from utils import Path_utils from utils import std_utils from utils import image_utils +from utils.console_utils import * import numpy as np import cv2 from samples import SampleGeneratorBase @@ -18,8 +19,11 @@ class ModelBase(object): #DONT OVERRIDE def __init__(self, model_path, training_data_src_path=None, training_data_dst_path=None, - batch_size=0, - write_preview_history = False, + ask_for_session_options=False, + session_write_preview_history = None, + session_target_epoch=0, + session_batch_size=0, + debug = False, **in_options ): print ("Loading model...") @@ -35,56 +39,94 @@ class ModelBase(object): self.dst_yaw_images_paths = None self.src_data_generator = None self.dst_data_generator = None - self.is_training_mode = (training_data_src_path is not None and training_data_dst_path is not None) - self.batch_size = batch_size - self.write_preview_history = write_preview_history self.debug = debug + self.is_training_mode = (training_data_src_path is not None and training_data_dst_path is not None) + self.supress_std_once = ('TF_SUPPRESS_STD' in os.environ.keys() and os.environ['TF_SUPPRESS_STD'] == '1') + self.epoch = 0 + self.options = {} + self.loss_history = [] + self.sample_for_preview = None if self.model_data_path.exists(): model_data = pickle.loads ( self.model_data_path.read_bytes() ) self.epoch = model_data['epoch'] - self.options = model_data['options'] - self.loss_history = model_data['loss_history'] if 'loss_history' in model_data.keys() else [] - self.sample_for_preview = model_data['sample_for_preview'] if 'sample_for_preview' in model_data.keys() else None - else: - self.epoch = 0 - self.options = {} - self.loss_history = [] - self.sample_for_preview = None + if self.epoch != 0: + self.options = model_data['options'] + self.loss_history = model_data['loss_history'] if 'loss_history' in model_data.keys() else [] + self.sample_for_preview = model_data['sample_for_preview'] if 'sample_for_preview' in model_data.keys() else None - if self.write_preview_history: - self.preview_history_path = self.model_path / ( '%s_history' % (self.get_model_name()) ) - - if not self.preview_history_path.exists(): - self.preview_history_path.mkdir(exist_ok=True) - else: - if self.epoch == 0: - for filename in Path_utils.get_image_paths(self.preview_history_path): - Path(filename).unlink() - - self.device_config = nnlib.DeviceConfig(allow_growth=False, **in_options) - if self.epoch == 0: - #first run - self.options['created_vram_gb'] = self.device_config.gpu_total_vram_gb - self.created_vram_gb = self.device_config.gpu_total_vram_gb + print ("\nModel first run. Enter model options as default for each run.") + self.options['write_preview_history'] = input_bool("Write preview history? (y/n skip:n) : ", False) + self.options['target_epoch'] = max(0, input_int("Target epoch (skip:unlimited) : ", 0)) + self.options['batch_size'] = max(0, input_int("Batch_size (skip:model choice) : ", 0)) + self.options['sort_by_yaw'] = input_bool("Feed faces to network sorted by yaw? (y/n skip:n) : ", False) + + #self.options['use_fp16'] = use_fp16 = input_bool("Use float16? (y/n skip:n) : ", False) else: - #not first run - if 'created_vram_gb' in self.options.keys(): - self.created_vram_gb = self.options['created_vram_gb'] - else: - self.options['created_vram_gb'] = self.device_config.gpu_total_vram_gb - self.created_vram_gb = self.device_config.gpu_total_vram_gb + self.options['write_preview_history'] = self.options.get('write_preview_history', False) + self.options['target_epoch'] = self.options.get('target_epoch', 0) + self.options['batch_size'] = self.options.get('batch_size', 0) + self.options['sort_by_yaw'] = self.options.get('sort_by_yaw', False) + #self.options['use_fp16'] = use_fp16 = self.options['use_fp16'] if 'use_fp16' in self.options.keys() else False + + use_fp16 = False #currently models fails with fp16 + + if ask_for_session_options: + print ("Override options for current session:") + session_write_preview_history = input_bool("Write preview history? (y/n skip:default) : ", None ) + session_target_epoch = input_int("Target epoch (skip:default) : ", 0) + session_batch_size = input_int("Batch_size (skip:default) : ", 0) + + if self.options['write_preview_history']: + if session_write_preview_history is None: + session_write_preview_history = self.options['write_preview_history'] + else: + self.options.pop('write_preview_history') + + if self.options['target_epoch'] != 0: + if session_target_epoch == 0: + session_target_epoch = self.options['target_epoch'] + else: + self.options.pop('target_epoch') + + if self.options['batch_size'] != 0: + if session_batch_size == 0: + session_batch_size = self.options['batch_size'] + else: + self.options.pop('batch_size') + + self.sort_by_yaw = self.options['sort_by_yaw'] + if not self.sort_by_yaw: + self.options.pop('sort_by_yaw') + + self.write_preview_history = session_write_preview_history + self.target_epoch = session_target_epoch + self.batch_size = session_batch_size + self.device_config = nnlib.DeviceConfig(allow_growth=False, use_fp16=use_fp16, **in_options) + + self.created_vram_gb = self.options['created_vram_gb'] if 'created_vram_gb' in self.options.keys() else self.device_config.gpu_total_vram_gb + + self.onInitializeOptions(self.epoch == 0, ask_for_session_options) nnlib.import_all (self.device_config) - self.onInitialize(**in_options) if self.debug or self.batch_size == 0: self.batch_size = 1 if self.is_training_mode: + if self.write_preview_history: + self.preview_history_path = self.model_path / ( '%s_history' % (self.get_model_name()) ) + + if not self.preview_history_path.exists(): + self.preview_history_path.mkdir(exist_ok=True) + else: + if self.epoch == 0: + for filename in Path_utils.get_image_paths(self.preview_history_path): + Path(filename).unlink() + if self.generator_list is None: raise Exception( 'You didnt set_training_data_generators()') else: @@ -100,11 +142,18 @@ class ModelBase(object): print ("==") print ("== Current epoch: " + str(self.epoch) ) print ("==") - print ("== Options:") - print ("== |== batch_size : %s " % (self.batch_size) ) - print ("== |== multi_gpu : %s " % (self.device_config.multi_gpu) ) + print ("== Model options:") for key in self.options.keys(): print ("== |== %s : %s" % (key, self.options[key]) ) + print ("== Session options:") + if self.write_preview_history: + print ("== |== write_preview_history : True ") + if self.target_epoch != 0: + print ("== |== target_epoch : %s " % (self.target_epoch) ) + print ("== |== batch_size : %s " % (self.batch_size) ) + if self.device_config.multi_gpu: + print ("== |== multi_gpu : True ") + print ("== Running on:") if self.device_config.cpu_only: @@ -122,6 +171,10 @@ class ModelBase(object): print ("=========================") + #overridable + def onInitializeOptions(self, is_first_run, ask_for_session_options): + pass + #overridable def onInitialize(self, **in_options): ''' @@ -161,6 +214,12 @@ class ModelBase(object): from .ConverterBase import ConverterBase return ConverterBase(self, **in_options) + def get_target_epoch(self): + return self.target_epoch + + def is_reached_epoch_goal(self): + return self.target_epoch != 0 and self.epoch >= self.target_epoch + def to_multi_gpu_model_if_possible (self, models_list): if len(self.device_config.gpu_idxs) > 1: #make batch_size to divide on GPU count without remainder @@ -305,9 +364,6 @@ class ModelBase(object): if self.batch_size == 0: self.batch_size = 2 else: - if self.device_config.gpu_total_vram_gb < keys[0]: - raise Exception ('Sorry, this model works only on %dGB+ GPU' % ( keys[0] ) ) - if self.batch_size == 0: for x in keys: if self.device_config.gpu_total_vram_gb <= x: diff --git a/models/Model_AVATAR/Model.py b/models/Model_AVATAR/Model.py deleted file mode 100644 index 29b9f1b..0000000 --- a/models/Model_AVATAR/Model.py +++ /dev/null @@ -1,251 +0,0 @@ -import numpy as np -import cv2 -from models import ModelBase -from samples import * -from nnlib import nnlib - -class Model(ModelBase): - - encoder64H5 = 'encoder64.h5' - decoder64_srcH5 = 'decoder64_src.h5' - decoder64_dstH5 = 'decoder64_dst.h5' - encoder256H5 = 'encoder256.h5' - decoder256H5 = 'decoder256.h5' - - #override - def onInitialize(self, **in_options): - exec(nnlib.import_all(), locals(), globals()) - - self.set_vram_batch_requirements( {3.5:8,4:8,5:12,6:16,7:24,8:32,9:48} ) - if self.batch_size < 4: - self.batch_size = 4 - - img_shape64, img_shape256, self.encoder64, self.decoder64_src, self.decoder64_dst, self.encoder256, self.decoder256 = self.Build() - - if not self.is_first_run(): - self.encoder64.load_weights (self.get_strpath_storage_for_file(self.encoder64H5)) - self.decoder64_src.load_weights (self.get_strpath_storage_for_file(self.decoder64_srcH5)) - self.decoder64_dst.load_weights (self.get_strpath_storage_for_file(self.decoder64_dstH5)) - self.encoder256.load_weights (self.get_strpath_storage_for_file(self.encoder256H5)) - self.decoder256.load_weights (self.get_strpath_storage_for_file(self.decoder256H5)) - - #if self.is_training_mode: - # self.encoder64, self.decoder64_src, self.decoder64_dst, self.encoder256, self.decoder256 = self.to_multi_gpu_model_if_possible ( [self.encoder64, self.decoder64_src, self.decoder64_dst, self.encoder256, self.decoder256] ) - - input_A_warped64 = Input(img_shape64) - input_B_warped64 = Input(img_shape64) - A_rec64 = self.decoder64_src(self.encoder64(input_A_warped64)) - B_rec64 = self.decoder64_dst(self.encoder64(input_B_warped64)) - self.ae64 = Model([input_A_warped64, input_B_warped64], [A_rec64, B_rec64] ) - - if self.is_training_mode: - self.ae64, = self.to_multi_gpu_model_if_possible ( [self.ae64,] ) - - self.ae64.compile(optimizer=Adam(lr=5e-5, beta_1=0.5, beta_2=0.999), - loss=[DSSIMLoss(), DSSIMLoss()] ) - - self.A64_view = K.function ([input_A_warped64], [A_rec64]) - self.B64_view = K.function ([input_B_warped64], [B_rec64]) - - input_A_warped64 = Input(img_shape64) - input_A_target256 = Input(img_shape256) - A_rec256 = self.decoder256( self.encoder256(input_A_warped64) ) - - input_B_warped64 = Input(img_shape64) - BA_rec64 = self.decoder64_src( self.encoder64(input_B_warped64) ) - BA_rec256 = self.decoder256( self.encoder256(BA_rec64) ) - - self.ae256 = Model([input_A_warped64], [A_rec256] ) - - if self.is_training_mode: - self.ae256, = self.to_multi_gpu_model_if_possible ( [self.ae256,] ) - - self.ae256.compile(optimizer=Adam(lr=5e-5, beta_1=0.5, beta_2=0.999), - loss=[DSSIMLoss()]) - - self.A256_view = K.function ([input_A_warped64], [A_rec256]) - self.BA256_view = K.function ([input_B_warped64], [BA_rec256]) - - if self.is_training_mode: - f = SampleProcessor.TypeFlags - self.set_training_data_generators ([ - SampleGeneratorFace(self.training_data_src_path, debug=self.is_debug(), batch_size=self.batch_size, output_sample_types=[ - [f.WARPED_TRANSFORMED | f.FACE_ALIGN_HALF | f.MODE_BGR, 64], - [f.TRANSFORMED | f.FACE_ALIGN_HALF | f.MODE_BGR, 64], - [f.TRANSFORMED | f.FACE_ALIGN_FULL | f.MODE_BGR, 256], - [f.SOURCE | f.FACE_ALIGN_HALF | f.MODE_BGR, 64], - [f.SOURCE | f.FACE_ALIGN_HALF | f.MODE_BGR, 256] ] ), - - SampleGeneratorFace(self.training_data_dst_path, debug=self.is_debug(), batch_size=self.batch_size, output_sample_types=[ - [f.WARPED_TRANSFORMED | f.FACE_ALIGN_HALF | f.MODE_BGR, 64], - [f.TRANSFORMED | f.FACE_ALIGN_HALF | f.MODE_BGR, 64], - [f.SOURCE | f.FACE_ALIGN_HALF | f.MODE_BGR, 64], - [f.SOURCE | f.FACE_ALIGN_HALF | f.MODE_BGR, 256] ] ) - ]) - #override - def onSave(self): - self.save_weights_safe( [[self.encoder64, self.get_strpath_storage_for_file(self.encoder64H5)], - [self.decoder64_src, self.get_strpath_storage_for_file(self.decoder64_srcH5)], - [self.decoder64_dst, self.get_strpath_storage_for_file(self.decoder64_dstH5)], - [self.encoder256, self.get_strpath_storage_for_file(self.encoder256H5)], - [self.decoder256, self.get_strpath_storage_for_file(self.decoder256H5)], - ] ) - - #override - def onTrainOneEpoch(self, sample): - warped_src64, target_src64, target_src256, target_src_source64, target_src_source256 = sample[0] - warped_dst64, target_dst64, target_dst_source64, target_dst_source256 = sample[1] - - loss64, loss_src64, loss_dst64 = self.ae64.train_on_batch ([warped_src64, warped_dst64], [target_src64, target_dst64]) - - loss256 = self.ae256.train_on_batch ([warped_src64], [target_src256]) - - return ( ('loss64', loss64 ), ('loss256', loss256), ) - - #override - def onGetPreview(self, sample): - sample_src64_source = sample[0][3][0:4] - sample_src256_source = sample[0][4][0:4] - - sample_dst64_source = sample[1][2][0:4] - sample_dst256_source = sample[1][3][0:4] - - SRC64, = self.A64_view ([sample_src64_source]) - DST64, = self.B64_view ([sample_dst64_source]) - SRCDST64, = self.A64_view ([sample_dst64_source]) - DSTSRC64, = self.B64_view ([sample_src64_source]) - - SRC_x1_256, = self.A256_view ([sample_src64_source]) - DST_x2_256, = self.BA256_view ([sample_dst64_source]) - - b1 = np.concatenate ( ( - np.concatenate ( (sample_src64_source[0], SRC64[0], sample_src64_source[1], SRC64[1], ), axis=1), - np.concatenate ( (sample_src64_source[1], SRC64[1], sample_src64_source[3], SRC64[3], ), axis=1), - np.concatenate ( (sample_dst64_source[0], DST64[0], sample_dst64_source[1], DST64[1], ), axis=1), - np.concatenate ( (sample_dst64_source[2], DST64[2], sample_dst64_source[3], DST64[3], ), axis=1), - ), axis=0 ) - - b2 = np.concatenate ( ( - np.concatenate ( (sample_src64_source[0], DSTSRC64[0], sample_src64_source[1], DSTSRC64[1], ), axis=1), - np.concatenate ( (sample_src64_source[2], DSTSRC64[2], sample_src64_source[3], DSTSRC64[3], ), axis=1), - np.concatenate ( (sample_dst64_source[0], SRCDST64[0], sample_dst64_source[1], SRCDST64[1], ), axis=1), - np.concatenate ( (sample_dst64_source[2], SRCDST64[2], sample_dst64_source[3], SRCDST64[3], ), axis=1), - - ), axis=0 ) - - result = np.concatenate ( ( np.concatenate ( (b1, sample_src256_source[0], SRC_x1_256[0] ), axis=1 ), - np.concatenate ( (b2, sample_dst256_source[0], DST_x2_256[0] ), axis=1 ), - ), axis = 0 ) - - return [ ('AVATAR', result ) ] - - def predictor_func (self, img): - x, = self.BA256_view ([ np.expand_dims(img, 0) ])[0] - return x - - #override - def get_converter(self, **in_options): - return ConverterAvatar(self.predictor_func, predictor_input_size=64, output_size=256, **in_options) - - def Build(self): - exec(nnlib.code_import_all, locals(), globals()) - - img_shape64 = (64,64,3) - img_shape256 = (256,256,3) - - def upscale (dim): - def func(x): - return PixelShuffler()(LeakyReLU(0.1)(Conv2D(dim * 4, 3, strides=1, padding='same')(x))) - return func - - def Encoder(_input): - x = _input - x = Conv2D(90, kernel_size=5, strides=1, padding='same')(x) - x = Conv2D(90, kernel_size=5, strides=1, padding='same')(x) - x = MaxPooling2D(pool_size=(3, 3), strides=2, padding='same')(x) - - x = Conv2D(180, kernel_size=3, strides=1, padding='same')(x) - x = Conv2D(180, kernel_size=3, strides=1, padding='same')(x) - x = MaxPooling2D(pool_size=(3, 3), strides=2, padding='same')(x) - - x = Conv2D(360, kernel_size=3, strides=1, padding='same')(x) - x = Conv2D(360, kernel_size=3, strides=1, padding='same')(x) - x = MaxPooling2D(pool_size=(3, 3), strides=2, padding='same')(x) - - x = Dense (1024)(x) - x = LeakyReLU(0.1)(x) - x = Dropout(0.5)(x) - - x = Dense (1024)(x) - x = LeakyReLU(0.1)(x) - x = Dropout(0.5)(x) - x = Flatten()(x) - x = Dense (64)(x) - - return keras.models.Model (_input, x) - - encoder256 = Encoder( Input (img_shape64) ) - encoder64 = Encoder( Input (img_shape64) ) - - def decoder256(encoder): - decoder_input = Input ( K.int_shape(encoder.outputs[0])[1:] ) - x = decoder_input - x = Dense(16 * 16 * 720)(x) - x = Reshape ( (16, 16, 720) )(x) - x = upscale(720)(x) - x = upscale(360)(x) - x = upscale(180)(x) - x = upscale(90)(x) - x = Conv2D(3, kernel_size=5, padding='same', activation='sigmoid')(x) - return keras.models.Model(decoder_input, x) - - def decoder64(encoder): - decoder_input = Input ( K.int_shape(encoder.outputs[0])[1:] ) - x = decoder_input - x = Dense(8 * 8 * 720)(x) - x = Reshape ( (8, 8, 720) )(x) - x = upscale(360)(x) - x = upscale(180)(x) - x = upscale(90)(x) - x = Conv2D(3, kernel_size=5, padding='same', activation='sigmoid')(x) - return Model(decoder_input, x) - - return img_shape64, img_shape256, encoder64, decoder64(encoder64), decoder64(encoder64), encoder256, decoder256(encoder256) - -from models import ConverterBase -from facelib import FaceType -from facelib import LandmarksProcessor -class ConverterAvatar(ConverterBase): - - #override - def __init__(self, predictor, - predictor_input_size=0, - output_size=0, - **in_options): - - super().__init__(predictor) - - self.predictor_input_size = predictor_input_size - self.output_size = output_size - - #override - def get_mode(self): - return ConverterBase.MODE_IMAGE_WITH_LANDMARKS - - #override - def dummy_predict(self): - self.predictor ( np.zeros ( (self.predictor_input_size, self.predictor_input_size,3), dtype=np.float32) ) - - #override - def convert_image (self, img_bgr, img_face_landmarks, debug): - img_size = img_bgr.shape[1], img_bgr.shape[0] - - face_mat = LandmarksProcessor.get_transform_mat (img_face_landmarks, self.predictor_input_size, face_type=FaceType.HALF ) - predictor_input_bgr = cv2.warpAffine( img_bgr, face_mat, (self.predictor_input_size, self.predictor_input_size), flags=cv2.INTER_LANCZOS4 ) - - predicted_bgr = self.predictor ( predictor_input_bgr ) - - output = cv2.resize ( predicted_bgr, (self.output_size, self.output_size), cv2.INTER_LANCZOS4 ) - if debug: - return (img_bgr,output,) - return output \ No newline at end of file diff --git a/models/Model_DF/Model.py b/models/Model_DF/Model.py index 8205318..1e2dcf7 100644 --- a/models/Model_DF/Model.py +++ b/models/Model_DF/Model.py @@ -38,7 +38,8 @@ class Model(ModelBase): if self.is_training_mode: f = SampleProcessor.TypeFlags self.set_training_data_generators ([ - SampleGeneratorFace(self.training_data_src_path, debug=self.is_debug(), batch_size=self.batch_size, + SampleGeneratorFace(self.training_data_src_path, sort_by_yaw_target_samples_path=self.training_data_dst_path if self.sort_by_yaw else None, + debug=self.is_debug(), batch_size=self.batch_size, output_sample_types=[ [f.WARPED_TRANSFORMED | f.FACE_ALIGN_FULL | f.MODE_BGR, 128], [f.TRANSFORMED | f.FACE_ALIGN_FULL | f.MODE_BGR, 128], [f.TRANSFORMED | f.FACE_ALIGN_FULL | f.MODE_M | f.FACE_MASK_FULL, 128] ] ), @@ -107,16 +108,14 @@ class Model(ModelBase): #override def get_converter(self, **in_options): - from models import ConverterMasked - - if 'erode_mask_modifier' not in in_options.keys(): - in_options['erode_mask_modifier'] = 0 - in_options['erode_mask_modifier'] += 30 - - if 'blur_mask_modifier' not in in_options.keys(): - in_options['blur_mask_modifier'] = 0 - - return ConverterMasked(self.predictor_func, predictor_input_size=128, output_size=128, face_type=FaceType.FULL, clip_border_mask_per=0.046875, **in_options) + from models import ConverterMasked + return ConverterMasked(self.predictor_func, + predictor_input_size=128, + output_size=128, + face_type=FaceType.FULL, + base_erode_mask_modifier=30, + base_blur_mask_modifier=100, + **in_options) def Build(self, input_layer): exec(nnlib.code_import_all, locals(), globals()) diff --git a/models/Model_H128/Model.py b/models/Model_H128/Model.py index 805f8ea..48ffda3 100644 --- a/models/Model_H128/Model.py +++ b/models/Model_H128/Model.py @@ -44,7 +44,8 @@ class Model(ModelBase): if self.is_training_mode: f = SampleProcessor.TypeFlags self.set_training_data_generators ([ - SampleGeneratorFace(self.training_data_src_path, debug=self.is_debug(), batch_size=self.batch_size, + SampleGeneratorFace(self.training_data_src_path, sort_by_yaw_target_samples_path=self.training_data_dst_path if self.sort_by_yaw else None, + debug=self.is_debug(), batch_size=self.batch_size, output_sample_types=[ [f.WARPED_TRANSFORMED | f.FACE_ALIGN_HALF | f.MODE_BGR, 128], [f.TRANSFORMED | f.FACE_ALIGN_HALF | f.MODE_BGR, 128], [f.TRANSFORMED | f.FACE_ALIGN_HALF | f.MODE_M | f.FACE_MASK_FULL, 128] ] ), @@ -112,16 +113,13 @@ class Model(ModelBase): #override def get_converter(self, **in_options): from models import ConverterMasked - - if 'erode_mask_modifier' not in in_options.keys(): - in_options['erode_mask_modifier'] = 0 - in_options['erode_mask_modifier'] += 100 - - if 'blur_mask_modifier' not in in_options.keys(): - in_options['blur_mask_modifier'] = 0 - in_options['blur_mask_modifier'] += 100 - - return ConverterMasked(self.predictor_func, predictor_input_size=128, output_size=128, face_type=FaceType.HALF, **in_options) + return ConverterMasked(self.predictor_func, + predictor_input_size=128, + output_size=128, + face_type=FaceType.HALF, + base_erode_mask_modifier=100, + base_blur_mask_modifier=100, + **in_options) def Build(self, created_vram_gb): exec(nnlib.code_import_all, locals(), globals()) diff --git a/models/Model_H64/Model.py b/models/Model_H64/Model.py index 4dce4ff..c30c92a 100644 --- a/models/Model_H64/Model.py +++ b/models/Model_H64/Model.py @@ -4,6 +4,7 @@ from nnlib import nnlib from models import ModelBase from facelib import FaceType from samples import * +from utils.console_utils import * class Model(ModelBase): @@ -44,7 +45,8 @@ class Model(ModelBase): if self.is_training_mode: f = SampleProcessor.TypeFlags self.set_training_data_generators ([ - SampleGeneratorFace(self.training_data_src_path, debug=self.is_debug(), batch_size=self.batch_size, + SampleGeneratorFace(self.training_data_src_path, sort_by_yaw_target_samples_path=self.training_data_dst_path if self.sort_by_yaw else None, + debug=self.is_debug(), batch_size=self.batch_size, output_sample_types=[ [f.WARPED_TRANSFORMED | f.FACE_ALIGN_HALF | f.MODE_BGR, 64], [f.TRANSFORMED | f.FACE_ALIGN_HALF | f.MODE_BGR, 64], [f.TRANSFORMED | f.FACE_ALIGN_HALF | f.MODE_M | f.FACE_MASK_FULL, 64] ] ), @@ -66,7 +68,6 @@ class Model(ModelBase): warped_src, target_src, target_src_full_mask = sample[0] warped_dst, target_dst, target_dst_full_mask = sample[1] - total, loss_src_bgr, loss_src_mask, loss_dst_bgr, loss_dst_mask = self.ae.train_on_batch( [warped_src, target_src_full_mask, warped_dst, target_dst_full_mask], [target_src, target_src_full_mask, target_dst, target_dst_full_mask] ) return ( ('loss_src', loss_src_bgr), ('loss_dst', loss_dst_bgr) ) @@ -114,16 +115,13 @@ class Model(ModelBase): #override def get_converter(self, **in_options): from models import ConverterMasked - - if 'erode_mask_modifier' not in in_options.keys(): - in_options['erode_mask_modifier'] = 0 - in_options['erode_mask_modifier'] += 100 - - if 'blur_mask_modifier' not in in_options.keys(): - in_options['blur_mask_modifier'] = 0 - in_options['blur_mask_modifier'] += 100 - - return ConverterMasked(self.predictor_func, predictor_input_size=64, output_size=64, face_type=FaceType.HALF, **in_options) + return ConverterMasked(self.predictor_func, + predictor_input_size=64, + output_size=64, + face_type=FaceType.HALF, + base_erode_mask_modifier=100, + base_blur_mask_modifier=100, + **in_options) def Build(self, created_vram_gb): exec(nnlib.code_import_all, locals(), globals()) diff --git a/models/Model_LIAEF128/Model.py b/models/Model_LIAEF128/Model.py index b269bd8..f5e8145 100644 --- a/models/Model_LIAEF128/Model.py +++ b/models/Model_LIAEF128/Model.py @@ -42,8 +42,11 @@ class Model(ModelBase): if self.is_training_mode: f = SampleProcessor.TypeFlags - self.set_training_data_generators ([ - SampleGeneratorFace(self.training_data_src_path, debug=self.is_debug(), batch_size=self.batch_size, + self.set_training_data_generators ([ + + + SampleGeneratorFace(self.training_data_src_path, sort_by_yaw_target_samples_path=self.training_data_dst_path if self.sort_by_yaw else None, + debug=self.is_debug(), batch_size=self.batch_size, output_sample_types=[ [f.WARPED_TRANSFORMED | f.FACE_ALIGN_FULL | f.MODE_BGR, 128], [f.TRANSFORMED | f.FACE_ALIGN_FULL | f.MODE_BGR, 128], [f.TRANSFORMED | f.FACE_ALIGN_FULL | f.MODE_M | f.FACE_MASK_FULL, 128] ] ), @@ -115,15 +118,13 @@ class Model(ModelBase): #override def get_converter(self, **in_options): from models import ConverterMasked - - if 'erode_mask_modifier' not in in_options.keys(): - in_options['erode_mask_modifier'] = 0 - in_options['erode_mask_modifier'] += 30 - - if 'blur_mask_modifier' not in in_options.keys(): - in_options['blur_mask_modifier'] = 0 - - return ConverterMasked(self.predictor_func, predictor_input_size=128, output_size=128, face_type=FaceType.FULL, clip_border_mask_per=0.046875, **in_options) + return ConverterMasked(self.predictor_func, + predictor_input_size=128, + output_size=128, + face_type=FaceType.FULL, + base_erode_mask_modifier=30, + base_blur_mask_modifier=0, + **in_options) def Build(self, input_layer): exec(nnlib.code_import_all, locals(), globals()) diff --git a/models/Model_LIAEF128YAW/Model.py b/models/Model_LIAEF128YAW/Model.py deleted file mode 100644 index defc42c..0000000 --- a/models/Model_LIAEF128YAW/Model.py +++ /dev/null @@ -1,175 +0,0 @@ -import numpy as np - -from nnlib import nnlib -from models import ModelBase -from facelib import FaceType -from samples import * - -class Model(ModelBase): - - encoderH5 = 'encoder.h5' - decoderH5 = 'decoder.h5' - inter_BH5 = 'inter_B.h5' - inter_ABH5 = 'inter_AB.h5' - - #override - def onInitialize(self, **in_options): - exec(nnlib.import_all(), locals(), globals()) - self.set_vram_batch_requirements( {4.5:4,5:4,6:8,7:12,8:16,9:20,10:24,11:24,12:32,13:48} ) - - ae_input_layer = Input(shape=(128, 128, 3)) - mask_layer = Input(shape=(128, 128, 1)) #same as output - - self.encoder, self.decoder, self.inter_B, self.inter_AB = self.Build(ae_input_layer) - - if not self.is_first_run(): - self.encoder.load_weights (self.get_strpath_storage_for_file(self.encoderH5)) - self.decoder.load_weights (self.get_strpath_storage_for_file(self.decoderH5)) - self.inter_B.load_weights (self.get_strpath_storage_for_file(self.inter_BH5)) - self.inter_AB.load_weights (self.get_strpath_storage_for_file(self.inter_ABH5)) - - code = self.encoder(ae_input_layer) - AB = self.inter_AB(code) - B = self.inter_B(code) - self.autoencoder_src = Model([ae_input_layer,mask_layer], self.decoder(Concatenate()([AB, AB])) ) - self.autoencoder_dst = Model([ae_input_layer,mask_layer], self.decoder(Concatenate()([B, AB])) ) - - if self.is_training_mode: - self.autoencoder_src, self.autoencoder_dst = self.to_multi_gpu_model_if_possible ( [self.autoencoder_src, self.autoencoder_dst] ) - - self.autoencoder_src.compile(optimizer=Adam(lr=5e-5, beta_1=0.5, beta_2=0.999), loss=[DSSIMMaskLoss([mask_layer]), 'mse'] ) - self.autoencoder_dst.compile(optimizer=Adam(lr=5e-5, beta_1=0.5, beta_2=0.999), loss=[DSSIMMaskLoss([mask_layer]), 'mse'] ) - - if self.is_training_mode: - f = SampleProcessor.TypeFlags - self.set_training_data_generators ([ - SampleGeneratorFace(self.training_data_src_path, sort_by_yaw_target_samples_path=self.training_data_dst_path, debug=self.is_debug(), batch_size=self.batch_size, - output_sample_types=[ [f.WARPED_TRANSFORMED | f.FACE_ALIGN_FULL | f.MODE_BGR, 128], - [f.TRANSFORMED | f.FACE_ALIGN_FULL | f.MODE_BGR, 128], - [f.TRANSFORMED | f.FACE_ALIGN_FULL | f.MODE_M | f.FACE_MASK_FULL, 128] ] ), - - SampleGeneratorFace(self.training_data_dst_path, debug=self.is_debug(), batch_size=self.batch_size, - output_sample_types=[ [f.WARPED_TRANSFORMED | f.FACE_ALIGN_FULL | f.MODE_BGR, 128], - [f.TRANSFORMED | f.FACE_ALIGN_FULL | f.MODE_BGR, 128], - [f.TRANSFORMED | f.FACE_ALIGN_FULL | f.MODE_M | f.FACE_MASK_FULL, 128] ] ) - ]) - - #override - def onSave(self): - self.save_weights_safe( [[self.encoder, self.get_strpath_storage_for_file(self.encoderH5)], - [self.decoder, self.get_strpath_storage_for_file(self.decoderH5)], - [self.inter_B, self.get_strpath_storage_for_file(self.inter_BH5)], - [self.inter_AB, self.get_strpath_storage_for_file(self.inter_ABH5)]] ) - - #override - def onTrainOneEpoch(self, sample): - warped_src, target_src, target_src_mask = sample[0] - warped_dst, target_dst, target_dst_mask = sample[1] - - loss_src = self.autoencoder_src.train_on_batch( [warped_src, target_src_mask], [target_src, target_src_mask] ) - loss_dst = self.autoencoder_dst.train_on_batch( [warped_dst, target_dst_mask], [target_dst, target_dst_mask] ) - - return ( ('loss_src', loss_src[0]), ('loss_dst', loss_dst[0]) ) - - - #override - def onGetPreview(self, sample): - test_A = sample[0][1][0:4] #first 4 samples - test_A_m = sample[0][2][0:4] #first 4 samples - test_B = sample[1][1][0:4] - test_B_m = sample[1][2][0:4] - - AA, mAA = self.autoencoder_src.predict([test_A, test_A_m]) - AB, mAB = self.autoencoder_src.predict([test_B, test_B_m]) - BB, mBB = self.autoencoder_dst.predict([test_B, test_B_m]) - - mAA = np.repeat ( mAA, (3,), -1) - mAB = np.repeat ( mAB, (3,), -1) - mBB = np.repeat ( mBB, (3,), -1) - - st = [] - for i in range(0, len(test_A)): - st.append ( np.concatenate ( ( - test_A[i,:,:,0:3], - AA[i], - #mAA[i], - test_B[i,:,:,0:3], - BB[i], - #mBB[i], - AB[i], - #mAB[i] - ), axis=1) ) - - return [ ('LIAEF128YAW', np.concatenate ( st, axis=0 ) ) ] - - def predictor_func (self, face): - - face_128_bgr = face[...,0:3] - face_128_mask = np.expand_dims(face[...,3],-1) - - x, mx = self.autoencoder_src.predict ( [ np.expand_dims(face_128_bgr,0), np.expand_dims(face_128_mask,0) ] ) - x, mx = x[0], mx[0] - - return np.concatenate ( (x,mx), -1 ) - - #override - def get_converter(self, **in_options): - from models import ConverterMasked - - if 'erode_mask_modifier' not in in_options.keys(): - in_options['erode_mask_modifier'] = 0 - in_options['erode_mask_modifier'] += 30 - - if 'blur_mask_modifier' not in in_options.keys(): - in_options['blur_mask_modifier'] = 0 - - return ConverterMasked(self.predictor_func, predictor_input_size=128, output_size=128, face_type=FaceType.FULL, clip_border_mask_per=0.046875, **in_options) - - def Build(self, input_layer): - exec(nnlib.code_import_all, locals(), globals()) - - def downscale (dim): - def func(x): - return LeakyReLU(0.1)(Conv2D(dim, 5, strides=2, padding='same')(x)) - return func - - def upscale (dim): - def func(x): - return PixelShuffler()(LeakyReLU(0.1)(Conv2D(dim * 4, 3, strides=1, padding='same')(x))) - return func - - def Encoder(): - x = input_layer - x = downscale(128)(x) - x = downscale(256)(x) - x = downscale(512)(x) - x = downscale(1024)(x) - x = Flatten()(x) - return Model(input_layer, x) - - def Intermediate(): - input_layer = Input(shape=(None, 8 * 8 * 1024)) - x = input_layer - x = Dense(256)(x) - x = Dense(8 * 8 * 512)(x) - x = Reshape((8, 8, 512))(x) - x = upscale(512)(x) - return Model(input_layer, x) - - def Decoder(): - input_ = Input(shape=(16, 16, 1024)) - x = input_ - x = upscale(512)(x) - x = upscale(256)(x) - x = upscale(128)(x) - x = Conv2D(3, kernel_size=5, padding='same', activation='sigmoid')(x) - - y = input_ #mask decoder - y = upscale(512)(y) - y = upscale(256)(y) - y = upscale(128)(y) - y = Conv2D(1, kernel_size=5, padding='same', activation='sigmoid' )(y) - - return Model(input_, [x,y]) - - return Encoder(), Decoder(), Intermediate(), Intermediate() diff --git a/models/Model_LIAEF128YAW/__init__.py b/models/Model_LIAEF128YAW/__init__.py deleted file mode 100644 index cdb3fe7..0000000 --- a/models/Model_LIAEF128YAW/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from .Model import Model \ No newline at end of file diff --git a/models/Model_MIAEF128/Model.py b/models/Model_MIAEF128/Model.py deleted file mode 100644 index d348fbf..0000000 --- a/models/Model_MIAEF128/Model.py +++ /dev/null @@ -1,225 +0,0 @@ -import numpy as np - -from nnlib import nnlib -from models import ModelBase -from facelib import FaceType -from samples import * - -class Model(ModelBase): - - encoderH5 = 'encoder.h5' - decoderMaskH5 = 'decoderMask.h5' - decoderCommonAH5 = 'decoderCommonA.h5' - decoderCommonBH5 = 'decoderCommonB.h5' - decoderRGBH5 = 'decoderRGB.h5' - decoderBWH5 = 'decoderBW.h5' - inter_BH5 = 'inter_B.h5' - inter_AH5 = 'inter_A.h5' - - #override - def onInitialize(self, **in_options): - exec(nnlib.import_all(), locals(), globals()) - self.set_vram_batch_requirements( {4.5:4,5:4,6:8,7:12,8:16,9:20,10:24,11:24,12:32,13:48} ) - - ae_input_layer = Input(shape=(128, 128, 3)) - mask_layer = Input(shape=(128, 128, 1)) #same as output - - self.encoder, self.decoderMask, self.decoderCommonA, self.decoderCommonB, self.decoderRGB, \ - self.decoderBW, self.inter_A, self.inter_B = self.Build(ae_input_layer) - - if not self.is_first_run(): - self.encoder.load_weights (self.get_strpath_storage_for_file(self.encoderH5)) - self.decoderMask.load_weights (self.get_strpath_storage_for_file(self.decoderMaskH5)) - self.decoderCommonA.load_weights (self.get_strpath_storage_for_file(self.decoderCommonAH5)) - self.decoderCommonB.load_weights (self.get_strpath_storage_for_file(self.decoderCommonBH5)) - self.decoderRGB.load_weights (self.get_strpath_storage_for_file(self.decoderRGBH5)) - self.decoderBW.load_weights (self.get_strpath_storage_for_file(self.decoderBWH5)) - self.inter_A.load_weights (self.get_strpath_storage_for_file(self.inter_AH5)) - self.inter_B.load_weights (self.get_strpath_storage_for_file(self.inter_BH5)) - - code = self.encoder(ae_input_layer) - A = self.inter_A(code) - B = self.inter_B(code) - - inter_A_A = Concatenate()([A, A]) - inter_B_A = Concatenate()([B, A]) - - x1,m1 = self.decoderCommonA (inter_A_A) - x2,m2 = self.decoderCommonA (inter_A_A) - self.autoencoder_src = Model([ae_input_layer,mask_layer], - [ self.decoderBW (Concatenate()([x1,x2]) ), - self.decoderMask(Concatenate()([m1,m2]) ) - ]) - - x1,m1 = self.decoderCommonA (inter_A_A) - x2,m2 = self.decoderCommonB (inter_A_A) - self.autoencoder_src_RGB = Model([ae_input_layer,mask_layer], - [ self.decoderRGB (Concatenate()([x1,x2]) ), - self.decoderMask (Concatenate()([m1,m2]) ) - ]) - - x1,m1 = self.decoderCommonA (inter_B_A) - x2,m2 = self.decoderCommonB (inter_B_A) - self.autoencoder_dst = Model([ae_input_layer,mask_layer], - [ self.decoderRGB (Concatenate()([x1,x2]) ), - self.decoderMask (Concatenate()([m1,m2]) ) - ]) - - if self.is_training_mode: - self.autoencoder_src, self.autoencoder_dst = self.to_multi_gpu_model_if_possible ( [self.autoencoder_src, self.autoencoder_dst] ) - - self.autoencoder_src.compile(optimizer=Adam(lr=5e-5, beta_1=0.5, beta_2=0.999), loss=[DSSIMMaskLoss([mask_layer]), 'mse'] ) - self.autoencoder_dst.compile(optimizer=Adam(lr=5e-5, beta_1=0.5, beta_2=0.999), loss=[DSSIMMaskLoss([mask_layer]), 'mse'] ) - - if self.is_training_mode: - f = SampleProcessor.TypeFlags - self.set_training_data_generators ([ - SampleGeneratorFace(self.training_data_src_path, debug=self.is_debug(), batch_size=self.batch_size, - output_sample_types=[ [f.WARPED_TRANSFORMED | f.FACE_ALIGN_FULL | f.MODE_GGG, 128], - [f.TRANSFORMED | f.FACE_ALIGN_FULL | f.MODE_G , 128], - [f.TRANSFORMED | f.FACE_ALIGN_FULL | f.MODE_M | f.FACE_MASK_FULL, 128], - [f.TRANSFORMED | f.FACE_ALIGN_FULL | f.MODE_GGG, 128] ] ), - - SampleGeneratorFace(self.training_data_dst_path, debug=self.is_debug(), batch_size=self.batch_size, - output_sample_types=[ [f.WARPED_TRANSFORMED | f.FACE_ALIGN_FULL | f.MODE_BGR, 128], - [f.TRANSFORMED | f.FACE_ALIGN_FULL | f.MODE_BGR, 128], - [f.TRANSFORMED | f.FACE_ALIGN_FULL | f.MODE_M | f.FACE_MASK_FULL, 128]] ) - ]) - #override - def onSave(self): - self.save_weights_safe( [[self.encoder, self.get_strpath_storage_for_file(self.encoderH5)], - [self.decoderMask, self.get_strpath_storage_for_file(self.decoderMaskH5)], - [self.decoderCommonA, self.get_strpath_storage_for_file(self.decoderCommonAH5)], - [self.decoderCommonB, self.get_strpath_storage_for_file(self.decoderCommonBH5)], - [self.decoderRGB, self.get_strpath_storage_for_file(self.decoderRGBH5)], - [self.decoderBW, self.get_strpath_storage_for_file(self.decoderBWH5)], - [self.inter_A, self.get_strpath_storage_for_file(self.inter_AH5)], - [self.inter_B, self.get_strpath_storage_for_file(self.inter_BH5)]] ) - - - #override - def onTrainOneEpoch(self, sample): - warped_src, target_src, target_src_mask, target_src_GGG = sample[0] - warped_dst, target_dst, target_dst_mask = sample[1] - - loss_src = self.autoencoder_src.train_on_batch( [ warped_src, target_src_mask], [ target_src, target_src_mask] ) - loss_dst = self.autoencoder_dst.train_on_batch( [ warped_dst, target_dst_mask], [ target_dst, target_dst_mask] ) - - return ( ('loss_src', loss_src[0]), ('loss_dst', loss_dst[0]) ) - - #override - def onGetPreview(self, sample): - test_A = sample[0][3][0:4] #first 4 samples - test_A_m = sample[0][2][0:4] #first 4 samples - test_B = sample[1][1][0:4] - test_B_m = sample[1][2][0:4] - - AA, mAA = self.autoencoder_src.predict([test_A, test_A_m]) - AB, mAB = self.autoencoder_src_RGB.predict([test_B, test_B_m]) - BB, mBB = self.autoencoder_dst.predict([test_B, test_B_m]) - - mAA = np.repeat ( mAA, (3,), -1) - mAB = np.repeat ( mAB, (3,), -1) - mBB = np.repeat ( mBB, (3,), -1) - - st = [] - for i in range(0, len(test_A)): - st.append ( np.concatenate ( ( - np.repeat (np.expand_dims (test_A[i,:,:,0],-1), (3,), -1) , - np.repeat (AA[i], (3,), -1), - #mAA[i], - test_B[i,:,:,0:3], - BB[i], - #mBB[i], - AB[i], - #mAB[i] - ), axis=1) ) - - return [ ('MIAEF128', np.concatenate ( st, axis=0 ) ) ] - - def predictor_func (self, face): - face_128_bgr = face[...,0:3] - face_128_mask = np.expand_dims(face[...,-1],-1) - - x, mx = self.autoencoder_src_RGB.predict ( [ np.expand_dims(face_128_bgr,0), np.expand_dims(face_128_mask,0) ] ) - x, mx = x[0], mx[0] - - return np.concatenate ( (x,mx), -1 ) - - #override - def get_converter(self, **in_options): - from models import ConverterMasked - - if 'erode_mask_modifier' not in in_options.keys(): - in_options['erode_mask_modifier'] = 0 - in_options['erode_mask_modifier'] += 30 - - if 'blur_mask_modifier' not in in_options.keys(): - in_options['blur_mask_modifier'] = 0 - - return ConverterMasked(self.predictor_func, predictor_input_size=128, output_size=128, face_type=FaceType.FULL, clip_border_mask_per=0.046875, **in_options) - - def Build(self, input_layer): - exec(nnlib.code_import_all, locals(), globals()) - - def downscale (dim): - def func(x): - return LeakyReLU(0.1)(Conv2D(dim, 5, strides=2, padding='same')(x)) - return func - - def upscale (dim): - def func(x): - return PixelShuffler()(LeakyReLU(0.1)(Conv2D(dim * 4, 3, strides=1, padding='same')(x))) - return func - - def Encoder(): - x = input_layer - x = downscale(128)(x) - x = downscale(256)(x) - x = downscale(512)(x) - x = downscale(1024)(x) - x = Flatten()(x) - return Model(input_layer, x) - - def Intermediate(): - input_layer = Input(shape=(None, 8 * 8 * 1024)) - x = input_layer - x = Dense(256)(x) - x = Dense(8 * 8 * 512)(x) - x = Reshape((8, 8, 512))(x) - x = upscale(512)(x) - return Model(input_layer, x) - - def DecoderCommon(): - input_ = Input(shape=(16, 16, 1024)) - x = input_ - x = upscale(512)(x) - x = upscale(256)(x) - x = upscale(128)(x) - - y = input_ - y = upscale(256)(y) - y = upscale(128)(y) - y = upscale(64)(y) - - return Model(input_, [x,y]) - - def DecoderRGB(): - input_ = Input(shape=(128, 128, 256)) - x = input_ - x = Conv2D(3, kernel_size=5, padding='same', activation='sigmoid')(x) - return Model(input_, [x]) - - def DecoderBW(): - input_ = Input(shape=(128, 128, 256)) - x = input_ - x = Conv2D(1, kernel_size=5, padding='same', activation='sigmoid')(x) - return Model(input_, [x]) - - def DecoderMask(): - input_ = Input(shape=(128, 128, 128)) - y = input_ - y = Conv2D(1, kernel_size=5, padding='same', activation='sigmoid')(y) - return Model(input_, [y]) - - return Encoder(), DecoderMask(), DecoderCommon(), DecoderCommon(), DecoderRGB(), DecoderBW(), Intermediate(), Intermediate() \ No newline at end of file diff --git a/models/Model_MIAEF128/__init__.py b/models/Model_MIAEF128/__init__.py deleted file mode 100644 index cdb3fe7..0000000 --- a/models/Model_MIAEF128/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from .Model import Model \ No newline at end of file diff --git a/models/Model_RecycleGAN/Model.py b/models/Model_RecycleGAN/Model.py index f0d1856..f8748f5 100644 --- a/models/Model_RecycleGAN/Model.py +++ b/models/Model_RecycleGAN/Model.py @@ -25,7 +25,7 @@ class Model(ModelBase): if self.epoch == 0: #first run - print ("\nModel first run. Enter options.") + try: created_resolution = int ( input ("Resolution (default:64, valid: 64,128,256) : ") ) @@ -68,9 +68,9 @@ class Model(ModelBase): self.set_batch_size(created_batch_size) - use_batch_norm = created_batch_size > 1 - self.GA = modelify(ResNet (bgr_shape[2], use_batch_norm, n_blocks=6, ngf=ngf, use_dropout=False))(Input(bgr_shape)) - self.GB = modelify(ResNet (bgr_shape[2], use_batch_norm, n_blocks=6, ngf=ngf, use_dropout=False))(Input(bgr_shape)) + use_batch_norm = False #created_batch_size > 1 + self.GA = modelify(ResNet (bgr_shape[2], use_batch_norm, n_blocks=6, ngf=ngf, use_dropout=True))(Input(bgr_shape)) + self.GB = modelify(ResNet (bgr_shape[2], use_batch_norm, n_blocks=6, ngf=ngf, use_dropout=True))(Input(bgr_shape)) #self.GA = modelify(UNet (bgr_shape[2], use_batch_norm, num_downs=get_power_of_two(resolution)-1, ngf=ngf, use_dropout=True))(Input(bgr_shape)) #self.GB = modelify(UNet (bgr_shape[2], use_batch_norm, num_downs=get_power_of_two(resolution)-1, ngf=ngf, use_dropout=True))(Input(bgr_shape)) @@ -211,7 +211,7 @@ class Model(ModelBase): loss_G, = self.G_train ( feed ) loss_DA, = self.DA_train( feed ) loss_DB, = self.DB_train( feed ) - + #return ( ('G', loss_G), ) return ( ('G', loss_G), ('DA', loss_DA), ('DB', loss_DB) ) #override @@ -242,7 +242,9 @@ class Model(ModelBase): #override def get_converter(self, **in_options): - from models import ConverterImage - - return ConverterImage(self.predictor_func, predictor_input_size=self.options['created_resolution'], output_size=self.options['created_resolution'], **in_options) + from models import ConverterImage + return ConverterImage(self.predictor_func, + predictor_input_size=self.options['created_resolution'], + output_size=self.options['created_resolution'], + **in_options) diff --git a/models/Model_UFM/Model.py b/models/Model_UFM/Model.py new file mode 100644 index 0000000..323d675 --- /dev/null +++ b/models/Model_UFM/Model.py @@ -0,0 +1,298 @@ +import numpy as np + +from nnlib import nnlib +from models import ModelBase +from facelib import FaceType +from samples import * +from utils.console_utils import * + +#U-net Face Morpher +class UFMModel(ModelBase): + + encoderH5 = 'encoder.h5' + decoder_srcH5 = 'decoder_src.h5' + decoder_dstH5 = 'decoder_dst.h5' + decoder_srcmH5 = 'decoder_srcm.h5' + decoder_dstmH5 = 'decoder_dstm.h5' + + #override + def onInitializeOptions(self, is_first_run, ask_for_session_options): + default_resolution = 128 + default_filters = 64 + default_match_style = True + default_face_type = 'f' + + if is_first_run: + #first run + self.options['resolution'] = input_int("Resolution (valid: 64,128,256, skip:128) : ", default_resolution, [64,128,256]) + self.options['filters'] = np.clip ( input_int("Number of U-net filters (valid: 32-128, skip:64) : ", default_filters), 32, 128 ) + self.options['match_style'] = input_bool ("Match style? (y/n skip:y) : ", default_match_style) + self.options['face_type'] = input_str ("Half or Full face? (h/f, skip:f) : ", default_face_type, ['h','f']) + + else: + #not first run + self.options['resolution'] = self.options.get('resolution', default_resolution) + self.options['filters'] = self.options.get('filters', default_filters) + self.options['match_style'] = self.options.get('match_style', default_match_style) + self.options['face_type'] = self.options.get('face_type', default_face_type) + + #override + def onInitialize(self, **in_options): + exec(nnlib.import_all(), locals(), globals()) + + self.set_vram_batch_requirements({2:1,3:2,4:6,5:8,6:16,7:24,8:32}) + + resolution = self.options['resolution'] + bgr_shape = (resolution, resolution, 3) + mask_shape = (resolution, resolution, 1) + + filters = self.options['filters'] + + if resolution == 64: + lowest_dense = 512 + elif resolution == 128: + lowest_dense = 512 + elif resolution == 256: + lowest_dense = 256 + + self.encoder = modelify(UFMModel.EncFlow (ngf=filters, lowest_dense=lowest_dense)) (Input(bgr_shape)) + + dec_Inputs = [ Input(K.int_shape(x)[1:]) for x in self.encoder.outputs ] + + self.decoder_src = modelify(UFMModel.DecFlow (bgr_shape[2], ngf=filters)) (dec_Inputs) + self.decoder_dst = modelify(UFMModel.DecFlow (bgr_shape[2], ngf=filters)) (dec_Inputs) + + self.decoder_srcm = modelify(UFMModel.DecFlow (mask_shape[2], ngf=filters//2)) (dec_Inputs) + self.decoder_dstm = modelify(UFMModel.DecFlow (mask_shape[2], ngf=filters//2)) (dec_Inputs) + + if not self.is_first_run(): + self.encoder.load_weights (self.get_strpath_storage_for_file(self.encoderH5)) + self.decoder_src.load_weights (self.get_strpath_storage_for_file(self.decoder_srcH5)) + self.decoder_dst.load_weights (self.get_strpath_storage_for_file(self.decoder_dstH5)) + self.decoder_srcm.load_weights (self.get_strpath_storage_for_file(self.decoder_srcmH5)) + self.decoder_dstm.load_weights (self.get_strpath_storage_for_file(self.decoder_dstmH5)) + + warped_src = Input(bgr_shape) + target_src = Input(bgr_shape) + target_srcm = Input(mask_shape) + + warped_src_code = self.encoder (warped_src) + pred_src_src = self.decoder_src(warped_src_code) + pred_src_srcm = self.decoder_srcm(warped_src_code) + + warped_dst = Input(bgr_shape) + target_dst = Input(bgr_shape) + target_dstm = Input(mask_shape) + + warped_dst_code = self.encoder (warped_dst) + pred_dst_dst = self.decoder_dst(warped_dst_code) + pred_dst_dstm = self.decoder_dstm(warped_dst_code) + + pred_src_dst = self.decoder_src(warped_dst_code) + pred_src_dstm = self.decoder_srcm(warped_dst_code) + + target_srcm_blurred = tf_gaussian_blur(4.0)(target_srcm) + target_srcm_sigm = target_srcm_blurred / 2.0 + 0.5 + target_srcm_anti_sigm = 1.0 - target_srcm_sigm + + target_dstm_blurred = tf_gaussian_blur(4.0)(target_dstm) + target_dstm_sigm = target_dstm_blurred / 2.0 + 0.5 + target_dstm_anti_sigm = 1.0 - target_dstm_sigm + + target_src_sigm = target_src+1 + target_dst_sigm = target_dst+1 + + pred_src_src_sigm = pred_src_src+1 + pred_dst_dst_sigm = pred_dst_dst+1 + pred_src_dst_sigm = pred_src_dst+1 + + target_src_masked = target_src_sigm*target_srcm_sigm + + target_dst_masked = target_dst_sigm * target_dstm_sigm + target_dst_anti_masked = target_dst_sigm * target_dstm_anti_sigm + + pred_src_src_masked = pred_src_src_sigm * target_srcm_sigm + pred_dst_dst_masked = pred_dst_dst_sigm * target_dstm_sigm + + pred_src_dst_target_dst_masked = pred_src_dst_sigm * target_dstm_sigm + pred_src_dst_target_dst_anti_masked = pred_src_dst_sigm * target_dstm_anti_sigm + + + src_loss = K.mean( 100*K.square(tf_dssim(2.0)( target_src_masked, pred_src_src_masked )) ) + if self.options['match_style']: + src_loss += tf_style_loss(gaussian_blur_radius=resolution // 8, loss_weight=0.015)(pred_src_dst_target_dst_masked, target_dst_masked) + src_loss += 0.05 * K.mean( tf_dssim(2.0)( pred_src_dst_target_dst_anti_masked, target_dst_anti_masked )) + + self.src_train = K.function ([warped_src, target_src, target_srcm, warped_dst, target_dst, target_dstm ],[src_loss], + Adam(lr=5e-5, beta_1=0.5, beta_2=0.999).get_updates(src_loss, self.encoder.trainable_weights + self.decoder_src.trainable_weights) ) + + dst_loss = K.mean( 100*K.square(tf_dssim(2.0)( target_dst_masked, pred_dst_dst_masked )) ) + self.dst_train = K.function ([warped_dst, target_dst, target_dstm],[dst_loss], + Adam(lr=5e-5, beta_1=0.5, beta_2=0.999).get_updates(dst_loss, self.encoder.trainable_weights + self.decoder_dst.trainable_weights) ) + + + src_mask_loss = K.mean(K.square(target_srcm-pred_src_srcm)) + self.src_mask_train = K.function ([warped_src, target_srcm],[src_mask_loss], + Adam(lr=5e-5, beta_1=0.5, beta_2=0.999).get_updates(src_mask_loss, self.encoder.trainable_weights + self.decoder_srcm.trainable_weights) ) + + dst_mask_loss = K.mean(K.square(target_dstm-pred_dst_dstm)) + self.dst_mask_train = K.function ([warped_dst, target_dstm],[dst_mask_loss], + Adam(lr=5e-5, beta_1=0.5, beta_2=0.999).get_updates(dst_mask_loss, self.encoder.trainable_weights + self.decoder_dstm.trainable_weights) ) + + self.AE_view = K.function ([warped_src, warped_dst],[pred_src_src, pred_src_srcm, pred_dst_dst, pred_dst_dstm, pred_src_dst, pred_src_dstm]) + self.AE_convert = K.function ([warped_dst],[pred_src_dst, pred_src_dstm]) + + if self.is_training_mode: + f = SampleProcessor.TypeFlags + + face_type = f.FACE_ALIGN_FULL if self.options['face_type'] == 'f' else f.FACE_ALIGN_HALF + + self.set_training_data_generators ([ + SampleGeneratorFace(self.training_data_src_path, sort_by_yaw_target_samples_path=self.training_data_dst_path if self.sort_by_yaw else None, + debug=self.is_debug(), batch_size=self.batch_size, + sample_process_options=SampleProcessor.Options(normalize_tanh = True), + output_sample_types=[ [f.WARPED_TRANSFORMED | face_type | f.MODE_BGR, resolution], + [f.TRANSFORMED | face_type | f.MODE_BGR, resolution], + [f.TRANSFORMED | face_type | f.MODE_M | f.FACE_MASK_FULL, resolution] ] ), + + SampleGeneratorFace(self.training_data_dst_path, debug=self.is_debug(), batch_size=self.batch_size, + sample_process_options=SampleProcessor.Options(normalize_tanh = True), + output_sample_types=[ [f.WARPED_TRANSFORMED | face_type | f.MODE_BGR, resolution], + [f.TRANSFORMED | face_type | f.MODE_BGR, resolution], + [f.TRANSFORMED | face_type | f.MODE_M | f.FACE_MASK_FULL, resolution] ] ) + ]) + #override + def onSave(self): + self.save_weights_safe( [[self.encoder, self.get_strpath_storage_for_file(self.encoderH5)], + [self.decoder_src, self.get_strpath_storage_for_file(self.decoder_srcH5)], + [self.decoder_dst, self.get_strpath_storage_for_file(self.decoder_dstH5)], + [self.decoder_srcm, self.get_strpath_storage_for_file(self.decoder_srcmH5)], + [self.decoder_dstm, self.get_strpath_storage_for_file(self.decoder_dstmH5)] + ] ) + + #override + def onTrainOneEpoch(self, sample): + warped_src, target_src, target_src_mask = sample[0] + warped_dst, target_dst, target_dst_mask = sample[1] + + src_loss, = self.src_train ([warped_src, target_src, target_src_mask, warped_dst, target_dst, target_dst_mask]) + dst_loss, = self.dst_train ([warped_dst, target_dst, target_dst_mask]) + + src_mask_loss, = self.src_mask_train ([warped_src, target_src_mask]) + dst_mask_loss, = self.dst_mask_train ([warped_dst, target_dst_mask]) + + return ( ('src_loss', src_loss), ('dst_loss', dst_loss) ) + + + #override + def onGetPreview(self, sample): + test_A = sample[0][1][0:4] #first 4 samples + test_A_m = sample[0][2][0:4] #first 4 samples + test_B = sample[1][1][0:4] + test_B_m = sample[1][2][0:4] + + S = test_A + D = test_B + + SS, SM, DD, DM, SD, SDM = self.AE_view ([test_A, test_B]) + S, D, SS, SM, DD, DM, SD, SDM = [ x / 2 + 0.5 for x in [S, D, SS, SM, DD, DM, SD, SDM] ] + + SM, DM, SDM = [ np.repeat (x, (3,), -1) for x in [SM, DM, SDM] ] + + st = [] + for i in range(0, len(test_A)): + st.append ( np.concatenate ( ( + S[i], SS[i], #SM[i], + D[i], DD[i], #DM[i], + SD[i], #SDM[i] + ), axis=1) ) + + return [ ('U-net Face Morpher', np.concatenate ( st, axis=0 ) ) ] + + def predictor_func (self, face): + + face = face * 2.0 - 1.0 + + face_128_bgr = face[...,0:3] + + x, mx = [ (x[0] + 1.0) / 2.0 for x in self.AE_convert ( [ np.expand_dims(face_128_bgr,0) ] ) ] + + if self.options['match_style']: + res = self.options['resolution'] + s = int( res * 0.96875 ) + mx = np.pad ( np.ones ( (s,s) ), (res-s) // 2 , mode='constant') + mx = np.expand_dims(mx, -1) + + return np.concatenate ( (x,mx), -1 ) + + #override + def get_converter(self, **in_options): + from models import ConverterMasked + + if self.options['match_style']: + base_erode_mask_modifier = 50 + base_blur_mask_modifier = 50 + else: + base_erode_mask_modifier = 30 if self.options['face_type'] == 'f' else 100 + base_blur_mask_modifier = 0 if self.options['face_type'] == 'f' else 100 + + face_type = FaceType.FULL if self.options['face_type'] == 'f' else FaceType.HALF + + return ConverterMasked(self.predictor_func, + predictor_input_size=self.options['resolution'], + output_size=self.options['resolution'], + face_type=face_type, + base_erode_mask_modifier=base_erode_mask_modifier, + base_blur_mask_modifier=base_blur_mask_modifier, + **in_options) + + @staticmethod + def EncFlow(ngf=64, num_downs=4, lowest_dense=512): + exec (nnlib.import_all(), locals(), globals()) + + use_bias = True + def XNormalization(x): + return InstanceNormalization (axis=3, gamma_initializer=RandomNormal(1., 0.02))(x) + + def Conv2D (filters, kernel_size, strides=(1, 1), padding='valid', data_format=None, dilation_rate=(1, 1), activation=None, use_bias=use_bias, kernel_initializer=RandomNormal(0, 0.02), bias_initializer='zeros', kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None): + return keras.layers.Conv2D( filters=filters, kernel_size=kernel_size, strides=strides, padding=padding, data_format=data_format, dilation_rate=dilation_rate, activation=activation, use_bias=use_bias, kernel_initializer=kernel_initializer, bias_initializer=bias_initializer, kernel_regularizer=kernel_regularizer, bias_regularizer=bias_regularizer, activity_regularizer=activity_regularizer, kernel_constraint=kernel_constraint, bias_constraint=bias_constraint ) + + def func(input): + x = input + + result = [] + for i in range(num_downs): + x = LeakyReLU(0.1)(XNormalization(Conv2D( min(ngf* (2**i), ngf*8) , 5, 2, 'same')(x))) + + if i == num_downs-1: + x_shape = K.int_shape(x)[1:] + x = Reshape(x_shape)(Dense( np.prod(x_shape) )(Dense(lowest_dense)(Flatten()(x)))) + result += [x] + + return result + return func + + @staticmethod + def DecFlow(output_nc, ngf=64, activation='tanh'): + exec (nnlib.import_all(), locals(), globals()) + + use_bias = True + def XNormalization(x): + return InstanceNormalization (axis=3, gamma_initializer=RandomNormal(1., 0.02))(x) + + def Conv2D (filters, kernel_size, strides=(1, 1), padding='valid', data_format=None, dilation_rate=(1, 1), activation=None, use_bias=use_bias, kernel_initializer=RandomNormal(0, 0.02), bias_initializer='zeros', kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None): + return keras.layers.Conv2D( filters=filters, kernel_size=kernel_size, strides=strides, padding=padding, data_format=data_format, dilation_rate=dilation_rate, activation=activation, use_bias=use_bias, kernel_initializer=kernel_initializer, bias_initializer=bias_initializer, kernel_regularizer=kernel_regularizer, bias_regularizer=bias_regularizer, activity_regularizer=activity_regularizer, kernel_constraint=kernel_constraint, bias_constraint=bias_constraint ) + + def func(input): + input_len = len(input) + + x = input[input_len-1] + for i in range(input_len-1, -1, -1): + x = SubpixelUpscaler()( LeakyReLU(0.1)(XNormalization(Conv2D( min(ngf* (2**i) *4, ngf*8 *4 ), 3, 1, 'same')(x))) ) + if i != 0: + x = Concatenate(axis=3)([ input[i-1] , x]) + + return Conv2D(output_nc, 3, 1, 'same', activation=activation)(x) + return func + +Model = UFMModel \ No newline at end of file diff --git a/models/Model_AVATAR/__init__.py b/models/Model_UFM/__init__.py similarity index 100% rename from models/Model_AVATAR/__init__.py rename to models/Model_UFM/__init__.py diff --git a/nnlib/devicelib.py b/nnlib/devicelib.py index 37a9261..5f1bd00 100644 --- a/nnlib/devicelib.py +++ b/nnlib/devicelib.py @@ -9,7 +9,7 @@ class devicelib: gpu_idxs = [] gpu_total_vram_gb = 0 allow_growth = True - float16 = False + use_fp16 = False cpu_only = False def __init__ (self, force_best_gpu_idx = -1, @@ -17,11 +17,11 @@ class devicelib: force_gpu_idxs = None, choose_worst_gpu = False, allow_growth = True, - float16 = False, + use_fp16 = False, cpu_only = False, **in_options): - self.float16 = float16 + self.use_fp16 = use_fp16 if cpu_only or not devicelib.hasNVML(): self.cpu_only = True else: diff --git a/nnlib/nnlib.py b/nnlib/nnlib.py index 90a9038..f730b2a 100644 --- a/nnlib/nnlib.py +++ b/nnlib/nnlib.py @@ -1,6 +1,7 @@ import os import sys import contextlib +import numpy as np from utils import std_utils from .devicelib import devicelib @@ -26,16 +27,20 @@ class nnlib(object): tf_dssim = None tf_ssim = None tf_resize_like = None + tf_image_histogram = None tf_rgb_to_lab = None tf_lab_to_rgb = None - tf_image_histogram = None + tf_adain = None + tf_gaussian_blur = None + tf_style_loss = None modelify = None ReflectionPadding2D = None DSSIMLoss = None DSSIMMaskLoss = None PixelShuffler = None - + SubpixelUpscaler = None + ResNet = None UNet = None UNetTemporalPredictor = None @@ -53,6 +58,9 @@ tf_resize_like = nnlib.tf_resize_like tf_image_histogram = nnlib.tf_image_histogram tf_rgb_to_lab = nnlib.tf_rgb_to_lab tf_lab_to_rgb = nnlib.tf_lab_to_rgb +tf_adain = nnlib.tf_adain +tf_gaussian_blur = nnlib.tf_gaussian_blur +tf_style_loss = nnlib.tf_style_loss """ code_import_keras_string = \ """ @@ -62,12 +70,12 @@ K = keras.backend Input = keras.layers.Input Dense = keras.layers.Dense -Conv2D = keras.layers.convolutional.Conv2D -Conv2DTranspose = keras.layers.convolutional.Conv2DTranspose +Conv2D = keras.layers.Conv2D +Conv2DTranspose = keras.layers.Conv2DTranspose MaxPooling2D = keras.layers.MaxPooling2D BatchNormalization = keras.layers.BatchNormalization -LeakyReLU = keras.layers.advanced_activations.LeakyReLU +LeakyReLU = keras.layers.LeakyReLU ReLU = keras.layers.ReLU tanh = keras.layers.Activation('tanh') sigmoid = keras.layers.Activation('sigmoid') @@ -91,6 +99,7 @@ ReflectionPadding2D = nnlib.ReflectionPadding2D DSSIMLoss = nnlib.DSSIMLoss DSSIMMaskLoss = nnlib.DSSIMMaskLoss PixelShuffler = nnlib.PixelShuffler +SubpixelUpscaler = nnlib.SubpixelUpscaler """ code_import_keras_contrib_string = \ """ @@ -282,19 +291,93 @@ NLayerDiscriminator = nnlib.NLayerDiscriminator return func nnlib.tf_image_histogram = tf_image_histogram + def tf_adain(epsilon=1e-5): + def func(content, style): + axes = [1,2] + c_mean, c_var = tf.nn.moments(content, axes=axes, keep_dims=True) + s_mean, s_var = tf.nn.moments(style, axes=axes, keep_dims=True) + c_std, s_std = tf.sqrt(c_var + epsilon), tf.sqrt(s_var + epsilon) + return s_std * (content - c_mean) / c_std + s_mean + return func + nnlib.tf_adain = tf_adain + + def tf_gaussian_blur(radius=2.0): + def gaussian_kernel(size,mean,std): + d = tf.distributions.Normal( float(mean), float(std) ) + + vals = d.prob(tf.range(start = -int(size), limit = int(size) + 1, dtype = tf.float32)) + + gauss_kernel = tf.einsum('i,j->ij', + vals, + vals) + + return gauss_kernel / tf.reduce_sum(gauss_kernel) + + gauss_kernel = gaussian_kernel(radius, 1.0, radius ) + gauss_kernel = gauss_kernel[:, :, tf.newaxis, tf.newaxis] + + def func(input): + return tf.nn.conv2d(input, gauss_kernel, strides=[1, 1, 1, 1], padding="SAME") + return func + nnlib.tf_gaussian_blur = tf_gaussian_blur + + def tf_style_loss(gaussian_blur_radius=0.0, loss_weight=1.0, batch_normalize=False, epsilon=1e-5): + def sl(content, style): + axes = [1,2] + c_mean, c_var = tf.nn.moments(content, axes=axes, keep_dims=True) + s_mean, s_var = tf.nn.moments(style, axes=axes, keep_dims=True) + c_std, s_std = tf.sqrt(c_var + epsilon), tf.sqrt(s_var + epsilon) + + mean_loss = tf.reduce_sum(tf.squared_difference(c_mean, s_mean)) + std_loss = tf.reduce_sum(tf.squared_difference(c_std, s_std)) + + if batch_normalize: + #normalize w.r.t batch size + n = tf.cast(tf.shape(content)[0], dtype=tf.float32) + mean_loss /= n + std_loss /= n + + return (mean_loss + std_loss) * loss_weight + + def func(target, style): + target_nc = target.get_shape().as_list()[-1] + style_nc = style.get_shape().as_list()[-1] + if target_nc != style_nc: + raise Exception("target_nc != style_nc") + + targets = tf.split(target, target_nc, -1) + styles = tf.split(style, style_nc, -1) + + style_loss = [] + for i in range(len(targets)): + if gaussian_blur_radius > 0.0: + style_loss += [ sl( tf_gaussian_blur(gaussian_blur_radius)(targets[i]), + tf_gaussian_blur(gaussian_blur_radius)(styles[i])) ] + else: + style_loss += [ sl( targets[i], + styles[i]) ] + return np.sum ( style_loss ) + return func + + nnlib.tf_style_loss = tf_style_loss + @staticmethod def import_keras(device_config = None): if nnlib.keras is not None: return nnlib.code_import_keras nnlib.import_tf(device_config) - + device_config = nnlib.prefer_DeviceConfig if 'TF_SUPPRESS_STD' in os.environ.keys() and os.environ['TF_SUPPRESS_STD'] == '1': suppressor = std_utils.suppress_stdout_stderr().__enter__() import keras as keras_ nnlib.keras = keras_ - nnlib.keras.backend.tensorflow_backend.set_session(nnlib.tf_sess) + + if device_config.use_fp16: + nnlib.keras.backend.set_floatx('float16') + + nnlib.keras.backend.set_session(nnlib.tf_sess) if 'TF_SUPPRESS_STD' in os.environ.keys() and os.environ['TF_SUPPRESS_STD'] == '1': suppressor.__exit__() @@ -307,6 +390,7 @@ NLayerDiscriminator = nnlib.NLayerDiscriminator def __initialize_keras_functions(): tf = nnlib.tf keras = nnlib.keras + K = keras.backend def modelify(model_functor): def func(tensor): @@ -365,10 +449,12 @@ NLayerDiscriminator = nnlib.NLayerDiscriminator for mask in self.mask_list: if not self.is_tanh: - loss = (1.0 - tf.image.ssim (y_true*mask, y_pred*mask, 1.0)) / 2.0 + loss = (1.0 - (tf.image.ssim (y_true*mask, y_pred*mask, 1.0))) / 2.0 else: loss = (1.0 - tf.image.ssim ( (y_true/2+0.5)*(mask/2+0.5), (y_pred/2+0.5)*(mask/2+0.5), 1.0)) / 2.0 + loss = K.cast (loss, K.floatx()) + if total_loss is None: total_loss = loss else: @@ -376,7 +462,7 @@ NLayerDiscriminator = nnlib.NLayerDiscriminator return total_loss nnlib.DSSIMMaskLoss = DSSIMMaskLoss - + class PixelShuffler(keras.layers.Layer): def __init__(self, size=(2, 2), data_format=None, **kwargs): super(PixelShuffler, self).__init__(**kwargs) @@ -391,33 +477,12 @@ NLayerDiscriminator = nnlib.NLayerDiscriminator '; Received input shape:', str(input_shape)) if self.data_format == 'channels_first': - batch_size, c, h, w = input_shape - if batch_size is None: - batch_size = -1 - rh, rw = self.size - oh, ow = h * rh, w * rw - oc = c // (rh * rw) - - out = keras.backend.reshape(inputs, (batch_size, rh, rw, oc, h, w)) - out = keras.backend.permute_dimensions(out, (0, 3, 4, 1, 5, 2)) - out = keras.backend.reshape(out, (batch_size, oc, oh, ow)) - return out + return tf.depth_to_space(inputs, self.size[0], 'NCHW') elif self.data_format == 'channels_last': - batch_size, h, w, c = input_shape - if batch_size is None: - batch_size = -1 - rh, rw = self.size - oh, ow = h * rh, w * rw - oc = c // (rh * rw) - - out = keras.backend.reshape(inputs, (batch_size, h, w, rh, rw, oc)) - out = keras.backend.permute_dimensions(out, (0, 1, 3, 2, 4, 5)) - out = keras.backend.reshape(out, (batch_size, oh, ow, oc)) - return out + return tf.depth_to_space(inputs, self.size[0], 'NHWC') def compute_output_shape(self, input_shape): - if len(input_shape) != 4: raise ValueError('Inputs should have rank ' + str(4) + @@ -455,8 +520,10 @@ NLayerDiscriminator = nnlib.NLayerDiscriminator base_config = super(PixelShuffler, self).get_config() return dict(list(base_config.items()) + list(config.items())) + nnlib.PixelShuffler = PixelShuffler - + nnlib.SubpixelUpscaler = PixelShuffler + @staticmethod def import_keras_contrib(device_config = None): if nnlib.keras_contrib is not None: @@ -512,10 +579,10 @@ NLayerDiscriminator = nnlib.NLayerDiscriminator def XNormalization(x): return BatchNormalization (axis=3, gamma_initializer=RandomNormal(1., 0.02))(x) - def Conv2D (filters, kernel_size, strides=(1, 1), padding='valid', data_format=None, dilation_rate=(1, 1), activation=None, use_bias=True, kernel_initializer=RandomNormal(0, 0.02), bias_initializer='zeros', kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None): - return keras.layers.convolutional.Conv2D( filters=filters, kernel_size=kernel_size, strides=strides, padding=padding, data_format=data_format, dilation_rate=dilation_rate, activation=activation, use_bias=use_bias, kernel_initializer=kernel_initializer, bias_initializer=bias_initializer, kernel_regularizer=kernel_regularizer, bias_regularizer=bias_regularizer, activity_regularizer=activity_regularizer, kernel_constraint=kernel_constraint, bias_constraint=bias_constraint ) + def Conv2D (filters, kernel_size, strides=(1, 1), padding='valid', data_format=None, dilation_rate=(1, 1), activation=None, use_bias=use_bias, kernel_initializer=RandomNormal(0, 0.02), bias_initializer='zeros', kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None): + return keras.layers.Conv2D( filters=filters, kernel_size=kernel_size, strides=strides, padding=padding, data_format=data_format, dilation_rate=dilation_rate, activation=activation, use_bias=use_bias, kernel_initializer=kernel_initializer, bias_initializer=bias_initializer, kernel_regularizer=kernel_regularizer, bias_regularizer=bias_regularizer, activity_regularizer=activity_regularizer, kernel_constraint=kernel_constraint, bias_constraint=bias_constraint ) - def Conv2DTranspose(filters, kernel_size, strides=(1, 1), padding='valid', output_padding=None, data_format=None, dilation_rate=(1, 1), activation=None, use_bias=True, kernel_initializer='glorot_uniform', bias_initializer='zeros', kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None): + def Conv2DTranspose(filters, kernel_size, strides=(1, 1), padding='valid', output_padding=None, data_format=None, dilation_rate=(1, 1), activation=None, use_bias=use_bias, kernel_initializer='glorot_uniform', bias_initializer='zeros', kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None): return keras.layers.Conv2DTranspose(filters=filters, kernel_size=kernel_size, strides=strides, padding=padding, output_padding=output_padding, data_format=data_format, dilation_rate=dilation_rate, activation=activation, use_bias=use_bias, kernel_initializer=kernel_initializer, bias_initializer=bias_initializer, kernel_regularizer=kernel_regularizer, bias_regularizer=bias_regularizer, activity_regularizer=activity_regularizer, kernel_constraint=kernel_constraint, bias_constraint=bias_constraint) def func(input): @@ -580,10 +647,10 @@ NLayerDiscriminator = nnlib.NLayerDiscriminator def XNormalization(x): return BatchNormalization (axis=3, gamma_initializer=RandomNormal(1., 0.02))(x) - def Conv2D (filters, kernel_size, strides=(1, 1), padding='valid', data_format=None, dilation_rate=(1, 1), activation=None, use_bias=True, kernel_initializer=RandomNormal(0, 0.02), bias_initializer='zeros', kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None): - return keras.layers.convolutional.Conv2D( filters=filters, kernel_size=kernel_size, strides=strides, padding=padding, data_format=data_format, dilation_rate=dilation_rate, activation=activation, use_bias=use_bias, kernel_initializer=kernel_initializer, bias_initializer=bias_initializer, kernel_regularizer=kernel_regularizer, bias_regularizer=bias_regularizer, activity_regularizer=activity_regularizer, kernel_constraint=kernel_constraint, bias_constraint=bias_constraint ) + def Conv2D (filters, kernel_size, strides=(1, 1), padding='valid', data_format=None, dilation_rate=(1, 1), activation=None, use_bias=use_bias, kernel_initializer=RandomNormal(0, 0.02), bias_initializer='zeros', kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None): + return keras.layers.Conv2D( filters=filters, kernel_size=kernel_size, strides=strides, padding=padding, data_format=data_format, dilation_rate=dilation_rate, activation=activation, use_bias=use_bias, kernel_initializer=kernel_initializer, bias_initializer=bias_initializer, kernel_regularizer=kernel_regularizer, bias_regularizer=bias_regularizer, activity_regularizer=activity_regularizer, kernel_constraint=kernel_constraint, bias_constraint=bias_constraint ) - def Conv2DTranspose(filters, kernel_size, strides=(1, 1), padding='valid', output_padding=None, data_format=None, dilation_rate=(1, 1), activation=None, use_bias=True, kernel_initializer='glorot_uniform', bias_initializer='zeros', kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None): + def Conv2DTranspose(filters, kernel_size, strides=(1, 1), padding='valid', output_padding=None, data_format=None, dilation_rate=(1, 1), activation=None, use_bias=use_bias, kernel_initializer='glorot_uniform', bias_initializer='zeros', kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None): return keras.layers.Conv2DTranspose(filters=filters, kernel_size=kernel_size, strides=strides, padding=padding, output_padding=output_padding, data_format=data_format, dilation_rate=dilation_rate, activation=activation, use_bias=use_bias, kernel_initializer=kernel_initializer, bias_initializer=bias_initializer, kernel_regularizer=kernel_regularizer, bias_regularizer=bias_regularizer, activity_regularizer=activity_regularizer, kernel_constraint=kernel_constraint, bias_constraint=bias_constraint) def UNetSkipConnection(outer_nc, inner_nc, sub_model=None, outermost=False, innermost=False, use_dropout=False): @@ -658,8 +725,8 @@ NLayerDiscriminator = nnlib.NLayerDiscriminator def XNormalization(x): return BatchNormalization (axis=3, gamma_initializer=RandomNormal(1., 0.02))(x) - def Conv2D (filters, kernel_size, strides=(1, 1), padding='valid', data_format=None, dilation_rate=(1, 1), activation=None, use_bias=True, kernel_initializer=RandomNormal(0, 0.02), bias_initializer='zeros', kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None): - return keras.layers.convolutional.Conv2D( filters=filters, kernel_size=kernel_size, strides=strides, padding=padding, data_format=data_format, dilation_rate=dilation_rate, activation=activation, use_bias=use_bias, kernel_initializer=kernel_initializer, bias_initializer=bias_initializer, kernel_regularizer=kernel_regularizer, bias_regularizer=bias_regularizer, activity_regularizer=activity_regularizer, kernel_constraint=kernel_constraint, bias_constraint=bias_constraint ) + def Conv2D (filters, kernel_size, strides=(1, 1), padding='valid', data_format=None, dilation_rate=(1, 1), activation=None, use_bias=use_bias, kernel_initializer=RandomNormal(0, 0.02), bias_initializer='zeros', kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None): + return keras.layers.Conv2D( filters=filters, kernel_size=kernel_size, strides=strides, padding=padding, data_format=data_format, dilation_rate=dilation_rate, activation=activation, use_bias=use_bias, kernel_initializer=kernel_initializer, bias_initializer=bias_initializer, kernel_regularizer=kernel_regularizer, bias_regularizer=bias_regularizer, activity_regularizer=activity_regularizer, kernel_constraint=kernel_constraint, bias_constraint=bias_constraint ) def func(input): x = input diff --git a/samples/SampleProcessor.py b/samples/SampleProcessor.py index f6ab534..89f052f 100644 --- a/samples/SampleProcessor.py +++ b/samples/SampleProcessor.py @@ -95,7 +95,7 @@ class SampleProcessor(object): mask[mask > 0.0] = 1.0 img = np.concatenate( (img, mask ), -1 ) - images[img_type][face_mask_type] = image_utils.warp_by_params (params, img, (img_type==1 or img_type==2), (img_type==2 or img_type==3), img_type != 0) + images[img_type][face_mask_type] = image_utils.warp_by_params (params, img, (img_type==1 or img_type==2), (img_type==2 or img_type==3), img_type != 0, face_mask_type == 0) img = images[img_type][face_mask_type] diff --git a/utils/image_utils.py b/utils/image_utils.py index 7be6f7d..ae5deed 100644 --- a/utils/image_utils.py +++ b/utils/image_utils.py @@ -255,11 +255,11 @@ def gen_warp_params (source, flip, rotation_range=[-10,10], scale_range=[-0.5, 0 return params -def warp_by_params (params, img, warp, transform, flip): +def warp_by_params (params, img, warp, transform, flip, is_border_replicate): if warp: img = cv2.remap(img, params['mapx'], params['mapy'], cv2.INTER_LANCZOS4 ) if transform: - img = cv2.warpAffine( img, params['rmat'], (params['w'], params['w']), borderMode=cv2.BORDER_CONSTANT, flags=cv2.INTER_LANCZOS4 ) + img = cv2.warpAffine( img, params['rmat'], (params['w'], params['w']), borderMode=(cv2.BORDER_REPLICATE if is_border_replicate else cv2.BORDER_CONSTANT), flags=cv2.INTER_LANCZOS4 ) if flip and params['flip']: img = img[:,::-1,:] return img