SSIM 原理及公式

【python】ssim原理简介及代码实现 写在前面 ssim作为图像质量评价指标,在很多图像领域如图像超分辨率、图像压缩、图像去噪等都有广泛的应用。 SSIM(结构相似性) 简介 结构相似性指标(英文:structural similarity index measure,简称SSIM)是一种用以衡量两张数位影像相似程度的指标。当两张影像其中一张为无失真影像,另一张为失真后的影像,二者的结构相似性可以看成是失真影像的影像品质衡量指标。相较于传统所使用的影像品质衡量指标,像是峰值信噪比(英语:PSNR),结构相似性在影像品质的衡量上更能符合人眼对影像 阅读详情
AI摘要

本文介绍了SSIM(StructuralSimilarityIndex)图像质量评估方法,相比于MSE,它更注重结构相似性。文章详细解释了SSIM的三个组成部分(亮度、对比度和结构)以及如何计算它们的相似度。此外,还提到了MeanSSIM的计算方式,并讨论了相关概念如方差、标准差和协方差。


date: 2022-01-18 12:53


什么是SSIM?

Structural Similarity 结构相似性,源自论文《Image Quality Assessment: From Error Visibility to Structural Similarity》(图像质量评估:从错误可见性到结构相似性)。

在SSIM 被提出之前被广泛应用的是MES,因为它计算简单,物理意义明确。

MSE公式:

M S E = 1 m n ∑ i = 0 m − 1 ∑ j = 0 n − 1 [ I ( i , j ) − K ( i , j ) ] 2 MSE=\frac1{mn}\sum_{i=0}^{m-1}\sum_{j=0}^{n-1}[I(i,j)-K(i,j)]^2 MSE=mn1​i=0∑m−1​j=0∑n−1​[I(i,j)−K(i,j)]2

就是 element-wise 地计算重建图像与输入图像的像素差的平方,然后在全图上求平均。
下图可以看出,MSE 反应的距离和人力的直观感受有很大差别。

左侧为原图,中间为把灰度值调整为原来额0.9 倍的图,右侧为高斯模糊的图。以MSE 为评价指标则右图与原图更接近,和人类观感不同。

由于MSE不能表达人的视觉系统对图片的直观感受(涉及生物学),因此作者提出了更为科学的SSIM 评价指标。SSIM 更侧重于两图的结构相似性,而不是逐像素计算亮度的差异。作者声称其比MSE 更能反应人类视觉系统对两幅图相似性的判断。

SSIM 评价如何实现?

作者将两幅图的相似性比较拆成了三个维度:亮度(luminance) l ( x , y ) l(x,y) l(x,y),对比度(contrast) c ( x , y ) c(x,y) c(x,y),结构(structure) s ( x , y ) s(x,y) s(x,y)。
最终x和y 的相似度为这三者的函数:

S ( x , y ) = f ( l ( x , y ) , c ( x , y ) , s ( x , y ) ) S(x,y) = f(l(x,y),c(x,y),s(x,y)) S(x,y)=f(l(x,y),c(x,y),s(x,y))

作者设计的三个公式定量计算三者的相似性,公示的设计遵顼三个原则:
对称性: s ( x , y ) = s ( y , x ) s(x,y)=s(y,x) s(x,y)=s(y,x)
有界性: s ( x , y ) < = 1 s(x,y)<=1 s(x,y)<=1
极限值唯一: s ( x , y ) = 1 s(x,y)=1 s(x,y)=1 当且仅当 x=y

亮度

如果一幅图有 N 个像素点,每个像素点的像素值为xi,那么该图像的平均亮度为:
图像亮度平均值:

μ x = 1 N ∑ i = 1 N x i \mu_x=\frac{1}{N}\sum_{i=1}^Nx_i μx​=N1​i=1∑N​xi​

亮度相似度:

l ( x , y ) = 2 μ x μ y + C 1 μ x 2 + μ y 2 + C 1 l(x,y)=\frac{2\mu_x\mu_y+C1}{\mu_x^2+\mu_y^2+C1} l(x,y)=μx2​+μy2​+C12μx​μy​+C1​

C 1 C_1 C1​ 是防止分母为0 的系数

