撸陆知识小课堂,每周都有干货内容等着大家!
书接上回
使用光学建模和优化进行皮肤分析
通过将高光谱成像与光学模型相结合,我们获得了显示氧含量、血容量分数、黑色素浓度、胆红素浓度和表皮厚度的皮肤特性图。在本节中,我们总结了用于皮肤分析的皮肤模型、光-皮肤相互作用模型和优化方法。
在我们的模型中,皮肤被描述为一种两层半无限材料,它在感兴趣区域(即成像到传感器一个像素的区域)上是均匀的。最上层厚度为h,大致相当于表皮,包含黑色素和基线。最下层相当于真皮,被认为是无限厚的,包含氧合血红蛋白 (HbO 2 )、脱氧血红蛋白 (Hb)、胆红素和基线。每个皮肤发色团都以其体积分数(即浓度)为特征:数量 { c mel、c HbO2、c Hb、c bi } 分别表示黑色素、HbO 2、Hb 和胆红素的浓度,可以在 0% 到 100% 之间变化。
每一层的光传播都使用 Kubelka-Munk 理论来描述,该理论用吸收和散射来描述光的相互作用,分别由光学系数K和S定义。整个光学模型可以用图4中的三个步骤来描述 。
图4:分析方法中采用的皮肤模型及光-皮肤相互作用模型:(1)Beer-Lambert-Bouguer定律,(2)Kubelka-Munk理论,(3)Kubelka公式及Saunderson校正
首先,表皮和真皮的吸收特性K e ( λ ) 和K d ( λ ) 与皮肤发色团浓度 { c mel,c HbO2,c Hb,c bi } 以及从文献中获取的每个发色团的光谱吸收特性 相关,采用比尔-朗伯-布格定律。
其次,应用 Kubelka-Munk 理论 ,表皮的反射率ρ e和透射率τ e以及真皮的反射率ρ d可作为各层吸收和散射系数的函数获得(表皮分别为K e和S e ,真皮分别为K d和S d )。表皮的光谱散射系数S e ( λ )和真皮的光谱散射系数S d ( λ ) 取自文献。
最后,使用 Kubelka 公式 来考虑皮肤的双层结构,并应用 Saunderson 校正来考虑空气和皮肤界面处的光传输(反射和透射)。这些模型得出皮肤光谱反射率R skin是ρ e、ρ d和τ e的函数。
这三个步骤的组合给出了皮肤光谱反射率R skin、皮肤发色团浓度 { c mel、c HbO2、c Hb、c bi } 和表皮厚度h之间的直接关系。
通过优化解决了逆问题,即根据测量的光谱反射率估计皮肤发色团浓度和表皮厚度。对于每个像素,使用迭代方法确定最小化测量光谱R m和预测光谱R skin之间的距离d ( R skin , R m )的参数 { c mel , c HbO2 , c Hb , c bi , h } :
公式1
优化结果在很大程度上取决于如何定义两个光谱之间的距离。对于此应用,选择方程 ( 2 ) 中定义的光谱角映射器 (SAM),因为它具有仅渲染两个光谱形状差异而不受光谱幅度差异影响的特性,这使其对辐照度变化不敏感。
公式2
由于这些特性,尽管存在辐照度漂移,SAM 度量在平坦区域和整个表面上都能产生良好的结果。
为了简化结果的解释,Hb 和 HbO2 中的浓度(c Hb和c HbO2)分别被血液体积分数c blood和氧速率α取代。血液体积分数是 Hb 和 HbO2 中浓度的总和。氧速率是 HbO2 中浓度与血液体积分数的比率。图5显示了在整个面部和小区域上获得的皮肤参数图示例 。在本文的其余部分,这种皮肤分析算法将被称为基于优化的算法。
图5:使用分析方法对全脸图像(顶部)和小面积(4 × 5 厘米)图像(底部)估计的参数图。显示图像的灰度已优化以获得更好的显示效果,并且可能因图像而异
使用神经网络方法进行皮肤分析
上一节介绍的皮肤采集和分析方法在美容学的许多应用中产生了令人满意的结果。然而,这种方法依赖于对高光谱图像的每个像素进行迭代优化,这会导致计算成本过高,限制了其在需要立即获得结果的应用中的可行性。为了解决这一限制并减少计算时间,我们训练了一个人工神经网络来取代优化算法。在本节中,我们将描述本研究中使用的训练数据集、神经网络架构和训练过程。
4.1 训练数据集
用于训练和测试神经网络的数据集包括娇韵诗(法国)对 204 名皮肤类型为 I 至 III 的亚洲患者进行的临床研究期间获取的高光谱图像。从每位患者的前臂内侧、脸颊和眼睛下方的黑眼圈获取高光谱图像。这些图像代表了 1148 × 948 像素的健康皮肤在 400 至 700 nm 之间的 31 个波长下的光谱反射率。
从这些图像中,使用第 3 节中描述的皮肤分析方法估算出皮肤参数图。在一个像素上测量的皮肤光谱反射率对应于神经网络的输入数据,我们正在寻找的输出值对应于该像素的计算皮肤参数,即氧含量、血容量分数、黑色素浓度和表皮厚度。在第 3 节中,我们提到皮肤分析模型也会生成胆红素浓度图。然而,对于神经网络模型,胆红素已被排除在外。胆红素是黑色素的分解产物,在健康皮肤中的浓度非常低,通常约为 0.1%。较高的浓度通常出现在黄疸等病症的发病率或愈合瘀伤中。由于我们的数据集仅包含健康皮肤(胆红素浓度低),因此由于信噪比低,有关胆红素浓度的数据非常嘈杂。因此,将这些值包含在训练数据集中会降低神经网络的整体准确性。
训练数据集是与每个可用图像上的选定像素相对应的光谱反射率和相关皮肤参数的集合。为了训练神经网络以准确地重现皮肤分析算法,数据集必须包含尽可能广泛地代表皮肤光谱反射率范围的各种光谱反射率,并且不得包含任何与非皮肤特征(例如睫毛)相对应的像素。因此,在每张图像上手动创建了与最多样化和血管丰富的区域相对应的感兴趣区域。然后从这些区域中随机选择总共 812 000 个像素来形成数据集。对于这些像素,已经验证它们对应于 0 到 1 之间的光谱反射率,以及氧含量、血液和黑色素浓度可能范围 [0, 100%] 内的皮肤参数。图 6说明了数据集采样过程。
图 6 在图形查看器中打开微软幻灯片软件
数据集采样过程的说明。(A)高光谱图像(此处显示为 RGB 彩色图像),其中像素在感兴趣的区域内随机选择;(B)与左侧图像中标记为 a、b 和 c 的像素相关的光谱反射率
然后修改测量的皮肤光谱反射率,以线性扩展区间 [0,1] 内的输入光谱动态,以提高神经网络性能。r max和r min是整个数据集和所有波长的最大和最小反射率值,新的输入数据定义为:
公式3
最后,我们应用了数据增强方法来提高神经网络对辐照度漂移的鲁棒性。原始训练数据集的光谱反射率乘以均匀分布在 0.3 和 1.3 之间的随机常数,从而模拟使用高光谱相机进行全脸测量时,不同光照和观察条件对面部某些部位的影响。这个新的“辐照度漂移”数据集被添加到原始数据中,使数据集的大小增加了一倍。
选定的 1 624 000 个训练模式(即在一个像素上测量的皮肤光谱反射率和相应的皮肤参数)随机分布在学习数据集(包含 1 032 000 个模式)、验证数据集(包含 272 000 个模式)和测试数据集(包含 320 000 个模式)之间。训练数据集用于优化网络的可训练参数,验证数据集用于训练过程的每次迭代,以验证 MLP 没有过度训练,因此无法在训练集之外的任何数据上表现良好。测试训练集用于评估神经网络预测的准确性。
4.2 神经网络架构
本研究中使用的神经网络类型是多层感知器 (MLP),这是一种流行的前馈网络,可应用于各种任务,包括预测、函数逼近和模式分类。这种网络是一组按层组织的多个感知器或人工神经元。
在本研究中,MLP 的架构如图7所示 ,包含 5 个完全连接的隐藏层,每个隐藏层由 31 个感知器组成。输入层将第一个隐藏层的 31 个感知器与每个波长λ i的光谱反射率R连接起来。输出层包含 4 个信号,分别对应于氧含量、血容量分数、黑色素浓度和表皮厚度。
图7 用于建模将皮肤光谱反射与皮肤特性关联起来的函数的 MLP 架构
每个感知器都以整流线性单元 (ReLU) 激活函数为特征,该函数被认为可以为回归问题建模提供良好的结果。根据 Ioffe 和 Szegedy 开发的方法,每个隐藏层前面都有一个批量归一化函数。20批量归一化通过限制每层输入的分布来提高训练过程的性能。总的来说,MLP 包含 5460 个可训练参数,这些参数根据平均值 0 和标准差 0.01 的正态分布随机初始化。
层数和感知器数量的选择取决于要建模的函数的复杂性。可训练参数太少会导致函数拟合度较差,而太多会导致模型过度拟合训练数据,泛化性能较差,即在训练集上表现良好,但在新数据上表现不佳。在这项工作中,考虑了几种配置,包括 1、3 和 5 个隐藏层。最后一种配置有 5 个隐藏层,在可训练参数与训练数据的比率保持在可接受的范围内(约为数据集大小的 1%)的情况下获得了最佳性能。使用第 4.3 节中描述的迭代训练过程搜索 MLP 参数的最佳值。
最后,我们观察到,使用通过数据增强而大小增加一倍的训练数据集可以提高泛化能力,但会损害拟合性能。为了减轻拟合性能的下降,我们应用了后处理:每个输出信号都经过线性校正,其参数由在没有辐照度漂移数据集的情况下对原始数据集进行训练来确定。
4.3 训练过程
MLP 已使用反向传播学习算法(一种使用梯度下降法的优化算法)进行训练。在 MLP 参数优化期间最小化的损失函数定义如下。训练集的 每个像素i对应于一个训练模式或输入目标对:
公式4
其中R i ( λ ) 表示 31 个波长的光谱反射率,α i表示估计的氧含量,c blood,i表示估计的血容量分数,c mel,i表示黑色素浓度,h i表示表皮厚度。目标值 { α i , c blood,i , c mel,i , h i } 也称为基本事实。我们将神经网络输出值表示为 { A i , C blood,i , C mel,i , H i }。
损失函数定义为目标值和输出值之间绝对差的加权和:
公式5
其中 { a , b , m , h } 是与每个参数相关的权重,k是这些权重的总和,N是像素数。还实现了均方误差损失函数,但其表现不如公式 ( 5 )中给出的平均绝对误差损失函数。
与每个参数相关的权重定义有助于平衡损失函数中每个参数的重要性,以便以相似的精度估计它们。事实上,考虑的参数并不在相同的间隔内变化:在训练数据集中,氧含量通常在 18% 到 96% 之间变化,血容量分数在 2% 到 12% 之间,黑色素浓度在 21% 到 51% 之间,表皮厚度在 21 um 到 41 um 之间。如果损失函数中没有权重,那么血容量分数的预测就会比其他参数的预测准确度低得多。引入这些权重的另一种方法是依赖损失函数中的相对差异而不是绝对差异。经过几次测试,我们模型中选择的权重 为氧含量a = 1、 血容量分数b = 4、 黑色素浓度m = 2 和表皮厚度h = 2。通过应用这些设置,我们得到k = 9。
在优化过程中,当模型收敛时,训练和验证数据集的损失函数都会减小。然而,当网络开始过度训练时,验证数据集上的损失函数会增加,而训练数据集上的损失函数则会持续减小。这种趋势变化清楚地表明了何时应该停止训练,并用于自动提前停止。
该模型使用 Python 3.5 在 TensorFlow 1.10 框架中实现。训练过程在单个 GPU NVidia 1080 Ti GTX 10Gb RAM 上进行。该模型训练了大约 5 天,大约需要 5 500 步。
表1给出了在训练过程结束时在每个输出的验证集和测试集上获得的 MLP 预测与基于优化的算法结果(称为基本事实)之间的平均偏差 。
表 1. 训练后 MLP 在验证集和测试集上的结果:平均偏差值(即 MLP 预测与真实值的绝对差)、平均真实值和相对平均偏差(即以平均真实值的百分比表示的平均偏差)
MLP 预测与作为基本事实的基于优化的算法结果之间的平均偏差在测试和验证数据集上的每个输出信号之间相当均匀地分布。这表明损失函数权重的选择是恰当的。令人惊讶的是,与临床研究中观察到的变化相比,相对偏差并不是特别低(例如,Nkengne 等人观察到,在皮肤类型 II 和 III 5的患者身上涂抹抗黑眼圈化妆品 56 天后,眼下区域黑色素浓度 显著下降了 5.5%( P值 = 0.026 ))。这可能是因为将训练数据集加倍,其中包含受辐照度漂移改变的数据,使得神经网络的回归问题更难求解。然而,我们将在第 5.3 节中看到,在将 MLP 应用于全脸图像时,对训练数据集进行这种处理是必要的。
验证和测试数据集上的这些相对偏差水平为我们提供了在图像上应用 MLP 时可以预期的最小偏差的提示。
欲知后事如何
信撸陆 不迷路