基于python的图像处理_python图像处理入门

基于python的图像处理_python图像处理入门课程目标CO1:学习并掌握图像分类项目的语法基础、深度学习基础CO2:通过学习和完成图像分类项目,初步掌握应用python语言调用模型并完成特定图像分类的能力

课程目标

基于python的图像处理_python图像处理入门

 

CO1:  学习并掌握图像分类项目的语法基础、深度学习基础

CO2:  通过学习和完成图像分类项目 ,初步掌握应用 python 语言调用模型并完成特定图像分类的能力。

CO3 :培养学生在开展实践过程中的分工协作,交流表达能力

CO4 培养学生对实践工作内容的文档写作能力。

 

人工智能基础

人工智能是什么,和图像分类项目的关系是什么

人工智能( Artificial Intelligence ,英文缩写为 AI 。它是研究、开发用于 模拟、延伸和扩展人的智能 的理论、方法、技术及应用系统的一门新技术科学。

  结构模拟: 机器人

  功能模拟:以 任务 为核心

使一部机器的反应方式像人一样进行 感知、认知、决策、执行 的人工程序或系统

人工智能基础 人工智能、机器学习、深度学习

人工智能和机器学习、深度学习之间的关系

深度学习是机器学习的一个热门分支

基于python的图像处理_python图像处理入门

人工智能基础 人工智能、机器学习、深度学习

    机器学习是专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。

机器学习的过程≈ 寻找一个合适的 函数

学习任务: 寻找函数,候选函数集合为  f g h ……

学习过程

建立模型(人类设置函数的可能集合)

损失函数(人类设置一个计算方式评价)

参数学习(机器根据数据,从已有的数据和识别结果进行学习)

  怎么学习:对答案 监督学习

Supervised Learning

基于python的图像处理_python图像处理入门

任务                                         模型                              输入                             性能评价           输出

 

 

图像分类程序基础

使用 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的图像处理_python图像处理入门

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() # 显示图像

基于python的图像处理_python图像处理入门

图像识别的神经网络基础

进行图像智能识别的核心技术基础就是神经网络,神经网络的工作机制是怎么样的

深度学习的神经网络在图像领域的应用

基于python的图像处理_python图像处理入门基于python的图像处理_python图像处理入门

基于python的图像处理_python图像处理入门

图像分类项目初识

黑白图像像素点:黑色是 0 ,白色是 1

 

基于python的图像处理_python图像处理入门

我们人看到的                                                         计算机看到的 32*32 像素

彩色图像像素点:每个像素点都是由 R G B 三个颜色值组成。

基于python的图像处理_python图像处理入门

基于python的图像处理_python图像处理入门

2*2*3 R G B 的图像简单示意。

np.array(  [ [ [1,2,3],  [4 ,5, 6] ] ,

  [ [7,8,9], [10,11,12] ]  ] )

基于python的图像处理_python图像处理入门

img2=Image.fromarray(imgv)

plt.imshow(img2)

plt.show

基于python的图像处理_python图像处理入门

神经网络结构

生物神经元

   神经元间通过突触两两相连

   树突 接收 来自多个神经元的信号

   轴突 根据树突传递过来的 综合信号的强弱是否超过

  某一阈值 来决定是否将该信号传递给下一个神经元

 生物神经元的启示

     每个神经元都是一个 多输入单输出的信号处理单元

     神经元具有 阈值特性

基于python的图像处理_python图像处理入门

 

神经网络结构

    神经元模型是一个包含输入,输出与计算功能的模型。输入可以类比为神经元的树突,

而输出可以类比为神经元的轴突,计算则可以类比为细胞核

基于python的图像处理_python图像处理入门

 

神经元不同的连接方式构成不同的网络结构

基于python的图像处理_python图像处理入门基于python的图像处理_python图像处理入门

为什么引入激活函数

  • 为了增强网络的表达能力,我们需要激活函数来将线性函数 -> 非线性函数
  • 神经元加入激活函数后,深层的神经网络可以逼近模拟任何非线性函数

基于python的图像处理_python图像处理入门基于python的图像处理_python图像处理入门

Step1: 模型选择: 1. 选择什么样的网络结构    2. 选择多少层数,每层选择多少神经元

基于python的图像处理_python图像处理入门

图像识别模型的选择

基于python的图像处理_python图像处理入门

基于python的图像处理_python图像处理入门

基于python的图像处理_python图像处理入门

损失函数的作用机制

  选择常用损失函数: 什么是损失函数 ?

我们希望网络最后达到的效果为:基于python的图像处理_python图像处理入门

对于手写字体图像 1 ,期望目标是让网络输出为[1,0,……, 0]

期望值和当前网络输出值之间的就存在损失 𝑙

 

基于python的图像处理_python图像处理入门

对所有的训练数据 :常用损失函数 𝐶 :平方损失函数、交叉熵损失函数

基于python的图像处理_python图像处理入门

基于python的图像处理_python图像处理入门LL 能够尽可能小,设计损失函数,使得值 L 尽可能小

参数学习的核心方法

Step3:  参数学习

通过枚举找到使得损失函数最小的方法不可取

基于python的图像处理_python图像处理入门

 

  找到梯度下降法:函数 F(x) 在初始值沿着梯度相反的方向下降最快参数使参数更新方式为 w- 𝜂 𝝏𝑳/𝝏w

  总损失 L 最小基于python的图像处理_python图像处理入门

基于python的图像处理_python图像处理入门

基于python的图像处理_python图像处理入门

基于python的图像处理_python图像处理入门

反向传播法:神经网络将计算得到的梯度值,反向传播回网络,更新所有的参数 w

基于python的图像处理_python图像处理入门

反向传播法过程示例

基于python的图像处理_python图像处理入门

卷积神经网络基础

卷积神经网络是对普通神经网络的一种改进方式,可以更适合进行图像分类的任务

深层神经网络用于图像处理的问题

在语音识别等一维信号处理领域取得成功的网络结构

基于python的图像处理_python图像处理入门

如果我们应用左边那样的网络来处理图像问题会发生什么 ?

考虑一种情形:

  1000*1000 的灰度图像作为输入层

  希望隐层有和输入相同的神经单元

网络参数:

10^6 * 10^6 = 1M * 1M 1T 个参数,

一个参数以浮点 4Byte 的方式存储

那么需要 不小于 4T 内存               

对于图像处理,是否可以利用图像的某些模式或者说是特点,简化每一层的计算过程

图像模式的特性一

  第一个发现 : 鸢尾花仅出现在图像局部区域,并不是所有具有相似形态特征的鸢尾花都位于图像的同一个位置

  针对该发现可能的做法:

1.   定义一种提取局部的特征的方法,可有效响应特定局部模式

2.   用这种方法遍历整张图片

基于python的图像处理_python图像处理入门

  第二个发现 : 大小改变,鸢尾花仍然可以有效区分

  针对该发现可能的做法:

1.   在神经网络逐层累加的过程中,可以直接对图像进行缩放

2.   缩放到适当大小后,可以在特征提取过程中得到有效响应

基于python的图像处理_python图像处理入门

对发现图像模式的应用

 

    针对第一种发现可能的做法:卷积

  1.   定义一种提取局部的特征的方法,可有效响应特定局部模式

  2.   用这种方法遍历整张图片

 

    针对第二种发现可能的做法:池化

  1.   在神经网络逐层累加的过程中,可以直接对图像进行缩放

  2.   缩放到适当大小后,可以在特征提取过程中得到有效响应

卷积神经网络简介

卷积神经网络( ConvNets CNN )是一类神经网络,已被证明在图像识别和分类

等领域非常有效。除机器人和自动驾驶汽车的视觉增强功能外, ConvNets 已成功

识别面部,物体和交通标志。

基于python的图像处理_python图像处理入门

卷积神经网络基础之 LeNet

  最早的卷积神经网络之一,此处对 LeNet 稍作修改,用其识别船、狗、猫、鸟的图片

基于python的图像处理_python图像处理入门

在接收到船图像作为输入时,网络会正确分配所有四个类别中船的最高概率( 0.94 )。输出层中所有概率的总和应为 1

    ConvNet 中有四个主要操作层:卷积、激活函数( ReLU )、池化、分类层(也叫做全连接层)

    是每个卷积神经网络的基本构建块

卷积层做什么

  使用卷积核提取图像特征

基于python的图像处理_python图像处理入门

卷积层计算方式

    用同一个卷积核从左到右 Z字形滑动遍历每 一个可能的局部位置

    在每个位置计算卷积核和局部数据的点积

基于python的图像处理_python图像处理入门

卷积层:不同过滤器的卷积效果

基于python的图像处理_python图像处理入门基于python的图像处理_python图像处理入门

多个卷积核

多个卷积核过滤器的工作,生成不同的特征图。

基于python的图像处理_python图像处理入门

彩色图像需要三层卷积核

    R G B 三层数据 对应三个提取信息的卷积核

基于python的图像处理_python图像处理入门

    RGB 图像同时使用多个卷积核,提取多种不同的局部模式

基于python的图像处理_python图像处理入门

 

卷积核参数设置

深度 (depth)   深度对应于我们用于卷积运算的滤波器数量,下图三个不同滤波器,因此特征图的 深度 将为 3

使用三个不同的滤波器对原始船形图像进行卷积,从而生成如图三个不同的特征图。

基于python的图像处理_python图像处理入门

卷积核参数设 步幅 (stride) 步幅是 我们在输入矩阵上滑动滤镜矩阵的像素数。当跨度为 1时,我们一次将滤镜移动一个像素。当跨度为 2 时,滤镜一次滑动 2 个像素。跨度较大将产生较小的特征图。

填充( padding ): 卷积之前在原图边界周围用零填充输入矩阵可以更方便的进行卷积, ( 更充分的提取图像四周的信息 ) ,因此可以将滤镜应用于输入图像矩阵的边界元素。

零填充的效果允许我们控制特征图的大小。

    添加零填充称为宽卷积

    不使用零填充将是窄卷积。

基于python的图像处理_python图像处理入门

池化层

降低特征图的维度

一个最大池化的例子,以 2*2 的窗口滑动 2 个步长得到后面的结果

基于python的图像处理_python图像处理入门

基于python的图像处理_python图像处理入门

池化层功能总结

  池化的功 能是 逐渐减小 输入 表示的空 间大 ,使输 入( 特征尺寸 )更 小,更易于管理

  减少了网络中参数和计算的数量

  帮助我们获得图像的几乎不变的表示。

基于python的图像处理_python图像处理入门

全连接层

    将多层的特征映射抻直成一个一维的向量

    采用全连接的方式将向量连接向输出层

    输出层就是对应分类任务各个类别的得分

基于python的图像处理_python图像处理入门

卷积神经网络一般结构

基于python的图像处理_python图像处理入门

LeNet

LeNet 是最早的卷积神经网络之一。这里展示的是作者论文中的 LeNet-5 模型:

基于python的图像处理_python图像处理入门

基于python的图像处理_python图像处理入门

经典的图像数据集 -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)

