2018-05-30 17:25:09 fengzhongluoleidehua 阅读数 1405
  • 深度学习图像处理之垃圾分类

    图像分类是图像处理领域的基本任务,同时也是深度学习领域的“Hello Word”,掌握好相关的基础知识,才能更好地开展识别、分割、去噪等更加复杂的任务。本课程将以当下最火热的垃圾分类作为主题,手把手地带领大家实现图像分类任务的完整过程。课程可以分为三个板块: (1)深度学习在图像处理领域的发展过程; (2)解析经典的卷积神经网络; (3)垃圾分类实战。本课程将使用Pytorch深度学习框架进行实战,并在ubuntu系统上进行演示,包括:不同标注文件下的数据集读取、编写卷积神经网络、训练垃圾分类数据集、测试训练网络模型、网络可视化、性能评估等。

    406 人正在学习 去看看 郭冰洋

深度学习笔记
深度学习(六十九)darknet 实现实验 Compressing Deep Neural Networks with Pruning, Trained Quantization and Huffma

深度学习(六十八)darknet使用

深度学习(六十七)metal forge深度学习库使用

深度学习(六十六)生成模型、最大化似然、KL散度

深度学习(六十五)移动端网络MobileNets

深度学习(六十四)Faster R-CNN物体检测

深度学习(六十三)空间变换网络

深度学习(六十二)SqueezeNet网络设计思想笔记

深度学习(六十一)NNPACK 移植与实验

深度学习(六十)网络压缩简单总结

深度学习(五十九)mxnet移植至android

深度学习(五十八)caffe移植至mxnet

深度学习(五十七)tensorflow andorid yolo物体检测测试

深度学习(五十六)tensorflow项目构建流程

深度学习(五十五)tensorflow分布式训练

深度学习(五十四)图片翻译WGAN实验测试

深度学习(五十三)对抗网络

深度学习(五十二)变分贝叶斯自编码器(下)

深度学习(五十一)变分贝叶斯自编码器(上)

深度学习(五十)基于条件对抗网络的图片翻译

深度学习(四十九)Tensorflow提高代码效率笔记

深度学习(四十八)InfoGAN学习笔记

深度学习(四十七)DSD正则化训练方法

深度学习(四十六)Adversarial Autoencoders

深度学习(四十五)条件对抗网络

深度学习(四十四)变分贝叶斯自编码器(上)

深度学习(四十三)条件变分自编码器概述

深度学习(四十二)word2vec词向量学习笔记

深度学习(四十一)cuda8.0+ubuntu16.04+theano、caffe、tensorflow环境搭建

深度学习(四十)caffe使用点滴记录

深度学习(三十九)可视化理解卷积神经网络(2.0)

深度学习(三十八)卷积神经网络入门学习(2.0)

深度学习(三十七)优化求解系列之(1)简单理解梯度下降

深度学习(三十六)异构计算CUDA学习笔记(1)

深度学习(三十五)异构计算GLSL学习笔记(1)

深度学习(三十四)对抗自编码网络-未完待续

深度学习(三十三)CRF as RNN语义分割-未完待续

深度学习(三十二)半监督阶梯网络学习笔记

深度学习(三十一)基于深度矩阵分解的属性表征学习

深度学习(三十)贪婪深度字典学习

深度学习(二十九)Batch Normalization 学习笔记

深度学习(二十八)基于多尺度深度网络的单幅图像深度估计

深度学习(二十七)可视化理解卷积神经网络

深度学习(二十六)Network In Network学习笔记

深度学习(二十五)基于Mutil-Scale CNN的图片语义分割、法向量估计

深度学习(二十四)矩阵分解之基于k-means的特征表达学习

深度学习(二十三)Maxout网络学习

深度学习(二十二)Dropout浅层理解与实现

深度学习(二十一)基于FCN的图像语义分割

深度学习(二十)基于Overfeat的图片分类、定位、检测

