MMDetection使用及相关问题

一、项目

1.环境配置
参考文献:
安装mmdetection并测试demo
mmdetection安装&训练VOC格式数据
mmdetection训练pascal_voc格式的数据集
Mmdetection的安装和使用
mmdetection 商汤开源库 FasterRCNN 训练自己的数据集 VOC2007, 結果可視化 2019
mmdetection使用方法(使用mmdetection搭建faster-RCNN模型)

二、使用:

1.激活环境:

conda activate open-mmlab

2.测试demo

2.1 测试图片

python demo/image_demo.py  demo/demo.jpg  configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py checkpoints/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth

2.2 测试视频

python demo/test_vedio.py configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py  checkpoints/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth  --file demo/demo.mp4 --out demo/res.mp4

3.训练自己的数据:

将标注数据转化为voc或coco格式

#从开始训练模型
python tools/train.py configs/pascal_voc/faster_rcnn_r50_fpn_1x_voc0712.py

python tools/train.py configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py

#当训练中断,可从断点权重文件处继续训练
 python tools/train.py configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py  --resume-from="work_dirs/faster_rcnn_r50_fpn_1x_coco/epoch_11.pth"

4.测试

4.1 image_demo测试一张图片
python demo/image_demo.py demo/demo_img/1.jpg configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py work_dirs/faster_rcnn_r50_fpn_1x_coco/epoch_12.pth

在这里插入图片描述
在这里插入图片描述

4.2 使用test.py
python tools/test.py  configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py   work_dirs/faster_rcnn_r50_fpn_1x_coco0707/latest.pth  --out demo/res0803/result_1.pkl --eval bbox

在这里插入图片描述

三、遇到问题

1.服务器缓存

