树莓派4B调用torchvision的ssdlite320_mobilenet_v3_large报AttributeError咨询
错误原因
你使用的torchvision 0.8.2版本未内置ssdlite320_mobilenet_v3_large接口,该模型是在torchvision 0.11.0版本才正式加入官方检测模块的,和你当前环境的PyTorch版本不匹配,因此触发属性不存在的报错。
树莓派4B(ArmV8)适配解决方案
方案1:升级依赖版本(推荐)
- 树莓派ArmV8架构适配最好的兼容版本为PyTorch 1.10.0 + torchvision 0.11.0,既包含目标模型接口,也不会出现过高版本导致的内存溢出、依赖缺失问题
- 升级完成后原代码的模型调用逻辑无需修改即可正常运行
方案2:不改动现有环境的兼容方案
如果不想修改现有依赖版本,可以用torch.hub直接拉取对应模型结构,无需升级torchvision:
修改你代码中MODELS字典里的ssd-mobilenet对应项:
MODELS = { "frcnn-resnet": detection.fasterrcnn_resnet50_fpn, "frcnn-mobilenet": detection.fasterrcnn_mobilenet_v3_large_320_fpn, "retinanet": detection.retinanet_resnet50_fpn, # 替换原来的detection.ssdlite320_mobilenet_v3_large "ssd-mobilenet": lambda **kwargs: torch.hub.load('pytorch/vision:v0.11.0', 'ssdlite320_mobilenet_v3_large', **kwargs), "ssd-vgg16": detection.ssd300_vgg16, "mrcnn-resnet": detection.maskrcnn_resnet50_fpn }
额外注意事项
树莓派4B没有NVIDIA独立GPU,你代码中调用GPUtil读取GPU使用率的逻辑会直接触发崩溃,需要删除或修改这段逻辑:
# 删除以下原代码 # GPUs = GPUtil.getGPUs() # gpu = GPUs[0] # gpu1 = gpu.load * 100 # 替换为固定值即可 gpu2 = "0.00"
内容的提问来源于stack exchange,提问作者jason
相关产品推荐
相关产品推荐