深度学习(十九)基于空间金字塔池化的卷积神经网络物体检测

深度学习(十八)基于R-CNN的物体检测

深度学习(十七)基于改进Coarse-to-fine CNN网络的人脸特征点定位

深度学习(十六)基于2-channel network的图片相似度判别

深度学习(十五)基于级联卷积神经网络的人脸特征点定位

深度学习(十四)基于CNN的性别、年龄识别

深度学习(十三)caffe之训练数据格式

深度学习(十二)从自编码到栈式自编码

深度学习(十一)RNN入门学习

深度学习(十)keras学习笔记

深度学习(九)caffe预测、特征可视化python接口调用

深度学习(八)RBM受限波尔兹曼机学习-未完待续

深度学习(七)caffe源码c++学习笔记

深度学习(六)caffe入门学习

深度学习(五)caffe环境搭建

深度学习(四)卷积神经网络入门学习

深度学习(三)theano入门学习

深度学习(二)theano环境搭建

深度学习(一)深度学习学习资料

图像处理
图像处理2

图像处理(二十三)基于调色板的图像Recoloring

图像处理(二十二)贝叶斯抠图

图像处理(二十一)基于数据驱动的人脸卡通动画生成

图像处理(十九)基于移动最小二乘的图像变形

图像处理(十四)图像分割(4)grab cut的图割实现

图像处理(十三)保刚性图像变形算法

图像处理(十二)图像融合(1)Seamless cloning泊松克隆

图像处理(十一)图像分割(3)泛函能量LevelSet、snake分割

图像处理(九)人物肖像风格转换

图像处理(十)基于特征线的图像变形-

图像处理(七)导向滤波磨皮

图像处理(六)递归双边滤波磨皮

图像处理(四)图像分割(2)测地距离Geodesic图割

图像处理(三)图像分割(1)Random Walks分割

https://blog.csdn.net/hjimce/article/details/50573444

主要阐述了一系列rcnn用到的算法以及目前发展流程,做一个综合的整理 rcnn->spp-net->fast-rcnn->faster-rcnn->yolo->ssd->R-FCN 小小搬运工,希望对大家有帮助 :)

https://blog.csdn.net/column/details/ym-alanyannick.html

2019-02-16 17:12:51 weixin_42674350 阅读数 224
  • 深度学习图像处理之垃圾分类

    图像分类是图像处理领域的基本任务,同时也是深度学习领域的“Hello Word”,掌握好相关的基础知识,才能更好地开展识别、分割、去噪等更加复杂的任务。本课程将以当下最火热的垃圾分类作为主题,手把手地带领大家实现图像分类任务的完整过程。课程可以分为三个板块: (1)深度学习在图像处理领域的发展过程; (2)解析经典的卷积神经网络; (3)垃圾分类实战。本课程将使用Pytorch深度学习框架进行实战,并在ubuntu系统上进行演示,包括:不同标注文件下的数据集读取、编写卷积神经网络、训练垃圾分类数据集、测试训练网络模型、网络可视化、性能评估等。

    406 人正在学习 去看看 郭冰洋

