深度学习500问——Chapter08:目标检测(9)

文章目录

8.5 目标检测的技巧汇总

8.5.1 Data Augmentation

8.5.2 OHEM

8.5.3 NMS:Soft NMS/ Polygon NMS/ Inclined NMS/ ConvNMS/ Yes-Net NMS/ Softer NMS

8.5.4 Multi Scale Training/Testing

8.5.5 建立小物体与context的关系

8.5.6 参考relation network

8.5.7 结合GAN

8.5.8 结合attention

8.5.9 训练tricks


8.5 目标检测的技巧汇总

8.5.1 Data Augmentation

介绍一篇发表在 Big Data上的数据增强相关的文献综述。

1. Introduction

  • 数据增强与过拟合

验证是否过拟合的方法:画出loss曲线,如果训练集loss持续减小但是验证集loss增大,就说明是过拟合了。

  • 数据增强目的

通过数据增强实现数据更复杂的表征,从而减小验证集和训练集以及最终测试集的差距,让网络更好地学习迁移数据集上的数据分布。这也说明网络不是真正地理解数据,而是记忆数据分布。

  • 数据增强的方法

(1)数据变换增强

包括几何变换、色彩空间变换、随机擦除、对抗训练、神经风格迁移等。

(2)重采样增强

主要侧重于新的实例合成。如图像混合(mixup),特征空间的增强,GAN生成图片。一张图看明白:

2. Image Data Augmentation techniques

2.1 Data Augmentations based on basic image manipulations

  • Geometric transformations

如果数据集潜在的表征能够被观察和分离,那么简单的几何变换就能取得很好的效果。对于复杂的数据集如医学影响,数据小而且训练集和测试集的偏差大,几何变换等增强的合理运用就很关键。

Flipping

作者提到了要衡量普遍性的观点。但是这种变换对于数字数据集不具有安全性。

Color space

主要提及的识别RGB通道上的变换,将三通道图进行分离,以及直方图变换增强等。(颜色空间更多增强方式可以参考A PreLiminary Study on Data Augmentation of Deep Learning for Image Classification)

Cropping

通常在输入图片的尺寸不一时会进行按中心的裁剪操作。裁剪某种程度上和平移操作有相似性。根据裁剪幅度变化,该操作具有一定的不安全性。

Rotation

大幅度的旋转对数字集会有不安全性的考虑。

Translation

平移也需要合理设计。如车站人脸检测,只需要中心检测时,就可以加合适的平移增强。平移后空出部分填0或者255,或用高斯分布噪声。

Noise injection

在像素上叠加高斯分布的随机噪声。

  • Color space transformations

由于实际图像中一定存在光线偏差,所以光线的增强十分有必要(但是IJCV的光流文章指出,3D建模的灯光增强实在是很难学习到,所以对于光线增强的效果不如几何也可能因为光线的复杂度更高,数据样本远远不够)。色彩变换十分多样,如像素限制、像素矩阵变换、像素值颠倒等;灰度图和彩图相比,计算时间成本大大较少,但是据实验效果会下降一些,很明显因为特征的维度被降维了;还有尝试将RGB映射到其他的色彩空间进行学习,YUV,CMY,HSV等。

除了计算大内存消耗和时间长等缺点,色彩变换也面临不安全性,比如识别人脸的关键信息是黄白黑,但是大量增强出红绿蓝,会丢信息。颜色变换的增强方法是从色彩空间角度拟合偏置,效果有限的可能性是多样的:

1. 真实几何多样性比颜色更简单。

2. 色彩的变化多样性更多,导致增强不够反而学不好,颜色空间的欠拟合。

3. 变换不安全。

  • Experiment

随机裁剪效果最好。

2.2 Geometric versus photometric transformations

  • Kernel filter

滤波器核在图像处理用的比较广,这里提到用这种方法来增强。还提到了一种正则化增强方法PatchShuffle,在一个patch内随机交换像素值,使得对噪声的抵抗更强以及避免过拟合。

