700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 深度学习图像处理目标检测图像分割计算机视觉 04--神经网络与误差反向传播BP算法

深度学习图像处理目标检测图像分割计算机视觉 04--神经网络与误差反向传播BP算法

时间:2023-12-13 05:21:49

相关推荐

深度学习图像处理目标检测图像分割计算机视觉 04--神经网络与误差反向传播BP算法

深度学习图像处理目标检测图像分割计算机视觉 04--神经网络与误差反向传播BP算法

摘要一、神经元二、前馈网络2.1 Delta学习规则2.2 目标函数J(w)三、误差反向传播算法(BP算法)3.1 梯度下降算法3.2 输入层权重改变量3.2 隐藏层权重改变量3.4 误差传播迭代公式四、BP算法的手算过程4.1 手动计算BP4.2 代码实现BP算法五、论文1 用于医学图像增强的结构和光照约束 GAN (Structure and Illumination Constrained GAN for Medical Image Enhancement)5.1 摘要5.2 论文结构5.2.1 简介5.2.2 模型5.2.3 生成器和鉴别器结构5.2.4 创新点5.3 数据验证5.4 总结六、论文2 细胞分割的无监督网络学习(Unsupervised Network Learning for Cell Segmentation)6.1 摘要6.2 论文结构6.2.1 简介6.2.2 方法论6.2.3 模型6.3 数据验证6.4 总结总结

摘要

本文主要讲述深度学习的发展历程,从一个简单的神经元,到一个浅层的前馈网络,再到一个误差反向传播(BP)算法。本文将针对BP算法给出一个简单的手算的例子,以帮助理解神经网络的具体工作过程。给出两篇论文的解读。

This article mainly describes the development process of deep learning, from a simple neuron, to a shallow feedforward network, and then to an error back propagation (BP) algorithm. This article will give a simple hand calculation example for the BP algorithm to help understand the specific working process of the neural network. Give the interpretation of two papers.

一、神经元

人工神经元模拟的就是生物神经元,而神经网络模拟的是人类大脑的结构。

生物神经元有如下结构:细胞体、树突、细胞体、细胞质、轴突、轴突保护层,轴突终端等。

人工神经元模拟生物神经元树突、轴突和细胞体这三个部分,树突指输入数据和权重,细胞体部分指的是激活函数,轴突指的是输出。每个神经元都是一个结构相似的独立单元,它接受前一层传来的数据,并将这些数据的加权和(线性运算)输入非线性作用函数f中,最后将非线性作用函数的输出结果传递给后一层。

非线性函数f,称为激活函数,一般有两种形式:

补充知识点:复合函数链式求导

也可以表达为导数形式:

那么上述两种激活函数的导数就是:

基础的神经网络由神经元构成,包括输入向量x,权重向量w,偏置标量b和激活函数sigmoid。一般的浅层网络只有3~5层。

神经网络是由大量的神经元节点按照一定的体系架构连接成的网状结构,一般都有输入层,隐含层和输出层。

二、前馈网络

前馈神经网络,是人工神经网络的一-种,各神经元从输入层开始,接收前一-级输入, 并输出到下一-级,直至输出层。整个网络中无反馈,可用一个有向无环图表示。前馈神经网络采用一种单向多层结构。其中每一层包含若千个神经元,同- -层的神经元之间没有互相连接,层间信息的传送只沿一个方向进行。其中第一层称为输入层。最后-层为输出层.中间为隐含层。隐含层可以是一层,也可以是多层。

2.1 Delta学习规则

这个规则是说,对于一些输入,我们都有期望的想要的某一个特定的输出,但是实际的输出与我们期望的输出不一样,当我们想要让他一样时,只能通过调整各个连接点之间的权重来实现,不断调整让他实际输出靠近期望的输出。

2.2 目标函数J(w)

根据上述的学习规则,针对一系列的训练样本x,期望的输出t,实际的输出z,那么定义目标函数J(w),

它的意义是各个输出误差的平方的累加。系数1/2是为了求导时方便约去。

既然目标函数是误差的累加,那么肯定是要让目标函数最小,那么怎么让目标函数最小呢?

