DL中图像数据增强

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DL中图像数据增强相关的知识,希望对你有一定的参考价值。

参考技术A 改变亮度,对比度,饱和度,加噪(高斯、椒盐、随机)

随机缩放,裁剪,翻转,旋转,扭曲(仿射变换)

随机擦除

使用随机值或者训练集的平均像素值作为mask像素值,mask的形状和位置可根据需要设定

cutout

和随机擦除类似减少过拟合的方法,但cutout擦除矩形区域存在一定概率不完全在原图像中

Hide and Seek

和随机擦除类似,核心还是去掉一些区域,使得其他区域也可以识别出物体,增加特征捕获能力

Grid Mask

不同于随机擦除、cutout和hide-seek在mask区域全部删除或者全部保留,Grid Mask采用结构化mask,并控制mask密度和size参数

mixup

同时对输入x及其对应label y做增强,对两张图片做融合,同时对他们的label做融合,其中yi,yj都是one-hot编码的label,lambda是一个融合比例取值范围为0到1。为对离散样本空间增加连续化样本,提高邻域类别间的平滑性。

计算方式:取两个batch的输入做融合,融合结果送入前馈网络得到one-hot形式的y‘,将该y’分别与融合前两个图像对应的label计算loss,再用以同样的lambda融合loss作为最终loss。

CutMix

从一幅图中剪切一个mask,粘贴到另外一幅图中。在图像生成过程中设置两幅图像的比例(例如0.4/0.6),得到对应比例的label。

FMix

不同于cutmix的矩形mask剪切粘贴,Fmix融合通道颜色将mask融入目标图

copy paste

随机选取一副源图像中的目标,粘贴到一幅图的随机位置,过程中伴随随机随机尺度变换。尤其适用OCR字符检测场景。

类标签平滑 label smooth

严格的one-hot label可能导致网络过拟合,因此对label进行soft化,使label有一定的概率来自均匀分布,如[0,0,1]变为[0,0,0.9]。相当于label上增加噪声,让模型训练中不要过度集中于概率较高的类别,原理类似soft NMS。

马赛克数据增强

采用4张(或其他偶数张)图拼成一张新的样本,达到:

(1)拼接缩放后,目标尺寸小于原尺寸,增加了小样本的数量、形态和位置。

(2)拼接后每个batch的目标数量增加,BN的效果更好。

(a) 图像经过一个正常的前馈训练步骤获得损失信号;

(b) 然后神经网络利用损失信号以一种对模型最有害的方式改变图像(类似添加微小扰动变成难样本,很可能造成误分类,如图中红星);

(c) 在随后的训练中,模型训练学习修改后难样本。

需要注意的是,对抗训练对对抗样本的抵抗力提升的同时,可能影响普通样本的分类能力。

核心思想:通常检测数据集中简单样本大大多于困难样本,导致模型对简单场景过拟合,困难场景欠拟合。因此先对候选RoI(Fast-RCNN)分类,选出更多难样本进行训练,提高参与训练的难样本的比例。

核心思想:CNN的feature maps冗余很必要(从ResNet50的feature maps可视化效果中得到佐证),那相比用大量的标准卷积计算,采用更多cheap的方法来获得冗余的feature maps,可以减小计算量和内存需求,并提升网络性能。 Ghost Module 对标准卷积结果进行一系列cheap操作来生成大量的feature maps,cheap操作包括仿射变换、小波变换、分组卷积(硬件支持更好)等,作为独立模块可封装为 Ghost bottlenecks 。(思路清奇,一般考虑应该是冗余需要去除,这里反向考虑增加,诺亚这位同学厉害)

Refs:

YOLOv4 中的数据增强_机器学习算法那些事-CSDN博客

想读懂YOLOV4,你需要先了解下列技术(一) - 知乎

label smooth、mixup理解 - 知乎

全网最全:盘点那些图像数据增广方式Mosiac,MixUp,CutMix等. - 知乎

如何从 URL 解析带有 Windows Phone 8 中图像的 Json 数据?动态数据

【中文标题】如何从 URL 解析带有 Windows Phone 8 中图像的 Json 数据?动态数据【英文标题】:How to Parse Json data with Images in Windows Phone 8 from a URL? Dynamic data 【发布时间】:2014-01-14 06:30:29 【问题描述】:

我是一名 android 开发人员,我是 windows phone 开发的新手。 我想从一个 URL 中解析一个 Json 数据,该数据可能会像用户输入一样发生​​变化 这是我的 Json 数据