文章指出关于应用滤波器增强的工作尚且不多,因为这种方法其实和CNN的机制是一样的,这么做也许还不如直接在原始CNN上加层加深网络。

  • Mixing images

就是那篇被ICLR拒稿的采样方法直接均值相加混合。

还有非线性的mixup裁剪如下:

以及随机裁剪的图像混合:

这些混合方式是十分反人类直觉的,因此可解释性不强。只能说是可能增强了对底层低级特征如线条边缘等的鲁棒性。其实有点没有抓住关键点。

  • Random erasing

随机擦除就是类似cutout的思想,通过mask的遮挡使得网络能够提高遮挡情况的鲁棒性。需要手工设计的部分包括mask的大小以及生成方式。是一种比较有效的方法。这种方式也需要考量增强的安全性,比如MNIST数据集8cutout后可能出现的问题。

  • A note on combing augmentation

组合的增强方式往往是连续变化的,导致数据集的容量会迅速扩大,这对于小数据集领域来说容易发生过拟合,所以需要设计合理的搜索算法设计恰当的训练数据集。

2.3 Data Augmentation based on Deep Learning

  • Feature space augmentation

之前看到的基于SMOTE类别不平衡的过采样法来进行特征空间的插值操作进行数据增强,就实验效果而言不算特别出众。

  • Adversarial training

对抗样本训练可以提高鲁棒性,但是实际应用中其实提高不一定明显,因为自然对抗样本的数目没有那么多。而NIPS的对抗攻击大赛很多从神经网络的学习策略下手,进行梯度攻击,更加偏向于人为的攻击了,对于普适的检测性能提高意义反而不大,更强调安全需求高的场合。

  • GAN-based Data Augmentation
  • Neural Style Transfer

不觉得这个效果会普遍很好,应该来说是针对特定域会有效(如白天黑夜),实际效果应该有限。

  • Meta learning Data Augmentations

        Neural augmentation

        Smart Augmentation

        两个东西差不多,就是上次看到SmartAugment方法。随机采样类内图片进行通道叠加然后输出融合图像,通过梯度下降使得输出图像的类内差距减小(没考虑类间关系,可能也不便处理)。

  • AutoAugment

谷歌最早做的自学习增强方法,走的NAS的思路RL+RNN搜索增强空间,还有后来最近发的检查增强也是大同小异,基本就是换汤不换药,问题在于搜索空间太大,复现搜索过于依赖硬件条件。

3. Design considerations for image Data Augmentation

3.1 Test-time augmentation

许多论文指出在检测阶段进行同等的数据增强能够获得较好的效果。归结可以认为是训练检测阶段的一致性。当然,这种手段时间成本太高,只在如医学影响等追求精度的关键领域可以使用。

3.2 Curriculum learning

Bengio团队早年在ICML提出的观点,确实合理,一开始就进行大量的增强容易导致网络不收敛。从一个数据集学习到的数据增强也可以迁移到其他数据集。

3.3 Resolution impact

高清(1920x1080x3)或4K(3840x2160x3)等高分辨率图像需要更多的处理和内存来训练深度CNN,然而下一代模型更倾向于使用这样更高分辨率的图像。因为模型中常用的下采样会造成图像中信息的丢失,使图像识别困难。研究人员发现,高分辨率图像和低分辨率图像一起训练的模型集合,比单独的任何一个模型都要好。某个实验(这里就不注明引用了)在256x256图像和512x512图像上训练的模型分别获得7.96%和7.42%的top-5 error。汇总后,他们的top-5 error变低,为6.97%。随着超分辨率网络的发展,将图像放大到更高的分辨率后训练模型,能够得到更好更健壮的图像分类器。

3.4 Final dataset size

数据增强的形式可以分为在线和离线增强。前者是在加载数据时增强。可能造成额外的内存消耗(现在都是数据容量不变的随机增强)。

