RuntimeError: _th_or not supported on CUDAType for Bool / IndexError: list index out of range(mask)

记一次配使用maskrcnn-benchmark的惨痛经历,因为要用到分割,所以就使用自己的数据集转成coco格式后用maskrcnn-benchmark来训练得到目标的轮廓,但是在运行的过程中报了两个错误,很致命。

首先配置好环境,这里我就犯了一个错误,把pytorch版本装的太高了,我用的是pytorch==1.4.0,结果训练的时候报错selected_polygons.append(self.polygons[i])
IndexError: list index out of range

我查了之后发现pytorch在1.2版本以后对数据的返回值做了修改,所以我按照issue上的方法对代码进行了修改,如下

https://github.com/facebookresearch/maskrcnn-benchmark/issues/725

改完之后可以训练了,但是轮廓却检测不到,通过实验我发现还是torch.uint8和torch.bool的原因。最后,,,,我还是更换了pytorch的版本,,但还是不行,我开始意识到这是我的数据出现问题了,因为总是训练几千轮开始报索引越界的错误,后来我看coco的代码,发现了一个地方,就是数据中的segmentation部分有的坐标个数是小于6个的,这样就会被认作无效数据从而不参与训练,但是在代码中索引不会进行减一操作。所以,我把数据集中长度小于6的标注删除了,终于成功了。。。

 class PolygonInstance(object): 
     """ 
     This class holds a set of polygons that represents a single instance 
     of an object mask. The object can be represented as a set of 
     polygons 
     """ 
  
     def __init__(self, polygons, size): 
         """ 
             Arguments: 
                 a list of lists of numbers. 
                 The first level refers to all the polygons that compose the 
                 object, and the second level to the polygon coordinates. 
         """ 
         if isinstance(polygons, (list, tuple)): 
             valid_polygons = [] 
             for p in polygons: 
                 p = torch.as_tensor(p, dtype=torch.float32) 
                 if len(p) >= 6:  # 3 * 2 coordinates 
                     valid_polygons.append(p) 
             polygons = valid_polygons

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值