C 1 = ( K 1 L ) 2 C_1=(K_1L)^2 C1​=(K1​L)2

K1 是一个常数,取值0.01,L 是灰度的动态范围,和图像数据的类型有关,如果是uint8 类型则L=255,如果是float则L=1。公式堆成且始终小于等于1,当x=y时为1。

对比度

对比度反应的时图像明暗变化的剧烈程度,也就是像素值的标准差。公式:

σ x = ( 1 N − 1 ∑ i = 1 N ( x i − μ x ) 2 ) 1 / 2 \sigma_x=(\frac{1}{N-1}\sum_{i=1}^N{(x_i-\mu_x)^2})^{1/2} σx​=(N−11​i=1∑N​(xi​−μx​)2)1/2

对比度的相似度公式和亮度相似度公式极为相似,只不过把均值换成了方差。作者定义:

c ( x , y ) = 2 σ x σ y + C 2 σ x 2 + σ y 2 + C 2 c(x,y)=\frac{2\sigma_x\sigma_y +C_2}{\sigma_x^2+\sigma_y^2+C_2} c(x,y)=σx2​+σy2​+C2​2σx​σy​+C2​​

其中

C 2 = ( K 2 L ) 2 C_2=(K_2L)^2 C2​=(K2​L)2

K2 一般在代码中取0.03。对比度相似公式堆成且小于等于1。

结构相似度

对于一幅图而言,亮度和对比度是标量,而结构无法用要给标量表示,而应该用全图所有像素组成的向量表示。同时,研究结构相似度时应该排除亮度和对比度的影响,即排除均值和标准差的影响。因此作者研究的是归一化的两个想想: ( x − μ x ) / σ x (x-\mu_x)/\sigma_x (x−μx​)/σx​ 和 ( y − μ y ) / σ y (y-\mu_y)/\sigma_y (y−μy​)/σy​ 之间的关系。

结构比较函数:

s ( x , y ) = σ x y + C 3 σ x σ y + C 3 s(x,y) = \frac{\sigma_{xy} + C_3}{\sigma_x \sigma_y + C_3} s(x,y)=σx​σy​+C3​σxy​+C3​​

协方差公式

σ x y = 1 N − 1 ∑ i = 1 N ( x i − μ x ) ( y i − μ y ) \sigma_{xy}=\frac{1}{N-1}\sum_{i=1}^N(x_i-\mu_x)(y_i-\mu_y) σxy​=N−11​i=1∑N​(xi​−μx​)(yi​−μy​)

SSIM

结合前面三个公式

S S I M ( x , y ) = f ( l ( x , y ) , c ( x , y ) , s ( x , y ) ) SSIM(x,y) = f(l(x,y),c(x,y),s(x,y)) SSIM(x,y)=f(l(x,y),c(x,y),s(x,y))

令C3=C2/2,c(x,y) 和 s(x,y) 的分母可以约分,最终得到SSIM 公式:

S S I M ( x , y ) = ( 2 μ x μ y + C 1 ) ( 2 σ x y + C 2 ) ( μ x 2 + μ y 2 + C 1 ) ( σ x 2 + σ y 2 + C 2 ) SSIM(x,y)=\frac{(2\mu_x\mu_y+C_1)(2\sigma_{xy}+C_2)}{(\mu_x^2+\mu_y^2+C_1)(\sigma_x^2+\sigma_y^2+C_2)} SSIM(x,y)=(μx2​+μy2​+C1​)(σx2​+σy2​+C2​)(2μx​μy​+C1​)(2σxy​+C2​)​

然而上面的公式不能应用于整幅图,因为在整幅图的跨度上均值和方差往往变化剧烈。作者采用 sliding window 以步长为 1 计算两幅图各个对应 sliding window 下的 patch 的 SSIM,然后取平均值作为两幅图整体的 SSIM,称为 Mean SSIM。简写为 MSSIM。
假如整幅图有 M 个 patch,那么 MSSIM 公式为:

M S S I M ( X , Y ) = 1 M ∑ j = 1 M S S I M ( x j , y j ) MSSIM(X, Y) =\frac{1}{M} \sum_{j=1}^M SSIM(x_j,y_j) MSSIM(X,Y)=M1​j=1∑M​SSIM(xj​,yj​)

