前言:
卷积神经网络 是 计算机视觉里面应用非常广泛的一个模型。
卷积神经网络 成功案例 人脸识别,指纹识别等应用.
卷积的本质是图像的特征提取, 在冈萨雷士版本《数字图像处理》处理有专门的章节讲解
各种卷积核,在通讯原理里面,卷积主要用于数字信号调制成模拟信号,信号采样。
卷积神经网络的特征提取思想跟 传统的数字图像 处理里面的SURF,SIFT 算法很像。
目录:
1: 图片表示
2: 80年代DNN 问题 what's wrong with Linear
3: 感受野 Receptive Field
4: 卷积核
一 图片表示
我们常处理的图片分为RGB 图片和 黑白图片。
1.1 黑白图片
MINIST手写数字识别
28*28 的Martix,矩阵里面的元素 取值范围 0-255, 代表对应位置的像素点的灰度值。
可以通过图像二值化算法把该值变换为0-1范围内
1.2 彩色图片
如常用的RGB 图像
如果忽略alpha 通道,剩余3个通道 R, G,B
Python 有Image 库可以操作该图像,具体如下示例
# -*- coding: utf-8 -*-
"""
Created on Fri May 5 16:37:52 2023
@author: chengxf2
"""
from PIL import Image
img = Image.open("D:\\AI\\img\\1.jpg")
#返回两个元素,宽和高。im.size ⇒ (width, height)
width, height = img.size[0],img.size[1]
im2 = Image.new("RGB",img.size, "white")
for h in range(height):
for w in range(width):
#返回给定位置的像素
pix = img.getpixel((w,h))
#修改给定位置的像素
r,g,b = pix[0],pix[1],pix[2]
if r>125 and r-20>g and r-20>b:
im2.putpixel((w,h),(r,0,0))
im2.show()
二 80年代DNN 问题 what's wrong with Linear
问题: 参数量太大
这里重点介绍一下CNN 诞生的原因
以MNITST 手写数字识别,输入数据为28*28=784的一张图像
常用如下的DNN结构,进行识别处理(下图少画了一个隐藏层)
DNN 处理的问题:
计需要参数量太大,按照DNN结构
则需要的权重系数个数
则需要的参数量为
如果每个参数用4字节的浮点数存储,则
需要内存
在80年代,处理器只有几十KB,这个网络参数无法装入内存中.
后来为了解决该问题,提出了感受野的概念(卷积),降低了网络
运行的参数量
三 感受野 Receptive Field
如上图 有很多物品,小男孩一眼关注到的是局部蛋糕,
然后才会慢慢看到其它的物品。
基于上述思想,为了解决参数量过大问题(早期) 后来提出了一种基于权值共享的感受野概念,比如LeNet-5
比如原来DNN 网络: 输入层到隐藏层
这里面隐藏层256,使用共同的3*3卷积核(权值系数),
则只需要
,极大的降低了参数量
如下图,对于隐藏层每个节点
全连接层 权限系数个数为784
卷积层 权值系数个数为9个
四 卷积操作(Convolution Operation)
卷积定义:
设 f(x), g(x) 是R1上的两个可积分函数,作积分
传统数字图像的卷积核里面的权重系数是固定不变的,但是在深度学习里面
卷积核里面的权重系数是通过训练学习得到的.
如下图
卷积运算
例2
把
函数看作卷积核
看作图像向左移位,则卷积后矩阵里面
的元素,就是每次移位t 步后,卷积核和图像重叠的面积.