Faster R-CNN遇到的所有坑及解决方法

最近项目要求,需要跑一些两阶段算法作为对比,首先选经典的 Faster R-CNN 作为开头,一年前跑过,想着应该很简单就跑上了,没想到配环境 + 跑通用了一个晚上的时间。先放图,零点顺利跑通训练上:

在这里插入图片描述
话不多说,上问题和解决方法。

问题1 到底用 torch1.0.0 还是 torch0.4.0(torchvision同理)

这个问题可以说是最关键,也是坑最多的了。选择对版本已经成功了一半。我这次用的是Github官网上 pytorch 版本的 jwyang/faster-rcnn.pytorch ,最开始我选择的是 pytorch0.4.0 版本的项目代码:

https://github.com/jwyang/faster-rcnn.pytorch

它的 README 中这样描述:

在这里插入图片描述
注意,千万不要用 python2.7 ,惨痛的教训

首先, pytorch0.4.0 第一个坑就是安装,目前torch官网支持安装指令的最老版本是 pytorch0.4.1 ,想要安装 0.4.0 版本,一个方法是下载 .whl 文件,另一个方法就是全网找指令(当时我用了这个方式成功安装了 0.4.0 版本)

在这里插入图片描述
还有一个关键的问题就是版本之间的冲突问题,包括代码的冲突。pytorch0.4.0 版本过老,导致很多 python3.6 安装包版本与其冲突,包括但不限于 scipy、opencv、torchvision 等。此外,在 pytorch0.4.0 版本的 Faster R-CNN 项目中,有些 import 操作是基于老版本写的,想解决这种问题就又回到了版本匹配问题上(全是坑)

后来找到 Faster R-CNN 的 pytorch1.0.0 版本代码,柳暗花明:

https://github.com/jwyang/faster-rcnn.pytorch/tree/pytorch-1.0

强烈推荐大家用这个版本,顺利太多了。官网上 torch1.0.0 与对应的 torchvision 安装指令一气呵成(cuda10.0版本):

conda install pytorch1.0.0 torchvision0.2.1 cuda100 -c pytorch

安装好最关键的 torch 之后,后面就按部就班 pip install -r requirements ,建好数据集、预训练权重、遇到 no module named ’ ’ 问题 pip install 即可。

问题2 AttributeError: ‘version_info’ object has no attribute ‘version

pip install pyparsing==2.4.7

问题3 libmkldnn.so.0: undefined symbol: cblas_sgemm_alloc

pip install mkl==2019

问题4 TypeError: load() missing 1 required positional argument: ‘Loader‘

找到对应代码位置,将 yaml.load() 改为 yaml.safe_load()

问题5 ImportError: cannot import name ‘imread’

将 scipy 版本降为 1.2.1 :先 uninstall scipy, 之后 pip install scipy==1.2.1

问题6 ImportError: cannot import name ‘_mask’

pip install pycocotools

问题7 KeyError: ‘uav_s’ 、KeyError: ‘uav_l’

最后重点说一下这个问题。

在 lib/datasets/pascal_voc.py 中,定义自己训练数据的类别:

self._classes = ('__background__',  # always index 0
                         'UAV_L','UAV_S')

这里小小提醒一下,不能删除 ‘background’ 类。之所以会遇到 KeyError 是因为 pascal_voc.py 中定义的类别与 xml 标签不对应,这里提示我 xml 中存在我未定义的 ‘uav_s’ 和 ‘uav_l’ 两类。然而,利用 ultraedit 软件检查标签并没有发现这两类,困惑了很久,最后尝试直接在类别定义中加入 ‘uav_s’ 和 ‘uav_l’ 两类:

self._classes = ('__background__',  # always index 0
                         'UAV_L','UAV_S','uav_l','uav_s')

竟然成功了…

这里的问题我分析可能是因为项目代码不区分大小写,导致小写的类别对应不上报错,有更好解决方案的朋友欢迎指导~

问题解决!
pascal_voc.py 中 第238行

cls = self._class_to_ind[obj.find('name').text.lower().strip()]

此段代码将类别强制改为小写,所以会报错’uav_s’,‘uav_l’,将此行代码改为

cls = self._class_to_ind[obj.find('name').text.strip()]

问题解决

以上就是一晚上的收获了,训练完还要看一下效果如何(肯定不好,哈哈)

参考
Faster-RCNN.pytorch的搭建
Github faster-rcnn.pytorch-issue

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值