Download load_encoder.py from TJason/ResEncL-T1-MAE: direct link, hf CLI and curl.
- Browser
- Download file 1.49 kB
-
https://huggingface.co/TJason/ResEncL-T1-MAE/resolve/main/load_encoder.py
- Command line
-
hf download hf://TJason/ResEncL-T1-MAE/load_encoder.py
-
curl -L -o load_encoder.py https://huggingface.co/TJason/ResEncL-T1-MAE/resolve/main/load_encoder.py
1.49 kB
| """Encoder construction matching nnssl's ResEncL preset, not a Transformers AutoModel. | |
| Architecture reference: MIC-DKFZ/nnssl, architectures/architecture_registry.py. | |
| Its local source carries CC-BY-SA-4.0; this does not assign a license to weights. | |
| """ | |
| from pathlib import Path | |
| import torch | |
| from torch import nn | |
| from dynamic_network_architectures.architectures.unet import ResidualEncoderUNet | |
| from safetensors.torch import load_model | |
| def build_encoder(): | |
| network = ResidualEncoderUNet( | |
| input_channels=1, n_stages=6, | |
| features_per_stage=[32,64,128,256,320,320],conv_op=nn.Conv3d, | |
| kernel_sizes=[[3,3,3]]*6, | |
| strides=[[1,1,1]]+[[2,2,2]]*5, | |
| n_blocks_per_stage=[1,3,4,6,6,6],num_classes=1, | |
| n_conv_per_stage_decoder=[1]*5,conv_bias=True, | |
| norm_op=nn.InstanceNorm3d,norm_op_kwargs={'eps':1e-5,'affine':True}, | |
| nonlin=nn.LeakyReLU,nonlin_kwargs={'inplace':True},deep_supervision=False, | |
| ) | |
| return network.encoder.eval() | |
| def load_encoder(directory): | |
| encoder=build_encoder() | |
| load_model(encoder,str(Path(directory)/'encoder.safetensors'),strict=True) | |
| return encoder.eval() | |
| if __name__=='__main__': | |
| import sys | |
| torch.set_num_threads(2) | |
| model=load_encoder(sys.argv[1]) | |
| with torch.inference_mode(): | |
| out=model(torch.randn(1,1,64,64,64)) | |
| tensors=out if isinstance(out,(list,tuple)) else [out] | |
| assert all(torch.isfinite(x).all() for x in tensors) | |
| print([list(x.shape) for x in tensors]) | |