图像处理学习笔记(深度学习+三维图形+机器学习+图像处理)
某博客专家根据论文写的深度学习,机器学习方面的学习笔记:
(http://blog.csdn.net/hjimce/article/details/50573444)
网上某神写的R-CNN详细笔记:
http://blog.csdn.net/column/details/ym-alanyannick.html
图像处理:
http://blog.csdn.net/GarfieldEr007/article/category/2472163
转载于https://blog.csdn.net/dreamer_18/article/details/81347242

2018-11-20 10:04:47 liaopiankun0618 阅读数 1791
  • 深度学习图像处理之垃圾分类

    图像分类是图像处理领域的基本任务,同时也是深度学习领域的“Hello Word”,掌握好相关的基础知识,才能更好地开展识别、分割、去噪等更加复杂的任务。本课程将以当下最火热的垃圾分类作为主题,手把手地带领大家实现图像分类任务的完整过程。课程可以分为三个板块: (1)深度学习在图像处理领域的发展过程; (2)解析经典的卷积神经网络; (3)垃圾分类实战。本课程将使用Pytorch深度学习框架进行实战,并在ubuntu系统上进行演示,包括:不同标注文件下的数据集读取、编写卷积神经网络、训练垃圾分类数据集、测试训练网络模型、网络可视化、性能评估等。

    406 人正在学习 去看看 郭冰洋

医学图像数据格式

医学图像采用数字成像和通信(DICOM)作为存储和交换医学图像数据的标准解决方案。这个标准的第一个版本是在1985年发布的。发展到现在,该方案有了一些改变。该标准使用文件格式和通信协议。

文件格式 - 所有患者医疗图像都以DICOM文件格式保存。除了其他图像相关数据(例如用于拍摄图像的设备以及医疗处理的一些背景)之外,该格式具有关于患者的PHI(受保护的健康信息),例如姓名,性别,年龄。医学影像设备创建DICOM文件。医生使用DICOM查看器,可显示DICOM图像的计算机软件应用程序,读取和诊断图像中的发现。

通信协议 - DICOM通信协议用于搜索档案中的成像研究,并将成像研究恢复到工作站以显示。连接到医院网络的所有医疗成像应用程序都使用DICOM协议来交换信息,主要是DICOM图像,还包括患者和手术信息。还有更先进的网络命令,用于控制和跟踪治疗,调度程序,报告状态,分担医生和成像设备之间的工作量。关于DICOM标准细节,在这里推荐一个很好的博客http://dicomiseasy.blogspot.com

分析DICOM图像

用于分析DICOM图像的一个很好的python包是pydicom。初次之外,我们还可以用pandas,scipy, skimage,mpl_toolkit 进行数据处理和分析。
接下来,我们介绍一些可以获得DICOM 数据库,如下:

  • kaggle competitions and Datasets
  • Dicom Library
  • Osirix Datasets
  • Visible Human Datasets
  • The Zubal Phantom

在医学影像处理中使用的到的深度学习的模型框架主要有:

  • SAE(stack auto-encoder) 无监督学习方案,逐层训练,得到特征描述为主
  • RBM(restricted Boltzmann machine) 无监督学习方案,与SAE 类似
  • CNN(convolutional neural network)
    卷积神经网络,使用最为广泛,可以用来提取图片特征或者直接完成分类检测等任务
  • RNN(recurrent neural network) 循环神经网络,用来获取时序上的信息,在CT等逐行扫描图像中使用
  • U-net (with a single downsampling stage)
    类似于带short-cut的全卷机网络,用来融合不同尺度的图像的特征
  • FCNN(fully convolutional neural network)
  • 全卷机网络,可以获取与原图相同分辨率的图片,常用于分割等任务 FRCNN(Faster Region-proposal based neural network)

深度学习框架

  • caffe
  • tensorflow
  • torch
  • Theano

暂时没有使用到的深度学习技术

  • VAE
  • GAN

State of Arts
在这里插入图片描述

深度学习在医学图像领域的一些限制

  • 缺少高质量的标注的训练样本,因此训练出来的模型可能是过拟合的或者说推广性不好,因此需要将的到的模型放在各种情况下测试推广性]

  • 深度学习得到的模型是一个黑盒子,无法解释其有效性,在一些特殊的情况下会出现非常奇怪无法解释的问题,因此在医疗行业中的接受度也是一个问题[^doc3]
    在商业系统中使用临床上的图片资料会存在法律和伦理上的问题而不使用这样的样本无法进一步的提高深度学习模型的水平

2D VS 3D

从文献综述来看,大部分的工作都是基于2D图像的,其实在医学图像中,CT 和 MRI都是3D的数据2D化的结果,在医疗图像处理的算法中3D重建等等也是非常重要的一大类算法,但是现有的基于3D的算法一来耗时比较高,二来并没有比基于2D的算法提高很多,使用2D还是3D是一个值得思考的问题。