理论上当然可以求导计算,让导数为0,求出最小值。但是考虑一个问题,当权重是两个维度时,就会构成一幅类似丘陵图,有无数的山峰和山谷,这些地方的道术全是0,一个个验证花费是巨大的。,那么当权重时更高维度时,求导计算就不现实了。那么在此处引入一个梯度下降算法。

三、误差反向传播算法(BP算法)

3.1 梯度下降算法

如图所示,下图是当权重w有两个维度时与目标函数的关系图。

w与J(w)的关系图:

我们现在的目标是在这张图上找到最低点,意思就是J(w)到了最小值,就是误差最小。那么怎么找最小值呢?试想一下你现在站在一座山顶上,蒙着眼睛要往山下走,那么怎么走?

那么实际上梯度下降的步骤差不多:

首先确定一个初始点:w(m)将w按照梯度下降的方向J‘(w)进行调整,其中η是步长,他决定调整的长度,这样J(w)就会往更低的方向变化,这样m+1的权重w(m+1)就可以计算出来了,重复步骤2,直至w下降到无法继续下降,这样的话,J(w)也达到了最小的值。

在上述过程中有一个重要的计算J‘(w),下面开始解决这个问题,因为神经网络分为输入层,隐含层,输出层,连接的每层之间都有权重,那么先从隐含层与输出层之间的导数关系,再看输入层与隐含层之间的导数关系。

3.2 输入层权重改变量

在求偏导的时候,如果直接求关系不是那么明显的话,可以使用一个与两者都相关的中间变量。

在输出层和隐含层之间加一个net,net代表输出单元的总输入,权重w对net求导就是隐藏层的输出y。net对目标函数的偏导,可以转换成输出z对目标函数的偏导,再乘以总输入对输出的偏导。输出z对目标函数的偏导可以根据目标函数计算出来,而输出对总输入的导数刚好就是输出层激活函数的导数。为了使式子更简洁,定义一个残差δ的式子,最终隐藏层域输出层权重对目标函数的偏导可以表达为以下等式。

3.2 隐藏层权重改变量

按照上述隐藏层与输出层对目标函数求偏导数的方法,处理输入层与隐藏层对目标函数的偏导数。

输入层与隐藏层之间的权重对目标函数的权重等于隐藏层单元输出对目标函数的偏导、乘以总输入对输出的偏导、再乘以权重对总输入的偏导。总输入对输出的偏导就是隐藏层的激活函数f’,权重对总输入的偏导就是输入x隐藏层输出单元对目标函数的偏导可以把式子带进去求一下,得到误差乘以隐藏层单元输出对输出的偏导的总和的相反数。隐藏层单元输出对输出的偏导可以表述为隐藏层单元的总输入对输出的偏导乘以隐藏层单元的输出对总输入的偏导。最后定义一个残差,输入层和隐藏层之间的权重对目标函数的偏导可以表示为如下式子。

3.4 误差传播迭代公式

上述两部步已经把权重对目标函数的偏导求出来了,现在将它们联合起来:

输出层的公式有:

隐藏层的公式有:

所以他们可以统一为:

Δw=-1η∂J/(∂w)

∂J/(∂w)=-1δnet

δ=f‘(net)*上层的误差和

上层的误差和=残差乘以权重的总和

四、BP算法的手算过程

4.1 手动计算BP

给出一个简单的例子,输入A=0.35,B=0.9,随机初始权重如图所示,期望的输出是0.5。

4.2 代码实现BP算法

用bp网络实现异或问题:即输入的相同为0,不同为1。