基于python的图像处理_python图像处理入门

经典的图像数据集 -minist

获取地址: http://yann.lecun.com/exdb/mnist/

    手写数字

    10 个互斥的类别, 28*28 的灰度图像

    美国国家标准与技术研究所 , National Institute of Standards and Technology  (NIST)

    250 个人的手写数字。 50% 来自人口普查局工作人员, 50% 来自高中学生。

    训练: 60,000 个样本

    测试: 10,000 个样

基于python的图像处理_python图像处理入门

经典的图像数据集 -CIFAR

获取地址:

http://www.cs.toronto.edu/~kriz/cifar.html

    数据集的类别分布见下图

    60000 32*32 RGB 图像

    10 个互斥的类别,每类 6000 张图片

    训练: 50000 张, 5 个训练批,每批 10000张 每类图像随机抽取,张数不平均

    测试: 10000 张, 单独构成一批,每类1000

基于python的图像处理_python图像处理入门

主流深度学习框架展示

框架名称

GitHub的活跃度

维护团队

支持语言

支持系统

编程模式

Star(

数量)

Fork(

数量)

贡献

TensorFl

ow

11973

0

71727

181

7

Google

PythonC++

Java、Go

Linux、macOS

、Windows、RaspberryPi

符号式编程

Keras

37850

14450

771

Google

Python、R

Linux、macOS、Windows

符号式编程

PyTorch

24331

5778

906

Facebook

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

符号式编程

基于python的图像处理_python图像处理入门

PaddlePaddle 框架

    PaddlePaddle 也叫飞桨, 是以百度多年的深度学习技术研究和业务应用为基础, 集深度学习核心框架、基础模型库、端到端 开发套件、工具组件和服务平台于一体。

    2016 年正式开源,是全面开源开放、技术领先、功能完备的产业级深度学习平台。

    飞桨源于产业实践,始终致力于与产业深入融合。目前飞桨已广泛应用于工业、农业、服 务业等,服务 150 多万开发者,与合作伙伴一起帮助越来越多的行业完成 AI 赋能。

GitHub 项目地址: https://github.com/PaddlePaddle/Paddle

 

今天的文章基于python的图像处理_python图像处理入门分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/89360.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注