Feature vs Result

从文献综述中来看,稍微久远一些的算法就是把CNN当作是一个特征提取的算子获得图像的描述特征而最新的一些方法直接将CNN的结果就作为最终的输出结果来使用, 这里喔感觉直接使用CNN的输出作为结果,会涉及到文献中所说的黑盒子的限制,可解释型一般是比较差的,而作为特征来使用解释性可能会好一些,因为后续的一些后处理中可以增加的规则类的比较多,解释性会更佳

过滤 vs 诊断

一直以来作者觉得在医疗行业中,计算机能做的最大的贡献就是帮助医生做大量医学影像的过滤工作,至于使用诊断上最多也只是一个辅助的诊断工具,而机器学习到达了深度学习的时代,有些本来以为不太可能的任务都被深度学习算法一个一个的攻克了,在未来的工作做,计算机深度学习是不是可能独立的进行本属于医生独享的诊断工作我还是不得而知,然后我们可以知道的是,技术的发展使得过滤的正确率大大的提高,极大的提高生产的效率,这一方面是肯定有助于医疗行业的,相应深度学习在医疗领域的前景还是很广阔的。
原文:https://zhuanlan.zhihu.com/p/27568550

2018-04-06 09:45:48 dongjiebox 阅读数 9215
  • 深度学习图像处理之垃圾分类

    图像分类是图像处理领域的基本任务,同时也是深度学习领域的“Hello Word”,掌握好相关的基础知识,才能更好地开展识别、分割、去噪等更加复杂的任务。本课程将以当下最火热的垃圾分类作为主题,手把手地带领大家实现图像分类任务的完整过程。课程可以分为三个板块: (1)深度学习在图像处理领域的发展过程; (2)解析经典的卷积神经网络; (3)垃圾分类实战。本课程将使用Pytorch深度学习框架进行实战,并在ubuntu系统上进行演示,包括:不同标注文件下的数据集读取、编写卷积神经网络、训练垃圾分类数据集、测试训练网络模型、网络可视化、性能评估等。

    406 人正在学习 去看看 郭冰洋

本文转自知乎专栏:https://zhuanlan.zhihu.com/p/32177354

一方面为做资料整理用,方便后期回顾,另一方面转需

--------------------------------------------------

第一个重境界: 图像识别

如果你开始了解深度学习的图像处理, 你接触的第一个任务一定是图像识别 :比如把你的爱猫输入到一个普通的CNN网络里, 看看它是喵咪还是狗狗。

一个最普通的CNN, 比如像这样几层的CNN鼻祖Lenet, 如果你有不错的数据集(比如kaggle猫狗大战)都可以给出一个还差强人意的分类结果(80%多准确率), 虽然不是太高。

当然,如果你再加上对特定问题的一些知识, 也可以顺便识别个人脸啥的,开个startup叫face 减减什么:

会玩的, 也可以顺别识别个猪脸什么哒(我觉得长得都一样哦), 这样搞出来每个猪的身份, 对于高质量猪肉的销售, 真是大有裨益的。

或者看看植物都有个什么病害什么的,像这样不同的病斑, 人都懒得看的, 它可以给你看出来。 植物保护的人可以拿着手机下田了。

Ronneberger, Olaf, Philipp Fischer, and Thomas Brox. "U-net: Convolutional networks for biomedical image segmentation." International Conference on Medical Image Computing and Computer-Assisted Intervention. Springer, Cham, 2015.

虽然植物保护真的很好用,分类问做就了还真是挺无聊的。