使用MSSIM 计算相似度:

图像处理中的SSIM

参考链接

  1. SSIM 的原理和代码实现

补充概念

方差(variance)

定义:用于衡量一组数据的离散程度。在统计描述中,方差用来计算每一个变量(观察值)与总体均数之间的差异。

σ 2 = 1 N ∑ ( X − μ ) 2 \sigma^2=\frac{1}{N}\sum(X-\mu)^2 σ2=N1​∑(X−μ)2

σ \sigma σ 为总体方差, X X X为变量, μ \mu μ为总体均值, N N N为总体例数。

标准差(Standard Deviation)

定义:标准差(Standard Deviation) ,是离均差平方的算术平均数(方差)的算术平方根,用σ表示。标准差也被称为标准偏差,或者实验标准差,在概率统计中最常使用作为统计分布程度上的测量依据。

σ = ∑ ( X − μ ) 2 N \sigma=\sqrt{\frac{\sum(X-\mu)^2}{N}} σ=N∑(X−μ)2​ ​

标准差越小说明数据越集中。

协方差(Covariance)

协方差用来刻画两个随机变量 X , Y 之间的相关性

如果两个变量的变化趋势一致,也就是说如果其中一个大于自身的期望值,另外一个也大于自身的期望值,那么两个变量之间的协方差就是正值。

如果两个变量的变化趋势相反,即其中一个大于自身的期望值,另外一个却小于自身的期望值,那么两个变量之间的协方差就是负值。

协方差的公式如下:

σ ( x , y ) = 1 N ∑ ( x i − μ x ) ( y i − μ y ) \sigma(x,y)=\frac{1}{N}\sum(x_i-\mu_x)(y_i-\mu_y) σ(x,y)=N1​∑(xi​−μx​)(yi​−μy​)

方差就是协方差的一种特殊形式,当两个变量相同时,协方差就是方差了。

公式2:

C o v = E [ ( X − μ x ) ( Y − μ y ) ] Cov = E[(X -\mu_x)(Y-\mu_y)] Cov=E[(X−μx​)(Y−μy​)]

可以有如下理解:如果有X,Y两个变量,每个时刻的“X值与其均值之差”乘以“Y值与其均值之差”得到一个乘积,再对这每时刻的乘积求和并求出均值。

余弦相似度

c o s ( θ ) = ∑ i = 1 n ( X i ∗ Y i ) ( ∑ i = 1 n ( X i ) 2 ) ∗ ( ∑ i = 1 n ( Y i ) 2 ) cos(\theta)=\frac{\sum_{i=1}^n(X_i * Y_i)}{\sqrt(\sum_{i=1}^n(X_i)^2) * \sqrt(\sum_{i=1}^n(Y_i)^2)} cos(θ)=( ​∑i=1n​(Xi​)2)∗( ​∑i=1n​(Yi​)2)∑i=1n​(Xi​∗Yi​)​

余弦值越接近1,就表明夹角越接近0度,也就是两个向量越相似,夹角等于0,即两个向量相等,这就叫"余弦相似性"。

SSIM图像质量评估全解:原理、公式与PSNR/FID/LPIPS指标对比 图像相似度评估是计算机视觉与图像处理中的基础问题。从像素级均方误差到结构相似性SSIM,不同指标衡量维度各异。SSIM从人眼感知出发,通过亮度、对比度与结构三项统计量衡量局部图像块的相似性,比PSNR更贴近主观感受。本文详细拆解SSIM公式、窗口参数与边界处理细节,并通过纯NumPy实现与scikit-image调用演示核心用法。同时结合PSNR、FID、LPIPS等指标,分析其适用场景与选型策略,帮助读者在图像压缩、超分重建及生成模型评估中做出合理选择。 阅读详情

相关推荐

图像质量评估算法SSIM(结构相似性)

超分辨率SSIM评价函数实现

weixin_45931455的博客 1万+

图像质量评估指标——SSIM介绍及计算方法