#coding:utf-8import numpy as np #定义双曲函数和他们的导数 def tanh(x): return np.tanh(x) def tanh_deriv(x): return 1.0 - np.tanh(x)**2 def logistic(x): return 1/(1 + np.exp(-x)) def logistic_derivative(x): return logistic(x)*(1-logistic(x)) #定义NeuralNetwork 神经网络算法 class NeuralNetwork: #初始化,layes表示的是一个list,eg[10,10,3]表示第一层10个神经元,第二层10个神经元,第三层3个神经元 def __init__(self, layers, activation='tanh'): """ :param layers: A list containing the number of units in each layer. Should be at least two values :param activation: The activation function to be used. Can be "logistic" or "tanh" """ if activation == 'logistic': self.activation = logistic self.activation_deriv = logistic_derivative elif activation == 'tanh': self.activation = tanh self.activation_deriv = tanh_deriv self.weights = [] #循环从1开始,相当于以第二层为基准,进行权重的初始化 for i in range(1, len(layers) - 1): #对当前神经节点的前驱赋值 self.weights.append((2*np.random.random((layers[i - 1] + 1, layers[i] + 1))-1)*0.25) #对当前神经节点的后继赋值 self.weights.append((2*np.random.random((layers[i] + 1, layers[i + 1]))-1)*0.25) #训练函数 ,X矩阵,每行是一个实例 ,y是每个实例对应的结果,learning_rate 学习率, # epochs,表示抽样的方法对神经网络进行更新的最大次数 def fit(self, X, y, learning_rate=0.1, epochs=10000): X = np.atleast_2d(X) #确定X至少是二维的数据 temp = np.ones([X.shape[0], X.shape[1]+1]) #初始化矩阵 temp[:, 0:-1] = X # adding the bias unit to the input layer X = temp y = np.array(y) #把list转换成array的形式 for k in range(epochs): #随机选取一行,对神经网络进行更新 i = np.random.randint(X.shape[0]) a = [X[i]] #完成所有正向的更新 for l in range(len(self.weights)): a.append(self.activation(np.dot(a[l], self.weights[l]))) # error = y[i] - a[-1] deltas = [error * self.activation_deriv(a[-1])] if k%1000 == 0:print(k,'...',error*error*100)#开始反向计算误差,更新权重 for l in range(len(a) - 2, 0, -1): # we need to begin at the second to last layer deltas.append(deltas[-1].dot(self.weights[l].T)*self.activation_deriv(a[l])) deltas.reverse() for i in range(len(self.weights)): layer = np.atleast_2d(a[i]) delta = np.atleast_2d(deltas[i]) self.weights[i] += learning_rate * layer.T.dot(delta) #预测函数 def predict(self, x): x = np.array(x) temp = np.ones(x.shape[0]+1) temp[0:-1] = x a = temp for l in range(0, len(self.weights)): a = self.activation(np.dot(a, self.weights[l])) return ann = NeuralNetwork([2,2,1], 'tanh') X = np.array([[0, 0], [0, 1], [1, 0], [1, 1]]) y = np.array([0, 1, 1, 0]) nn.fit(X, y) for i in [[0, 0], [0, 1], [1, 0], [1,1]]: print(i,nn.predict(i))

运行结果:

五、论文1 用于医学图像增强的结构和光照约束 GAN (Structure and Illumination Constrained GAN for Medical Image Enhancement)

5.1 摘要

医学影像技术的发展为临床决策提供了有力的支持。然而,成像质量差,如照度不均匀或强度不平衡,给疾病的自动筛查、分析和诊断带来了挑战。在此之前,已经有人提出了双向gan(如CycleGAN),以提高输入图像的质量,而不需要成对的图像。然而,这些方法关注的是整体外观,没有对结构或光照的限制,这是医学图像解释的基本特征。在本文中,我们提出了一种新的、通用的双向GAN,命名为结构和光照约束GAN (StillGAN),用于医学图像质量增强。我们的StillGAN将低质量和高质量图像视为两个不同的领域,并引入局部结构和光照约束来学习整体特征和局部细节。在角膜共聚焦显微镜、视网膜彩色眼底和内窥镜图像三种医学图像数据集上的大量实验表明,我们的方法优于传统方法和其他基于深度学习的方法。此外,我们还研究了所提出的方法对不同的医学图像分析和临床任务的影响,如神经分割,弯曲分级,中央凹定位和疾病分类

5.2 论文结构

5.2.1 简介

提出一种新的医学图像增强框架,称为结构和光照约束GAN (StillGAN)。

•提出了一种新的双向GAN,称为StillGAN,以提高低质量医学图像的可读性。新模型引入了光照正则化和结构损失,分别改善了光照条件和保留了结构细节。光照正则化的目的是通过减小增强图像中光照分布的差异来改善光照均匀性,而结构损耗则是通过减少低质量图像与增强图像在结构上的差异来尽可能地保留结构细节。与其他深度学习方法相比,本文提出的StillGAN在增强多模态图像的各种指标上取得了更好的整体性能。