我们进化的方向,也就是用更高级的网络结构取得更好的准确率,比如像下图这样的残差网络(已经可以在猫狗数据集上达到99.5%以上准确率)。分类做好了你会有一种成为深度学习大师,拿着一把斧子眼镜里都是钉子的幻觉。 分类问题之所以简单, 一要归功于大量标记的图像, 二是分类是一个边界非常分明的问题, 即使机器不知道什么是猫什么是狗, 看出点区别还是挺容易的, 如果你给机器几千几万类区分, 机器的能力通过就下降了(再复杂的网络,在imagenet那样分1000个类的问题里,都很难搞到超过80%的准确率)。

He, Kaiming, et al. "Identity mappings in deep residual networks." European Conference on Computer Vision. Springer International Publishing, 2016.

第二重境界 : 物体检测

很快你发现,分类的技能在大部分的现实生活里并没有鸟用。因为现实中的任务啊, 往往是这样的:

或者这样的:

那么多东西在一起,你拿猫狗大头照训练的分类网络一下子就乱了阵脚。 即使是你一个图片里有一个猫还有一个狗,甚至给猫加点噪声,都可以使你的分类网络分寸大乱。

现实中, 哪有那么多图片, 一个图里就是一个猫或者美女的大图,更多的时候, 一张图片里的东西, 那是多多的, 乱乱的,没有什么章法可言的, 你需要自己做一个框, 把你所需要看的目标给框出来, 然后, 看看这些东西是什么 。

于是你来到机器视觉的下一层挑战 - 目标检测(从大图中框出目标物体并识别), 随之而来的是一个新的网络架构, 又被称为R - CNN, 图片检测网络 , 这个网络不仅可以告诉你分类,还可以告诉你目标物体的坐标, 即使图片里有很多目标物体, 也一一给你找出来。

Ren, Shaoqing, et al. "Faster R-CNN: Towards real-time object detection with region proposal networks." Advances in neural information processing systems. 2015.

万军斩你首级那是杠杠的,在众多路人甲中识别嫌疑犯,也是轻而易举, 安防的人听着要按捺不住了。

今年出现的YOLO算法更是实现了快速实时的物体检测,你一路走过就告诉你视线里都有什么在哪里,要知道这在无人驾驶里是何等的利器。

YOLO快速检测法Redmon, Joseph, et al. "You only look once: Unified, real-time object detection." Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2016.

当然, 到这里你依然最终会觉得无聊, 即使网络可以已经很复杂, 不过是一个CNN网络(推荐区域),在加上一层CNN网络做分类和回归。 能不能干点别的?

第三重境界 : 图像切割

啊哈, 这就来到了第三个关卡, 你不仅需要把图片中边边角角的物体给检测出来, 你还要做这么一个猛料的工作, 就是把它从图片中扣出来。 要知道, 刚出生的婴儿分不清物体的边界, 比如桌上有苹果这种事, 什么是桌子,什么是苹果,为什么苹果不是占在桌子上的? 所以, 网络能不能把物体从一个图里抠出来, 事关它是否真的像人一样把握了视觉的本质。 这也算是对它的某种“图灵测试” 。 而把这个问题简化,我们无非是在原先图片上生成出一个原图的“mask”, 面具,有点像phtoshop里的蒙版的东西。

所谓抠图

Drozdzal, Michal, et al. "The importance of skip connections in biomedical image segmentation." International Workshop on Large-Scale Annotation of Biomedical Data and Expert Label Synthesis. Springer International Publishing, 2016.

注意,这个任务里,我们是要从一个图片里得到另一个图片哦! 生成的面具是另一个图片, 这时候,所谓的U型网络粉墨登场,注意这是我们的第一个生成式的模型。 它的组成单元依然是卷积,但是却加入了maxpooling的反过程升维采样。

这个Segmentation任务, 作用不可小瞧哦, 尤其对于科研口的你, 比如现在私人卫星和无人机普及了,要不要去看看自己小区周围的地貌, 看是不是隐藏了个金库? 清清输入, 卫星图片一栏无余。 哪里有树, 哪里有水,哪里有军事基地,不需要人,全都给你抠出来。

