MMROTATE的混淆矩阵confusion matrix生成

mmdetection中加入了混淆矩阵生成并可视化的功能,具体的代码在tools/analysis_tools/confusion_matrix.py。

mmrotate由于主流遥感数据集中的DOTA数据集标注格式问题,做了一些修改,所以我们如果是做遥感图像检测的Dota数据集的混淆矩阵,最好还是用mmrotate仓库里的confusion_matrix.py。

但是直接使用会有一些坑,我自己也是调试了一天,终于跑通,在这里记录一下。

首先mmrotate的仓库必须选择1.x的分支,默认拉取的分支是有调用bug的。

github clone -b 1.x https://github.com/open-mmlab/mmrotate.git

并且直接使用pip或者mim(mmrotate推荐的安装工具)来安装的话,mmcv/mmdet的版本是有问题的。经过测试,下图中版本不会存在冲突,可以正常运行。

解决完版本问题,我们在运行confusion_matrix.py依然会报错。

我报的错误是RuntimeError: shape '[5]' is invalid for input of size 0

这个问题我找了好久,最后发现是由于DOTA数据集中的标注文件为空导致的,即annfiles中的txt标注文件里面没有东西,这会导致上述错误。

但是标注为空说明这张图片上什么都没有,代码里的逻辑我推测是寻找跑出来的框在什么位置、是什么类别,当它找不到的时候,代码便发生错误。因为没有框就不能归类为识别为背景background,代码里可能没有考虑这个问题。

比较暴力的解法是在代码做循环的时候把空标签跳过即可。

在代码的85行,calculate_confusion_matrix这个函数中加上if的判断,如果标签为空就跳过。

    for idx, per_img_res in enumerate(results):
        res_bboxes = per_img_res['pred_instances']
        gts = dataset.get_data_info(idx)['instances']
        if len(gts) != 0:
            analyze_per_img_dets(confusion_matrix, gts, res_bboxes, score_thr,
                                tp_iou_thr, nms_iou_thr)
        prog_bar.update()

然后便可以顺利的跑出混淆矩阵的图了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值