用Keras和“直方图均衡”为深度学习实现“图像扩充”
- 2026-04-21 17:57:00
- miadmin 原创
- 2
深度神经收集,越发是卷积神经收集(CNN),万分擅善于图像分类。底细阐明,最进步的卷积神经收集正在图像识别方面的功能曾经进步了人类程度。

然而,正如咱们正在杨筑先生的“Hot Dog, Not Hot Dog”App(正在一个叫做“Silicon Valley”的热门电视节目中的食品识别App)中体会到的,将图像征求起来动作教练数据运用,是一项万分高贵且耗时的办事。
若是你对“Silicon Valley”这个电视节目不太熟练,请注意以下视频中的措辞是NSFW:
咱们通过扩充图像数据的体例,从一个已有的数据库中天生更众新的教练图像,以低重征求教练图像的本钱。“图像扩充”本来便是从已有的教练数据集结取出极少图像,然后依据这些图像创筑出很众批改版本的图像。如此做不但可能取得更众的教练数据,还能让咱们的分类器应对光照和颜色愈加纷乱的情况,从而使咱们的分类器性能越来越宏大。以下是来自imgaug的差别的图像扩充例子:

图像预治理的方式有许众。正在本文中,咱们将商议极少常睹的、富足创意的方式,这些方式也是Keras深度练习库为扩充图像数据所供给的。之后咱们将商议奈何转换keras预治理图像文献,以启用直方图平衡法。咱们将运用Keras附带的cifar10数据集,不过为了使做事小到可能就手正在CPU上施行,咱们将只会运用此中的猫和狗的图像。
最初,咱们须要加载cifar10数据集并式子化此中的图像,为卷积神经收集做好计算。咱们还要检验一下部门图像,确保数据曾经完结了无误的加载。

Cifar10数据集结的图像都是32x 32像素巨细的,是以放大来看,它们都展现出颗粒状。不过对卷积神经收集来说,它看到的不是颗粒,而是数据。
用Keras举行图像数据的扩充瑕瑜常单纯的,正在这里,咱们应当谢谢Jason Brownlee,由于是他给咱们供给了一个万分一共、到位的Keras图像扩充教程。图象扩充的流程如下:最初,咱们须要运用ImageDataGenerator()函数来创筑一个图像天生器,而且输入一系列形容图像更转业动的参数;之后,咱们将正在这个图像天生器中施行fit()函数,它将会一批一批地对图像举行更改。正在默认处境下,图像的更改是大肆的,于是并不是扫数图像每次城市被更改。你还可能用keras.preprocessing函数将扩充的图像导出到一个文献夹,以便设立一个更远大的扩充图像数据集。
正在本文中,咱们将看极少更直观、兴趣的扩充图像。你可能正在Keras文献中查看扫数的ImageDataGenerator参数,以及keras.preprocessing中的其他方式。


程度翻转图片同样是为分类器天生更无数据的一种经典体例。这么做万分单纯,不过我正在这里省略了代码和图像,是由于咱们正在没有看到原始图像的处境下,无法决断一张猫狗的图像是否被程度翻转了。

直方图平衡,即取一张低对照度图像,并降低图像中最亮和最暗部门之间的对照度,以寻得暗影的渺小分别,并创筑一个更高对照度的图像。运用这个方式所爆发的结果相当惊人,越发是针对那些灰度图像。以下是极少例子:
正在本文中,咱们将商议三种用于降低图像对照度的图像扩充方式。这些方式有时也被称作“直方图拉伸”,由于它们会运用像素强度的分散,并扩展这些分散以符合更大限制的值,从而降低图像中最亮和最暗部门之间的对照度。
直方图平衡法通过检测图像的像素强度分散,并绘制出一个像素强度直方图,从而降低图像的对照度。之后,这个直方图的分散会被举行判辨,若是判辨结果显示另有未被操纵的像素亮度限制,那么这个直方图就会被“扩展”,以涵盖这些未被操纵的限制。然后直方图将被“投射”到图像上,以降低图像的具体对照度。
“对照度扩展”的流程最初是判辨图像中的像素强度分散,然后从新调理图像,使图像可能涵盖正在2%至98%之间的扫数像素强度。
正在直方图算计方面,“自符合平衡”与老例的直方图平衡有很大的区别。老例的直方图平衡法中,每个被算计的直方图都与图像中的一个部门相对应;不过,它有着正在非寻常图像部门太过扩充噪声的趋向。