"request": "ok",
"query": 
    "result": [
        
            "site": [
                
                    "latest": [
                        
                            "id": "2eaQy8Ow",
                            "data": "1/1/2014"
                        
                    ],
                    "url": "http://www.shopclues.com/"
                
            ],
            "model": "Nexus 10",
            "height": "8.89",
            "name": "The New Google (Samsung) Nexus 10 10-inch Andriod 4.2 (Jelly Bean) Tablet 16GB SSD 2560x1600 Pixel World Highest Resolution for 300 ppi WQXGA (WiFi Only) 2GB Ram Micro USB Micro HDMI Accelerometer Compass Ambient light Gyroscope Barometer GPS",
            "features": 
                "Hard Drive": "16 GB ssd",
                "Card Description": "GPU: Mali-T604",
                "Processor": "1.70 GHz Exynos 5000 Series"
            ,
            "image": [
                "http://www.simplydecoded.com/wp-content/uploads/2013/02/Telangana2.jpg"
            ]
        
    ]


为了在 windows Phone 8 (C#) 中解析这个 Json,我点击了这些链接

1. To parse json in windows phone 8

2. To Parse json data

但在 windows phone Json Parsing 中,一些示例仅显示给定数据,所以我希望它用于动态数据

所以我的问题是我已经准备了一个 Android 应用程序,它看起来像 which is there in android。

所以我想在 windows 中准备相同的过程但是它只需要一个常量它应该动态变化..

【问题讨论】:

您好 user2967727,您可以点击第二个链接以显示 URL 中的图像和 json 数据。 yes User3124880 但是当我遵循该技术时,我只得到一个输出,我希望它用于动态...应该有一些其他技术来解析 Json 所以我正在考虑在 android 我有这种方式n.解析 JSON 的多种方法 【参考方案1】:

如果我对您的理解正确,您希望: 1) 获取数据 2)反序列化 3) 使ListBox自动显示信息

您必须: 1)创建类:您可以使用 json2CSharp.com 或仅在 VS2012 Edit-Paste-Paste Special - 作为 JSON 类 2)在 XAML 中编写 listBox 项目模板,并绑定到 JSON 类中的属性(另一个大但非常有用的东西要学习)。 3) 将 JSON 反序列化为 Top 类对象,然后只需执行 listbox.ItmesSource = 并使用反序列化数据指向您的数组

您将图片绑定到 URL,它们将自动下载并显示。

【讨论】:

是的,先生,但这是我的开发过程,但我想如何将这些一起使用,就像我在 android 中所做的那样,我要求一个示例,它可能是一个示例数据也没有问题..我有一个巨大的数据要削减我只是在询问示例链接或教程,以便我可以像 android 应用程序一样制作相同的应用程序 你好 Cheese,如果我们这样做,我们将只得到一个响应,它应该是动态的.. ***.com/questions/8738031/… 对此有一个应用的答案,似乎合乎逻辑=) 感谢更新奶酪.. 但这帮助了我高达 30% 的过程我需要确切的答案但我将其标记为答案.. 我等待.. 感谢您的回应奶酪..有些人即使他们不知道答案他们会标记这个问题但是你给了我一个回应谢谢..嘿,请投票给我的问题...【参考方案2】:

我的项目在解析动态 json 时遇到了类似的问题

我将 json 字符串转换为 Jtoken(Newtonsoft.Json)

JToken configToken = JObject.Parse(response); 

然后使用child和grandchild查询需要的数据

这里我正在查询 Json 中标签“data/userManagedFields”内的数据“VAT”

 var VatList = configToken["data"]["userManagedFields"]["VAT"];
        List<double> vatList = new List<double>();

        foreach (JToken child in VatList.Children())
        
            foreach (JToken grandChild in child)
            
                vatList.Add((Convert.ToDouble(grandChild.ToString()) * 100));                    
            
        

希望这会对你有所帮助。

【讨论】:

以上是关于DL中图像数据增强的主要内容,如果未能解决你的问题,请参考以下文章

语义分割中的数据增强Augmentor基本使用方法(全随机生成和对每张图片均进行一次增强)

为增强 Pascal Voc 数据集的原始图像添加类标签

OpenCV 完整例程47. 图像增强—直方图匹配

OpenCV 完整例程51. 图像增强—直方图反向追踪

OpenCV 完整例程49. 图像增强—局部直方图处理

OpenCV 完整例程48. 图像增强—彩色直方图匹配