首先明确:卷积神经网络的训练是为了得到卷积核,方便之后进行其他操作

一. 卷积神经网络的特点

1、局部感知:

一般认为图像的空间联系是局部的像素联系比较密切,而距离较远的像素相关性较弱,因此,每个神经元没必要对全局图像进行感知,只要对局部进行感知,然后在更高层将局部的信息综合起来得到全局信息。

2、参数共享:

在局部连接中,每个神经元的参数都是一样的,即:同一个卷积核在图像中都是共享的。(理解:卷积操作实际是在提取一个个局部信息,而局部信息的一些统计特性和其他部分是一样的,也就意味着这部分学到的特征也可以用到另一部分上。所以对图像上的所有位置,都能使用同样的学习特征。)卷积核共享有个问题:提取特征不充分,可以通过增加多个卷积核来弥补,可以学习多种特征。

3、采样(池化)层:

在通过卷积得到特征后,基于局部相关性原理进行亚采样,在减少数据量的同时保留有用信息。(压缩数据和参数的量,减少过拟合)(max-polling 和average-polling)

二. 多核卷积

通过权值共享可以了解到:用一个卷积核操作只能得到一部分的特征,但是得不到全部特征,这时候就必须引入多卷积核来尽可能多的获取图像矩阵的全部特征,即每个卷积核学习不同特征(卷积核不同的值)来提取原图特征。

下面图片经过三个卷积核的卷积操作得到三个特征图,每个特征图体现原图不同特征。需要注意的是,在多核卷积的过程中每个卷积核的大小应该是相同的。

三. 池化

池化层往往在卷积层后面,通过池化降低卷积层输出的特征向量,同时降低过拟合发生。

卷积神经网络CNN究竟是怎样一步一步工作

参考:https://www.jianshu.com/p/fe428f0b32c1

四. 卷积的实际使用

代码:

代码中自行实现了卷积的操作,因为使用的卷积核都是对称的,所以不需要对其进行180旋转的操作

import matplotlib.pyplot as plt
import pylab
import numpy as npdef convolve(img, fil, mode='same'):if mode == 'fill':h = fil.shape[0] // 2w = fil.shape[1] // 2img = np.pad(img, ((h, h), (w, w), (0, 0)), 'constant')conv_b = _convolve(img[:, :, 0], fil)conv_g = _convolve(img[:, :, 1], fil)conv_r = _convolve(img[:, :, 2], fil)dstack = np.dstack([conv_b, conv_g, conv_r])return dstackdef _convolve(img, fil):fil_heigh = fil.shape[0]fil_width = fil.shape[1]conv_heigh = img.shape[0] - fil.shape[0] + 1conv_width = img.shape[1] - fil.shape[1] + 1conv = np.zeros((conv_heigh, conv_width), dtype='uint8')for i in range(conv_heigh):for j in range(conv_width):conv[i][j] = wise_element_sum(img[i:i + fil_heigh, j:j + fil_width], fil)return convdef wise_element_sum(img, fil):res = (img * fil).sum()if (res < 0):res = 0elif res > 255:res = 255return resimg = plt.imread("../res/test_jpg.jpg")fil = np.array([[-1, -1, 0],[-1, 0, 1],[0, 1, 1]])res = convolve(img, fil, 'fill')
plt.imshow(res)
pylab.show()

代码说明

首先构造一个卷积核(当然在实际使用中是通过训练得到的),然后通过这个卷积核对图像进行操作。

代码中kernal即为卷积核,将图片和卷积核都转为numpy类型,然后进行卷积操作。

对图片进行模糊

假设我们使用图片

使用kernal为

   0.0, 0.2,  0.0,0.2, 0.2,  0.2,0.0, 0.2,  0.0

即我们通过将图片局部进行类似平均化的操作,达到模糊目的。

得到结果:

如果我们使用更大的卷积核来对图片操作,kernal设置为:

  0, 0, 1, 0, 0,0, 1, 1, 1, 0,1, 1, 1, 1, 1,0, 1, 1, 1, 0,0, 0, 1, 0, 0,

我们会得到更模糊的图片:

另外有关图像的锐化,风格转化等更加详细的介绍可以参考下面的网址,本片博客就是根据其进行的总结,因为链接这篇文章已经说明的很清晰了,所以我就不再废话了:https://lodev.org/cgtutor/filtering.html

五. 在运行过程中遇到的问题

关于 .jpg 与 .png的不同之处

对于jpg和png图像的不同之处,之前一直是没有了解,都是混用,但是在这次图像卷积实验中,看出了不同之处。

如果你把上面代码中的.jpg文件改为.png文件,那么就无法得到正常的结果,为什么呢?

这还要从jpg和png的不同之处说起。

.jpg 是由三通道组成的,Red(红色)Green(绿色)Blue(蓝色),也就是说转为numpy后的shape为(x,x,3)

.png是由四通道组成的,Red(红色)Green(绿色)Blue(蓝色)和Alpha,其中Alpha通道一般用做透明度参数,这就是为啥透明图像都保存成了png格式,一般在程序开发过程中会用到透明背景的图片,这些图片都是.png类型的。.png图像转为numpy后的shape为(x,x,4)。

这算是自己的无知采坑了吧。

我的新博客:https://kai123wen.github.io/

