B ct@sddlZddlmZGdddejZGdddejZGdddejZGdd d ejZiZd d Z dd dZ d ddZ d!ddZ ddddgddgddddgddddfddZ dS)"Ncs&eZdZdfdd ZddZZS)Slicecstt|||_dS)N)superr__init__ start_index)selfr) __class__R/home/vaishanth/workspace/independent_study_project/MiDaS/midas/backbones/utils.pyrszSlice.__init__cCs|dd|jdfS)N)r)rxr r r forward sz Slice.forward)r)__name__ __module__ __qualname__rr __classcell__r r )rr rsrcs&eZdZdfdd ZddZZS) AddReadoutrcstt|||_dS)N)rrrr)rr)rr r rszAddReadout.__init__cCs`|jdkr0|dddf|dddfd}n|dddf}|dd|jdf|dS)Nrr)r unsqueeze)rr readoutr r r r s &zAddReadout.forward)r)r rrrr rr r )rr rsrcs&eZdZdfdd ZddZZS)ProjectReadoutrcs6tt|||_ttd||t|_dS)Nr) rrrrnn SequentialLinearGELUproject)r in_featuresr)rr r rszProjectReadout.__init__cCsZ|dddfd|dd|jdf}t|dd|jdf|fd}||S)Nrr)r expand_asrtorchcatr)rr rfeaturesr r r r #s."zProjectReadout.forward)r)r rrrr rr r )rr rsrcs$eZdZfddZddZZS) Transposecstt|||_||_dS)N)rr!rdim0dim1)rr"r#)rr r r+szTranspose.__init__cCs||j|j}|S)N) transposer"r#)rr r r r r 0szTranspose.forward)r rrrr rr r )rr r!*s r!csfdd}|S)Ncs |t<dS)N) activations)modelinputoutput)namer r hook9szget_activation..hookr )r)r*r )r)r get_activation8s r+forward_featurescCstd|d|jd}|jd}|jd}|jd}t|drL||}t|dr`||}t|d rt||}t|d r||}||||fS) Nzpretrained.model.z(x)1234act_postprocess1act_postprocess2act_postprocess3act_postprocess4)execr%hasattrr1r2r3r4) pretrainedr function_namelayer_1layer_2layer_3layer_4r r r forward_default?s            r=c Csx|j\}}}}td|d|jd}|jd}|jd} |jd} |jdd|}|jdd|}|jdd| } |jdd| } tt dt ||j j d ||j j dg} |jd kr| |}|jd kr| |}| jd kr| | } | jd kr | | } |jd t|j|}|jd t|j|}|jd t|j| } |jd t|j| } ||| | fS) Nzglob = pretrained.model.z(x)r-r.r/r0rrr)shaper5r%r1r2r3r4rr UnflattenrSizer& patch_sizendimlen) r7r r8bchwr9r:r;r< unflattenr r r forward_adapted_unflattenSs:        rJrcsf|dkrtgt|}nF|dkr8tgt|}n*|dkrVfdd|D}n dsbtd|S)Nignoreaddrcsg|]}tqSr )r).0Zout_feat)r vit_featuresr r sz$get_readout_oper..FzSwrong operation for readout token, use_readout can be 'ignore', 'add', or 'project')rrDrAssertionError)rNr use_readoutr readout_operr )rrNr get_readout_opersrS`iir rKc CsDt}||_|jj|dtd|jj|dtd|jj|dtd|jj|dtdt|_t||||} t| dt ddt dt |dd |dd gtj ||ddddd tj|d|dd d dd ddd |_t| dt ddt dt |dd |dd gtj ||ddddd tj|d|ddddd ddd |_t| dt ddt dt |dd |dd gtj ||ddddd |_t| dt ddt dt |dd |dd gtj ||ddddd tj |d|ddddd |_||j_d d g|j_|S)Nrr-rr.rr/r>r0) in_channels out_channels kernel_sizestridepaddingT)rZr[r\r]r^biasdilationgroups)rModuler&blocksregister_forward_hookr+r%rSrr!r@rrAConv2dConvTranspose2dr1r2r3r4rrB) r&r sizehooksrNrQrstart_index_readoutr7rRr r r make_backbone_defaults $ $ $ $  rk)r,)r,)r)rtorch.nnrrcrrrr!r%r+r=rJrSrkr r r r s"      ,