如果你要数个细胞啥的 ,都是挺容易的,给它变成这样的轮廓不就你得了。

第四重境界:

我们开始fashion起来, 如果你是淘宝服装小店的老板 ,想让客户输入一张服装的图片,然后得到一组推荐的服装, 来个以图搜图的功能怎么搞呢? 注意啊,我可以从网络上爬一大堆图出来,但是这些数据是没有标注的。怎么办? 铁哥告你还是有的搞,这个搞法,就是聚类。

铁哥教你最简单的一招聚类哦,那就是, 把图片统统放进卷积网络,但是我们不提取分类,而只是提取一些网络中间层的特征, 这些特征有点像每个图片的视觉二维码,然后我们对这些二维码做一个k-means聚类, 也会得到意想不到的效果。 为什么要深度? 因为深度提取的特征,那是与众不同的。

然后以图搜图呢? 不过是找到同一聚类里的其它图片啊。

在聚类的基础上, 就可以做个搜索!

第五层境界 :

我们开始晋升为仰望星空的人, 之前那些分类赚钱的应用太无聊了。 机器视觉搞科学怎么港? 作为一群仰望星空后观察细胞的人,我们最常发现的是我们得到的天文或者细胞图片的噪声实在太大了, 这简直没法忍啊, 然后, 深度学习给了你一套降噪和恢复图像的方法。 一个叫auto-encoder的工具, 起到了很大的作用 , 刷的一下,图像就清楚了。

这还不是最酷炫的,那个应用了博弈理论的对抗学习, 也可以帮你谋杀噪点! 如果你会对抗所谓GAN, 也是一种图像生成的工具, 让网络去掉噪声的图片,与没有噪声的自然图片, 连卷积网络都判别不出来,对, 就是这样!

Schawinski, Kevin, et al. "Generative adversarial networks recover features in astrophysical images of galaxies beyond the deconvolution limit." Monthly Notices of the Royal Astronomical Society: Letters 467.1 (2017): L110-L114.

第六重境界 :

在工业界赚够了钱,科学也太nerd了, 我们来玩艺术思考哲学 ,第一招, 图像风格迁移,请见怎么样用深度学习取悦你的女朋友(有代码):

然而真正能玩好这一事项的,还是那个刚刚提过的对抗学习GAN, 比如大名鼎鼎的CycleGAN, 几乎可以实现一种你自定义的“图像翻译” 功能,而且你不用做标注哦, 拿出冬天和夏天的两组图片, 它会自动的在两组图片中找出对应来。

Zhu, Jun-Yan, et al. "Unpaired image-to-image translation using cycle-consistent adversarial networks." arXiv preprint arXiv:1703.10593 (2017).

第七重境界:

图像翻译也懒的玩了, 你神经网络不是号称能够理解图像,看你来个无中生有,在噪声里生成图片来?

对,依然是GAN,而且是最基础的卷积GAN (DCGAN)就可以给你干出来。

看看GAN所幻想的宾馆情景, 你能想到是计算机做的图吗? 哈哈哈!

Goodfellow, Ian, et al. "Generative adversarial nets." Advances in neural information processing systems. 2014.

写到这里, 我自己都觉得GAN是非常有前途的,有前途的,有前途的,以前我还以为只是好玩呢。

这里展示的七级浮屠,也不过深度学习被人类discover的冰山一角, 醉卧沙场君莫笑, 古来征战几人回。

给你一个稍微清晰一些的大纲:


2018-01-17 19:14:39 ChenVast 阅读数 1808
  • 深度学习图像处理之垃圾分类

    图像分类是图像处理领域的基本任务,同时也是深度学习领域的“Hello Word”,掌握好相关的基础知识,才能更好地开展识别、分割、去噪等更加复杂的任务。本课程将以当下最火热的垃圾分类作为主题,手把手地带领大家实现图像分类任务的完整过程。课程可以分为三个板块: (1)深度学习在图像处理领域的发展过程; (2)解析经典的卷积神经网络; (3)垃圾分类实战。本课程将使用Pytorch深度学习框架进行实战,并在ubuntu系统上进行演示,包括:不同标注文件下的数据集读取、编写卷积神经网络、训练垃圾分类数据集、测试训练网络模型、网络可视化、性能评估等。

    406 人正在学习 去看看 郭冰洋

