对于消费品公司而言,在产品开发的早期阶段建立预测稳定性模型以预测产品保质期或长期稳定性失效风险至关重要。延时摄影(TLP)已被公认为测量液态消费品物理稳定性的主要工具。
之前我们曾使用 Python 开发过一个 AI/深度学习模型,用于从 TLP 图像中预测物理稳定性失效模式。现在,有了适用于 JMP Pro 的全新 Torch 深度学习插件,我们可以快速开发 AI/深度学习模型,无需任何编程即可从图像中检测物理稳定性失效。本次演讲中,我们将分享该插件在图像分类问题中的应用,即检测配方消费品的物理稳定性失效。
我叫罗芳怡,是宝洁公司的一名统计学家兼数据科学家。今天,我将与JMP公司的Russ Wolfinger一起展示一张海报。我在宝洁工作了大约28年,目前专注于运用统计学和数据科学方法加速产品和包装创新。Russ,你能否简单介绍一下自己?
是的,谢谢你,方义。很高兴能和你一起合作这个项目。你也知道,人工智能机器学习是一个非常热门的话题,我们很喜欢像这样的实际应用,我认为它们现在真的产生了很大的影响,而且能够使用新的 Torch 插件进行图像分类,我觉得它非常强大且实用。今天我们将分享你们是如何取得进展的,这将会是一个非常精彩的故事。我个人非常期待看到它的发展。这个项目已经筹备了好几年,现在终于开始取得一些进展了。
谢谢Russ。今天,我们将使用新的JMP Torch深度学习插件来解决图像分类问题。首先,我将介绍一下问题的背景。宝洁公司生产许多消费品,其中一些是液体配方产品,例如洗发水、护发素、洗衣液、洗洁精等等。
在产品上市之前,我们必须对原型产品进行大量的测试。我们采用一种叫做延时摄影的技术,来追踪原型产品在不同温度下随时间变化的图像。在右侧,您可以看到一些液态配方原型产品的稳定性失效模式,例如相分离和乳状化。顶部有一层薄薄的薄膜。这代表波动、裂纹和结晶。
因为我们测试了数千种原型配方产品,所以我们使用这台数码相机跟踪所有原型产品随时间的变化。我们拍摄了数百万张图像。手动将这些图像分类到不同的失效模式是不可能的。几年前,我们在PNG公司组建了一个团队,并开发了一种深度学习算法,利用Python开发的深度学习模型,将这些图像分类为稳定状态和不同的物理稳定性失效模式。
随着 JMP Pro Torch Deep Learning 的推出,我认为我们应该尝试将其应用到我们的图像分类问题中。
我们尝试使用二元分类(将图像分为稳定和不稳定两类)和多类分类(例如稳定状态与不同的物理稳定性失效模式)来解决图像分类问题。我们使用了目前最优秀的深度学习插件来处理这两种分类问题。训练集包含约 3500 张图像,测试集包含 500 多张图像。下面我将展示一些结果。
当我们尝试使用 Torch 深度学习插件进行二元分类时,最初我使用了该插件的默认参数设置,并选择了名为 ResNet-34 的图像模型。很快,我就得到了一个预测验证准确率达到 95% 的优秀模型,而且过程非常快捷方便。中间部分展示了一个训练历史图的示例,我们希望看到损失值随着训练轮数(epoch)的增加而降低,就像训练迭代次数增加一样。因为我们的目标是开发一个验证准确率达到 95% 的模型。这个初始模型已经非常出色,但我们希望进一步提升模型的验证准确率。
我尝试手动调整一些超参数。我尝试使用更复杂的图像模型,例如 ResNet-50,并尝试降低学习率和增加训练轮数。经过几次尝试,我很快就得到了一个验证准确率达到 99% 的二分类模型。看到这些结果我非常兴奋。然而,使用 JMP Torch 深度学习插件进行多分类则需要更多时间,而且一开始我没能得到理想的模型。
我从 JMP 的 Peter Hirsch 那里了解到,你们有一个 Torch Companion 插件,可以为 Torch Deep Learning 插件进行超参数调优。我也下载了这个插件,您可以在 marketplace.jmp.com 上找到它。您可以同时下载 Torch Deep Learning 插件和 Torch Companion 插件。我试用了这个插件,它能够设计超参数的实验方案。
我使用了 20 种组合。它生成了 20 种超参数组合,包括不同的训练轮数、学习率、批大小、层数、层大小以及图像尺寸。我尝试使用 Torch Companion 插件,但对于这个多分类问题,我能得到的最佳模型验证准确率约为 78%。我们的目标是获得一个验证准确率在 95% 左右的模型,因此这个模型还不够好。然后我尝试手动调整模型,使用不同的超参数。我还尝试了不同的图像模型,例如 ResNet-50。此外,我还尝试增加训练轮数、降低学习率、改变批大小或改变图像尺寸。
对于多分类任务,运行时间要长得多。这里有一张截图,显示模型运行了一天后仍在运行。有时,它会提示我的 NVIDIA GPU 内存不足,但我坚持尝试,经过多次尝试,最终成功构建了一个非常优秀的深度学习模型,可以将图像分类到多个类别,例如稳定模式和不同褪色模式。验证准确率达到了 95%。我对结果非常满意。此外,Russ 建议我可以减少批次大小或训练轮数来降低内存占用。以上就是我们学到的一些经验,让我们拭目以待。
让我回到正题。正如你所见,使用 Torch 深度学习插件开发二元分类模型非常简单快捷,我们还可以使用 Torch Companion 插件进行超参数调优。此外,通过手动调整超参数,我们还可以开发出适用于多类分类问题的优秀模型。Russ,你还有什么要补充的吗?
是的,方义,这真是个不错的进展,我知道我们有不少客户都在走这条路。这跟我们通常在JMP里做的快速分析不一样,因为数据量非常大,计算量也很大,你能用上NVIDIA的GPU真是太好了。方义,你还记得那张GPU的显存容量是多少吗?
我认为超过 200 到 256 GB。
通常来说,GPU的显存容量大概在12GB到16GB之间。我指的是GPU的显存,不是CPU的显存。我们得查一下,但我知道NVIDIA有很多不同的显卡。很难说哪款更好。现在很多人都在问我们应该买哪款显卡,好在NVIDIA发展势头很好,所以他们不断推出性能更好、价格更低的显卡。我听说他们即将推出一款新显卡,性能更强,价格更低,所以我们预计运行时间会缩短。这主要取决于你处理的图像尺寸,尤其是在处理大型图像时。
比如,我觉得你最终选择了 2 到 4 倍的配置,这是标准配置。这个配置仍然相当不错,你可以开始真正利用显卡的性能,当然,成本也会随之增加。总之,这就是我们拥有这些显卡的原因。能够利用高端计算能力,并且通过一些耐心和调整,这真的很棒。感谢 Peter Hirsch 和 Scott Allen 开发的这个插件,我知道很多人都在用。它是一个非常出色的 Torch 插件,可以让你更快地创建更好的模型,并实现一些自动化操作。
很明显,问题就在于那些长时间的运行,有时候最好让它们运行一整夜,第二天再来看看结果。我觉得你在这方面做得非常正确,既使用了自动化功能,又进行了一些手动调整和尝试,我认为这是明智之举。这不仅往往是找到最佳模型的途径,还能帮助你更深入地了解问题,从而判断哪些因素真正推动了改进,哪些因素影响不大。我发现很多时候,你根本无法分辨。有时候,某个图像模型似乎能够捕捉到图像的本质,并且往往比其他模型表现得更好。
有时候结果都差不多,但有时候结果更多取决于图像大小或训练方案。基本上你需要做一些实验来尝试,而我们就是这样设置的。很高兴你展示了训练损失曲线,因为密切关注它很重要,确保它先下降然后趋于平缓。这条曲线看起来不错。不过要小心,比如有两种情况你不应该使用它,那就是损失曲线先下降然后又回升的情况,尤其是实线部分。
这可能表明模型过拟合,这种情况偶尔会发生。另一种情况是,如果模型持续稳定下降,通常需要运行更多轮次的训练,直到模型进一步收敛。但这些都是一些小技巧,需要边做边学。对我来说,它真的很有趣,因为它提供了一个无需编写代码的界面,让你可以快速上手建模,而无需编写大量的 Python 代码,也无需每次尝试不同的东西时都修改代码。哇,这真是一个很棒的应用程序,方义。恭喜!我很高兴看到它。
谢谢 Russ。最后,这里有一些参考资料。这是 JMP Torch 深度学习插件的文档链接,以及 Torch Companion 插件的链接。另外,几年前在 ASA、IMS 和 Spring Research Conference 等统计学会议上,我们用 Python 开发模型时也遇到过类似的问题。
此外,我要感谢宝洁团队过去与我共同解决这个问题。正如Russ提到的,我们还要感谢Peter Hirsch分享他的存储伴侣插件。就这些了。所以,如果你们有任何问题,知道该联系谁。你们可以联系Russ或者我。从Russ那里学习JMP Torch深度学习插件真的很有趣,我认为它在宝洁还有更多应用前景。谢谢。
方义,干得好!谢谢。