下面的代码来自于sci-kit图像库的文献。为了使这些代码可能正在咱们cifar10数据集的第一张图像上施行以上三种图像扩充,咱们对代码举行了转换和批改。最初,咱们将输入sic-kit图像库中的需要单位,然后对sci-kit图像文献中的代码举行批改和调度,以便查看数据集第一张图片的扩充图像集。
下面这张图是一张批改后的图像,是由cifar10数据集结的一张对照度较低的猫咪图片批改取得的。正如你所看到的,终末批改的图像收效或者并不像正在低对照度灰度图像中取得的图像收效那么令人惊艳,但总的来说图像的画质仍然取得了降低。

现正在,咱们曾经获胜地批改了cifar10数据集结的一张图像,咱们接下来将要商议奈何调度或蜕变keras.preprocessing图像文献,从而施行这些差别的直方图批改方式,就像咱们操纵ImageDataGenerator()函数举行keras图像扩充雷同。以下是咱们将接纳的几个程序:
把“IF”的外达语句增加到随即转换的方式中,如此,咱们正在运用datagenfit()函数的光阴,图像扩充就会被施行。
对keras.preprocessing的图像py文献举行批改和调度的最单纯的体例之一便是将文献中的内容复制、粘贴到咱们的代码中。这么做的好处是省略了咱们下一个输入文献内容的程序。你可能点击此处查看github上的图像文献。不过,为了确保你拿到的文献是之前输入的文献的不异版本,你最好取你的机械上已有的图像文献。
运转print(keras._file_)将会打印出你机械上的keras库的途径,其途径(针对IMac用户)大致如下:
这给咱们供给了本机机械上的途径,沿着途径导航,然新进入preprocessing文献夹;正在preprocessing文献夹中你就会看到图像py文献,你可能将此中的内容复制到你的代码中。这个文献有点长,但关于初学者来说,这应当是最单纯的方式了。
到这里,你还须要再次检验,以确保你输入的是必需的scikit-image单位,如此复制的image.py才调识别出。
现正在,咱们须要给ImageDataGenerator类的方式增加六行代码,如此它就有三个属性来默示咱们将要增加的图像扩充类型。下面的代码是从我现正在的image.py中复制得来的:
下面的random_transform()函数照应咱们之前传输至ImageDataGenerator函数的参数。若是咱们把“对照度扩展”、“自符合平衡”或“直方图平衡”的参数成立为“True”,那么当咱们移用ImageDataGenerator函数的光阴,random_transform()函数就会施行所需的图像扩充。
现正在,扫数必备的代码都曾经计算停当了,那么咱们就可能移用ImageDataGenerator()函数施行直方图批改的方式了。当咱们将扫数的参数成立为True后,部门图像就会造成如此:

我不保举正在任何给定的数据集结将一个以上的参数成立为True,你须要确保你的数据集实习有助于你降低分类器的精确性。关于彩色图像,我展现“对照度扩展”的收获优于“直方图批改”或“自符合平衡”的收获。
终末一步,教练咱们的卷积神经收集,并运用model.fit_generator()函数验证这个模子,从而实行正在扩充图像上的神经收集的教练和验证。
| 联系人: | 王先生 |
|---|---|
| 微信: | 1735252255 |
| 地址: | 沈阳市铁西区兴华南街58-6号 |
-
思陌产品
深度学习系统产品介绍 -
使用帮助
使用手册 -
关于我们
公司简介 -
资讯反馈
交流论坛 -
联系我们
Tel 15640228768 QQ/WX技术支持 1735252255