Problem with loading models from torch.hub pytorch/vision in pytest

Hi!

I’m trying to load models from “pytorch/vision” repo through torch.hub, but each time I get such error:
Downloading: “https://github.com/pytorch/vision/zipball/main” to …/…/…/.cache/torch/hub/main.zip …/…/…/.cache/torch/hub/pytorch_vision_main/torchvision/io/image.py:13: UserWarning: Failed to load image Python extension: warn(f"Failed to load image Python extension: {e}")

Internet connection works fine. Also, I’ve tried few VPNs.

I use the latest torch and torchvision versions:
torch==1.13.1
torchvision==0.14.1

Python 3.10.8
OS: MacOS

Also, I’ve tried to remove “.cache/torch/hub/” directory and re-run script - it doesn’t work.

Code example:

import torch

model = torch.hub.load("pytorch/vision", "regnet_x_400mf")

Is it a bug or maybe I do something wrong?

The warning is unrelated to the download and raised by torchvision as it cannot import the built-in image extension.
Are you seeing any issues in the actual model or were you only concerned about seeing this warning?

Hi! @ptrblck

Thanks for response!

I found a problem.

This code works well as early:

model = torch.hub.load("pytorch/vision", "regnet_x_400mf")
model.eval()

tensor = torch.randn((2, 3, 224, 224))
output = model.forward(tensor)
print(output.size())

But when I’m trying to run it under pytest - it falls with import error:

def test_torch_hub_load():
    model = torch.hub.load("pytorch/vision", "regnet_x_400mf")
    model.eval()

    tensor = torch.randn((2, 3, 224, 224))
    output = model.forward(tensor)
    print(output.size())

Error:

___________________________________________________________________________ test_torch_hub_load ___________________________________________________________________________

    def test_torch_hub_load():
>       model = torch.hub.load("pytorch/vision", "regnet_x_400mf")

tests/test_models.py:45: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
../../lib/python3.10/site-packages/torch/hub.py:542: in load
    model = _load_local(repo_or_dir, model, *args, **kwargs)
../../lib/python3.10/site-packages/torch/hub.py:569: in _load_local
    hub_module = _import_module(MODULE_HUBCONF, hubconf_path)
../../lib/python3.10/site-packages/torch/hub.py:90: in _import_module
    spec.loader.exec_module(module)
<frozen importlib._bootstrap_external>:883: in exec_module
    ???
<frozen importlib._bootstrap>:241: in _call_with_frames_removed
    ???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

    # Optional list of dependencies required by the package
    dependencies = ["torch"]
    
    from torchvision.models import get_model_weights, get_weight
    from torchvision.models.alexnet import alexnet
    from torchvision.models.convnext import convnext_base, convnext_large, convnext_small, convnext_tiny
    from torchvision.models.densenet import densenet121, densenet161, densenet169, densenet201
    from torchvision.models.efficientnet import (
        efficientnet_b0,
        efficientnet_b1,
        efficientnet_b2,
        efficientnet_b3,
        efficientnet_b4,
        efficientnet_b5,
        efficientnet_b6,
        efficientnet_b7,
        efficientnet_v2_l,
        efficientnet_v2_m,
        efficientnet_v2_s,
    )
    from torchvision.models.googlenet import googlenet
    from torchvision.models.inception import inception_v3
    from torchvision.models.maxvit import maxvit_t
    from torchvision.models.mnasnet import mnasnet0_5, mnasnet0_75, mnasnet1_0, mnasnet1_3
    from torchvision.models.mobilenetv2 import mobilenet_v2
    from torchvision.models.mobilenetv3 import mobilenet_v3_large, mobilenet_v3_small
    from torchvision.models.optical_flow import raft_large, raft_small
    from torchvision.models.regnet import (
        regnet_x_16gf,
        regnet_x_1_6gf,
        regnet_x_32gf,
        regnet_x_3_2gf,
        regnet_x_400mf,
        regnet_x_800mf,
        regnet_x_8gf,
        regnet_y_128gf,
        regnet_y_16gf,
        regnet_y_1_6gf,
        regnet_y_32gf,
        regnet_y_3_2gf,
        regnet_y_400mf,
        regnet_y_800mf,
        regnet_y_8gf,
    )
    from torchvision.models.resnet import (
        resnet101,
        resnet152,
        resnet18,
        resnet34,
        resnet50,
        resnext101_32x8d,
        resnext101_64x4d,
        resnext50_32x4d,
        wide_resnet101_2,
        wide_resnet50_2,
    )
    from torchvision.models.segmentation import (
        deeplabv3_mobilenet_v3_large,
        deeplabv3_resnet101,
        deeplabv3_resnet50,
        fcn_resnet101,
        fcn_resnet50,
        lraspp_mobilenet_v3_large,
    )
    from torchvision.models.shufflenetv2 import (
        shufflenet_v2_x0_5,
        shufflenet_v2_x1_0,
        shufflenet_v2_x1_5,
        shufflenet_v2_x2_0,
    )
    from torchvision.models.squeezenet import squeezenet1_0, squeezenet1_1
    from torchvision.models.swin_transformer import swin_b, swin_s, swin_t, swin_v2_b, swin_v2_s, swin_v2_t
    from torchvision.models.vgg import vgg11, vgg11_bn, vgg13, vgg13_bn, vgg16, vgg16_bn, vgg19, vgg19_bn
>   from torchvision.models.video import (
        mc3_18,
        mvit_v1_b,
        mvit_v2_s,
        r2plus1d_18,
        r3d_18,
        s3d,
        swin3d_b,
        swin3d_s,
        swin3d_t,
    )
E   ImportError: cannot import name 'swin3d_b' from 'torchvision.models.video' (../../lib/python3.10/site-packages/torchvision/models/video/__init__.py)

../../.cache/torch/hub/pytorch_vision_main/hubconf.py:74: ImportError

However, when I’m removing torchvision, it works fine in both cases.

In general it’s not a problem for me, just weird behaviour. Hope it could be useful for someone. Thanks!