62 lines (54 with data), 5.0 kB
B
Fæd¹ ã @ sz d Z ddlZddlmZ G dd dejZG dd dejZG dd dejZd d
Zdd Z d
d Z
dd Zdd ZdS )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
é Nc s. e Zd ZdZdZd fdd Zdd Z ZS )Ú
BasicBlockz-Basic Block for resnet 18 and resnet 34
é c s´ t ¡ t tj||d|dddt |¡tjddtj||tj ddddt |tj ¡¡| _ t ¡ | _
|dks|tj| kr°t tj||tj d|ddt |tj ¡¡| _
d S ) Né r F)Úkernel_sizeÚstrideÚpaddingÚbiasT)Úinplace)r r r )r r r )Ú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.pyr s
zBasicBlock.__init__c C s t jdd| |¡| |¡ S )NT)r )r r r r )r Úxr r r Úforward0 s zBasicBlock.forward)r )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r r r Ú
__classcell__r r )r r r s r c s. e Zd ZdZdZd fdd Zdd Z ZS ) Ú
BottleNeckz.Residual block for resnet over 50 layers
é r c sÔ t ¡ t tj||dddt |¡tjddtj|||ddddt |¡tjddtj||tj dddt |tj ¡¡| _ t ¡ | _
|dks ||tj krÐt tj||tj |dddt |tj ¡¡| _
d S ) Nr F)r r T)r r )r r r r )r r r )r
r r r
r r r r! r r r )r r r r )r r r r 8 s
zBottleNeck.__init__c C s t jdd| |¡| |¡ S )NT)r )r r r r )r r r r r r M s zBottleNeck.forward)r )r r r r r r r r r r )r r r! 3 s r! c s. e Zd Zd fdd Zdd Zdd Z ZS ) ÚResNetr c sº t ¡ d| _t tjddddddt d¡tjdd¡| _| |d|d d ¡| _
| |d
|d d ¡| _| |d|d d ¡| _| |d|d d ¡| _
tjdd
dd| _t dd¡| _d S )Né@ r r F)r r r T)r r é é é i é )r )r
r r r r
r r r Úconv1Ú_make_layerÚconv2_xÚconv3_xÚconv4_xÚconv5_xÚconv6Ú EmbeddingÚ
no_mask_embed)r ÚblockZ num_blockÚnum_classes)r r r r R s
zResNet.__init__c C sP |gdg|d }g }x,|D ]$}| || j||¡ ||j | _qW tj| 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 )Úappendr r r r
)r r2 r Ú
num_blocksr ÚstridesÚlayersr r r r* g s
zResNet._make_layerc C s | |¡}| |¡}| |¡}| |¡}| |¡}| |¡}| | d¡d¡}| | d¡dd¡}| jj
dddd¡ | d¡ddd¡}||fS )Nr éÿÿÿÿr( r'