mmcv平台相关内容学习与使用

目录

一、相关网页

二、不同用途网页

(一)、detect

三、个人训练测试心得

(一)、detect

1、创建数据集

 2、创建配置文件(需改进,系统化)

3、训练

4、测试

5、实用工具

(1)、模型服务部署

(2)、模型复杂度(输出flops,params)(官方说,仅供参考)

(3)、混淆矩阵

(4)、COCO 分离和遮挡实例分割性能评估(只适用于实例分割模型(mmdet3.0.0))(只适用于coco本体数据集)

6、解决报错


一、相关网页

  1. https://openmmlab.com/(官网)
  2. OpenMMLab · GitHub(github官网)
  3. [mmsegmentation] mmsegmentation的linux安装记录_captain飞虎大队的博客-CSDN博客
  4. mirrors / open-mmlab / mmdetection · GitCode(csdn加速)

二、不同用途网页

(一)、detect

  1. Swin Transformer目标检测4——训练自己数据集 - beyonderwei
  2. 开始你的第一步 — MMDetection 3.0.0 文档(6.19测试安装mmdet有误)(6.19修正:完全按照官网教程测试demo成功,mmdet需要使用git源码,mim安装有误,csdn加速有误)
  3. 深度学习之目标检测(Swin Transformer for Object Detection)_swin l目标检测_qq_41627642的博客-CSDN博客
  4. Swin Transformer 代码学习笔记(目标检测)_swin transformer目标检测_athrunsunny的博客-CSDN博客
  5. Swin Transformer做主干的 Faster RCNN 目标检测网络(mmdetection)_swintransformer为主干的_Beyonderwei的博客-CSDN博客
  6. 在标准数据集上训练预定义的模型(待更新) — MMDetection 3.0.0 文档(按照这个流程成功开始训练)
  7. 使用mmdetection训练自己的coco数据集(免费分享自制数据集文件)_coco mmdetection_gy-7的博客-CSDN博客
  8. mmdetection测试阶段生成各种评价指标,pkl,mAP,APm,APs,APl等_pkl文件是怎么训练出来的_北京纯牛奶的博客-CSDN博客
  9. mmdetection目标检测过程参数_mmdetection参数_盛世芳华的博客-CSDN博客

(二)、segment

  1. Swin-Transformer 图像分割实战:使用Swin-Transformer-Semantic-Segmentation训练ADE20K数据集(语义分割)_AI浩的博客-CSDN博客

三、个人训练测试心得

(一)、detect

    按照官方教程进行训练与测试,其过程分为以下几步:

1、创建数据集

将数据集转换为coco格式,将图片与标签信息共同生成json文件,分为训练集与测试集两个json,分别与图片一起放置在不同文件夹当中,其格式如下:

以下是几种将其他数据格式转换为coco的方式:

(1)、将yolo格式txt文件转换为coco数据集json格式

(2)、等用到了再说。

 2、创建配置文件(需改进,系统化)

在config文件夹下,创建自定义参数文件夹,例如person,并在其中创建配置文件,例如mask-rcnn_r50-caffe_fpn_ms-poly-1x_balloon.py,其内容如下所示:

# 新配置继承了基本配置,并做了必要的修改
_base_ = '../mask_rcnn/mask-rcnn_r50-caffe_fpn_ms-poly-1x_coco.py'

# 我们还需要更改 head 中的 num_classes 以匹配数据集中的类别数
model = dict(
    roi_head=dict(
        bbox_head=dict(num_classes=1), mask_head=dict(num_classes=1)))

# 修改数据集相关配置
data_root = 'data/balloon/'
metainfo = {
    'classes': ('balloon', ),
    'palette': [
        (220, 20, 60),
    ]
}
train_dataloader = dict(
    batch_size=1,
    dataset=dict(
        data_root=data_root,
        metainfo=metainfo,
        ann_file='train/annotation_coco.json',
        data_prefix=dict(img='train/')))