此外作者提到了一个比较有意思的点:当前数据集尤其是进行增广后是十分庞大的,明显能够在一定程度上缩小数据集但是保持性能下降不多的子集效率会高得多。

3.5 Alleviating class imbalance with Data Augmentation

这也是值得借鉴的一点。通过增强在一定程度上解决类别不平衡问题。但增强需要仔细设计,否则会面对已经学习较好的类别或者场景造成过拟合等问题。

8.5.2 OHEM

8.5.3 NMS:Soft NMS/ Polygon NMS/ Inclined NMS/ ConvNMS/ Yes-Net NMS/ Softer NMS

8.5.4 Multi Scale Training/Testing

8.5.5 建立小物体与context的关系

8.5.6 参考relation network

8.5.7 结合GAN

8.5.8 结合attention

8.5.9 训练tricks

介绍一篇2019.2.4亚马逊挂在ArXiv的目标检测训练tricks的文章(之前亚马逊发了篇分类的tricks在CVPR上)

1. Introduction

上次亚马逊发了个分类的训练trick在CVPR上,这次是检测的,还没发表。就没什么多说的了,下面直接介绍。先看效果如下,其实摘要声称的5%是单阶段的yolov3的提升,说明:单阶段没有RoIPooling阶段很多性质确实不如两阶段,因此采用trick很有必要;相反,两阶段本身结构优于单阶段,所以外加的trick提供的如不变性等网络自身能够学习和适应就不起作用了。

2. Bag of Freebies

提出了一种基于mixup的视觉联系图像混合方法,以及一些数据处理和训练策略。

2.1 Visually Coherent Image Mixup for Object Detection

先介绍图像分类中的mixup方法,作用是提供了训练的正则化,应用到图像上如下图,将图像作简单的像素值输入mixup的凸函数中得到合成图;然后将one-hot编码类似处理得到新的label。

技术细节:

  • 相比于分类的resize,为了保证检测图像不畸变影响效果,作者选择直接叠加,取最大的宽高,空白进行灰度填充,不进行缩放。
  • 选择ab较大(如1.5,1.5)的Beta分布作为系数来混合图像,作者说是相干性视觉图像的更强;loss是两张图像物体的loss之和,loss计算权重分别的beta分布的系数。

2.2 classification Head Label Smoothing

标签平滑在检测的分类任务中常有用到,最早是在Inceptionv2中提出。

如果标签中有的是错的,或者不准,会导致网络过分信任标签而一起错下去。为了提高网络泛化能力,避免这种错误,在one-hot的label进行计算loss时,真实类别位置乘以一个系数(1-e),e很小如0.05,以0.95的概率送进去;非标注的类别原来为0,现在改为e=0.05送进去计算loss。网络的优化方向不变,但是相比于0-1label会更加平滑。