SSIM全称为Structural Similarity,即结构相似性,用于评估两幅图像相似度的指标,常用于衡量图像失真前与失真后的相似性,也用于衡量模型生成图像的真实性,如图像去雨、图像去雾、图像和谐化等等。SSIM的计算,即每次计算均从图片上取一个尺寸为N×N的窗口,基于窗口计算SSIM指标,,作为。假设x表示第一张图像窗口中的数据,y表示第二张图像窗口中的数据。其中图像的相似性由三部分构成:luminance(亮度)、contrast(对比度)和structure(结构)。

qq_50001789的博客 4万+

SSIM 原理、演进与实战:从理论公式到代码实现

本文深入解析SSIM(结构相似性指数)的原理、演进与实战应用,对比其与传统MSE方法的优劣。通过拆解SSIM公式和代码实现,揭示其如何更精准地模拟人眼视觉感知,并展示在主流框架(如scikit-image、PyTorch-Metrics)中的具体应用。文章还提供图像超分辨率优化案例和常见误用避坑指南,帮助开发者高效利用SSIM提升图像处理质量。

weixin_29054195的博客 339

SSIM学习

SSIM通过比较图像的亮度、对比度和结构等方面的相似性,计算出两幅图像之间的相似性分数。对比度以像素距离均值的偏移程度来进行描述,你可以想到如果一张图对比度越大,那它距离灰度的均值远的像素点就越多。其中,x和y分别表示待比较的两幅图像,l(x,y)、c(x,y)、s(x,y)分别为亮度相似度、对比度相似度和结构相似度,α、β、γ为加权系数,一般取1。在实际应用中,由于像素总是正值,例如真彩色RGB 24bit,SSIM的值通常在0到1之间,越接近1表示两幅图像越相似。,引入C1是为了防止均值为0的情况。

qq_43369406的博客 5571

深入理解SSIM(两图像结构相似度指标)(附matlab代码)

SSIM的深入理解 作者:老李 日期:2022-1-18 SSIM SSIM用于评价两张图像的相似程度。 对于SSIM这个指标的设计思路,如下图所示。 图像的均值表示图像的亮度。 图像的方差表示图像的对比度。 注意:要先将图像归一化(把像素的阈值调整为[0,1]),才可以通过计算,得出数值进行比较。 当α=β=γ=1,C_3= 0.5C_2(常用),则SSIM表达式为: “对比”是怎么体现的 关于,这里我觉得是大部分博文所没有涉及到的地方。 该问题等价于这也是以下三个等式如何产生的。 也就是说以下三个

CV老李的博客 2万+

图像质量评估:SSIM算法详解与Python实现

结构相似性指数(Structural Similarity Index, SSIM)是一种用于衡量两幅图像相似度的指标,通过模拟人类视觉系统(HVS)的特性,综合评估图像的亮度、对比度和结构信息。

Daisy的博客 4685

图像质量评价指标: PSNR 和 SSIM 和 LPIPS

1. PSNR (Peak Signal-to-Noise Ratio) 峰值信噪比 PSNR越高,图像和原图越接近。这是客观指标, PSNR(峰值信噪比):用得最多,但是其值不能很好地反映人眼主观感受。一般取值范围:20-40.值越大,视频质量越好 # im1 和 im2 都为灰度图像,uint8 类型 # method 1 diff = im1 - im2 mse = np.mean(np.square(diff)) psnr = 10 * np.log10(255 * 255 / mse)

Drug discovery 5万+

图像处理之图像质量评价指标SSIM(结构相似性)

3、仅以椒盐噪声的参数为讨论,我们将主函数main.m文件椒盐噪声的方差改为0.01,可以与上方得到方差为0.05的SSIM结果进行对比,可以看出得到的SSIM要大很多。SSIM全称为“Structural Similarity Index”,中文意思即为结构相似性,是衡量图像质量的指标之一。2、可以发现开源函数计算的SSIM值总比matlab内置函数计算的SSIM值大,具体原因不可知。1、注意每次运行主函数main.m文件,输出的SSIM值都会有细微差别,可以对比上下两张图。:使用开源结构相似性函数。

qq_44111805的博客 2万+

SSIM公式:结构相似性计算原理,基于SSIM的图像质量评价