•采用三种不同的医学图像模式——共聚焦显微镜、彩色眼底和内窥镜图像,对提出的方法进行了严格的定量和定性评价。对于每种医学图像模式,我们根据其各自的成像特点和临床兴趣,采用不同的图像质量评估方法。

5.2.2 模型

上图是文章提出的模型,它包括两个生成器、鉴别器,两个类型的循环一致性,a代表低质量域,b代表高质量域,L cyc表示循环一致性项(周期损失),Lidt表示身份丢失。在周期一致性和身份约束下,生成程序可以很好地获取将输入图像转换为输出图像所需的知识,同时保持图像在转换前后的整体外观。

图像增强是从低质量域(LQ)向高质量域(HQ)的转换,非配对学习框架StillGAN还引入了两个新的损耗项——Lill表示光照正则化,Lst表示结构损耗,目的是实现增强图像中的光照均匀性和结构细节的恢复。此外,我们的结构损失进一步限制了外观

5.2.3 生成器和鉴别器结构

所构建的生成网络由8个编码器层和带有跳跃连接的对称解码器层组成,如图3所示。对于每个编码器层,我们使用残差块后面跟着最大池化层;而对于每个解码器层,我们采用双线性插值的上采样层,然后采用结构相同的残差块。与传统鉴别器对这整幅图像评价不同,stillGAN的鉴别器采用的是patchGAN,设计成全卷积的形式,(PatchGAN和普通GAN判别器是有区别的,普通的GAN判别器是将输入映射成一个实数,即输入样本为真样本的概率.PatchGAN将输入映射为NxN的patch(矩阵)X,X_{ij}的值代表每个patch为真样本的概率,将X_{ij}求均值,即为判别器最终输出,X XX其实就是卷积层输出的特征图.从这个特征图可以追溯到原始图像中的某一个位置,可以看出这个位置对最终输出结果的影响.)

5.2.4 创新点

照明正则化是为了提高整体照明均匀性。它的实现是最小化局部斑块与整个图像之间的光照差异。它是反映增强图像中光照不均匀性的校正因子,通过减小增强图像中光照分布的差异来改善光照均匀性,

计算给定图像的光照校正因子的步骤如下,

1)计算全局平均强度I;

2)分割相同大小n*m的图像;然后计算每个斑块的平均强度,得到光照矩阵d;

3)将d的每个元素减去f的平均强度I,得到光照差矩阵E;

4)通过双三次插值将E重新缩放为与I相同大小的光照分布矩阵R;

5)计算元素R的平均绝对值。

步骤1计算得到的全局平均强度表示输入图像的整体光照水平。步骤2中每个分割的patch的平均强度是为了得到输入图像中的局部光照分布。从步骤3到步骤4,我们得到输入图像的光照误差分布图。最后,在5中计算平均光照误差。

而结构损耗通过减少低质量图像与增强图像在结构上的差异来尽可能地保留结构细节。结构相似性(SSIM)[31]提供了一个相对合适的度量这种相似性程度的方法。与均方误差(mean squared error, MSE)相比,SSIM可以从亮度、对比度和结构三个方面有效地表征两幅图像之间的结构相似性。基于SSIM中的结构比较函数,我们提出了一种基于结构感知的先验结构损失算法,该算法基于低质量图像与其增强图像之间的不相似性。

5.3 数据验证

1、共聚焦显微镜–使用预先训练的CS-Net[4],在人工追踪神经纤维的高质量角膜共聚焦显微镜图像上进行训练, 说明可以显著提高神经纤维分割性能,特别是在降低缺失率方面,更有利于神经相关疾病的监测和诊断。

2、彩色眼底–使用预先训练的MCF-Net来预测低质量图像的高质量得分

,StillGAN可以显著提高彩色眼底图像的整体视觉感知。

3、内窥镜图像–使用几个指标评价,自然图像质量评价器(NIQE)[39]、盲/无参考图像空间质量评价器(BRISQUE)[40]和基于感知的图像质量评价器(PIQE)[41]。与其他方法相比,效果很好。

5.4 总结

1、采用GAN模型进行图像增强操作

2、在GAN的基础上增加了两个约束条件,光照正则化和结构损失来实现图像增强的光照均匀和细节恢复。

