U Ph7+ @s ddlmZddlmZddlZddlZddlmZddl m Z ddl m Z m Z ddlmZmZGdddejZGd d d ejZGd d d ejZGd ddejZdde je jddddfdddddddddddd ddZddddddZdddddd d!ZdS)") annotations)SequenceN) Convolution)ActNorm) get_act_layerget_norm_layerc sLeZdZdZddddfdfdddddd d d d fd d ZddZZS) UnetResBlocka A skip-connection based module that can be used for DynUNet, based on: `Automated Design of Deep Learning Methods for Biomedical Image Segmentation `_. `nnU-Net: Self-adapting Framework for U-Net-Based Medical Image Segmentation `_. Args: spatial_dims: number of spatial dimensions. in_channels: number of input channels. out_channels: number of output channels. kernel_size: convolution kernel size. stride: convolution stride. norm_name: feature normalization type and arguments. act_name: activation layer type and arguments. dropout: dropout probability. leakyreluT{Gz?inplacenegative_slopeNintSequence[int] | int tuple | strtuple | str | float | None spatial_dims in_channels out_channels kernel_sizestride norm_nameact_namedropoutc stt||||||dddd |_t||||d|dddd |_t|d|_t|||d|_t|||d|_ ||k|_ t |} t | dksd|_ |j rt|||d||dddd |_t|||d|_dS)NFrrractnorm conv_onlynamer"rchannelsT)super__init__get_conv_layerconv1conv2rlrelurnorm1norm2 downsamplenp atleast_1dallconv3norm3) selfrrrrrrrr stride_np __class__X/home/dell461/cl/sdc2/HISourceFinder-master-l/src/monai/networks/blocks/dynunet_block.pyr&+sV      zUnetResBlock.__init__cCst|}||}||}||}||}||}t|drJ||}t|dr^||}||7}||}|S)Nr1r2)r(r+r*r)r,hasattrr1r2)r3inpresidualoutr7r7r8forwardbs          zUnetResBlock.forward__name__ __module__ __qualname____doc__r&r= __classcell__r7r7r5r8r s  "7r c sLeZdZdZddddfdfdddddd d d d fd d ZddZZS)UnetBasicBlocka A CNN module that can be used for DynUNet, based on: `Automated Design of Deep Learning Methods for Biomedical Image Segmentation `_. `nnU-Net: Self-adapting Framework for U-Net-Based Medical Image Segmentation `_. Args: spatial_dims: number of spatial dimensions. in_channels: number of input channels. out_channels: number of output channels. kernel_size: convolution kernel size. stride: convolution stride. norm_name: feature normalization type and arguments. act_name: activation layer type and arguments. dropout: dropout probability. r Tr r Nrrrrrc srtt||||||dddd |_t||||d|dddd |_t|d|_t|||d|_t|||d|_ dS)NFrr r!r#) r%r&r'r(r)rr*rr+r,) r3rrrrrrrrr5r7r8r&s4   zUnetBasicBlock.__init__cCs@||}||}||}||}||}||}|SN)r(r+r*r)r,)r3r:r<r7r7r8r=s      zUnetBasicBlock.forwardr>r7r7r5r8rDrs  "&rDc sReZdZdZddddfddfdddd d d d d d d d fdd ZddZZS) UnetUpBlockaJ An upsampling module that can be used for DynUNet, based on: `Automated Design of Deep Learning Methods for Biomedical Image Segmentation `_. `nnU-Net: Self-adapting Framework for U-Net-Based Medical Image Segmentation `_. Args: spatial_dims: number of spatial dimensions. in_channels: number of input channels. out_channels: number of output channels. kernel_size: convolution kernel size. stride: convolution stride. upsample_kernel_size: convolution kernel size for transposed convolution layers. norm_name: feature normalization type and arguments. act_name: activation layer type and arguments. dropout: dropout probability. trans_bias: transposed convolution bias. r Tr r NFrrrrbool) rrrrrupsample_kernel_sizerrr trans_biasc sPt|} t||||| | | ddddd |_t|||||d| ||d|_dS)NFT)rrrbiasrrr is_transposedr )rrrrr)r%r&r' transp_convrD conv_block) r3rrrrrrHrrrrIZupsample_strider5r7r8r&s2  zUnetUpBlock.__init__cCs*||}tj||fdd}||}|S)Nr )dim)rLtorchcatrM)r3r:skipr<r7r7r8r=s  zUnetUpBlock.forwardr>r7r7r5r8rFs  &'rFcs2eZdZd dddddfdd ZddZZS) UnetOutBlockNrr)rrrrc s,tt|||dd|ddddd |_dS)Nr TF)rrrrJrrr)r%r&r'conv)r3rrrrr5r7r8r&s zUnetOutBlock.__init__cCs ||SrE)rS)r3r:r7r7r8r= szUnetOutBlock.forward)N)r?r@rAr&r=rCr7r7r5r8rRsrRr FTrrztuple | str | NonerrG) rrrrrrrrrJrrKc Cs@t||} d} | rt||| } t|||||||||| | | | d S)N) stridesrrrrrJrrKpaddingoutput_padding) get_paddingget_output_paddingr) rrrrrrrrrJrrKrVrWr7r7r8r's&  r'ztuple[int, ...] | int)rrreturncCsdt|}t|}||dd}t|dkr:tdtdd|D}t|dkr\|S|dS)Nr rzRpadding value should not be negative, please change the kernel size and/or stride.css|]}t|VqdSrEr.0pr7r7r8 6szget_padding..r.r/minAssertionErrortuplelen)rrkernel_size_npr4 padding_nprVr7r7r8rX0s  rX)rrrVrZcCsnt|}t|}t|}d|||}t|dkrDtdtdd|D}t|dkrf|S|dS)Nr[rzVout_padding value should not be negative, please change the kernel size and/or stride.css|]}t|VqdSrEr\r]r7r7r8r`Esz%get_output_padding..r ra)rrrVrfr4rgout_padding_np out_paddingr7r7r8rY;s   rY) __future__rcollections.abcrnumpyr.rOtorch.nnnn"monai.networks.blocks.convolutionsrmonai.networks.layers.factoriesrrmonai.networks.layers.utilsrrModuler rDrFrRPRELUINSTANCEr'rXrYr7r7r7r8 s,    YBC$"