Mask Scoring R-CNN——源码运行踩坑

运行环境:

RTX2080+CUDA9+torch1.0+torchvision0.2+python3.6.2+cudnn7.4


1、配置coco格式数据集
2、更改default参数:

  • NUM_CLASSES = 2
  • NUM_WORKERS = 0
  • _C.SOLVER.IMS_PER_BATCH = 2
  • _C.TEST.IMS_PER_BATCH = 1

3、更改paths_catalog参数:

  • DATA_DIR = "../datasets"

4、更改configs/e2e_mask_rcnn_R_50_FPN_1x.yaml

  • BASE_LR: 0.002
  • MAX_ITER: 3000 (改小为了更快看结果)

5、执行python setup.py build develop
6、执行python tools/train_net.py --config-file "configs/e2e_mask_rcnn_R_50_FPN_1x.yaml" SOLVER.IMS_PER_BATCH 2 SOLVER.BASE_LR 0.0025 SOLVER.MAX_ITER 720000 SOLVER.STEPS "(480000, 640000)" TEST.IMS_PER_BATCH 1


error: 不存在instances_minival2014.json和instances_valminusminival2014.json

报错原因:这两个文件是原coco数据集中的,保存的数据比val2014的少

解决办法:将val2014复制重命名成另外两个文件,或者在paths_catalog.py中将两个文件名全部换成val2014.json即可


error: RuntimeError: DataLoader worker (pid(s) 13952, 14260) exited unexpectedly

报错原因:进程问题(不太明白)

解决办法:num_workers=0


error: symbol lookup error: undefined symbol:PySlice_Unpack

报错原因:python==3.6.0和torch==1.0版本不合

解决办法:将python换成3.6.2, CUDA 9


THCudaCheck FAIL file=/pytorch/aten/src/THC/THCGeneral.cpp line=405 error=11 : invalid argument

报错原因:显卡用的RTX 2080Ti,CUDA就要装10以上,这个时候pytorch不能直接用pip装,要这样:

pip install https://download.pytorch.org/whl/cu100/torch-1.0.0-cp36-cp36m-linux_x86_64.whl

error: Loss = nan

报错原因:Loss发散

解决办法:

  1. GPU的arch设置的不对
    打开./lib/setup.py文件,找到第130行,将gpu的arch设置成与自己电脑相匹配的算力,这里举个例子,如果你用的是GTX1080,那么你的算力就是6.1,此时就需要将-arch=sm_52改成-arch=sm_61。
    可以在这个网站里查看到自己gpu的算力https://developer.nvidia.com/cuda-gpus
  2. 自己制作了VOC或者coco数据集格式
    如果你自己制作了voc pascal或者coco数据集格式,那么你需要注意,看看是否有类似下面的报错
    RuntimeWarning: invalid value encountered in log targets_dw = np.log(gt_widths / ex_widths)
    这种报错说明数据集的数据有一些问题,多出现在没有控制好边界的情况,首先,打开lib/database/pascal_voc.py文件,找到208行,将208行至211行每一行后面的-1删除,如下所示:
  • x1 = float(bbox.find(‘xmin’).text)
  • y1 = float(bbox.find(‘ymin’).text)
  • x2 = float(bbox.find(‘xmax’).text)
  • y2 = float(bbox.find(‘ymax’).text)
    原因是因为我们制作的xml文件中有些框的坐标是从左上角开始的,也就是(0,0)如果再减一就会出现log(-1)的情况
    如果这样之后还是出现类似的报错,那么说明依然有-1或者其他负数的情况出现。解决方法是打开./lib/model/config.py文件,找到flipp选项,将其置为False
    __C.TRAIN.USE_FLIPPED = False
    如果这样以后还是报类似的错误,就一定检查一下自己制作数据集的过程,看看是否哪里没有考虑清楚。
    3. 偏方:修改学习率,我将学习率调小,即可(还有如果在训练过程中土人不能训练,也有可能是学习率的问题,将学习率改小)

error: iteration问题,局部变量不存在

报错原因:
是因为之前训练中断,缓存没有释放,导致第二次训练时,iteration的值是上一次缓存的,没有执行for循环中的北荣,导致出错,直接将生成的models文件夹删除即可,如果完整的训练完,再次训练则不会出现这样的错误,应该有缓存释放的操作


error: RuntimeError: cuDNN error: CUDNN_STATUS_EXECUTION_FAILED

报错原因:

  1. 可能是cuda,cudnn,python,torch等的版本不匹配
  2. 如果匹配但还是报错看是否重新编译项目(不删除可能编译文件保存之前的配置),

解决办法:保证所有的设置版本正确,删除之前生成的编译文件包括build,log.txt和maskrcnn_benchmark.egg-info重新编译


error: RuntimeError: invalid argument 0: Sizes of tensors must match except in dimension 0........

报错原因:
torch连接两个tensor的第一个维度不匹配,不能在这个维度上进行拼接

解决办法: 将test batch改为1(不知道为什么每张GPU2不行,改成1就可以)


至此,将源码跑通,具体细节后续实现

你可能感兴趣的:(Mask Scoring R-CNN——源码运行踩坑)