3、在三个验证集上都得到很好的反应。

六、论文2 细胞分割的无监督网络学习(Unsupervised Network Learning for Cell Segmentation)

6.1 摘要

细胞分割是众多生物医学图像研究的基础和关键步骤。对于全监督细胞分割算法,虽然效率很高,但需要大量高质量的训练数据,而训练数据的生成通常是劳动密集型的。在这项工作中,我们将无监督细胞分割定义为一个稍微欠约束的问题,并提出了对抗重建无监督分割网络学习(USAR),一个新的模型可以训练细胞分割网络没有任何注释。其核心思想是利用对抗性学习范式对分割网络进行训练,根据分割网络生成的分割结果对输入图像进行对抗性重建。在两个基准数据集上,USAR模型在训练无监督分割网络方面展示了其良好的应用前景。

6.2 论文结构

6.2.1 简介

基于cnn的模型进行细胞分割,我们必须用细胞掩码标注大量训练图像,这是相当费力和昂贵的。基于减轻甚至完全避免采集训练掩模工作量的需求,本文提出了一种完全无监督的细胞分割网络训练模型,它依靠对抗性学习范式[4]的思想,根据分割网络生成的分割结果,通过对抗性重建输入图像来学习分割网络。

设计了一个由分割网络生成前景单元掩码和解码器生成背景图像组成的生成器来重建单元图像,并通过鉴别器将其与原始输入图像进行比较。

这项工作的贡献主要有三个方面:

1、我们将无监督细胞图像分割作为一个轻度的欠约束问题,即从n个等式(N个输入图像)中求解n + 1个未知数(N个细胞掩膜图像+ 1个背景图像),而从N个输入图像中求解3N个未知数 (N个掩膜图像,n前景图像,N个背景图像)。

2、提出了一种基于对抗重建的无监督网络学习方案,用于训练没有任何标注的细胞分割网络。

3、实验证明了该模型的有效性,大大优于目前的无监督分割方法。

本文在数学上将无监督分割描述为一个低约束系统,并提出了一个无监督分割网络学习方案来训练细胞分割网络没有任何注释

6.2.2 方法论

2.1、数学表达式:

Ii一个待分割的输入细胞图像集,图像集中的数量为N;

每个图像可以被分解为前景Fi(即细胞);

背景Bi;

前景掩膜Mi;

∗表示元素的乘法;

目的是为了求解Mi,但是右边三个未知量,条件不足无法求解,可以把前景Fi替换成原始图像Ii,因为他们两个的前景部分应该是相同的,原始图像乘以前景的掩膜应该与前景自己乘以前景掩膜结果相同。

在这里插入图片描述

特定的生物实验的背景信息(即细胞培养基)是相对稳定的,因此,可以做一个假设,在一个特定的生物细胞图像实验背景相似。有了这个假设,等式2可以改写为:

现在就从N个输入求解3N个未知数变成了N个方程解N+1(M(1到n)+B)个未知数。

6.2.3 模型

在对无监督问题(如公式3)进行数学表述后,我们提出了基于对抗重建的无监督分割网络学习(USAR)来训练无标注的分割网络。

(如下图:无监督细胞分割网络学习的USAR模型综述。∗表示元素的乘法,⊕是元素的求和。)

给定输入的细胞图像集{Ii},采用分割网络(如U-Net)生成相应的细胞掩模{Mi}Ni=1。将随机采样的噪声矢量输入到解码器中,对所有输入图像{Ii}只合成一个背景B。

前景(细胞)区域是通过逐元素乘以原始图像集{Ii}Ni=1来计算的,非细胞背景区域是通过将合成的背景B和逆掩码(即{1-Mi} )逐元素相乘得到的。最后,将单元区域与非单元背景区域进行元素求和,得到重构图像{ˆIi}。

对于上述等式3,有两种可能的琐碎分割:

(1)“完全”分割。U-Net将整个细胞图像分割为前景(即Mi=1)。在这种情况下,任何合成的背景图像b都可以满足重建;

(2)一个“空”的分割。U-Net将整个细胞图像分割为背景(即Mi=0)。在这种情况下,任意匹配{Ii}Ni=1数据分布的合成背景图像B都可以满足无监督训练,因为默认的鉴别器只能测量分布上的差异,而对重建图像{ˆIi}Ni=1的内容没有约束。