出现报错
*** Error in `python’: corrupted size vs. prev_size: 0x00007fc860655850 *** 等

代码

sudo sh -c "echo 3 > /proc/sys/vm/drop_caches"

查看缓存情况

free

在这里插入图片描述

2.core dumped

在这里插入图片描述
解决:改变import顺序

3.缺少test.text文件

在这里插入图片描述
在下载的数据集中,确实不存在test.txt文件 。

查看原程序tests/data/VOCdevkit/VOC2007/ImageSets/Main中内容,是存在test.txt文件的。原因是下载数据集不全,只下载了trainval部分,没有下载test部分
在这里插入图片描述
下载的数据集的目录

4.error: unrecognized arguments

train.py: error: unrecognized arguments: --resume_from=work_dirs/faster_rcnn_r50_fpn_1x_coco/epoch_11.pth

参数名字写错
应–resume-from

5.Segmentation fault

在这里插入图片描述
解决:导入包顺序调整,将import torch放在前面即可。

6.[Errno 28] No space left on device

原因是使用的磁盘或者文件夹下没有剩余空间
解决方案:
查看磁盘空间,我的问题是/home下使用率为100%,解决方案比较简单粗暴,删除了部分没有用的文件,释放部分空间。

df -h

更多操作可参考:
提示"No space left on device"错误的解决方法
No space left on device 解决Linux系统磁盘空间满的办法

7.cv2.error: Caught error in DataLoader worker process 0.

在这里插入图片描述
原因是训练的图片数据集有两张图上传失败,重新上传这两张图
在这里插入图片描述

8.ImportError: No module named _internal’

Traceback (most recent call last):
File “/usr/local/bin/pip”, line 6, in
from pip._internal import main
ImportError: No module named _internal’
在这里插入图片描述
查看了许多解决方案都没解决,后来:

python -m pip install mmcv-full -f https://download.openmmlab.com/mmcv/dist/cu101/torch1.6.0/index.html

在pip前面加上 python -m 就可以了

9.ImportError: dlopen: cannot load any more object with static TLS

根据报错,应该是在 .cv2的原因, opencv-python的版本号不匹配,卸载了opencv-python,重新安装了更低版本的opencv-python

10.修改base.py

路径:mmdet/models/detectors/base.py

 def show_result(self,
                    img,
                    result,
                    score_thr=0.3,
                    bbox_color=(72, 101, 241),
                    text_color=(72, 101, 241),
                    mask_color=None,
                    thickness=2,
                    font_size=13,
                    win_name='',
                    show=False,
                    wait_time=0,
                   # out_file=None,
                    out_file='out.jpg'):
#原來
        # if not (show or out_file):
        #     return img
        if show or out_file:
            return img

11. 运行image_demo.py 一直报错 Segmentation fault (core dumped)

这个问题困扰我很久很久,刚开始以为导入包的顺序问题,但是没有解决,最终修改image_demo 代码:添加导入cv2 和torch包,虽然没有用到,但是导入这两个包就可以了。

from argparse import ArgumentParser
import cv2
import torch
from mmdet.apis import inference_detector, init_detector,show_result_pyplot

12.src/tcmalloc.cc:277] Attempt to free invalid pointer 0x15

在这里插入图片描述
解决方案:
运行

export LD_PRELOAD="/usr/lib64/libjemalloc.so"

参考:https://blog.csdn.net/weixin_37871174/article/details/108631603

13.训练自己的数据集只有一类时

当使用voc格式的数据集训练且类别只有一类时, mmdet/datasets/voc.py 中

class VOCDataset(XMLDataset):

    CLASSES = ('Taxi',)

后面要加‘,’,不然会报错。

14.RuntimeError: CUDA error: device-side assert triggered

在训练过程中出现此问题,刚开始没有问题 是可以正常训练的

(pid=3654) RuntimeError: cuDNN error: CUDNN_STATUS_MAPPING_ERROR
(pid=3654) /pytorch/aten/src/ATen/native/cuda/IndexKernel.cu:84: operator(): block: [0,0,0], thread: [0,0,0] Assertion `index >= -sizes[i] && index < sizes[i] && "index out of bounds"` failed.
(pid=3654) /pytorch/aten/src/ATen/native/cuda/IndexKernel.cu:84: operator(): block: [0,0,0], thread: [3,0,0] Assertion `index >= -sizes[i] && index < sizes[i] && "index out of bounds"` failed.
(pid=3654) /pytorch/aten/src/ATen/native/cuda/IndexKernel.cu:84: operator(): block: [0,0,0], thread: [96,0,0] Assertion `index >= -sizes[i] && index < sizes[i] && "index out of bounds"` failed.
(pid=3654) /pytorch/aten/src/ATen/native/cuda/IndexKernel.cu:84: operator(): block: [0,0,0], thread: [97,0,0] Assertion `index >= -sizes[i] && index < sizes[i] && "index out of bounds"` failed.
(pid=3654) /pytorch/aten/src/ATen/native/cuda/IndexKernel.cu:84: operator(): block: [0,0,0], thread: [98,0,0] Assertion `index >= -sizes[i] && index < sizes[i] && "index out of bounds"` failed.

进行了两处修改:
(1)报错的方法中传进来一个列表 此别表位于cpu上,其他部分位于gpu,将列表转换为tensor并在gpu上

index=torch.Tensor(index).cuda(cuda_id)

(2).数组索引越界导致的cudnn错误
查看输出发现在,在取index中数据时,提供的索引值有时会大于index的长度,因此报错 ,修改此部分代码。

参考:https://blog.csdn.net/qq_41866626/article/details/116737731

四、其他

1.关于数据集(自己的):

mmdetection训练自己的数据集–CVAT标注文件导出coco格式及相关操作

2.可参考

voc数据集下载
下载地址:https://pjreddie.com/projects/pascal-voc-dataset-mirror/
参考链接:VOC2007、2012数据集音速下载及训练、验证、测试集划分使用说明(附代码)

数据集简介:Pascal voc2007数据集

首先产生pkl文件,pkl文件需要建立一个文件夹eval
python tools/test.py configs/pascal_voc/faster_rcnn_r50_fpn_1x_voc0712.py work_dirs/latest.pth --out=eval/result.pkl
计算mAP
python tools/voc_eval.py eval/result.pkl configs/pascal_voc/faster_rcnn_r50_fpn_1x_voc0712.py

conda list看一下安装的包,结果报错y
https://blog.csdn.net/weixin_42236288/article/details/100854878?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-0&spm=1001.2101.3001.4242

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值