1)SSIM公式:结构相似性计算原理,基于SSIM的图像质量评价 2)均值表示明亮度、方差表示对比度,协方差表示结构相似性,仨相乘,就是SSIM,符合人类视觉感知系统的特点 3)笔试求AC,可以不考虑空间复杂度,但是面试既要考虑时间复杂度最优,也要考虑空间复杂度最优。...

weixin_46838716的博客 7705

SSIM与MS-SSIM图像质量评估技术详解与MATLAB实现

亮度比较函数用于衡量图像块 $ x $ 和 $ y $ 在亮度上的相似性,其表达式为:其中 $ C_1 $ 为一个小常数,通常取值为 $ (K_1L)^2 $,其中 $ K_1 $ 是一个小常数(如 0.01),$ L $ 是图像的最大像素值(如对于8位图像为255)。在MS-SSIM中,每个尺度 $ l \in {1,2,…

weixin_34163588的博客 1195

Mac安装Weblogic教程

1.Weblogic的下载 这次安装的是最新版本12 官网下载地址: http://www.oracle.com/technetwork/middleware/weblogic/downloads/index.html 下载需要登录账号,如没有账号要注册一个 下载后的文件如下图,其中fmw_12.2.1.3.0_wls_quick.jar文件就是安装包了,注意现在不要对它进行解压 2.安装前的确...

weixin_40102675的博客 5061

python numpy版本SSIM复现与算法解释

目录SSIMMS-SSIM SSIM MS-SSIM

P_Leung的技术博客 5932

手把手教你用DCA1000和mmWave Studio 2.0采集AWR1843雷达数据(附驱动安装与常见报错排查)

本文详细介绍了使用DCA1000和mmWave Studio 2.0采集AWR1843毫米波雷达数据的全流程指南,包括硬件连接、驱动安装、软件配置及常见报错排查。通过实战经验分享,帮助开发者快速掌握数据采集技巧,优化雷达参数配置,提升数据质量与采集效率。

weixin_30070339的博客 332

SSIM图像质量评估:从原理公式到代码实现与参数避坑

图像质量评估常以PSNR和MSE作为基础指标,它们计算简单、可微,却只衡量逐像素误差,难以反映人眼对结构、边缘和纹理的敏感程度。结构相似性SSIM从亮度、对比度和结构三个分量出发,在局部窗口内比较均值、方差与协方差,并通过滑动窗口生成SSIM map,再聚合为整体分数,因而对模糊、块效应和结构错位更敏感。其技术价值在于以较低成本提供更贴近感知的质量信号,广泛用于图像压缩、超分辨率、去噪和生成式图像评估。工程落地时,窗口大小、高斯sigma、动态范围L、边界处理和MS-SSIM多尺度策略都会显著影响结果。围绕

weixin_29057163的博客 285

Qt实战:用QTreeView+QStandardItemModel实现多级多列文件浏览器(附完整代码)

本文深入探讨了使用Qt的QTreeView与QStandardItemModel构建多级多列文件浏览器的完整实践。通过分析模型/视图框架的优势,详细演示了从基础框架搭建、模拟数据填充,到对接真实文件系统实现懒加载的全过程。文章还涵盖了自定义委托、多列排序、右键菜单等高级定制技巧,并提供了性能优化建议和完整的代码示例,帮助开发者打造功能强大且高效的工业级文件管理界面。

weixin_29021291的博客 423

拆解爆火AI图文日报!用扣子(Coze)工作流,10分钟实现自动化新闻早报

当用户提供一则新闻内容时,仔细分析新闻中的关键信息。提取新闻事件的核心要点,包括事件主体、发生时间、地点、主要情节等。用简洁的语言对新闻进行总结,控制在[X]字以内(可根据实际需求设定字数限制)。若用户提供多条新闻,对比各新闻之间的异同点。从事件类型、影响范围、发展趋势等方面进行分析。综合总结多条新闻的整体情况,以有条理的方式呈现给用户。

一身都是月 2425

图像质量评估指标:PSNR / SSIM 原理及Python代码

简单介绍图像质量评估指标 PSNR 和 SSIM 的原理及其 Python 代码使用方法

秋山丶雪绪的博客 6万+

SAP ABAP MIGO增强实战:自定义页签与字段的完整实现指南

本文详细介绍了SAP ABAP中MIGO增强的实战指南,包括自定义页签与字段的完整实现步骤。通过BADI增强技术,开发者可以快速满足企业个性化需求,如添加供应商批次号等特殊字段。文章涵盖数据存储结构设计、BADI框架实现、核心方法编写及数据持久化方案,帮助用户高效完成MIGO屏幕增强开发。

study的专栏 774

SSIM(structural similarity)算法原理

SSIM(structural similarity)结构相似性,也是一种全参考的图像质量评价指标,它分别从亮度、对比度、结构三方面度量两幅图像相似性,其值越大越好,最大为1;作为结构相似性理论的实现,结构相似度指数从图像组成的角度将结构信息定义为独立于亮度、对比度的,反映场景中物体结构的属性,并将失真建模为亮度、对比度和结构三个不同因素的组合;用均值作为亮度的估计,标准差作为对比度的估计,协方差...

xrinosvip的博客 1万+

服务器测试之intel E8102CQDA2

网卡性能 iperf E810

qq_41897488的博客 2504

FM20S用户手册-PL端案例开发手册

为便于演示,本次操作直接将led_flash案例中的 "led_flash_fm20s\constraints\constrs_1Ved_flash_fm20s.fdc"文件全部代码拷贝至编辑 界面,并点击保存按钮。引脚约束请查看案例工程"led_flash\project\led_flash_fm20s\constraints\constrs_1\"目 录下的led_flash_fm20sfdc。(4)弹出如下界面,在界面配置Select device forthe project"内容,如下图。

创龙,嵌入式一体化解决方案商 400

PyTorch-SSIM 模块化设计:SSIM 类的实现原理与扩展方法

PyTorch-SSIM 是一个基于 PyTorch 的结构相似性(SSIM)损失函数实现,它提供了模块化的设计,使得开发者可以轻松地将 SSIM 指标集成到深度学习模型中。本文将深入解析 SSIM 类的实现原理,并介绍如何根据实际需求进行扩展,帮助新手和普通用户快速掌握这一工具的使用方法。 ## 一、SSIM 算法基础:从理论到实践 结构相似性(SSIM)是一种衡量两幅图像相似度的指标,它通

gitblog_00865的博客 1031

半导体晶圆调平系统:基于最小二乘法的实现方案

基于最小二乘法的晶圆调平技术通过数学建模与工程实现的结合,解决了半导体量测中高精度平面对准的核心问题。实际应用中,需根据设备特性优化采样策略、校准传感器误差,并通过实时性优化满足高产能场景需求。该方案的模块化设计(如分离数据采集、拟合计算、补偿输出)也为后续功能扩展(如引入机器学习优化拟合模型)提供了灵活性。

品质生活,极致编程。 1180

【IQA技术专题】PSNR和SSIM

本文介绍了两种常见的全参考图像质量评价指标PSNR和SSIM。PSNR(峰值信噪比)通过计算图像间的均方误差来评估保真度,公式为10×lg(MAX²/MSE),代码实现支持RGB通道和Y通道两种模式。SSIM(结构相似性)则从亮度、对比度和结构三方面衡量图像相似性,采用窗口滑动计算后取平均值。两种指标各有特点:PSNR计算简单但易受噪声影响,SSIM更符合人类视觉感知但复杂度较高。文中还推荐了开源IQA-pytorch工具库,便于实际应用中的指标计算。这些指标在图像处理、压缩和复原等领域具有重要应用价值。

PixelMind的博客 1604

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

结构相似形特征(SSIM)原理简介及python实现

结构相似形特征是图像全参考评价(FR-IQA)中经典的一个方法,由Zhou Wang等人在2004年发表的论文《Image Quality Assessment: From Error Visibility to Structural Simil...

Arthur_Holmes的博客 2316

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

SSIM(结构相似性)-数学公式

链接

qq_38162944的博客 900

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

上一篇: 镜头相关概念
下一篇: OpenCV DNN 活体检测项目环境配置等各阶段tips
十橙
博客等级 码龄24年 312粉丝 95原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值