图像处理:

#coding=utf-8
import matplotlib.pyplot as plt
import tensorflow as tf
import numpy as np
# 读取图片
image_raw_data = tf.gfile.FastGFile ("../datasets/cat.jpg", 'rb').read ()

with tf.Session () as sess:
    img_data = tf.image.decode_jpeg (image_raw_data)

    # 输出解码之后的三维矩阵。
    print(img_data.eval ())
    img_data.set_shape ([1797, 2673, 3])
    print(img_data.get_shape ())

# 打印图片
with tf.Session() as sess:
    plt.imshow(img_data.eval())
    plt.show()

# 重新调整图片大小
with tf.Session () as sess:
    resized = tf.image.resize_images (img_data, [300, 300], method=0)

    # TensorFlow的函数处理图片后存储的数据是float32格式的,需要转换成uint8才能正确打印图片。
    print("Digital type: ", resized.dtype)

    cat = np.asarray (resized.eval (), dtype='uint8')
    # tf.image.convert_image_dtype(rgb_image, tf.float32)
    plt.imshow (cat)
    plt.show ()

# 裁剪和填充图片
with tf.Session() as sess:
    croped = tf.image.resize_image_with_crop_or_pad(img_data, 1000, 1000)
    padded = tf.image.resize_image_with_crop_or_pad(img_data, 3000, 3000)
    plt.imshow(croped.eval())
    plt.show()
    plt.imshow(padded.eval())
    plt.show()


# 截取中间50%的图片
with tf.Session() as sess:
    central_cropped = tf.image.central_crop(img_data, 0.5)
    plt.imshow(central_cropped.eval())
    plt.show()

# 翻转图片
with tf.Session () as sess:
    # 上下翻转
    # flipped1 = tf.image.flip_up_down(img_data)
    # 左右翻转
    # flipped2 = tf.image.flip_left_right(img_data)

    # 对角线翻转
    transposed = tf.image.transpose_image (img_data)
    plt.imshow (transposed.eval ())
    plt.show ()

    # 以一定概率上下翻转图片。
    # flipped = tf.image.random_flip_up_down(img_data)
    # 以一定概率左右翻转图片。
    # flipped = tf.image.random_flip_left_right(img_data)


# 图片色彩调整
with tf.Session () as sess:
    # 将图片的亮度-0.5。
    # adjusted = tf.image.adjust_brightness(img_data, -0.5)

    # 将图片的亮度-0.5
    # adjusted = tf.image.adjust_brightness(img_data, 0.5)

    # 在[-max_delta, max_delta)的范围随机调整图片的亮度。
    adjusted = tf.image.random_brightness (img_data, max_delta=0.5)

    # 将图片的对比度-5
    # adjusted = tf.image.adjust_contrast(img_data, -5)

    # 将图片的对比度+5
    # adjusted = tf.image.adjust_contrast(img_data, 5)

    # 在[lower, upper]的范围随机调整图的对比度。
    # adjusted = tf.image.random_contrast(img_data, lower, upper)

    plt.imshow (adjusted.eval ())
    plt.show ()


