目录

模型介绍

模型使用

下载源码:

在data文件夹下新建VOCdevkit文件夹,导入VOC格式的数据集。如下图:

下载权重文件,放在weights(如果没有就在根目录新建)文件夹下面。

修改voc0712.py里面的类别。

选择配置文件。

删除pycocotools

修改nms_wrapper.py

修改train.py

修改test.py

可视化结果


模型介绍

物体检测模型M2Det,是北京大学&阿里达摩院提出的Single-shot目标检测新模型,使用multi-level特征。在MS-COCO benchmark上,M2Det的单尺度版本和多尺度版本AP分别达到41.044.2 

该模型的特点:

  • 提出多级特征金字塔网络MLFPN。MLFPN的结构如下:

  • 基于提出的MLFPN,结合SSD,提出一种新的Single-shot目标检测模型M2Det

模型使用

  • 下载源码:

https://github.com/qijiezhao/M2Det”。

  • 在data文件夹下新建VOCdevkit文件夹,导入VOC格式的数据集。如下图:

  • 下载权重文件,放在weights(如果没有就在根目录新建)文件夹下面。

  • 修改voc0712.py里面的类别。

将:

VOC_CLASSES = ( '__background__', # always index 0'aeroplane', 'bicycle', 'bird', 'boat','bottle', 'bus', 'car', 'cat', 'chair','cow', 'diningtable', 'dog', 'horse','motorbike', 'person', 'pottedplant','sheep', 'sofa', 'train', 'tvmonitor')

修改为:

VOC_CLASSES = ( '__background__', # always index 0
    'aircraft', 'oiltank')

选择配置文件。

本例采用configs->m2det512_vgg.py配置文件

model = dict(
    type = 'm2det',
    input_size = 512,
    init_net = True,
    pretrained = 'weights/vgg16_reducedfc.pth',
    m2det_config = dict(
        backbone = 'vgg16',
        net_family = 'vgg', # vgg includes ['vgg16','vgg19'], res includes ['resnetxxx','resnextxxx']
        base_out = [22,34], # [22,34] for vgg, [2,4] or [3,4] for res families
        planes = 256,
        num_levels = 8,
        num_scales = 6,
        sfam = False,
        smooth = True,
        num_classes = 3,#更改类别,按照数据集里面的类别数量+1(背景)
        ),
    rgb_means = (104, 117, 123),
    p = 0.6,
    anchor_config = dict(
        step_pattern = [8, 16, 32, 64, 128, 256],
        size_pattern = [0.06, 0.15, 0.33, 0.51, 0.69, 0.87, 1.05],
        ),
    save_eposhs = 10,
    weights_save = 'weights/' #保存权重文件的目录
    )
train_cfg = dict(
    cuda = True,#是否使用cuda
    warmup = 5,
    per_batch_size = 2,#修改batchsize,按照自己显卡的能力修改
    lr = [0.004, 0.002, 0.0004, 0.00004, 0.000004],#学利率调整,调整依据step_lr的epoch数值。
    gamma = 0.1,
    end_lr = 1e-6,
    step_lr = dict(
        COCO = [90, 110, 130, 150, 160],
        VOC = [100, 150, 200, 250, 300], # unsolve
        ),
    print_epochs = 10,#每个10个epoch保存一个模型。
    num_workers= 2,#线程数,根据CPU调整
    )

test_cfg = dict(
    cuda = True,
    topk = 0,
    iou = 0.45,
    soft_nms = True,
    score_threshold = 0.1,
    keep_per_class = 50,
    save_folder = 'eval'
   
)

loss = dict(overlap_thresh = 0.5,
            prior_for_matching = True,
            bkg_label = 0,
            neg_mining = True,
            neg_pos = 3,
            neg_overlap = 0.5,
            encode_target = False)

optimizer = dict(type='SGD', momentum=0.9, weight_decay=0.0005)#激活函数。

#修改dataset,本例采用VOC2007数据集,将COCO的删除即可,删除VOC2012

dataset = dict(VOC = dict(train_sets = [('2007', 'trainval')],eval_sets = [('2007', 'test')],))import osimport oshome = ""#home路径,默认是linux的,本例采用win10,讲其修改为“”VOCroot = os.path.join(home,"data/VOCdevkit/")COCOroot = os.path.join(home,"data/coco/")
  • 删除pycocotools

在安装pycocotools工具前提下,将程序自带的pycocotools工具包删除。

修改coco.py

将:

from utils.pycocotools.coco import COCO
from utils.pycocotools.cocoeval import COCOeval
from utils.pycocotools import mask as COCOmask

修改为:

from pycocotools.coco import COCO
from pycocotools.cocoeval import COCOeval
from pycocotools import mask as COCOmask

  • 修改nms_wrapper.py

将:

from .nms.cpu_nms import cpu_nms, cpu_soft_nms
from .nms.gpu_nms import gpu_nms
# def nms(dets, thresh, force_cpu=False):
#     """Dispatch to either CPU or GPU NMS implementations."""
#     if dets.shape[0] == 0:
#         return []
#     if cfg.USE_GPU_NMS and not force_cpu:
#         return gpu_nms(dets, thresh, device_id=cfg.GPU_ID)
#     else:
#         return cpu_nms(dets, thresh)
def nms(dets, thresh, force_cpu=False):
    """Dispatch to either CPU or GPU NMS implementations."""
    if dets.shape[0] == 0:
        return []
    if force_cpu:
        return cpu_soft_nms(dets, thresh, method = 1)
        #return cpu_nms(dets, thresh)
    return gpu_nms(dets, thresh)

修改为:

from .nms.py_cpu_nms import py_cpu_nms

def nms(dets, thresh, force_cpu=False):
    """Dispatch to either CPU or GPU NMS implementations."""
    if dets.shape[0] == 0:
        return []
    if force_cpu:
        return py_cpu_nms(dets, thresh, method = 1)
    return py_cpu_nms(dets, thresh)

  • 修改train.py

修改选定配置的文件

parser.add_argument('-c', '--config', default='configs/m2det512_vgg.py')

修改数据的格式
parser.add_argument('-d', '--dataset', default='VOC', help='VOC or COCO dataset')

然后就可以开始训练了。
  • 修改test.py

parser = argparse.ArgumentParser(description='M2Det Testing')
parser.add_argument('-c', '--config', default='configs/m2det512_vgg.py', type=str)#选择配置文件,和训练的配置文件对应
parser.add_argument('-d', '--dataset', default='VOC', help='VOC or COCO version')
parser.add_argument('-m', '--trained_model', default='weights/M2Det_VOC_size512_netvgg16_epoch30.pth', type=str, help='Trained state_dict file path to open')
parser.add_argument('--test', action='store_true', help='to submit a test file')

修改voc0712.py282行的xml路径。将:

annopath = os.path.join(
                        rootpath,
                        'Annotations',
                        '{:s}.xml')

改为:

annopath = rootpath+'/Annotations/{:s}.xml'

测试结果:

  • 可视化结果

修改demo.py中超参数

parser.add_argument('-c', '--config', default='configs/m2det512_vgg.py', type=str)
parser.add_argument('-f', '--directory', default='imgs/', help='the path to demo images')
parser.add_argument('-m', '--trained_model', default='weights/M2Det_VOC_size512_netvgg16_epoch30.pth', type=str, help='Trained state_dict file path to open')

然后将部分测试图片放到imgs文件夹下面,运行demo.py.

本文实例:https://download.csdn.net/download/hhhhhhhhhhwwwwwwwwww/12428492

手把手教物体检测——M2Det相关推荐

  1. YoloV5实战:手把手教物体检测

    摘要:​YOLOv5并不是一个单独的模型,而是一个模型家族,包括了YOLOv5s.YOLOv5m.YOLO... 本文分享自华为云社区<YoloV5实战:手把手教物体检测--YoloV5> ...

  2. ScaledYOLOv4实践:手把手教物体检测——ScaleYOLOv4-large

    目录 摘要 训练 制作数据集 下载代码和权重文件 增加Mish函数 准备训练 测试 摘要 YOLOv4-large是专为云端GPU而设计的一种架构,主要目的在于获得更好的目标检测精度.作者基于前述分析 ...

  3. TikTok账号运营:零播放、被限流的3大原因,手把手教你检测技巧和处理方法

    大家好,我是项柚.从业TikTok跨境电商多年的自媒体人,专注分享海外版抖音TikTok运营技巧和商业变现,主要针对外贸企业做TikTok的商业化布局 TikTok运营的过程中,大家发布了短视频内容, ...

  4. 手把手教你用深度学习做物体检测(二):数据标注

      "本篇文章将开始我们训练自己的物体检测模型之旅的第一步-- 数据标注."   上篇文章介绍了如何基于训练好的模型检测图片和视频中的物体,若你也想先感受一下物体检测,可以看看上篇 ...

  5. 手把手教你用深度学习做物体检测(四):模型使用

    上一篇<手把手教你用深度学习做物体检测(三):模型训练>中介绍了如何使用yolov3训练我们自己的物体检测模型,本篇文章将重点介绍如何使用我们训练好的模型来检测图片或视频中的物体.   如 ...

  6. 手把手教你用深度学习做物体检测(三):模型训练

    本篇文章旨在快速试验使用yolov3算法训练出自己的物体检测模型,所以会重过程而轻原理,当然,原理是非常重要的,只是原理会安排在后续文章中专门进行介绍.所以如果本文中有些地方你有原理方面的疑惑,也没关 ...

  7. 超详细!手把手教你使用YOLOX进行物体检测(附数据集)

    点击下方卡片,关注3D视觉工坊公众号 3D视觉干货第一时间送达 作者:王浩,3D视觉开发者社区签约作者,毕业于北京航空航天大学,人工智能领域优质创作者,CSDN博客认证专家. 编辑:3D视觉开发者社区 ...

  8. 实战三:手把手教你实现物体识别

                                 实战三:手把手教你实现物体识别 一.基于Haad+Adaboost实现人脸识别 1.原理介绍(参考下面的博客文章) http://www.cn ...

  9. 手把手教你用yolov3模型实现目标检测教程(一) - 环境配置

    手把手教你用yolov3模型实现目标检测(一) 写在前面: 由于项目需要,使用yolov3模型做了各种现实场景物体的目标检测.做完了过了好长时间,感觉有些遗忘,还是该留下点东西,方便自己查找,也希望能 ...

  10. B站教学 手把手教你使用YOLOV5之口罩检测项目 最全记录详解 ( 深度学习 / 目标检测 / pytorch )

    目录 一.环境搭建 pytorch的下载 测试(cmd窗口中) pycharm下测试(要配置pycharm中的虚拟环境) 二.数据标注 下载labor image 使用labelimg进行图片标注 划 ...

最新文章

  1. EXT.JS的PROXY放在哪里,STORE放在哪里,绝对是个技术活儿啊。
  2. 机器学习数据预处理之缺失值:中位数填充
  3. 【Breadth-first Search 】103. Binary Tree Zigzag Level Order Traversal
  4. 学妹问,学网站开发还是打 ACM?
  5. Selenium 中文手册
  6. 对malloc和free的思考
  7. 昇腾CANN论文上榜CVPR,全景图像生成算法交互性再增强
  8. Windows 8 Platform (一) 台式机、笔记本电脑、平板电脑和智能手机
  9. stderr和stdout详细解说
  10. webpack 运行提示“The ‘mode‘ option has not been set”的原因和解决方法
  11. QTP11 5发布,改名UFT
  12. Python电子书下载
  13. C语言实现顺序表基本操作
  14. 百度echart resize的坑
  15. canvas 基础系列(一)之实现抽奖刮刮卡(橡皮擦)
  16. Eclipse的配置
  17. 基层管理者的角色定位
  18. Python画各种樱花
  19. 【2022年】Win11修改锁屏界面、登录界面背景图片方法(亲测有效)
  20. [翻译] Overleaf 中的语法检查 - Spell check language

热门文章

  1. 使用linux批量引物设计,使用SSRMMD便捷、迅速与准确地进行:SSR位点检测,多态性SSR筛选,与批量SSR引物设计...
  2. SQL2005数据库可疑的解决方法
  3. Java编写五线谱上的音符_新手读懂五线谱
  4. Laya 打包微信 处理分包 fnt字体加载问题 版本管理的报错
  5. 韩语在线翻译图片识别_超强的免费OCR文字扫描工具,网页视频PDF均可识别并翻译...
  6. 计算机英语名词解释之软件工程篇
  7. 一些基本数字图像处理算法
  8. windows7共享打印机无法连接0x00000bcb错误怎么解决
  9. 操作失败,错误为 0x00000bcb
  10. Python 详解九九乘法表