为了避免这两个琐碎的解决方案,我们相应地提出了两个约束条件:

2.1、“非完整”分割的稀疏性:为了防止U-Net生成“完整”分割,我们在生成的单元格掩码上添加了一个稀疏约束,||Mi||1,强制生成的单元格掩码只有部分是非零(即前景),而主要部分为零(即背景)。

2.2、“非空”分割的内容损失:为了避免“空”分割,我们在重建的图像{ˆIi}Ni=1与原始图像{Ii}Ni=1之间增加了一个内容损失,定义为提取的图像特征f(ˆIi)与f(Ii)之间的差异(其中f是预先训练的用于特征提取的CNN,如:VGG16在本文使用的ImageNet上进行预训练)。这就要求每个重建的图像ˆIi必须具有与原图像相同的内容信息。在此约束下,生成的掩模{Mi}不能为“空”(即Mi=0),否则我们在等式3中有ˆI1=…=ˆIn = B =I1 =…= IN 。

2.4、目标函数:

G代表生成器,z是生成背景B的噪声矢量。是重建图像。λs和λp是平衡损失项的超参数(λs和λp对由验证集确定)。

D代表鉴别器,

不断细化分割网络的伪标签:

为了进一步改进分割网络,我们可以利用基于伪标签的自训练策略。具体来说,在通过同时优化方程4和方程5获得分割掩码Mi后,我们将图像i的伪标记 定义为Mi中那些高置信的细胞区域(如Mi中的大气泡)。然后利用伪标签对分割网络进行细化。在数学上,生成器的优化目标函数为:

其中,CE代表交叉熵损失,λCE是控制分割损失的超参数(λCEis由验证集确定)。

6.3 数据验证

两个公共分割数据集1被用来评价提出的USAR模型。

第一个数据集“PhC-U373”包含聚丙烯酰亚胺基质上的胶质母细胞瘤-星形细胞瘤U373细胞,由相衬显微镜记录。它包含196张未标注的图像用于训练,34张标注的图像,其中10张用于验证,24张用于测试。

第二组数据集“DIC-HeLa”是通过差分干涉对比(DIC)显微镜记录在平板玻璃上的HeLa细胞。训练/验证/测试集的分割是230/48/120。我们实验中的图像大小是512∗512。

DIC-HeLa单元格具有与背景相当相似的像素强度,分割更具挑战性。

将提出的USAR模型与两种最先进的无监督方法:BP-Net[21]和RedrawNet[26]进行了比较。公平起见,在这两个模型和我们提出的USAR中使用相同的U-Net结构,

BP-Net通过反向传播自约束特征相似度和空间连续性来训练U-Net,而忽略细胞的统计特性(如细胞形状、大小等),BP-Net面临着细胞分割的挑战,特别是当细胞背景对比度较低时。

RedrawNet通过在不改变图像分布的情况下重绘前景内容来训练U-Net。该算法能较好地模拟细胞的统计特性,但分割问题的表达式存在严重的不适定性,且没有适当的约束条件,分割训练不稳定或不准确

6.4 总结

1、基于减轻标注工作量的目的,无监督细胞分割系统定义为一个稍微欠约束的系统,从n个等式(N个输入图像)中求解n + 1个未知数(N个细胞掩膜图像+ 1个背景图像)。

2、提出了一种基于对抗重建的无监督细胞分割网络学习(USAR)模型,该模型能够在没有任何标注的情况下训练细胞分割网络。

总结

本文主要讲神经网络基础和误差反向传播算法,通过一个手算的例子帮助理解误差反向传播算法的具体计算过程。第一篇论文主要是针对质量比较差的医学影像进行质量增强,在本文中提出了一种StillGAN的方法,在原有GAN网络的基础上加入两个约束条件局部结构和光照约束,来用于图像增强。大量实验表明,该方法优于传统方法和其他基于深度学习的方法。第二篇论文主要讲细胞分割,将无监督细胞分割定义为一个稍微欠约束的问题(n个方程解出n+1个未知数),提出了一种对抗重建无监督分割网络学习(USAR),它可以训练细胞分割网络没有任何注释。实验表明该网络可以训练无监督分割网络,并表现很好。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。