#  添加色相和饱和度
with tf.Session () as sess:
    adjusted = tf.image.adjust_hue (img_data, 0.1)
    # adjusted = tf.image.adjust_hue(img_data, 0.3)
    # adjusted = tf.image.adjust_hue(img_data, 0.6)
    # adjusted = tf.image.adjust_hue(img_data, 0.9)

    # 在[-max_delta, max_delta]的范围随机调整图片的色相。max_delta的取值在[0, 0.5]之间。
    # adjusted = tf.image.random_hue(image, max_delta)

    # 将图片的饱和度-5。
    # adjusted = tf.image.adjust_saturation(img_data, -5)
    # 将图片的饱和度+5。
    # adjusted = tf.image.adjust_saturation(img_data, 5)
    # 在[lower, upper]的范围随机调整图的饱和度。
    # adjusted = tf.image.random_saturation(img_data, lower, upper)

    # 将代表一张图片的三维矩阵中的数字均值变为0,方差变为1。
    # adjusted = tf.image.per_image_whitening(img_data)

    plt.imshow (adjusted.eval ())
    plt.show ()


# 添加标注框并裁减。
with tf.Session () as sess:
    boxes = tf.constant ([[[0.05, 0.05, 0.9, 0.7], [0.35, 0.47, 0.5, 0.56]]])

    begin, size, bbox_for_draw = tf.image.sample_distorted_bounding_box (
        tf.shape (img_data), bounding_boxes=boxes)

    batched = tf.expand_dims (tf.image.convert_image_dtype (img_data, tf.float32), 0)
    image_with_box = tf.image.draw_bounding_boxes (batched, bbox_for_draw)

    distorted_image = tf.slice (img_data, begin, size)
    plt.imshow (distorted_image.eval ())
    plt.show ()



一张图片产生多种随机训练数据:

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt


# 随机调整图片的色彩,定义两种顺序。
def distort_color(image, color_ordering=0):
    if color_ordering == 0:
        image = tf.image.random_brightness(image, max_delta=32./255.)
        image = tf.image.random_saturation(image, lower=0.5, upper=1.5)
        image = tf.image.random_hue(image, max_delta=0.2)
        image = tf.image.random_contrast(image, lower=0.5, upper=1.5)
    else:
        image = tf.image.random_saturation(image, lower=0.5, upper=1.5)
        image = tf.image.random_brightness(image, max_delta=32./255.)
        image = tf.image.random_contrast(image, lower=0.5, upper=1.5)
        image = tf.image.random_hue(image, max_delta=0.2)

    return tf.clip_by_value(image, 0.0, 1.0)


#  对图片进行预处理,将图片转化成神经网络的输入层数据。
def preprocess_for_train(image, height, width, bbox):
    # 查看是否存在标注框。
    if bbox is None:
        bbox = tf.constant ([0.0, 0.0, 1.0, 1.0], dtype=tf.float32, shape=[1, 1, 4])
    if image.dtype != tf.float32:
        image = tf.image.convert_image_dtype (image, dtype=tf.float32)

    # 随机的截取图片中一个块。
    bbox_begin, bbox_size, _ = tf.image.sample_distorted_bounding_box (
        tf.shape (image), bounding_boxes=bbox,min_object_covered=0.1)
    bbox_begin, bbox_size, _ = tf.image.sample_distorted_bounding_box (
        tf.shape (image), bounding_boxes=bbox,min_object_covered=0.1)
    distorted_image = tf.slice (image, bbox_begin, bbox_size)

    # 将随机截取的图片调整为神经网络输入层的大小。
    distorted_image = tf.image.resize_images (distorted_image, [height, width], method=np.random.randint (4))
    distorted_image = tf.image.random_flip_left_right (distorted_image)
    distorted_image = distort_color (distorted_image, np.random.randint (2))
    return distorted_image


# 读取图片
image_raw_data = tf.gfile.FastGFile("../datasets/cat.jpg", "rb").read()
with tf.Session() as sess:
    img_data = tf.image.decode_jpeg(image_raw_data)
    boxes = tf.constant([[[0.05, 0.05, 0.9, 0.7], [0.35, 0.47, 0.5, 0.56]]])
    for i in range(9):
        result = preprocess_for_train(img_data, 299, 299, boxes)
        plt.imshow(result.eval())
        plt.show()


没有更多推荐了,返回首页