课程目标
CO1: 学习并掌握图像分类项目的语法基础、深度学习基础
CO2: 通过学习和完成图像分类项目 ,初步掌握应用 python 语言调用模型并完成特定图像分类的能力。
CO3 :培养学生在开展实践过程中的分工协作,交流表达能力
CO4 : 培养学生对实践工作内容的文档写作能力。
人工智能基础
人工智能是什么,和图像分类项目的关系是什么
人工智能( Artificial Intelligence ) ,英文缩写为 AI 。它是研究、开发用于 模拟、延伸和扩展人的智能 的理论、方法、技术及应用系统的一门新技术科学。
✓ 结构模拟: 机器人 学
✓ 功能模拟:以 任务 为核心
使一部机器的反应方式像人一样进行 感知、认知、决策、执行 的人工程序或系统
人工智能基础 – 人工智能、机器学习、深度学习
人工智能和机器学习、深度学习之间的关系
深度学习是机器学习的一个热门分支
人工智能基础 – 人工智能、机器学习、深度学习
• 机器学习是专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。
机器学习的过程≈ 寻找一个合适的 函数
学习任务: 寻找函数,候选函数集合为 f g h ……
学习过程
建立模型(人类设置函数的可能集合)
损失函数(人类设置一个计算方式评价)
参数学习(机器根据数据,从已有的数据和识别结果进行学习)
怎么学习:对答案 监督学习
( Supervised Learning )
任务 模型 输入 性能评价 输出
图像分类程序基础
使用 Python 编程语言,可以快速的开展项目,需要先了解语言的部分特性和一些常用扩展包。
图像分类程序基础 -Python 入门
Python 是 跨平台 的 (Windows 、 Mac 和各种 Unix/Linux 系统 )
目前, Python 有两个版本,一个是 2.x 版,一个是 3.x 版 ( 两者不兼容 )
以 .py 为扩展名的文本文件,运行需要安装 Python 解释器:
CPython官方默认编译器,安装 Python 后直接获得该解释器,以 >>> 作为提示符
Ipython基于 Cpython 的一个交互式解释器, In [ 序号 ]: 作为提示符( Jupyter notebook )
其他如 PyPy (采用 JIT 技术,执行速度快) Jython (运行在 Java 平台) IronPython
◆ 算术运算符
• + 加
• – 减
• * 乘
• / 除
• % 取模(相除后的余数)
• ** 取幂
• // 相除后向下取整到最接近的整数
图像分类程序基础 -Python 入门 – 数据类型
◆ Number (数字)
➢ Python3 支持 int, float, complex (例 -.645+0J ) 三种不同的数字类型
◆ String (字符串)
➢ Python 中的字符串可以使用 单引号 、双引号和三引号 (三个单引号或
三个双引号)括起来,使用反斜杠 \ 转义特殊字符
➢ Python3 源码文件默认以 UTF-8 编码,所有字符串都是 Unicode 字符串
例如: ncount = 100# 赋值整型变量
salary = 1000.0 # 浮点型
name = “Jacky” # 字符串
◆ List (列表)
✓ 列表可以完成大多数集合类的数据结构实现。列表中元素的类型可以不相同,
它支持数字,字符串甚至可以包含列表(所谓嵌套)。
✓ 列表是写在方括号 [] 之间、用逗号分隔开的元素列表。
✓ 列表索引值以 0 为开始值, -1 为从末尾的开始位置。
✓ 列表可以使用 + 操作符进行拼接,使用 * 表示重复 。
例: list1 = [‘Google’, ‘Runoob’, 1997, 2000];
list2 = [1, 2, 3, [4, 5] ];
list3 = [“a”, “b”, “c”, “d”];
◆ Tuple (元组)
➢ tuple 与 list 类似,不同之处在于 tuple 的元素不能修改。 tuple 写在小括号里,元素之间用逗号隔开。
➢ 元组的元素不可变,但可以包含可变对象,如 list 。
➢ 例: tuple = ( ‘runoob’, 786 , 2.23, ‘john’, 70.2 )
◆ set (集合)
➢ set 和 dict 类似,是一组 key 的集合,但不存储 value 。
由于 key 不能重复,所以,在 set 中,没有重复的 key 。
可以使用 {
} 或 set( ) 创建集合 , 但是创建一个空集合时,只能使用 set( )
➢ set 是无序的,重复元素在 set 中自动被过滤。
➢ 例:set={“key1”,“key2”}
◆ dict (字典)
➢ 字典是无序的对象集合,使用键 – 值( key-value )存储,具有极快的查找速度,使用 {} 来标记。
➢ 键 (key) 必须使用不可变类型。
➢ 同一个字典中,键 (key) 必须是唯一的。
例: dic1={
‘Alice’ : ‘2341 ’ ,‘Beth’ : ‘9102 ’ ,‘Cecil’ : ‘3258’ }
◆ if 条件判断
计算机之所以能做很多自动化的任务,因为它可以自己做条件判断。
Python 指定任何 非 0 和非空值为 True , 0 、 None 或空列表为 False
Python 编程中 if 语句用于控制程序的执行,基本形式为:
注意 : Python 对 缩进 要求十分严格,一般用 4 个空格或 Tab 键缩进,但是不能混用
两种循环
◆ for 循环
Python 的循环有两种,一种是for…in循环,可以依次把 list 或 tuple中的元素迭代出来
>>> for i in range(5):
... print(i)
...
0
1
2
3
4
>>> for i in range(0, 10, 3) :
... print(i)
...
0
3
6
9
◆ while 循环
第二种是 while ,只要条件满足,就不断循环,条件不满足时退出循环
在 while … else 在条件语句为 false 时执行 else 的语句块
>>> sum = 0
>>> n = 99
>>> while n > 0:
... sum += n
... n -= 2
...
>>> print(sum)
2500
>>> count = 0
>>> while count < 3:
... print(count, " 小于 3")
... count += 1
... else:
... print(count, " 大于或等于 3")
...
0 小于 3
1 小于 3
2 小于 3
3 大于或等于 3
图像分类程序基础 -Numpy 基础
NumPy 是 Python 中科学计算的基础软件包。在任务中常其创建各种维度的数组。
NumPy 包的核心是 ndarray 对象。它封装了 python 原生的同数据类型的 n 维数组,
为了保证其性能优良,其中有许多操作都是代码在本地进行编译后执行的。
import numpy as np # 导入 numpy 包后就可以使用 numpy 的各种特性
x = np.array([1.3 , 2.2 , 1.7]) # 创建一个一维数组
x = np.array([[1,2,3], [4,5,6], [7,8,9]])# 创建一个二维数组
print ("np.zeros((2,2)):\n", np.zeros((2,2)))
print ("np.ones((2,2)):\n", np.ones((2,2)))
print ("np.eye((2)):\n", np.eye((2)))
print ("np.random.random((2,2)):\n",
np.random.random((2,2)))
np.zeros((2,2)): [[0. 0.] [0. 0.]]
np.ones((2,2)): [[1. 1.] [1. 1.]]
np.eye((2)): [[1. 0.] [0. 1.]]
np.random.random((2,2)): [[0.19151945
0.62210877] [0.43772774 0.78535858]]
图像分类程序基础 -pandas 基础
Pandas 是 python 的一个数据分析包,常用于数据的导入和整理,进行数据前期的整理工作效果突出
import pandas as pd
# 读取 CSV 文件,并把文件内容存入 df
df = pd.read_csv("titanic.csv", header=0)
# 看下数据前五行
df.head()
Python Imaging Library ( PIL ),已经是 Python 平台事实上的图像处理标准库了。
PIL 功能非常强大,但 API 却非常简单易用。
from PIL import Image
infer_path='/home/aistudio /data/data2304/infer_3.png ’
img = Image.open(infer_path)
plt.imshow(img) # 根据数组绘制图像
plt.show() # 显示图像
图像识别的神经网络基础
进行图像智能识别的核心技术基础就是神经网络,神经网络的工作机制是怎么样的
• 深度学习的神经网络在图像领域的应用
图像分类项目初识
黑白图像像素点:黑色是 0 ,白色是 1
我们人看到的 计算机看到的 32*32 像素
彩色图像像素点:每个像素点都是由 R G B 三个颜色值组成。
2*2*3 的 R G B 的图像简单示意。
np.array( [ [ [1,2,3], [4 ,5, 6] ] ,
[ [7,8,9], [10,11,12] ] ] )
img2=Image.fromarray(imgv)
plt.imshow(img2)
plt.show
神经网络结构
生物神经元
① 神经元间通过突触两两相连
② 树突 接收 来自多个神经元的信号
③ 轴突 根据树突传递过来的 综合信号的强弱是否超过
某一阈值 来决定是否将该信号传递给下一个神经元
生物神经元的启示
① 每个神经元都是一个 多输入单输出的信号处理单元
② 神经元具有 阈值特性
神经网络结构
• 神经元模型是一个包含输入,输出与计算功能的模型。输入可以类比为神经元的树突,
而输出可以类比为神经元的轴突,计算则可以类比为细胞核
神经元不同的连接方式构成不同的网络结构
为什么引入激活函数
- 为了增强网络的表达能力,我们需要激活函数来将线性函数 -> 非线性函数
- 神经元加入激活函数后,深层的神经网络可以逼近模拟任何非线性函数
Step1: 模型选择: 1. 选择什么样的网络结构 2. 选择多少层数,每层选择多少神经元
图像识别模型的选择
损失函数的作用机制
选择常用损失函数: 什么是损失函数 ?
我们希望网络最后达到的效果为:
对于手写字体图像 1 ,期望目标是让网络输出为[1,0,……, 0] ,
期望值和当前网络输出值之间的就存在损失 𝑙
对所有的训练数据 :常用损失函数 𝐶 :平方损失函数、交叉熵损失函数
LL 能够尽可能小,设计损失函数,使得值 L 尽可能小
参数学习的核心方法
Step3: 参数学习
通过枚举找到使得损失函数最小的方法不可取
找到梯度下降法:函数 F(x) 在初始值沿着梯度相反的方向下降最快参数使参数更新方式为 w- 𝜂 𝝏𝑳/𝝏w得
总损失 L 最小
反向传播法:神经网络将计算得到的梯度值,反向传播回网络,更新所有的参数 w
反向传播法过程示例
卷积神经网络基础
卷积神经网络是对普通神经网络的一种改进方式,可以更适合进行图像分类的任务
深层神经网络用于图像处理的问题
在语音识别等一维信号处理领域取得成功的网络结构
如果我们应用左边那样的网络来处理图像问题会发生什么 ?
◆ 考虑一种情形:
✓ 以 1000*1000 的灰度图像作为输入层
✓ 希望隐层有和输入相同的神经单元
◆ 网络参数:
10^6 * 10^6 = 1M * 1M = 1T 个参数,
一个参数以浮点 数 4Byte 的方式存储
那么需要 不小于 4T 内存
对于图像处理,是否可以利用图像的某些模式或者说是特点,简化每一层的计算过程
图像模式的特性一
◆ 第一个发现 : 鸢尾花仅出现在图像局部区域,并不是所有具有相似形态特征的鸢尾花都位于图像的同一个位置
◆ 针对该发现可能的做法:
1. 定义一种提取局部的特征的方法,可有效响应特定局部模式
2. 用这种方法遍历整张图片
◆ 第二个发现 : 大小改变,鸢尾花仍然可以有效区分
◆ 针对该发现可能的做法:
1. 在神经网络逐层累加的过程中,可以直接对图像进行缩放
2. 缩放到适当大小后,可以在特征提取过程中得到有效响应
对发现图像模式的应用
◆ 针对第一种发现可能的做法:卷积
1. 定义一种提取局部的特征的方法,可有效响应特定局部模式
2. 用这种方法遍历整张图片
◆ 针对第二种发现可能的做法:池化
1. 在神经网络逐层累加的过程中,可以直接对图像进行缩放
2. 缩放到适当大小后,可以在特征提取过程中得到有效响应
卷积神经网络简介
卷积神经网络( ConvNets 或 CNN )是一类神经网络,已被证明在图像识别和分类
等领域非常有效。除机器人和自动驾驶汽车的视觉增强功能外, ConvNets 已成功
识别面部,物体和交通标志。
卷积神经网络基础之 LeNet
最早的卷积神经网络之一,此处对 LeNet 稍作修改,用其识别船、狗、猫、鸟的图片
在接收到船图像作为输入时,网络会正确分配所有四个类别中船的最高概率( 0.94 )。输出层中所有概率的总和应为 1
• ConvNet 中有四个主要操作层:卷积、激活函数( ReLU )、池化、分类层(也叫做全连接层)
• 是每个卷积神经网络的基本构建块
卷积层做什么
使用卷积核提取图像特征
卷积层计算方式
• 用同一个卷积核从左到右 Z字形滑动遍历每 一个可能的局部位置
• 在每个位置计算卷积核和局部数据的点积
卷积层:不同过滤器的卷积效果
多个卷积核
多个卷积核过滤器的工作,生成不同的特征图。
彩色图像需要三层卷积核
• R G B 三层数据 对应三个提取信息的卷积核
• RGB 图像同时使用多个卷积核,提取多种不同的局部模式
卷积核参数设置
• 深度 (depth) : 深度对应于我们用于卷积运算的滤波器数量,下图三个不同滤波器,因此特征图的 “ 深度 ” 将为 3 。
使用三个不同的滤波器对原始船形图像进行卷积,从而生成如图三个不同的特征图。
卷积核参数设 步幅 (stride) : 置 步幅是 我们在输入矩阵上滑动滤镜矩阵的像素数。当跨度为 1时,我们一次将滤镜移动一个像素。当跨度为 2 时,滤镜一次滑动 2 个像素。跨度较大将产生较小的特征图。
填充( padding ): 卷积之前在原图边界周围用零填充输入矩阵可以更方便的进行卷积, ( 更充分的提取图像四周的信息 ) ,因此可以将滤镜应用于输入图像矩阵的边界元素。
零填充的效果允许我们控制特征图的大小。
• 添加零填充称为宽卷积 ,
• 不使用零填充将是窄卷积。
池化层
降低特征图的维度
一个最大池化的例子,以 2*2 的窗口滑动 2 个步长得到后面的结果
池化层功能总结
⚫ 池化的功 能是 逐渐减小 输入 表示的空 间大 小 ,使输 入( 特征尺寸 )更 小,更易于管理
⚫ 减少了网络中参数和计算的数量
⚫ 帮助我们获得图像的几乎不变的表示。
全连接层
• 将多层的特征映射抻直成一个一维的向量
• 采用全连接的方式将向量连接向输出层
• 输出层就是对应分类任务各个类别的得分
卷积神经网络一般结构
LeNet
LeNet 是最早的卷积神经网络之一。这里展示的是作者论文中的 LeNet-5 模型:
经典的图像数据集 -ImageNet
获取地址: http://image-net.org/
1 ) Total number of non-empty synsets: 21841
2 ) Total number of images: 14,197,122
3 ) Number of images with bounding box
annotations: 1,034,908
4 ) Number of synsets with SIFT features: 1000
5 ) Number of images with SIFT features: 1.2 million
可供用于图像分类、目标定位、目标检测、实例分割等多个计算机视觉任务。
ImageNet 国际计算机视觉挑战赛 (ILSVRC)
经典的图像数据集 -minist
获取地址: http://yann.lecun.com/exdb/mnist/
• 手写数字
• 10 个互斥的类别, 28*28 的灰度图像
• 美国国家标准与技术研究所 , National Institute of Standards and Technology (NIST)
• 250 个人的手写数字。 50% 来自人口普查局工作人员, 50% 来自高中学生。
• 训练: 60,000 个样本
• 测试: 10,000 个样
经典的图像数据集 -CIFAR
获取地址:
http://www.cs.toronto.edu/~kriz/cifar.html
• 数据集的类别分布见下图
• 60000 张 32*32 的 RGB 图像
• 10 个互斥的类别,每类 6000 张图片
• 训练: 50000 张, 5 个训练批,每批 10000张 每类图像随机抽取,张数不平均
• 测试: 10000 张, 单独构成一批,每类1000
主流深度学习框架展示
框架名称 |
GitHub的活跃度 |
维护团队 |
支持语言 |
支持系统 |
编程模式 |
||
Star( 数量) |
Fork( 数量) |
贡献 者 |
|||||
TensorFl ow |
11973 0 |
71727 |
181 7 |
|
Python、C++ 、Java、Go |
Linux、macOS 、Windows、RaspberryPi |
符号式编程 |
Keras |
37850 |
14450 |
771 |
|
Python、R |
Linux、macOS、Windows |
符号式编程 |
PyTorch |
24331 |
5778 |
906 |
|
Python、C++ |
Linux、macOS、Windows |
命令式编程 |
MXNet |
16255 |
5842 |
667 |
DMLC Amazon |
Python、C++ 、Clojure、Julia 、Perl、R、 Scala、Java |
Linux、macOS、Windows 、RaspberryPi、NVIDIA Jetson |
符号式编程和 命令式编程的 混合编程 |
CNTK |
15721 |
4213 |
191 |
Microsoft |
Python、C++ 、C#/.NET、 Java |
Linux、Windows |
符号式编程 |
Theano |
8667 |
2479 |
334 |
蒙特利尔大学 |
Python |
Linux、macOS、Windows |
符号式编程 |
PaddlePaddle 框架
• PaddlePaddle 也叫飞桨, 是以百度多年的深度学习技术研究和业务应用为基础, 集深度学习核心框架、基础模型库、端到端 开发套件、工具组件和服务平台于一体。
• 2016 年正式开源,是全面开源开放、技术领先、功能完备的产业级深度学习平台。
• 飞桨源于产业实践,始终致力于与产业深入融合。目前飞桨已广泛应用于工业、农业、服 务业等,服务 150 多万开发者,与合作伙伴一起帮助越来越多的行业完成 AI 赋能。
GitHub 项目地址: https://github.com/PaddlePaddle/Paddle
今天的文章基于python的图像处理_python图像处理入门分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/89360.html