a ?b^@sddlZddlZddlZddlmZddlm Z m Z m Z m Z m Z mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZddlmZmZddl m!Z!ddl"m#Z#ddl$m%Z%m&Z&m'Z'm(Z(Gdd d Z)dS) N)mixed_precision)AddBatchNormalization ConcatenateConv2DConv2DTranspose Cropping1D Cropping2DDenseDotFlattenGlobalAveragePooling2DInputLambda LeakyReLUMultiplyReLUReshapeSeparableConv2D UpSampling2D ZeroPadding2D)Model Sequential)Adam) count_params)ConvSN2DDenseSNPosEncAddNoisec@seZdZddZd*dd Zd d Zd d Zd+ddZd,ddZddZ ddZ ddZ ddZ ddZ ddZd d!Zd-d"d#Zd$d%Zd&d'Zd(d)ZdS).Models_functionscCs>||_|jjr,t|_td|_t|jtjj|_ dS)N mixed_float16) argsrPolicypolicyset_global_policytfkeras initializers he_uniforminit)selfr!r+J/home/marco/Desktop/projects/musika!/gradio_demo/musika_light_hf/models.py__init__#s   zModels_functions.__init__r/r/FsameTc Cs~|} |r*tjjj|||d||jd| } n tjjj|||d||jd| } |rXt| } |rltjj| } tjj | } | S)Nlinear kernel_sizestrides activationpaddingkernel_initializer) r%r&layersrr)rrr activationsswish) r*inpfiltersr5r6noiseupsampler8bnxr+r+r, conv_util,s8    zModels_functions.conv_utilc CsJtjjj|jddddd|jdd|}|tjj|ddd d }||S) Nr1r/r3r2Tr5r6r7r8r9use_biaskeepdimsgHz>)r%r&r:rshaper)math reduce_std)r*rBembr+r+r,adainWs zModels_functions.adainc Csbtj|ddd}tjjj|dddd|jdd|}tjj|}tjjj|dddd|jdd|S) NrGTrHr1r3validrEsigmoid)r% reduce_meanr&r:rr)r;r<)r*rBr>r+r+r,se_layerds0 zModels_functions.se_layerr/ Nc Cs|} |r,tjjj|||dd|jdd| } n"tjjj|||dd|jdd| } |r\t| } |durr|| |} ntjj| } tjj | } |dur| |} | S)Nr3r2TrE) r%r&r:rr)rrrNrr;r<) r*r=r>r5r6r?r@rMse1rBx1r+r+r, conv_util_genzsB    zModels_functions.conv_util_genc Cs|dur |}tjjj|jd|ddd|jd|}tjjd|}tjt d|j j |}tjjj|||dd|jd|}tjjd|}tjt d|j j |}|dkrtjjj |dd |}|jd|krtjjj|dddd|jd d |}||S) NrDr/r3r2r4皙?g?r1r8FrE) r%r&r:rrJr)rrKsqrtcastr!datatypeAveragePooling2D)r*r=r>r5 kernel_size_2r6rBr+r+r,res_block_discsR zModels_functions.res_block_discc Csd}td|jj|f}t|dd}t|d}|j|ddddd }|j|d d ddd }|j|d d ddd }|j|d dddd }|j|d d ddd } |j| d dddd } tjjj dddd|j ddd| } t| dd} t| d} t| dd} t| d} t | tj } t || ddS)Nr/rGrr1rOr5r6r8r.r/@Zcbottletanh)r5r6r8r9namer7rhZENC2rk)rr!rJr%splitconcatrCr&r:rr)r[float32r)r*diminpfinpflsinpbg0g1g2g3g4g5gZglsgfr+r+r,build_encoder2s6    zModels_functions.build_encoder2cCsd}d}td|jjd|f}|}|j|ddddd d }|j|ddd d d d }|j|d dd d d d }|j|d dddd d }|j|ddd d d d }tjjj|dddd|jd|}t |dd}t |d}t |tj }t ||ddS)Nr`rir/rarfr/r1FTr5r6r@r?rgrerdr2rj)r5r6r8r7r9rhrrGZDEC2rl)rr!rJrCr%r&r:rr)rmrnr[ror)r*rpZ bottledimrqrzr{gflsr+r+r,build_decoder2sJ  zModels_functions.build_decoder2cCsDd|jjdd}t||jjdf}t|gd}|j||jjdddddd}|j||jjdd dddd}|j||jjdd d dddd}|j||jjdd d dddd}|j||jjdd d dddd}tjjj d ddd|j d |}tjj |}t |dd }t|d }t|tj}t||ddS)Nr~rhr/)rr0rhr/ r1rOrcrir`)r5r6r8r9rGrZENCrl)r!hoprrJr% transposerCr&r:rr)r;rjrmrnr[ror)r*rprqZginprtrzgbZgblsr+r+r, build_encoder%sh zModels_functions.build_encoderc Csd|jjdd}td|jjddf}|}|j||jjddddd}|j||jjdd d dd}|j||jj|jjdd d dd}|j||jj|jjdd d dd}|j||jj|jjdd d ddd }|j|||jjdd d ddd }|j|||jjdd d ddd }|j|||jjd dddd}t|ddd|jdd|}t|dd}t |dd\}}t ||jj|jj d} t | d}t ||jj|jj d} t | d}t |gd} t |gd} t t| dtj} t t| dtj} t|| | gddS)Nr~rhr/r`r0r1T)r5r6r?r.rgr}rr2)r5r6r9r8gg?rDrrG)rrhr0r/DECrl)r!rrrJrCrr)r% clip_by_valuermwindowrnrr[squeezeror) r*rprqrzrtrurvr{pfrZpflsspr+r+r, build_decoderas     zModels_functions.build_decoderc Cs.td|jj|jjdfd}d}tjjj|jjddddd|jd d d |}tjjjd d d dd|jd|}tjj d|}|j |dd d d}|j |dd d d}|j |dd d d}|j |dd d d}|j |dd d dd}|}tjjj ddd|jdt |}t |tj}t |tj}t|||gddS)Nr/rhrJr`r~r1r3rOF)r5r6r7r8r9rF trainablerr.rgr2r4rXrd)r5r6rerf)r5r6r^Tr7rFr9Crl)rr!latlenlatdepthr%r&r:rr)rr_r r r[ror)r*sinprpsfZsfor{r+r+r, build_criticsF   "zModels_functions.build_criticcCstd|jjddfd}|jjd}tjjjdddd d |jd |}tjj d |}tjjjd ddd d |jd |}tjj d |}tjjjdddd d |jd |}tjj d |}tjjjdddd d |jd |}tjj d |}tjjjdddd d |jd |}tjj d |}tjjjdddd d |jd |}tjj d |}tjjj |dddd |jd |}t |tj }t ||ddS)Nr/rirrrhrdr}rgr3r2r4rXiri@rbr1rjCRrl)rr!rrr%r&r:rr)rrr[ror)r*rrprr{r+r+r,build_critic_recs  z!Models_functions.build_critic_recc Cs|jjd}t|jj|jjdf}t|dd}t|d}t|d}tjj j dddt |d}tjj j ddd|}tjj j ddd|}tjj j ddd|} tjj j ddd| } tjj j ddd| } tjj j dd d |j d t| } tjj d | } t| } || | } tjj| } |j| d ddd d | d} |j| d dddd | d} |j| dddd d |d}|j|ddddd |d}|j|dddd d ||| dd}|j|ddddd ||| dd}|j|dddd d |||dd}|j|ddddd |||dd}|j|dddd d t tj||jjddd}tjj j|dd|j ddd|}t|dd}t|d}t|tj}t||ddS)NrhrGrrgrOrYir3Tr)r/r~rrfr})r5r6r@r?rMr1Frer.rd)r5r6r@r?rMrUrrb)dtyper2rj)r5r6r9r8r7ZGENrl)r!rrrr%rmrnrQr&r:r] expand_dimsr r)r rrrNr;r<rWrRr[r\rror)r*rprqrrrsZinpgZinp1Zinp2Zinp3Zinp4Zinp5Zinp6rzrurvZg2brwrxryr{rr+r+r,build_generator"s                    z Models_functions.build_generatorc Cs|}|}|}|}|}|}|} |} |jjrz|j t j j dd} |j t j j dd} n t j j dd} t j j dd} |r||jjd||jjdn|j| j} dd| D}| t|| |j} dd| D}| t|| |jjsN| tj|dd d | tj|d d d |jjs||d ||d ||d||d| |d| |d||d||d||||||| | | | gf S)N-C6??z/dec.h5z/dec2.h5cSsg|]}t|qSr+r% zeros_like.0wr+r+r, z)Models_functions.load..cSsg|]}t|qSr+rrr+r+r,rrz /opt_disc.npyT) allow_picklez /opt_dec.npyz /critic.h5z/gen.h5z/enc.h5z/enc2.h5z/critic_rec.h5z /gen_ema.h5)rrrrr|rrr!rLossScaleOptimizerr%r& optimizersr load_weightsZdec_pathtrainable_weightsapply_gradientsziptrainable_variablestesting set_weightsnpload)r*pathload_decgencriticencdecenc2dec2 critic_recgen_emaopt_discopt_decZ grad_varsZ zero_gradsr+r+r,rsX   zModels_functions.loadc Cs|}|}|}|}|}|}|}|}tjj |}| | |j jr|jtjjdd} |jtjjdd} n tjjdd} tjjdd} ||||||||| | gf S)Nrr)rrrrr|rrr%r&models clone_modelr get_weightsr!rrrr) r*rrrrrrrrrrr+r+r,builds2zModels_functions.buildc Cs|j|jjdd\ }}}}}}}}\} } td|jj|j|jjdd\ }}}} }} }} \} } td|jj||||||||| | gg |||| || || | | gg fS)NF)rzTechno networks loaded from zClassical networks loaded from )rr!load_path_technoprintload_path_classicalr*rrrZ dec_technorZ dec2_technorZgen_ema_technorrZ dec_classicalZdec2_classicalZgen_ema_classicalr+r+r, get_networkssF  zModels_functions.get_networksc Cs|\\ }}}}}}}}\} } \ }}}} }} }} \} } tdt|jtdt|j|j||||||||| | gg |||| || || | | gg fS)NzGenerator params: zDecoder params: )rrrrrr+r+r,initialize_networks$s0 z$Models_functions.initialize_networks)r.r1FFr2T)rSr1FFNN)r.Nr1)F)__name__ __module__ __qualname__r-rCrNrRrWr_r|rrrrrrrrrrr+r+r+r,r"s<  +  2 *"-<N(K 8 'r)*numpyr tensorflowr%Ztensorflow_addonsZtfaZtensorflow.kerasrZtensorflow.keras.layersrrrrrrr r r r r rrrrrrrrrZtensorflow.keras.modelsrrZtensorflow.keras.optimizersrZ)tensorflow.python.keras.utils.layer_utilsrr:rrrrrr+r+r+r,s X