运行环境:
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发散
解决办法:
- GPU的arch设置的不对
打开./lib/setup.py文件,找到第130行,将gpu的arch设置成与自己电脑相匹配的算力,这里举个例子,如果你用的是GTX1080,那么你的算力就是6.1,此时就需要将-arch=sm_52改成-arch=sm_61。
可以在这个网站里查看到自己gpu的算力https://developer.nvidia.com/cuda-gpus- 自己制作了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
报错原因:
- 可能是cuda,cudnn,python,torch等的版本不匹配
- 如果匹配但还是报错看是否重新编译项目(不删除可能编译文件保存之前的配置),
解决办法:
保证所有的设置版本正确,删除之前生成的编译文件包括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就可以)
至此,将源码跑通,具体细节后续实现