pytorch maskrcnn 报错.

本文记录了使用torchvision的MaskRCNN模型时遇到的一个错误:call takes 2 positional arguments but 3 were given。该问题源于作者在自己的代码中同时引入了两个不同版本的Compose类,最终通过明确指定使用maskrcnn库中的Compose类解决了问题。

今天用 torchvision 官方提供的maskrcnn 版本是可以运行的.
单独可以跑, 后来合并到我的系统里就不能运行了, 报下面的错误. 搞了2个多小时.

class Compose(object):
    def __init__(self, transforms):
        self.transforms = transforms

    def __call__(self, image, target
训练 Mask R-CNN 出现 `'NoneType' object has no attribute 'shape'` 的错误通常是因为某个变量的值为 `None`,而后续代码尝试对该变量调用 `.shape` 属性导致出错。这种问题可能是由数据加载、模型配置或输入预处理等环节引起的。 以下是可能的原因及解决办法: ### 可能原因分析 1. **数据加载问题** 如果你在读取图像或标注文件时出现问题(如路径错误、文件损坏),可能会返回 `None` 值给某些变量。 2. **模型初始化未完成** 某些层或张量在模型构建过程中未能正确初始化,可能导致它们成为 `None` 类型。 3. **输入数据不符合预期形状** 数据预处理步骤可能有问题,比如图片尺寸不符合网络需求或通道数不对,进而引发错误。 4. **代码逻辑错误** 程序中可能存在条件判断失误或其他逻辑漏洞,导致本应存在的对象变成了 `None`。 --- ### 解决方案 #### 步骤一:检查输入数据是否正常 确认所有输入的数据都是有效的,并且具有正确的形状和类型: ```python import cv2 image = cv2.imread('path_to_image') if image is None: print("Image not loaded correctly") else: print(image.shape) # 应该输出 (height, width, channels) ``` 如果发现有图片无法成功加载,则需要排查对应的路径或者修复损坏的文件。 #### 步骤二:调试具体位置找到 `None` 通过打印日志定位到具体的变量名是什么时候变为 `None` 的。例如,在每次赋值操作之后插入断点并观察其状态变化: ```python def debug_variable(var): if var is None: raise ValueError(f"Variable is None: {var}") # 对每个关键变量都加入这样的检测函数... debug_variable(some_varible_in_your_code) ``` #### 步骤三:验证框架版本兼容性 如果你使用的深度学习库(TensorFlow 或 PyTorch)存在不同版本之间的差异,也有可能引起此类异常。因此建议参考官方文档选择稳定匹配的依赖组合。 --- ### 示例修正后的部分代码片段 假设问题是出现在 `Dataset` 加载阶段,可以改进如下: ```python class CustomDataset(utils.Dataset): def load_image(self, image_id): info = self.image_info[image_id] path = info['path'] try: image = skimage.io.imread(path) if len(image.shape) != 3 or image.shape[2] != 3: raise Exception("Invalid image format.") return image except Exception as e: print(f"Error loading image from {path}: ", str(e)) return None def __getitem__(self, idx): img = self.load_image(idx) mask = ... # 根据实际业务生成mask if img is None or mask is None: raise RuntimeError("Failed to get item due to missing data!") return {'img': img, 'mask': mask} ``` 上面例子展示了如何增强健壮性的措施——对每一步都有严格的非空校验机制。 ---
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值