val_dataloader = dict(
    dataset=dict(
        data_root=data_root,
        metainfo=metainfo,
        ann_file='val/annotation_coco.json',
        data_prefix=dict(img='val/')))
test_dataloader = val_dataloader

# 修改评价指标相关配置
val_evaluator = dict(ann_file=data_root + 'val/annotation_coco.json')
test_evaluator = val_evaluator

# 使用预训练的 Mask R-CNN 模型权重来做初始化,可以提高模型性能
load_from = 'https://download.openmmlab.com/mmdetection/v2.0/mask_rcnn/mask_rcnn_r50_caffe_fpn_mstrain-poly_3x_coco/mask_rcnn_r50_caffe_fpn_mstrain-poly_3x_coco_bbox_mAP-0.408__segm_mAP-0.37_20200504_163245-42aa3d00.pth'

主要包含即修改的部分:使用的模型信息(_base_)、需要检测的类别数(num_classes=1、不算背景)、数据集位置(data_root)、数据集类别名称(classes)、训练集与测试集json文件名称(ann_file、有三处)、训练集与测试集名称(data_prefix,有两处)、预训练文件下载地址(load_from,自己搭的网络应该是没有的)。

有关于预训练文件的部分,如果使用的模型代码中包含预训练文件的下载地址,最好是自行下载后,将其替换为自己存放的位置,例如:

 因为在训练过程中下载可能会出问题,比如网络无法连接。

其文件夹格式如下:

最好在文件夹名称前加个0,这样能够区分自己创建的和原先的。

3、训练

训练时,首先通过cd进入工程所在文件夹,即mmdetection,然后在终端输入:

python tools/train.py --config configs/balloon/mask-rcnn_r50-caffe_fpn_ms-poly-1x_balloon.py

其中,“--config”后跟的是前面创建的配置文件。

在训练时,会在主目录下创建文件夹work_dirs(如果之前没有),并在其下产生与配置文件同名的文件夹,训练好的参数文件就在其中(不足之处:没有将效果最好的模型参数单独提取出来),另外还会生成一个py文件,其中包含配置内容的全部信息,可以从此处修改所有需要修改的参数(除了上面介绍的,还有像是max_epochs,checkpoint interval(训练多少轮保存一次参数)、val_interval(训练多少轮进行一次验证))。

根据训练的时间不同,会在该文件夹下产生不同的带时间戳文件夹,内部包含终端产生的日志。

其文件夹格式如下所示:

 其中,json文件为训练或测试时的结果输出,config为训练或测试时的全部参数,与配置文件相同。

训练时会看到以下内容:

06/20 16:55:09 - mmengine - INFO - Epoch(train)  [3][2250/3207]  lr: 1.0000e-04  eta: 1:55:59

其中eta代表剩余训练时长

4、测试

测试时,在终端输入:

python tools/test.py --config xxxxxx --checkpoint xxxxxx

 其中,‘--config’后跟的是配置文件(可以选择训练时的配置文件,也可以选择work_dirs中的文件),‘--checkpoint’后跟的是训练好的参数(在work_dirs中,也可以是预训练参数)。

在进行测试时,同样会在work_dirs中对应的文件夹下生成带时间戳文件夹,内部包含信息参考上一节说明。

如果在终端输入(比上面慢许多,可能是因为在一张张进行推理,官方文档说是默认一张,但是可以同时处理多张,经过测试,发现在速度上并没有明显变化,其代码为 --cfg-options  test_dataloader.batch_size=16):

python tools/test.py --config xxxxxx --checkpoint xxxxxx --show-dir result

将会在带时间戳文件夹下,生成一个result文件夹,其中包含测试图像对比,左边为带gt标签的原始图像,右边为带预测标签的预测图像,例如:

(这里先不放图了,想起来这个数据集需要保密)

此外,还可以在终端输入‘--out result.pkl’生成文件,可以使用mmset提供的数据分析工具对该文件进行分析,从而得到测试时的一些结果,例如混淆矩阵

上面是直接利用之前的验证集进行测试的结果,如果想测试一批无标签数据,那么需要做以下几步:

(1)、通过在终端输入以下内容,利用待测数据生成json文件:

python tools/dataset_converters/images2coco.py --img_path xxxxx --classes xxxx --out xxxx

其中,img_path为图片所在文件夹,classe为类列表文本文件名,文本中每一行存储一个类别,out为输出文件位置,需要为json文件。

(2)、修改配置文件中的test_dataloader,具体如下图所示:

 (3)、跟上方带标签测试相同,在终端输入代码、配置文件、模型参数等信息进行测试。

5、实用工具

mmdet官方提供了一些实用工具,下面列出几个我觉得比较重要的(其他的内容参考官方链接):

(1)、模型服务部署
(2)、模型复杂度(输出flops,params)(官方说,仅供参考)
(3)、混淆矩阵

在终端输入:

python tools/analysis_tools/confusion_matrix.py ${CONFIG}  ${DETECTION_RESULTS}  ${SAVE_DIR} 

其中config为配置参数文件,detection results为.pkl文件,save dir为混淆矩阵图像保存界面。

该代码有部分问题需要解决:

①、保存图像显示不完全:

②、数值显示部分按以下标注内容修改:

    # draw confution matrix value
    thresh = confusion_matrix.max() / 2.#设置颜色阈值
    for i in range(num_classes):
        for j in range(num_classes):
            ax.text(
                j,
                i,
                '{:.2f}%'.format(confusion_matrix[i,j] if not np.isnan(confusion_matrix[i, j]) else -1),#显示百分比保留两位小数
                ha='center',
                va='center',
                color="white" if confusion_matrix[i, j] < thresh else "black",#在不同阈值范围内,字体显示不同的颜色
                size=5)#字体大小修改为5

③、遇到报错:

UserWarning: Tight layout not applied. The left and right margins cannot be made large enough to accommodate all axes decorations.
  fig.tight_layout()

这个应该是在提醒显示不完全,待解决。

(4)、COCO 分离和遮挡实例分割性能评估(只适用于实例分割模型(mmdet3.0.0))(只适用于coco本体数据集)

在终端输入:

python tools/analysis_tools/coco_occluded_separated_recall.py results.pkl --out occluded_separated_recall.json --ann val.json

其中results.pkl为测试时保存的pkl文件,out后跟结果保存地址,ann后跟测试集json地址。

经过测试后发现,该代码只适用于coco文件,原因如下:

class CocoOccludedSeparatedMetric(CocoMetric):  
   def __init__(
            self,
            *args,
            occluded_ann:
        str = 'https://www.robots.ox.ac.uk/~vgg/research/tpod/datasets/occluded_coco.pkl',  # noqa
            separated_ann:
        str = 'https://www.robots.ox.ac.uk/~vgg/research/tpod/datasets/separated_coco.pkl',  # noqa
            score_thr: float = 0.3,
            iou_thr: float = 0.75,
            metric: Union[str, List[str]] = ['bbox', 'segm'],
            **kwargs) -> None:
        super().__init__(*args, metric=metric, **kwargs)
        self.occluded_ann = load(occluded_ann)
        self.separated_ann = load(separated_ann)
        self.score_thr = score_thr
        self.iou_thr = iou_thr
    def compute_recall(self,
                       result_dict: dict,
                       gt_ann: list,
                       is_occ: bool = True) -> tuple:
        correct = 0
        prog_bar = mmengine.ProgressBar(len(gt_ann))
        for iter_i in range(len(gt_ann)):
            cur_item = gt_ann[iter_i]
            cur_img_name = cur_item[0]


            assert cur_img_name in result_dict.keys()

occluded_ann与separated_ann两个文件时coco数据集的文件,目前没有发现应该替换成什么,这两个应该指的是有遮挡的数据与无遮挡的数据,检测其中的数据是否在测试集当中时,报错。

6、解决报错

  1. 【已解决】ERROR:The testing results of the whole dataset is empty_SurpassMs的博客-CSDN博()  改学习率
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值