昇思25天学习打卡营第8天 |昇思MindSpore SSD 目标检测算法 学习与总结

一、引言

SSD(Single Shot MultiBox Detector)是 Wei Liu 等人在 ECCV 2016 上提出的一种目标检测算法,具有较高的检测精度和速度。

二、算法概述

  1. 主流算法类型

    • Two-stage 方法:如 RCNN 系列,先产生候选框,再分类和回归。
    • One-stage 方法:如 YOLO 和 SSD,直接通过主干网络给出类别位置信息,无需区域生成。
  2. 模型结构

    • 以 VGG16 为基础模型,新增卷积层以获取更多特征图用于检测。
    • 利用多尺度的特征图进行检测,浅层检测小目标,深层检测大目标。
  3. 模型特点

    • 多尺度检测:使用 6 种不同尺寸的特征图,使检测更充分,能检测出小目标。
    • 采用卷积进行检测:直接采用卷积对不同特征图提取检测结果。
    • 预设 anchor:采用预设边界框,在其指导下微调预测框的尺寸。

三、环境准备与数据处理

  1. 环境准备:确保本地安装了 mindspore、download、pycocotools、opencv-python。

  2. 数据准备与处理

    • 数据集为 COCO 2017,将其转换为 MindRecord 格式以减少磁盘和网络开销。
    • 为数据处理定义输入,包括 COCO 根目录、标注 JSON 文件、训练类别等。
  3. 数据采样

    • 模型对每个训练图像随机采样,包括使用整个原始输入图像、采样特定区域等。
    • 定义随机采样函数,如 random_sample_crop,进行图像和框的随机裁剪。
  4. 数据集创建

    • 使用 create_ssd_dataset 函数创建 SSD 数据集,包括数据解码、转换、增强等操作,并进行批量处理。

四、模型构建

  1. Backbone Layer:使用 VGG16 网络的前 13 个卷积层,将全连接层转换为卷积层以提取特征。

  2. Extra Feature Layer:在 VGG16 基础上增加 4 个深度卷积层提取更高层语义信息。

  3. Anchor:采用 PriorBox 进行区域生成,设计大量密集的 PriorBox 保证全面检测。

  4. Detection Layer:对 6 个预测特征图进行卷积操作,得到回归偏移量和类别概率分数。

五、损失函数

目标函数包括预选框与目标类别的置信度误差(confidence loss)和位置误差(location loss),位置损失采用 Smooth L1 Loss,置信度损失采用多类置信度上的 softmax 损失。

六、评估指标与训练过程

  1. 评估指标

    • 在 SSD 中,训练无需非极大值抑制(NMS),检测时需用 NMS 过滤重叠预测框。
    • 评估指标包括平均精度(AP)和平均召回率(AR),AP 反映预测结果错误率,AR 反映漏检率。
  2. 训练过程

    • 先验框匹配:确定训练图片中 ground truth 与先验框的匹配,采用最大 IOU 和阈值原则,进行正负样本划分,并采用 hard negative mining 平衡样本。
    • 损失函数:使用位置和置信度损失的加权和。
    • 数据增强:使用定义好的数据增强方式。

    模型训练设置 epoch 次数为 60,batch_size 为 5,图像尺寸为 300×300,使用 Momentum 优化器,初始学习率为 0.001,使用回调函数监控训练过程,每 10 个 epoch 保存一次模型。

七、评估

自定义 eval_net 类评估训练好的模型,计算不同设置下的 AP 和 AR,使用 COCOMetrics 类计算 mAP。

八、总结

SSD 目标检测算法在精度和速度上取得了较好的平衡,通过多尺度检测、卷积检测和预设 anchor 等策略提高了检测性能。但在实际应用中,仍需根据具体场景和需求进行调整和优化。

相关推荐
lilihuigz2 小时前
Tutor LMS 4.0 Beta版全新上线:以学习者为中心的移动优先学习体验
学习·在线教育·lms
王老师青少年编程2 小时前
csp信奥赛C++高频考点专项训练之贪心算法 --【哈夫曼贪心】:合并果子
c++·算法·贪心·csp·信奥赛·哈夫曼贪心·合并果子
叼烟扛炮3 小时前
C++第二讲:类和对象(上)
数据结构·c++·算法·类和对象·struct·实例化
天疆说3 小时前
【哈密顿力学】深入解读航天器交会最优控制中的Hamilton函数
人工智能·算法·机器学习
wuweijianlove4 小时前
关于算法设计中的代价函数优化与约束求解的技术7
算法
leoufung4 小时前
LeetCode 149: Max Points on a Line - 解题思路详解
算法·leetcode·职场和发展
样例过了就是过了4 小时前
LeetCode热题100 最长公共子序列
c++·算法·leetcode·动态规划
HXDGCL4 小时前
矩形环形导轨:自动化循环线的核心运动单元解析
运维·算法·自动化
张人玉5 小时前
机器视觉VsionPro——多目标检测高级用法动态
目标检测·计算机视觉·机器视觉·vsionpro
谭欣辰5 小时前
C++ 排列组合完整指南
开发语言·c++·算法