运行SOLOV2 心酸经历,实战帖

运行SOLOV2 心酸经历,实战帖

SOLO v2作为单阶段实例分割新秀,在COCO数据集上的表现要优于Mask Rcnn(单从作者论文结果来看)。但是,最近在用SOLO v2跑自己的ssdd数据集时,却发现这位作者的代码,可真是一步一个坑。这里把自己填了的,没填的,都分享一下。

官方代码

https://github.com/WXinlong/SOLO

基于mmdetection,那应该配置环境很简单,可是我发现第一步作者就给你埋了一个大坑。

作者install里介绍需要使用torch<=1.4 ,可是他在最近的一次更新都适配为torch1.5了。但是!使用torch1.5你依然会遇到奇奇怪怪的问题,这里就不列举了,我试了1.6,1.4,1.1都会有填不完的坑。

所以,按照作者最后一次更新,我又把代码改回去了,主要是把torchcheck改成atcheck,这里需要修改32处,大家可以去官方修改记录里改回去。
废话不多,修改完后,我使用如下的配置,终于能让代码跑起来了:

这里注意config里的num classes,又埋坑了。mask head中的num classes和我们理解的类别不一样,所以保持原来的256即可,整个config只需要修改一处num classes,等于你的类别数加一,这里划重点,后面要考。

按照上面的处理刚能跑起来,问题又来了,loss_ins不下降!!!!一直保持==3,我惊了,学习率使用的就是默认的0.01。经过多次修改学习率,我发现0.005还可以,loss终于下降了,在epoch=9和12的时候,学习率分别降低为10分之1。

最后的最后,loss定格在了0.3左右,ap比cascade,yolact低了20多个点,这明显是出bug了。疯狂查询后,我以为获得了救命稻草——“Grids”超参数。在一个github的issue中,有人通过增大grids数目,成功提升了15个点,但是经过我的多次修改,证明不能说提升轻微,只能说毫无卵用

如果各位大哥,知道为啥ap这么低,还望指点一波

SOLOv2 mmdetectionv2.3

在issue里,我找到了SOLOv2 在mmdetectionv2.3上的一个实现代码,这个安装没啥坑,按照官方安装即可,config配置很容易,但是AP出来都是0,或者-1,累了。不推荐使用

Detectron2框架

第一次见,宛如天人,我立刻关闭了mmdetection的界面
就在昨天晚上,找到了solov2基于detectron2的实现,总想着这下应该能实现了,开干
配置环境很简单,无脑操作,接下来是数据集配置
这里推荐两篇
第一篇这篇文章里数据集制作说的很清楚。制作好coco数据集后,直接修改train_net.py。完全没有必要按照第二篇新建一个训练.py
第二篇修改train net,按照这篇文章里新建的那个train文件来修改,缺啥补啥。
在这个代码中,开头部分有一个CLASS_NAMES =[“AA”],那么这里需不需要加“background”呢?通过试验,我是加上了。
重点来了,还记官方代码那部分说的num classes吗,类别数加1吗?这里通过实验同样需要,我看那两篇文章评论区居然有人说不需要?believe me

如果报错:
(1)

[Errno 2] No such file or directory: '/content/drive/MyDrive/AdelaiDet/datasets/coco/val2017/000001'

那么
"/usr/local/lib/python3.7/dist-packages/detectron2/data/dataset_mapper.py"125行,加个’.jpg’
(2)

"/usr/local/lib/python3.7/dist-packages/detectron2/evaluation/coco_evaluation.py", line 332
assert len(class_names) == precisions.shape[2]

那么用这段来代替332以及下面的数行

       assert len(class_names) - 1 == precisions.shape[2]
       results_per_category = []     
       precision = precisions[:, :, 0, 0, -1]
       precision = precision[precision > -1]
       ap = np.mean(precision) if precision.size else float("nan")
       name='ship'
       results_per_category.append(("{}".format(name), float(ap * 100)))
  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值