U Ph=@sbddlmZddlZddlmZddlmZmZddlZddl m Z ddl m Z ddl mZmZmZddlmZmZddlmZd d d d d dddddddddgZGddde jZGddde jZGddde jZGdd d e jZddd d!d"d#ZGd$d d eZGd%ddeZGd&ddeZ Gd'ddeZ!eZ"eZ#Z$eZ%Z&e Z'Z(e!Z)Z*dS)() annotationsN) OrderedDict)CallableSequence)load_state_dict_from_url)ConvDropoutPool) get_act_layerget_norm_layer)look_up_optionDenseNetDensenet DenseNet121 densenet121 Densenet121 DenseNet169 densenet169 Densenet169 DenseNet201 densenet201 Densenet201 DenseNet264 densenet264 Densenet264c sNeZdZdddifdfddddddddd fd d Zd d d ddZZS) _DenseLayerreluinplaceTbatchintfloat str | tupleNone) spatial_dims in_channels growth_ratebn_size dropout_probactnormreturnc st||}ttj|f} ttj|f} t|_|j dt |||d|j dt |d|j d| ||ddd|j d t |||d|j d t |d|j d | ||d ddd |dkr|j d| |dS)aH Args: spatial_dims: number of spatial dimensions of the input image. in_channels: number of the input channel. growth_rate: how many filters to add each layer (k in paper). bn_size: multiplicative factor for number of bottle neck layers. (i.e. bn_size * k features in the bottleneck layer) dropout_prob: dropout rate after each dense layer. act: activation type and arguments. Defaults to relu. norm: feature normalization type and arguments. Defaults to batch norm. norm1namer#channelsrelu1r-conv1F kernel_sizebiasnorm2relu2conv2)r4paddingr5rdropoutN) super__init__rCONVrDROPOUTnn Sequentiallayers add_moduler r ) selfr#r$r%r&r'r(r) out_channels conv_typeZ dropout_type __class__Q/home/dell461/cl/sdc2/HISourceFinder-master-l/src/monai/networks/nets/densenet.pyr=.s  z_DenseLayer.__init__ torch.Tensorxr*cCs||}t||gdS)Nr2)rBtorchcat)rDrM new_featuresrIrIrJforwardVs z_DenseLayer.forward)__name__ __module__ __qualname__r=rQ __classcell__rIrIrGrJr,s "(rc s@eZdZdddifdfdddddddddd fd d ZZS) _DenseBlockrrTrrr r!r") r#rBr$r&r%r'r(r)r*c sNtt|D]6} t|||||||d} ||7}|d| d| qdS)a{ Args: spatial_dims: number of spatial dimensions of the input image. layers: number of layers in the block. in_channels: number of the input channel. bn_size: multiplicative factor for number of bottle neck layers. (i.e. bn_size * k features in the bottleneck layer) growth_rate: how many filters to add each layer (k in paper). dropout_prob: dropout rate after each dense layer. act: activation type and arguments. Defaults to relu. norm: feature normalization type and arguments. Defaults to batch norm. )r(r)z denselayer%dr2N)r<r=rangerrC) rDr#rBr$r&r%r'r(r)ilayerrGrIrJr=]s   z_DenseBlock.__init__rRrSrTr=rUrIrIrGrJrV[s rVcs:eZdZdddifdfdddddddfd d ZZS) _TransitionrrTrrr!r")r#r$rEr(r)r*c s~tttj|f}ttj|f}|dt|||d|dt|d|d|||ddd|d |d d d d S) af Args: spatial_dims: number of spatial dimensions of the input image. in_channels: number of the input channel. out_channels: number of the output classes. act: activation type and arguments. Defaults to relu. norm: feature normalization type and arguments. Defaults to batch norm. r)r,rr0convr2Fr3pool)r4strideN) r<r=rr>r AVGrCr r )rDr#r$rEr(r)rF pool_typerGrIrJr=}s z_Transition.__init__rZrIrIrGrJr[{s r[c sbeZdZdZdddddddifd d fd d d d d d d d d ddd fdd ZdddddZZS)r a Densenet based on: `Densely Connected Convolutional Networks `_. Adapted from PyTorch Hub 2D version: https://pytorch.org/vision/stable/models.html#id16. This network is non-deterministic When `spatial_dims` is 3 and CUDA is enabled. Please check the link below for more details: https://pytorch.org/docs/stable/generated/torch.use_deterministic_algorithms.html#torch.use_deterministic_algorithms Args: spatial_dims: number of spatial dimensions of the input image. in_channels: number of the input channel. out_channels: number of the output classes. init_features: number of filters in the first convolution layer. growth_rate: how many filters to add each layer (k in paper). block_config: how many layers in each pooling block. bn_size: multiplicative factor for number of bottle neck layers. (i.e. bn_size * k features in the bottleneck layer) act: activation type and arguments. Defaults to relu. norm: feature normalization type and arguments. Defaults to batch norm. dropout_prob: dropout rate after each dense layer. @  rrTrgr Sequence[int]r!r r") r#r$rE init_featuresr% block_configr&r(r)r'r*c  stttj|f} ttj|f} ttj|f} tt d| ||dddddfdt | ||dfd t |d fd | ddd d fg|_ |}t |D]\}}t|||||| || d}|j d|d ||||7}|t|d kr|j dt | ||dq|d}t||||| d}|j d|d ||}qtt dt |d fd| d fdtd fdt||fg|_|D]}t|| rtjt|jnjt|tjtjtjfrtjt|jd tjt|j dn$t|tjrtjt|j dqdS)Nconv0r^r9F)r4r_r:r5norm0r,relu0r0pool0r2)r4r_r:)r#rBr$r&r%r'r(r) denseblocknorm5)r$rEr(r) transitionrr]flattenoutr)!r<r=rr>r MAX ADAPTIVEAVGr@rArr r features enumeraterVrClenr[FlattenLinear class_layersmodules isinstanceinitkaiming_normal_rN as_tensorweight BatchNorm1d BatchNorm2d BatchNorm3d constant_r5)rDr#r$rErkr%rlr&r(r)r'rFraZ avg_pool_typerX num_layersblockZ _out_channelstransmrGrIrJr=sz           zDenseNet.__init__rKrLcCs||}||}|S)N)ryr~)rDrMrIrIrJrQs  zDenseNet.forward)rRrSrT__doc__r=rQrUrIrIrGrJr s (Oz nn.Modulestrbool)modelarchprogressc sdddd}t||d}|dkr(tdtd}t||dtD]F}||}|rJ|d d |d |d }||<|=qJ| fd d D | dS)z This function is used to load pretrained models. Adapted from PyTorch Hub 2D version: https://pytorch.org/vision/stable/models.html#id16. z!s z$_load_state_dict..) r ValueErrorrecompilerlistkeysmatchgroupritemsupdateload_state_dict) rrr model_urls model_urlpatternkeyresnew_keyrIrrJ_load_state_dicts2   "   rc s8eZdZdZdddddddd d d d fd d ZZS)rzFDenseNet121 with optional pretrained support when `spatial_dims` is 2.rbrcrdFTrrjrr" r#r$rErkr%rl pretrainedrr*c sDtjf||||||d| |r@|dkr4tdt|d|dS)Nr#r$rErkr%rlr^Parameter `spatial_dims` is > 2 ; currently PyTorch Hub does notprovide pretrained models for more than two spatial dimensions.rr<r=NotImplementedErrorr rDr#r$rErkr%rlrrkwargsrGrIrJr=+s  zDenseNet121.__init__)rbrcrdFTrRrSrTrr=rUrIrIrGrJr(sc s8eZdZdZdddddddd d d d fd d ZZS)rzFDenseNet169 with optional pretrained support when `spatial_dims` is 2.rbrcrerfrcrcFTrrjrr"rc sDtjf||||||d| |r@|dkr4tdt|d|dS)Nrr^rrrrrGrIrJr=Ls  zDenseNet169.__init__)rbrcrFTrrIrIrGrJrIsc s8eZdZdZdddddddd d d d fd d ZZS)rzFDenseNet201 with optional pretrained support when `spatial_dims` is 2.rbrcrerf0rcFTrrjrr"rc sDtjf||||||d| |r@|dkr4tdt|d|dS)Nrr^rrrrrGrIrJr=ms  zDenseNet201.__init__)rbrcrFTrrIrIrGrJrjsc s8eZdZdZd ddddddddd d fd d ZZS)rrbrcrerfrbrFTrrjrr"rc s0tjf||||||d| |r,tddS)NrzECurrently PyTorch Hub does not provide densenet264 pretrained models.)r<r=rrrGrIrJr=s  zDenseNet264.__init__)rbrcrFTrrIrIrGrJrs)+ __future__rr collectionsrcollections.abcrrrNtorch.nnr@Z torch.hubrmonai.networks.layers.factoriesrrr monai.networks.layers.utilsr r monai.utils.moduler __all__ModulerrArVr[r rrrrrrrrrrrrrrrIrIrIrJ sL     / k%!!!