o
    ߥi
                     @   s   d Z ddlmZmZ ddlZddlmZ ddlm  mZ	 ddl
mZ ddlmZ ddlmZ ddlmZ dd	lmZ e ZG d
d dejZdS )zx
Part of the implementation is borrowed and modified from LaMa, publicly available at
https://github.com/saic-mdal/lama
    )DictTupleN)
get_logger   )NonSaturatingWithR1)FFCResNetGenerator)ResNetPL)NLayerDiscriminatorc                       s   e Zd Z									d fdd		Zd
eeejf deeejf fddZde	ejeeejf f fddZ
de	ejeeejf f fddZ  ZS )BaseInpaintingTrainingModule TFd   +?0u  
   c
                    s   t    td|  t | _|| _|sFt | _t	ddddd| _
|| _|| _|| _|| _d | _d| _|	| _tjdd| _td	|d
| _|| _td d S )Nz:BaseInpaintingTrainingModule init called, predict_only is r   gMbP?T)weightgp_coefmask_as_fake_targetallow_scale_masknone)	reduction   )r   weights_pathz&BaseInpaintingTrainingModule init done)super__init__LOGGERinfor   	generatoruse_ddpr	   discriminatorr   adversarial_lossaverage_generatorgenerator_avg_betaaverage_generator_start_stepaverage_generator_periodgenerator_averagelast_generator_averaging_stepstore_discr_outputs_for_visnnL1Lossloss_l1r   loss_resnet_plvisualize_each_iters)self	model_dirr   predict_onlyr,   r!   r"   r#   r$   r'   kwargs	__class__ ^/home/ubuntu/.local/lib/python3.10/site-packages/modelscope/models/cv/image_inpainting/base.pyr      s2   
z%BaseInpaintingTrainingModule.__init__batchreturnc                 C      t  )zUPass data through generator and obtain at leas 'predicted_image' and 'inpainted' keysNotImplementedErrorr-   r5   r3   r3   r4   forward@   s   z$BaseInpaintingTrainingModule.forwardc                 C   r7   Nr8   r:   r3   r3   r4   generator_lossE      z+BaseInpaintingTrainingModule.generator_lossc                 C   r7   r<   r8   r:   r3   r3   r4   discriminator_lossI   r>   z/BaseInpaintingTrainingModule.discriminator_loss)	r   TFr   Fr   r   r   F)__name__
__module____qualname__r   r   strtorchTensorr;   r   r=   r?   __classcell__r3   r3   r1   r4   r
      s,    *

r
   )__doc__typingr   r   rD   torch.nnr(   torch.nn.functional
functionalFmodelscope.utils.loggerr   modules.adversarialr   modules.ffcr   modules.perceptualr   modules.pix2pixhdr	   r   Moduler
   r3   r3   r3   r4   <module>   s    