(标签平滑这个讲的不错:https://juejin.cn/post/6844903520089407502)

这里进一步改进了一下label smooth的公式而已,在原来基础上除了个类别数。

2.3 Data Preprocessing

就是数据增强,没什么其他的。至于分类也是几何变换和色彩变换。这么分区别其实就是是否变换label,但是将真实世界就这么简单地分解过于粗糙了。好不容易谷歌的增强考虑到了如何学习一下检测任务的增强,但是也只是加了bbox_only的增强,就效果而言,一般;而且就实际来说,合理性和有效性有待商榷。

 作者认为,两阶段网络的RPN生成就是对输入的任意裁剪,所以这个增强就够了;这老哥膨胀了,two-stage就不用裁剪的增强,虽然两阶段能提供一些不变性,但是用了一般来说都是更好的。

2.4 Training Schedule Revamping训练策略上:余弦学习率调整 + warmup

2.5   Synchronized Batch Normalization 跨多卡同步正则化,土豪专区,穷人退避。

2.6  Random shapes training for single-stage object detection networks

多尺度训练,每经过一定的iteration更换一种尺度。举例是yolov3的尺度范围。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/631599.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vue3商城后台管理实战-用户登录界面设计

界面设计 此时界面的预览效果如下&#xff1a; 登录界面的完整代码如下&#xff1a; <script setup> import {reactive} from "vue/reactivity";const form reactive({username: "",password: "", })const onSubmit () > {} <…

模板初阶template

千呼万唤始出来&#xff01;我们终于迎来了C的又一个便利的东东&#xff1a;模板&#xff0c;相信通过模板的学习&#xff0c;大家一定会对于C的使用更加喜爱&#xff01; 泛型编程 当我们想写一个交换函数时&#xff0c;我们会怎么写&#xff1f;如果需要不同类型的交换函数&a…

【STM32-MX_GPIO_Init分析】

MX_GPIO_Init分析源码如下&#xff1a; __HAL_RCC_GPIOE_CLK_ENABLE源码如下&#xff1a; #define RCC ((RCC_TypeDef *) RCC_BASE) #define RCC_BASE (AHB1PERIPH_BASE 0x3800UL) #define AHB1PERIPH_BASE (PERIPH_BASE 0x00020000U…

C语言之旅:动态内存管理

目录 一.为什么要有动态内存分配 二.malloc和free 2.1 malloc 2.2 free 2. 3malloc和free的使用 三. calloc 四. raelloc 4.1 代码示例&#xff1a; 4.2 注意事项&#xff1a; 4.3 对动态开辟空间的越界访问 4.4 对非动态开辟内存使⽤free释放 4.5 使用free释放⼀块…

IC设计企业如何实现安全便捷的芯片云桌面跨网摆渡?

IC设计企业&#xff0c;主要专注于集成电路的设计。这些企业通常包括集成电路、二极管、三极管和特殊电子元件等产品的设计和生产。IC设计企业在其运营和产品设计过程中&#xff0c;会涉及和产生多种文件&#xff0c;如&#xff1a; 项目需求文档&#xff1a;这是项目启动的基础…

骨干高企瞪羚计划30万奖励!武汉市骨干高企瞪羚计划项目申报条件

武汉市骨干高企瞪羚计划项目申报条件、奖励政策内容整理如下&#xff0c;武汉各区企业申报骨干高企瞪羚计划有不明白的可随时了解: 武汉市骨干高企瞪羚计划项目申报对象 &#xff08;一&#xff09;江岸区未上市高新技术企业&#xff0c;注册成立时间不超过10年。 &#xff08;…

STM32HAL库-中断篇

中断 中断简介 中断是一种事件处理机制&#xff0c;可以暂停主程序的运行&#xff0c;转而处理特定事件程序。 中断的作用和意义&#xff1a; 实时控制 在确定事件内对响应事件做出相应 故障处理 检测到故障需要第一时间处理 数据传输 如串口通信&#xff0c;不确定数…

计算机网络5——应用层3万维网2

文章目录 一、万维网的文档1、超文本标记语言 HTML2、动态万维网文档3、活动万维网文档 二、万维网的信息检索系统1、全文检索搜索与分类目录搜索2、Google 搜索技术的特点 三、博客和微博1、博客2、微博 四、社交网站 一、万维网的文档 1、超文本标记语言 HTML 要使任何一台…

初识C语言——第二十一天

猜数字小游戏的实现&#xff1a; 学会了之后可以自己制作彩票抽奖&#xff0c;哈哈&#xff01; 代码实现&#xff1a; #include <stdlib.h> #include <time.h>void menu()//无返回值函数 {printf("**************************\n");printf("****…

C语言性能深度剖析:从底层优化到高级技巧及实战案例分析

C语言以其接近硬件的特性、卓越的性能和灵活性&#xff0c;在系统编程、嵌入式开发和高性能计算等领域中占据着举足轻重的地位。本文将深入探讨C语言性能优化的各个方面&#xff0c;包括底层原理、编译器优化、内存管理和高级编程技巧&#xff0c;并结合多个代码案例来具体分析…

什么是趋肤效应

很多同行来问什么是趋肤效应&#xff0c;趋肤效应应该是附在表面&#xff0c;为什么变成了附在线路横截面的底面&#xff1f;下面就和小易&#xff0c;一起具体了解下趋肤效应。 趋肤效应也称集肤效应&#xff0c;英文术语是Skin effection,它是指在电流流过导体时&#xff0c;…

vscode+clangd阅读Linux内核源码

1. 禁用或卸载官方C/C插件. 2. 安装clangd插件 3. 清除之前的产物 4. 生成.config文件 5.编译生成内核镜像 6.编译内核模块 7.编译设备树文件 8.生成compile_commands.json文件 运行上述命令后&#xff0c;在内核源码根目录生成了compile_commands.json文件 9.设置clangd插…

分布式系统的一致性与共识算法(四)

Etcd与Raft算法 Raft保证读请求Linearizability的方法: 1.Leader把每次读请求作为一条日志记录&#xff0c;以日志复制的形式提交&#xff0c;并应用到状态机后&#xff0c;读取状态机中的数据返回(一次RTT、一次磁盘写)2.使用Leader Lease&#xff0c;保证整个集群只有一个L…

超简约在线生成短网址源码带后台

基于 PHP、SQLite 进行开发&#xff0c;直接上传到服务器&#xff0c;安装一下就行 源码下载&#xff1a;https://download.csdn.net/download/m0_66047725/89268253 更多资源下载&#xff1a;关注我。

TensorFlow的学习

0.基础概念 术语表&#xff1a; https://developers.google.cn/machine-learning/glossary?hlzh-cn#logits 1.快速入门 https://tensorflow.google.cn/tutorials/quickstart/beginner?hlzh-cn 2.基于Keras进行图像分类 https://tensorflow.google.cn/tutorials/keras/cl…

哈希表+DFS快速解决力扣129题:求根节点到叶节点数字之和

❤️❤️❤️ 欢迎来到我的博客。希望您能在这里找到既有价值又有趣的内容&#xff0c;和我一起探索、学习和成长。欢迎评论区畅所欲言、享受知识的乐趣&#xff01; 推荐&#xff1a;数据分析螺丝钉的首页 格物致知 终身学习 期待您的关注 导航&#xff1a; LeetCode解锁100…

roscore启动报错的解决方法【将环境变量配置于最后】

今天在启动rviz时发生一个很奇怪的报错&#xff1a; rviz: error while loading shared libraries: librviz.so: cannot open shared object file: No such file or directory 我感觉很纳闷&#xff01;再试着启动一下roscore&#xff0c;发现如下报错&#xff1a; [rosout-1…

代码随想录——填充每个节点的下一个右侧节点指针 II(Leetcode117)

题目链接 层序遍历 /* // Definition for a Node. class Node {public int val;public Node left;public Node right;public Node next;public Node() {}public Node(int _val) {val _val;}public Node(int _val, Node _left, Node _right, Node _next) {val _val;left _l…

白话机器学习7:五种降维方法的原理即Python代码实现

一、主成分分析法&#xff08;PCA&#xff09; PCA是一种常用的线性降维技术&#xff0c;它可以将高维数据投影到低维空间&#xff0c;同时保留数据中的主要变异方向。 你可以选择保留的主成分数量&#xff0c;这取决于你的具体应用和数据集。通常&#xff0c;你可以通…

flutter开发实战-JSON和序列化数据

flutter开发实战-JSON和序列化数据 大多数移动应用都需要与 web 服务器通信&#xff0c;同时在某些时候轻松地存储结构化数据。当创造需要网络连接的应用时&#xff0c;它迟早需要处理一些常见的 JSON。使用Json时候&#xff0c;可以使用json_serializable 一、引入json_anno…