[dff9e0]: / models / __pycache__ / resnet.cpython-37.pyc

Download this file

62 lines (54 with data), 5.0 kB

B

Fæd¹ã@szdZddlZddlmZGdd„dejƒZGdd„dejƒZGdd„dejƒZd	d
„Zdd„Z	d
d„Z
dd„Zdd„ZdS)z¥resnet in pytorch



[1] Kaiming He, Xiangyu Zhang, Shaoqing Ren, Jian Sun.

    Deep Residual Learning for Image Recognition
    https://arxiv.org/abs/1512.03385v1
éNcs.eZdZdZdZd‡fdd„	Zdd„Z‡ZS)Ú
BasicBlockz-Basic Block for resnet 18 and resnet 34

    écs´tƒ ¡t tj||d|dddt |¡tjddtj||tjddddt |tj¡¡|_	t ¡|_
|dks€|tj|kr°t tj||tjd|ddt |tj¡¡|_
dS)	NérF)Úkernel_sizeÚstrideÚpaddingÚbiasT)Úinplace)rrr)rrr)ÚsuperÚ__init__ÚnnÚ
SequentialÚConv2dÚBatchNorm2dÚReLUrÚ	expansionÚresidual_functionÚshortcut)ÚselfÚin_channelsÚout_channelsr)Ú	__class__©úE/home/hg119/data3/codes_for_data/Medical-SAM-Adapter/models/resnet.pyrs


zBasicBlock.__init__cCs tjdd| |¡| |¡ƒS)NT)r	)rrrr)rÚxrrrÚforward0szBasicBlock.forward)r)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rrrÚ
__classcell__rr)rrrsrcs.eZdZdZdZd‡fdd„	Zdd„Z‡ZS)	Ú
BottleNeckz.Residual block for resnet over 50 layers

    ércsÔtƒ ¡t tj||dddt |¡tjddtj|||ddddt |¡tjddtj||tjdddt |tj¡¡|_	t ¡|_
|dks ||tjkrÐt tj||tj|dddt |tj¡¡|_
dS)	NrF)rrT)r	r)rrrr)rrr)r
rrr
rrrr!rrr)rrrr)rrrr8s



zBottleNeck.__init__cCs tjdd| |¡| |¡ƒS)NT)r	)rrrr)rrrrrrMszBottleNeck.forward)r)rrrrrrrr rr)rrr!3sr!cs.eZdZd‡fdd„	Zdd„Zdd„Z‡ZS)	ÚResNetrc	sºtƒ ¡d|_t tjddddddt d¡tjdd¡|_| 	|d|dd	¡|_
| 	|d
|dd	¡|_| 	|d|d	d	¡|_| 	|d|dd	¡|_
tjdd
dd|_t dd¡|_dS)Né@rrF)rrrT)r	réé€éié)r)r
rrrr
rrrÚconv1Ú_make_layerÚconv2_xÚconv3_xÚconv4_xÚconv5_xÚconv6Ú	EmbeddingÚ
no_mask_embed)rÚblockZ	num_blockÚnum_classes)rrrrRs
zResNet.__init__cCsP|gdg|d}g}x,|D]$}| ||j||ƒ¡||j|_qWtj|ŽS)aþmake resnet layers(by layer i didnt mean this 'layer' was the 
        same as a neuron netowork layer, ex. conv layer), one layer may 
        contain more than one residual block 

        Args:
            block: block type, basic block or bottle neck block
            out_channels: output depth channel number of this layer
            num_blocks: how many blocks per layer
            stride: the stride of the first block of this layer
        
        Return:
            return a resnet layer
        r)Úappendrrrr
)rr2rÚ
num_blocksrÚstridesÚlayersrrrr*gs
zResNet._make_layercCs| |¡}| |¡}| |¡}| |¡}| |¡}| |¡}| | d¡d¡}| | d¡dd¡}|jj	 
dddd¡ | d¡ddd¡}||fS)Nréÿÿÿÿr(r'rr$)r)r+r,r-r.r/ÚviewÚsizer1ÚweightÚreshapeÚexpand)rrÚoutputZ
sparse_outputZdense_outputrrrr€s





zResNet.forward)r)rrrrr*rr rr)rrr#Psr#cCsttddddgƒS)z return a ResNet 18 object
    r%)r#rrrrrÚresnet18“sr?cCsttddddgƒS)z return a ResNet 34 object
    rr"r()r#rrrrrÚresnet34˜sr@cCsttddddgƒS)z return a ResNet 50 object
    rr"r()r#r!rrrrÚresnet50srAcCsttddddgƒS)z  return a ResNet 101 object
    rr"é)r#r!rrrrÚ	resnet101¢srCcCsttddddgƒS)z  return a ResNet 152 object
    réé$)r#r!rrrrÚ	resnet152§srF)
rÚtorchÚtorch.nnrÚModulerr!r#r?r@rArCrFrrrrÚ<module>	s%C