高性能、高适配,SSD 孪生兄弟出场即 C 位

Tensorflow笔记——详解深度学习learning_rate以及如何调整学习率 1.什么是学习率?   学习率(Learning rate)作为监督学习以及深度学习中重要的超参,其决定着目标函数能否收敛到局部最小值以及何时收敛到最小值,学习率越低,损失函数的变化速度就越慢。虽然使用低学习率可以确保我们不会错过任何局部极小值,但也意味着我们将花费更长的时间来进行收敛。合适的学习率能够使目标函数在合适的时间内收敛到局部最小值。 公式:new_weight = orign_weight — learning_rate * gradient 梯度下降代码: repeat{      θj=θj 阅读详情

内容导读

PyTorch 1.9 同步更新了一些库,包括 TorchVision 中新增的 SSD 和 SSDlite 模型,与 SSD 相比,SSDlite 更适用于移动端 APP 开发。

SSD 全称 Single Shot MultiBox Detector,是一种用于目标检测的单次检测算法,每次可以检测多个物体。本文将重点讨论 SSD 的移动端友好型变体,即 SSDlite。

具体叙述过程为:

首先通过算法的主要组件,强调与原始 SSD 的不同之处;

然后讨论这个已发布的模型,是如何训练的;

最后为所有新上线的目标检测模型,提供详细的 Benchmark。

SSDlite 网络架构

SSDlite 是 SSD 的升级版,在 MobileNetV2 论文中首次发布,随后在 MobileNetV3 论文中被再次使用。因为这两篇论文的重点,是介绍新的 CNN 架构,所以 SSDlite 的大部分实现细节并没有提及。

我们的代码遵循了这两篇论文中的所有细节,并在必要时对官方实现方法进行了补充。

正如前文所说,SSD 是一系列模型,用户可以用不同的 backbone(如 VGG、MobileNetV3 等)和不同的 Head(如常规卷积、可分离卷积等)来进行配置。因此,在 SSDlite 中,许多 SSD 组件都是相同的。下面我们只讨论那些不同的部分。

分类和回归 Head 

根据 MobileNetV2 论文介绍,SSDlite 用可分离卷积取代了原始 Head 中使用的常规卷积。因此,我们的实现方法引入了使用 3x3 深度卷积和 1x1 投影的全新 Head。

由于 SSD 方法的其他所有组件都保持不变,因此要创建一个 SSDlite 模型,我们的实现方法是将 SSDlite Head 初始化,并直接将其传递给 SSD 构造函数。

Backbone 特征提取器 

我们的实现方法中引入了一个新的类来构建 MobileNet 特征提取器。根据 MobileNetV3 论文记叙,Backbone 会返回 Inverted Bottleneck 模块的扩展层输出,这个扩展层输出步长为 16,先于输出步长为 32 的池化。

此外,Backbone 的所有额外模块都被替换成轻量级模块了,这些轻量级模块用的是一个 1x1 Compression、一个步长为 2 的可分离 3x3 卷积,以及一个 1x1 扩展

最后,为了确保即使在使用小宽度乘数时,Head 也有充足的预测能力,所有卷积的最小深度尺寸由 min_depth 超参数控制。

SSDlite320 MobileNetV3-Large模型

本节讨论 SSDlite 预训练模型的配置,以及为了尽可能地复制论文结果而进行的训练过程
本节讨论 SSDlite 预训练模型的配置,以及为了尽可能地复制论文结果而进行的训练过程

训练过程 

此处讨论训练过程中最值得注意的细节。

1. 调整后的超参 

论文中并没有提供任何可用于模型训练的超参(如正则化、学习率和批尺寸等),依据官方 repo 配置文件中列出的参数,使用交叉验证法将其调整到最佳值。这使得基线 SSD 配置有了显著提升。

2. 数据增强 

与 SSD 相比,SSDlite 的主要区别在于,前者的 Backbone 权重只是后者的一小部分。因此在 SSDlite 中,数据增强更注重于使模型对不同大小的目标对象具有鲁棒性,而不是只关注过拟合。

SSDlite 只用了 SSD transformation 的一个子集,这样可以避免模型过度正则化。

3. LR Scheme 

由于要依赖数据增强,让模型对中小型目标物体具有鲁棒性,我们发现增加 epoch 数量对模型训练非常有益。具体来说,如果将 epoch 数量提高到 SSD 的 3 倍,就能够将精度提高至 4.2mAP point;如果使用 6 倍乘数,则可以提高至 4.9mAP。

epoch 过渡增加则会适得其反,降低训练速度和准确度。尽管如此,根据论文中的模型配置,作者似乎使用了相当于 16 倍的乘数。

4. 权重初始化 & Input Scaling & ReLU6 

一系列优化使得我们的实现方法与官方非常接近,而且缩小了准确性上的差距。这些优化方法是从头开始训练 Backbone,而不是从 ImageNet 开始进行初始化。此外这些优化方法也调整了我们的权重初始化方案,改变了 Input Scaling,并用 ReLU6 替换了所有添加在 SSDlite Head 中的标准 ReLU。

注意,由于我们是从随机权重中训练模型,我们还应用了论文中描述的速度优化法,即在 Backbone 中使用 reduced tail。

5. 实现方法的差异 

将上面的实现方法与官方 repo 中的实现方法对比,我们发现了一些差异。

大部分差异都非常细微,且与如何初始化权重(例如高斯分布 VS 截断正态分布)、如何参数化 LR Scheduling(如较小 VS 较大的 Warmup 率,较短 VS 较长的训练时长)有关。

已知最显著的差异在于计算分类损失的方式。即官方 repo 中 MobileNetV3 Backbone SSDlite 的实现,没有用到 SSD Multibox loss,而是使用 RetinaNet 的 focal loss。

由于 TorchVision 已经提供了 RetinaNet 的完整实现,我们决定用 normal Multi-box SSD loss 实现 SSDlite。

关键精确度的提升  

复制论文中的代码无法保证准确率,尤其是在不知道完整的训练过程和实施细节的情况下。通常这个过程会涉及到大量的回溯,因为我们需要从中找到那些对准确率有重大影响的实施细节和参数中。

下面我们将尝试把那些在基线基础上,提高准确率的重要的迭代过程可视化:

图片

图片

以上介绍的优化顺序是准确的,尽管在某些情况下有点理想化。例如,虽然在调整超参阶段测试了不同的调度器,但并没有为准确率带来明显改进,因此我们保留了基线中使用的 MultiStepLR。

后续测试不同 LR Scheme 时,我们发现改用 CosineAnnealingLR 需要的配置更少、效果更佳。

综上所述,即使我们使用的是一个正确的实现方法、一系列来自同族模型的最佳超参,通过优化训练过程以及调整实现方法,也总是能在某种程度上提升准确率。

诚然,以上是一个相当极端的案例,准确率翻了一番,但在很多情况下,仍然有大量的优化空间可以帮助我们大幅提升准确率。

Benchmark

初始化两个预训练模型:

ssdlite = torchvision.models.detection.ssdlite320_mobilenet_v3_large(pretrained=True)
ssd = torchvision.models.detection.ssd300_vgg16(pretrained=True)

新旧模型之间的 Benchmark 对比:

图片

SSDlite320 MobileNetV3-Large 模型是迄今为止最快和体量最小的模型,因此它非常适用于移动 APP 的开发。

虽然它的准确率不及预训练的低分辨率 Faster R-CNN 模型,但 SSDlite 框架高度可调,用户可以通过引入带更多卷积的更重量级的 Head 来提高准确率。

另一方面,SSD300 VGG16 模型运行速度相当慢,而且准确率较低。这主要是因为它的 VGG16 Backbone。虽然 VGG 架构非常有影响力,但现如今已经有些过时了。

因为这个特定模型具有历史意义和研究价值,所以才在把它放在 TorchVision 里了。如果你想要使用高分辨率检测器,我们还是建议你要么把 SSD 和其他 Backbone 结合使用,要么使用某个 Faster R-CNN 预训练模型。

参考:PyTorch Blog

(9)目标检测_SSD的原理 dd 阅读详情

相关推荐

PyTorch中torchvision库的详细介绍

torchvision是 PyTorch 生态系统中的一个关键库,专门为计算机视觉任务设计和优化。它提供了以下几个核心功能:数据集、数据预处理工具、深度学习模型架构和实用工具。

xw555666的博客 5683

2022目标检测综述

编者整理了近年来主流的目标检测算法,并对网上资料进行了本文通过查阅资料,整合线上资源,尽可能的对目标检测领域的发展做一个系统性的介绍,旨在为读者构建一个完整的知识体系架构,希望帮助自己和大家快速的了解目标检测相关的技术及其未来的发展趋势,有针对性的学习相关目标检测算法。

weixin_44074191的博客 2万+

第99步 深度学习图像目标检测:SSDlite建模

第99步 深度学习图像目标检测:SSDlite建模

Jet4505的博客 1542

MobileNetv2-SSDlite训练自己的数据集(二)——训练MSSD

一、编译caffe-ssd 关于如何编译caffe-ssd,可以参考我的上一篇文章。。。 二、下载MobileNetv2-SSDlite代码 你可以在github上下载chuanqi305的MobileNetv2-SSDlite代码 git clone https://github.com/chuanqi305/MobileNetv2-SSDLite.git 三、将你的数据集转换为VOC数据集格...

qq_43150911的博客 4224

计算机视觉系列 -MMDetection 之SSDLite经典算法

SSDLite论文SSDLite是Google在CVPR2018论文MobileNetV2InvertedResidualsandLinearBottlenecks中提出的轻量级检测模型论文描述了一种新的移动架构MobileNetV2,该架构在多个任务和基准以及不同模型大小的spectrum上提高了移动模型的最先进性能。论文还描述了在称为SSDLite的新框架中将这些移动模型应用于对象检测的有效方法。此外,论文还演示了如何通过简化形式的DeepLabv3构建移动语义分割模型。...

大模型与Agent智能体 1862

第98步 深度学习图像目标检测:SSD建模

第98步 深度学习图像目标检测:SSD建模

Jet4505的博客 1386

深度学习之模型部署入门 (二),案例实战值得一看(PyTorch,Android Studio,optimize_for_mobile)

提取码:hjtf基本上一篇模型部署实战案例的讲解,这篇博文将在上一篇的基础上进行小改进,因为之前的模型部署都是将模型转换为ONNX中间格式,而本篇博文将模型文件转换为格式,虽然只是格式变了,但是在转换以及使用的过程中需要注意一些地方,并且在Android中模型部署的实现过程也发生了很大的变化。问题1:ONNX和torchscript之间区别和联系。

Keep_Trying_Go的博客 1293

PyTorch实现的SSD目标检测项目实战

单次检测(Single Shot MultiBox Detector,SSD)是一种先进的目标检测算法,它源自于Faster R-CNN框架的改进。SSD算法能够在一个单一的神经网络中直接预测出目标的类别和位置,这大大简化了训练和推理过程。它利用卷积神经网络(CNN)的层级特性来生成候选框,同时避免了传统滑动窗口方法的复杂性。尺寸(scale):每个特征图对应的先验框尺寸应当基于该特征图的空间分辨率和目标尺寸进行设计。一般来说,尺度较大的特征图会分配更大的先验框,以适应更大尺寸的目标。

weixin_30995917的博客 1202

视觉 → 检测&提取

目标检测任务非常有趣且具有挑战性。有些任务非常复杂,需要更多数据才能有所产出。但在这篇文章中,我将展示一个符号检测的小任务,它可以用更少的数据完成。该项目的目的是使用计算机视觉技术从一组给定的图像中提取文本并检测各种符号。在这个任务中我们需要解决:用于训练和推理的 torch (SSD MobileNet) 模型。用于可视化的 cv2 和 matplotlib。用于数据处理和存储的 NumPy 和...

Warmer_Sweeter 746

Comsol 管道导波裂纹检测:从建模到求解的完整流程解析

本文详细解析了使用Comsol Multiphysics进行管道导波裂纹检测的完整仿真流程。从几何建模、材料定义、物理场设置到网格划分与求解后处理,系统阐述了如何构建高保真虚拟模型以模拟导波与裂纹的相互作用。重点分享了激励信号设置、频散效应处理及参数化扫描等实战技巧,旨在帮助工程师与研究人员高效优化无损检测方案,降低实验成本。

weixin_29207439的博客 74

从Pikachu靶场实战解析越权漏洞:原理、攻击与防御

本文通过Pikachu靶场实战详细解析越权漏洞的原理、攻击方式与防御策略。文章深入探讨水平越权和垂直越权的危害,结合代码示例展示漏洞利用过程,并提供代码层和架构层的立体化防御方案,帮助开发者有效防范这一Web安全隐形杀手。

weixin_29325007的博客 358

2018-04-Towards High Performance Video Object Detection for Mobiles-论文阅读笔记

原文:https://arxiv.org/abs/1804.05830 摘要: 轻量的图像目标检测网络应用到关键帧上。轻量的光流网络建立帧间关系。光流导向的GRU模块被用于关键帧特征的集成。对于非关键帧用光流进行特征图传播。整个网络端到端训练,在VID达到60.2的mAP,跑到25帧的速度(HuaWei Mate 8 ) 引言: 虽然一些工作针对轻量型的网络,比如SqueezeNet,Mobil...

Meihuashan_HUST的博客 1459

告别环境依赖!用PyInstaller把PaddleOCR项目打包成独立EXE(附完整spec文件配置)

本文详细介绍了如何使用PyInstaller将PaddleOCR项目打包成独立EXE文件,彻底解决Python环境依赖问题。通过完整的spec文件配置和实战技巧,开发者可以轻松创建开箱即用的OCR工具,特别适合需要交付给非技术用户的场景。文章涵盖环境配置、模型打包、性能优化等关键环节,并提供了解决常见问题的方案。

weixin_33712987的博客 573

MobileNetV2论文精读(九):翻译+学习笔记+pytorch代码复现

MobileNetV2论文精读(九):翻译+学习笔记+pytorch代码复现

王智野的博客 1641

基于FME—三调篇—尖锐角及小缝隙处理

1 问题分析: 该功能实现在FME较为简单,相对ARCGIS模型构建器以及ARCGIS ENGINE,FME更适合无代码基础的人群。在三调内业数据处理要求中,尖锐角是不允许存在的。本文基于FME实现了对尖锐角的自动查询与消除以及自动处理在消除尖锐角过程中产生的缝隙,并进行了拓扑检查,实现自动化批量处理尖锐角的功能,提高工作效率。 2 总体思路: 2.1 实现功能分析: 1.找出小于指定角度的尖锐角...

qq_33315579的博客 9181

用5毫欧采样电阻实现高精度电流检测?数字可调电源控制板的硬件设计陷阱

本文深入探讨了在数字可调电源控制板设计中,如何利用5毫欧采样电阻实现高精度电流检测。从微小信号放大电路设计、采样电阻布局与热管理,到电源切换与电池管理电路优化,提供了全面的硬件设计解决方案和实用技巧,帮助工程师规避常见设计陷阱,提升系统性能。

wdx0123456的博客 1030

pytorch中torchvision读取预训练模型

对于这些模型都是已经训练好的,我们可以使用他们进行迁移学习,在此基础上根据需求对网络的结构进行修改,对于图像分类任务通常是修改最后的输出层,只需要把输出层的维数修改为我们目标任务即可。在pytorch的torchvision中提供了许多深度学习领域各种经典的网络结构以及预训练模型,这些模型接口都被封装在torchvision.models中。语义分割任务:DeepLabV3、FCN、LRASPP等以及目标检测任务:Faster R-CNN、FCOS、RetinaNet、SSD、SSDlite等。

优快云 精品推荐 2128

基于LSTM GRU RNN的交通流量预测-完整数据代码

基于LSTM GRU RNN的交通流量预测-完整数据代码

922

树莓派安装Tensorflow并利用SSDLite-MobileNet实现object detection小白教程

树莓派安装Tensorflow并利用SSDLite-MobileNet实现object detection小白教程 简介 对象检测是机器视觉领域最常用的功能之一,即对探测的目标分辨出是何物,本教程使用当前最常用的单片机树莓派3B+,设置安装tensorflow并实现利用较小的神经网络SSDLite-MobileNet进行识物。 本教程参考了国外一个大神的GitHub,并对其中的相关错误进行纠正以及补充,主要工作有利用虚拟环境实现更好的python环境管理,纠正相关错误。这篇教程适合深度学习初学者,通过这篇教

weixin_42673396的博客 4485

Pydoll浏览器自动化框架教程

让浏览器自动化回归本质。不再纠缠驱动兼容、不再手动处理验证码、不再因为请求和 UI 分裂而头疼。如果你经常做 Web 自动化、爬虫或者测试,不妨试试 Pydoll。也别忘了给项目点个 ⭐,让作者知道有人喜欢这个工具。👉GitHub 地址。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 204

YOLOv11改进 | 损失函数篇 | YOLOv11引入引MPDIoU, GIoU,DIoU, CIoU, SIoU,EIoU, WIoU, LMPDIoU等损失函数

到此本文的正式分享内容就结束了,在这里给大家推荐我的YOLOv11改进有效涨点专栏,本专栏目前为新开的,后期我会根据各种前沿顶会进行论文复现,也会对一些老的改进机制进行补充,如果大家觉得本文帮助到你了,订阅本专栏,关注后续更多的更新~1. YOLOv11中添加MPDIoU, GIoU,DIoU, CIoU, SIoU等损失函数的方式。文件中用给出的代码替换掉。

tsg6698的博客 5279

目标检测-SSD代码详解

目录读取数据集损失函数和评价函数网络模型图 %matplotlib inline import torch import torchvision from torch import nn from torch.nn import functional as F from d2l import torch as d2l #对每个锚框进行类别预测 def cls_predictor(num_inputs, num_anchors, num_classes): return nn.Conv2d(num_

qq_36136196的博客 1758

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

SSD模型 (单发多框目标检测) 原理+代码

SSD:(单发多框检测(SSD)是一种用于目标检测的深度学习模型。"单发"指的是指单个神经网络在一次前向计算中同时预测多个目标的位置和类别,而"多框"指的是对于每个预测目标位置,它的主要思想是在整个图像上应用多个卷积层来预测不同尺度和长宽比的边界框,并通过非极大值抑制来获得最终的检测结果。SSD的优点是可以在较少的计算量下实现实时目标检测,并且可以检测不同尺度和长宽比的物体。

m0_56175815的博客 7262

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Tensorboard可视化SSD网络结构

from torch.utils.tensorboard import SummaryWriter from torch.utils.tensorboard import SummaryWriter import torch import torchvision from torchvision import datasets,transforms from torch.autograd import Variable from ssd import SSD ssd = SSD() model = ssd

敲代码的小风 644

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

SSD算法学习笔记_网络解读

参考代码:SSD算法_Pytorch实现 参考资料:【SSD算法】史上最全代码解析-核心篇 SSD算法简单介绍 这里由于Pytorch代码已经有很多人解读过,而且每个人跑的时候几乎都会遇到莫名奇妙的bug,所以这里主要把SSD算法的网络结构图拿出来解读,想要实现代码可以点击上方留的链接。 目前目标检测算法主要分为One-stage和Two-stage两大类: One-stage检测算法: 能够直接回归出目标框的位置,即不用产生候选框,直接将目标边框定位的问题转化为回归问题,主要包括SSD

gXh的博客 413

yolo-v3和SSD的一些对比

初步总结的SSD和yolo-v3之间的一些区别。 其中的一些概念还有待充分解释。 SSD YOLOv3 Loss Softmax loss Logistic loss Prediction multiple feature maps + anchor boxes + multi-convolution layers Feature Pyra...

BlowfishKing的博客 3万+
上一篇: 解构 StyleCLIP:文本驱动、按需设计,媲美人类 P 图师
下一篇: 2021 IJCAI-SAIA:一场聚集青年精英的学术会议
HyperAI超神经
博客等级 码龄7年 8872粉丝 1753原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值