利用卷积处理图片的实例(图像模糊,锐化...)相关推荐

  1. 猴子?狒狒?傻傻分不清楚——制作tfrecord数据集并利用卷积神经网络训练实例

    去年年底学习了深度学习的相关知识,但是寒假回来之后忘得也差不多了...为了巩固下所学知识,近期利用卷积神经网络做了一个小实例.卷积神经网络是一种多层神经网络,擅长处理图像特别是大图像的相关机器学习问题 ...

  2. 在OpenCV中利用卷积进行图像滤波

    简 介: 本文首先讨论了卷积核的概念,以及如何用于对图像进行滤波.然后通过他们对图像进行数学运算来实现特定的效果,比如平和和锐化.展示了如何在OpenCV中实现2D滤波. 在等同卷积卷积核之后,我们创 ...

  3. 吴恩达深度学习笔记11-Course4-Week2【深度卷积网络:实例探究】

    深度卷积网络:实例探究 实例探究(Case studies) 为什么要进行实例探究(Why look at case studies?) 从中获得灵感,借鉴一些效果很好的网络来完成自己的任务. 一.经 ...

  4. 深度学习笔记 第四门课 卷积神经网络 第二周 深度卷积网络:实例探究

    本文是吴恩达老师的深度学习课程[1]笔记部分. 作者:黄海广[2] 主要编写人员:黄海广.林兴木(第四所有底稿,第五课第一二周,第三周前三节).祝彦森:(第三课所有底稿).贺志尧(第五课第三周底稿). ...

  5. 【转】自然语言系列学习之表示学习与知识获取(八)利用远程监督多实例的关系抽取

    下面介绍下如何利用远程监督多实例进行关系抽取.前文有提到到当利用文本进行关系抽取,基本思想是利用知识图谱中,如(下图)任意两个实体同时在句子中出现: 我们把句子当成是两个实体关系训练得样例,这样就可以 ...

  6. 吴恩达deeplearning.ai系列课程笔记+编程作业(11)第四课 卷积神经网络-第二周 深度卷积网络:实例探究(Deep convolutional models: case studies)

    第四门课 卷积神经网络(Convolutional Neural Networks) 第二周 深度卷积网络:实例探究(Deep convolutional models: case studies) ...

  7. 吴恩达深度学习课程笔记(四):卷积神经网络2 实例探究

    吴恩达深度学习课程笔记(四):卷积神经网络2 实例探究 吴恩达深度学习课程笔记(四):卷积神经网络2 实例探究 2.1 为什么要进行实例探究 2.2 经典网络 LeNet-5 AlexNet VGG- ...

  8. 第二周 深度卷积网络:实例探究(Deep convolutional models: case studies)

    第二周 深度卷积网络:实例探究(Deep convolutional models: case studies) 文章目录 第二周 深度卷积网络:实例探究(Deep convolutional mod ...

  9. js入门·循环与判断/利用函数的简单实例/使用对象/列举对象属性的名称

    1,列举对象属性的名称 <script language="javascript"> var obj=new Object(); obj.a="您好,我是田洪 ...

最新文章

  1. StringBuilder、StringBuffer、String区别
  2. 无人驾驶 | 为什么双目自动驾驶系统难以普及?
  3. Android --- 快速将字符串定义到strings.xml文件的方法
  4. java 声明抽象方法_java – 类必须声明为abstract或实现抽象方法错误
  5. notejs环境搭建
  6. Kubernetes 核心概念 1
  7. iPhone 14 Pro将采用开孔全面屏:明年iPhone 15全系标配
  8. python pdb pip安装_Python调试器,一个优秀开发人员的必备技能包
  9. python flask ajax处理按钮_Python Flask前后端Ajax交互的方法示例
  10. 淼淼Kruskal算法
  11. 银行笔试计算机基础知识点归纳,银行笔试:六大行笔试考情及重点梳理(内含免费模考)...
  12. 买不起房的职场人,把装修欲转移到了工位
  13. 推荐 25 个优雅的 jQuery Tooltip 插件
  14. 解决 oracle 错误ORA-01033
  15. [精选] 统计在线人数,用php 如何来实现 ?
  16. Java开发一个登陆窗体,包括用户名,密码以及提交按钮和重置按钮,当用户输入amy,密码123456,弹出登陆成功提示对话框
  17. 驰骋工作流引擎-API开发接口-重要的部分.
  18. C++中关于二维矩阵和三维矩阵的计算
  19. 2021精选 Java面试题附答案 1-10
  20. Python爬虫入门教程 43-100 百思不得姐APP数据-手机APP爬虫部分

热门文章

  1. c++/c中的预编译,文件包含伪指令,#include,包含哨卫,头文件保护
  2. Android 组件化方案 JIMU 体验
  3. HM数据科学库-matplotlib(二)
  4. 【高等数学】02 函数的特性,有界性,无界性,单调性,奇偶性,周期性,反函数,复合函数
  5. IOS之数据持久化二(归档与反归档)
  6. 4.QCustomPlot使用-坐标轴常用属性
  7. 【Android】实战图像识别:Compose + MLKit + CameraX
  8. PHP中strtotime函数的坑
  9. 浅析image,imagesc,imshow的用法
  10. 微信小程序实现瀑布流 仿小红书