Camera Futura 使用 ML.NET 自动进行照片剔除和整理
Camera Futura 是一家总部位于瑞士日内瓦的公司。该公司的宗旨是为摄影发烧友和专业摄影师开发突破性软件并将其商业化。
目前正在生产的主要产品是 Futura Photo,这是一款可以自动进行照片剔除(从照片拍摄中选择最佳图像的过程)的桌面应用程序,可以在开始后期处理之前整理照片。Futura Photo 充当“智能且个性化的助手”。
业务问题
摄影师花费大量时间拍摄图像,许多人喜欢通过后期处理来增强照片。但是,在拍摄之后和后期处理之前需要采取几个步骤。这些步骤涉及剔除照片并整理照片进行后期处理,它们不像摄影过程的其他部分那样令人兴奋,并且可能非常耗时。
剔除图像只是意味着丢弃低质量的图像。“低质量”是指由于技术而非艺术原因,照片未按预期拍摄。
整理图像涉及将图像移动到正确的文件夹。这可能意味着一些不同之处,例如在 RAW 或 JPG 图像之间选择进行后期处理,将图像拼接在一起以创建全景图,以及为微距或天体摄影堆叠图像。当谈到延时摄影时,整理意味着找到正确的照片(每次延时拍摄可能有数百张图像),并将其上传到将创建延时摄影视频的软件中。
还有一项重要任务需要将剔除和整理相结合: 收集一系列相似图像并从组中选择最佳图像。摄影师往往会拍摄同一主题的许多图像(从极限运动到活动,再到仅拍摄儿童玩耍的图像)。选择最棒的几张图像虽然非常重要,但如果摄影师每次拍摄都必须经历数十个此类小组,也可能会非常令人沮丧。
Futura Photo 主要致力于为每年拍摄约 10,000 到 25,000 张图像的摄影发烧友提供帮助,可提供独特的体验,帮助解决图像剔除和整理方面的问题。虽然照片剔除和整理自动化并不是一个新概念,但当进入高级阶段时,例如尝试查找完全模糊的图像或将极其相似的图像组合在一起时,问题就变得特别复杂。
此自动化之所以并非易事,原因有许多;在开始照片后期处理之前,摄影师必须回答许多问题,例如:
- 清晰的图像究竟意味着什么?
- 摄影师拍摄许多相似图像的原因(好或坏)是什么?
- 当摄影师拍摄 RAW+JPG 时,什么时候需要 RAW 文件而不是 JPG文件?
- 为什么应丢弃人脸闭着眼睛的图像,或者出于某种目的对其进行后期处理?
- 当摄影师拍摄相似的图像时,他们是出于焦点堆叠(微距)、HDR(风景)、多重曝光目的(创意)堆叠图像,还是只是想要堆叠一连串图像(运动)?
这些类型的问题列表相当长,但回答它们是 Camera Futura 想要用机器学习做的事情。“智能助手”有许多附加价值,它根据摄影师的需求进行自定义,可以取代工作流程中摄影师手动完成的一些步骤,但如果没有机器学习的帮助,这是不可能实现的。 所以,Futura Photo 决定使用图像分类来帮助摄影师完成照片剔除和整理过程,包括从一组中选择最佳图像。
为什么选择 ML.NET?
Camera Futura 之所以选择 ML.NET 来为其 Futura Photo 软件中的机器学习功能提供支持,有几个原因。
首先,Camera Futura 使用 .NET 来构建其应用程序,使用 ML.NET 使公司能够保持在 .NET 生态系统中,而无需使用另一种语言进行编码或与非 .NET 框架集成。这消除了学习新语言方面的开销,以及将非 .NET 技术集成到 .NET 应用程序中的复杂性和潜在性能影响。
此外,Visual Studio 中的 ML.NET Model Builder 使运行图像分类场景变得非常容易,既可以对初始模型进行原型设计,也可以对当前正在生产中使用的最终模型进行训练。ML.NET 本身还提供了公司在模型可用性、自定义和整体性能方面所需的一切。
ML.NET 的影响
虽然 ML.NET 使 Camera Futura 能够快速构建、训练和部署生产级机器学习模型,但该框架也为公司开辟了新的机遇。对于初创公司而言,能够在 .NET 中完成所有工作是一个巨大优势,它允许公司开发如果需要公司使用几种不同的技术就不可能开发的功能。对于 Camera Futura 来说,ML.NET 既是一个推动因素,也是一个生产力工具。
如果没有 ML.NET,则交付第一个可投入生产的模型将需要几个月的时间。”
解决方案体系结构
Futura Photo 目前是 .NET Framework 4.6.1 上的 WPF 桌面应用程序(计划在 2021 年底迁移到 .NET Core)。
工作原理
使用 Futura Photo 非常简单: 摄影师配置规则、上传图像、检查结果,然后应用它们来将照片移动到正确的文件夹。
用户浏览三个主窗口。第一个窗口管理和配置要应用的规则,显示图像的主图库,显示分析过程中的进度,并显示每张照片的结果,如下图所示:
分析完成后,可以打开第二个窗口按规则检查结果:
可以根据需要为全屏照片查看器打开第三个窗口,以更深入地了解每张照片的结果:
数据和训练
目前,Futura Photo 使用来自 Camera Futura 的公司图像和数据进行训练。数据集的大小因模型而异,但该公司在本地训练时通常每个模型 10,000-50,000 张图像。在训练和评估模型后,他们会将模型与 WPF 应用程序一起部署。
目前有四种模型正在生产中,其中三种是使用 Visual Studio 中的 ML.NET Model Builder 图像分类场景构建的。最后一个模型是群集模型,它是使用 ML.NET API 构建的。
图像分类场景用于确定图像是否具有某个特征。此特征可以是任何不能通过数学模型正式描述的东西。
例如,其中一个模型可查看白平衡特征,以帮助确定图像是否具有正确的白平衡以及原因(太绿,太黄等)。
在以下示例中,照相机明确定义了白平衡:
Futura Photo 使用 ML.NET 模型来计算白平衡(如上图所示),使用的代码类似于以下代码片段:
// Method using ML to define whether the camera's AWB
// (Automatic White Balance) estimation is accurate
private Photo CalculationAWB(Photo photo)
{
Photo _photo = photo;
try
{
// Create single instance of sample data from first line of
// dataset for model input
ModelInput inputData = new ModelInput()
{
// FileNameImageLight: path for ad-hoc thumbnail of the
// Photo source object (JPG or RAW file)
ImageSource = _photo.FileNameImageLight
};
// WB_ML_PC: % of likelihood of AWB being either 'OK'
// (well calculated), cold, tint green, tint purple, or warm
// AWB's Accuracy Result ("OK"): predictionResult.Score[1]
// Bias: predictionResult.Score[0] for Cold, [2] for Tint Green,
// [3] for Tint Purple, and [4] for warm
for (int i = 0; i < 5; i++){
_photo.WB_ML_PC[i] = predictionResult.Score[i]) * 100;
}
catch (Exception ex)
{
log.Error(ex, "Throughout ML_IsAWB_OK");
}
return _photo;
}
}
另一个模型可以查看图像的清晰度。理论上,有许多数学方法能够定义图像是否清晰,但大多数(如果不是所有)方法都无法检测到运动模糊和失焦模糊的混合。更重要的是,这些方法依赖于阈值,这在比较相似图像时很好,但不够准确,无法确定单个图像是否足够清晰。由于许多极端情况会影响要与阈值进行比较的值,这些方法无法检测到给定的清晰度级别。使用通过 ML.NET 训练过的图像分类模型,Futura Photo 可以以极低的误报率和漏报率判断图像是否清晰。
最后一个模型是一个群集模型,它使用无人监督的机器学习将图像分组为“通过”组(具备所请求特征的图像)或“失败”组(意味着图像不具备所请求特征)。
Camera Futura 的未来
Camera Futura 的愿景是拥有基于云的解决方案,包括通过移动应用加载图像、在 Azure 上运行软件以及在桌面应用中完成照片剔除。这意味着一旦摄影师在拍摄完照片后返回到其台式计算机,所有照片都将准备好进行后期处理。
该公司目前正在开发其他几种模型,包括用于图像分类、物体检测和回归场景的模型。
虽然 Futura Photo 的最终用户目前只使用模型进行照片剔除或在后期处理前整理照片拍摄,但 Camera Futura 还希望尝试允许客户使用自己的数据在本地训练模型以获得更好的模型。
准备好开始使用了吗?
分步教程将帮助你在计算机上运行 ML.NET。