9

以简化的方式创建对象检测模型

 3 years ago
source link: https://panchuang.net/2021/09/20/%e4%bb%a5%e7%ae%80%e5%8c%96%e7%9a%84%e6%96%b9%e5%bc%8f%e5%88%9b%e5%bb%ba%e5%af%b9%e8%b1%a1%e6%a3%80%e6%b5%8b%e6%a8%a1%e5%9e%8b/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

以简化的方式创建对象检测模型

fendouai • 2021年9月20日 am5:09 • Medium

计算机视觉

无代码接口正在彻底改变ML工程师处理机器学习技术必须提供的最困难任务的方式。我遇到过的最困难的编码任务之一是编码必要的结构来解决计算机视觉问题,比如分类或物体检测。在本文中,我将用来执行对象检测实验的接口称为Datature(可从此链接获得)。at this link

在本文中,我将使用一组预先标记的棋盘图像来创建我的对象检测模型。图像中的每一个棋子都被贴上了适当的标签。

目标检测是计算机视觉的可能任务之一。对象检测模型能够在图像中找到对象,然后为它们分配正确的标签。尽管如此,无论我们使用的是什么库,它都是最难使用代码构建的解决方案之一。

对解决方案进行硬编码

硬编码的第一个问题是编码本身比较困难,特别是图像的预处理阶段。图像必须以正确的形式导入,然后进行预处理和增强,最后送入神经网络模型进行训练。对于给定的任务,建立用于计算机视觉任务的卷积神经网络需要几个小时。

在使用最新和更先进的模型进行图像检测时,最令人沮丧的问题是有太多事情可能会出错。我记得我第一次使用ResNet进行对象检测时无法安装Buggy库的以前版本,因为它与最新的TensorFlow版本冲突。

使用代码进行计算机视觉的最新问题是对计算能力的要求。简单地说,免费笔记本版本或您自己的计算机(即使拥有非常强大的GPU)在一天内也没有足够的计算能力来训练具有挑战性的对象检测模型(具有200张图像的训练集)。这使其成为一场字面上的噩梦,您可以使用的唯一解决方案是使用虚拟机。

Nexus

在寻找运行我自己的对象检测算法的替代方案时,我发现了NexusTM。一个无代码平台,允许您轻松设置计算机视觉算法。该平台是为与您的MLOps流程集成而构建的,因此,一旦您的模型经过训练,就可以将其作为工件导出,以便使用Kubernetes等容器服务进行部署。

正如将硬编码用于计算机视觉解决方案的问题中所述,该平台允许对您的算法进行高度个性化,包括多个预处理选项,并为您提供密集工作负载所需的计算能力。

免费层为您提供500分钟的免费计算能力,这足以运行几个模型,特别是如果您想要尝试对象检测。我的包含230张图片的模型花了14分钟进行训练。

MLOPS:成败你的ML团队

MLOPS是业界已经采用的用于创建和开发机器学习模型的工作流。使用平台遵循此流程的优势在于,我们可以轻松创建与其他云工具集成的管道,并且足够灵活,可以在未来保持快速变化。当您单独处理模型时,这听起来可能并不重要,但是想象一下在多个团队中使用多个模型-每个团队都有自己的“最佳实践”。那就是事情变得一团糟的时候。

MLOps周期的一个非常常用的改编被称为CD4ML(机器学习的连续交付),这是一个旨在最大化MLOps效率的框架。

这相当于使用Nexus平台的CD4ML管道。

创建对象检测模型

现在,我将为您提供使用Nexus平台构建您自己的对象检测模型的必要说明。

一旦您登录到Nexus,您将能够创建您的第一个项目。该平台允许您拥有多个项目,如果您正在管理许多不同的数据集,并且有特定的团队成员处理这些数据集,这可能会很有帮助(这也是您在训练模型时尝试不同参数的好方法)。

在我的资源库中,您将找到一个文件夹,其中包含我在此实验中使用的所有文件:

  • 训练图像标注

正在上传图片

将图片上传到该平台的过程相当简单。在我的示例中,我将选择Training文件夹中包含的231张图像。整个过程可能需要几分钟才能完成。该平台将允许我将图像集分割为训练集和测试集,并选择分割比例(默认情况下,测试集的比例为0.3)。

到目前为止,我已经能够在平台上上传图片,但我还没有给它们贴上标签。如果图像保持未标记状态,则不可能训练有监督的学习算法,因为它既需要特征也需要标记才能成功运行。

对于此数据集,标签将存储在包含相应图像名称的CSV文件中。这是一种常用的图像处理格式,该平台实际上会允许你导入几个对象蒙版的标签,每个蒙版都表示一个棋子,如果需要也可以导出。

一旦导入了标签,我们就有了一个简单的探索性数据分析(值计数操作),它使我们能够深入了解标签在数据集中的分布情况。我们可以看到只有2个图像不包含任何标签,因此我们将继续对它们进行标记。

如果我们想要对模型以前从未见过的数据进行验证,在上传验证集时要小心,因为平台不会与您的训练图像区分开来(模型验证是在Portal上完成的,我在下面将对此进行介绍)。

内置注释器

如果我们希望详细研究每个图像,注释器部分允许我们检查每个图像中的所有相关标签,并在需要时更改标签。他们有各种各样的工具,但是因为我只是在训练一个物体检测模型,一个包围盒就可以了。

培训阶段是这个平台的有趣之处。如上所述,设置整个培训过程所需的工作量最小。它将为您节省1到5个小时的工作(特别是如果您是第一次编写复杂的CNN)。该平台简化了建模过程,将复杂的代码移至只需单击即可,同时仍允许您灵活地选择预处理和增强方法。

有大量的预处理方法可供您选择。通常,当训练数据集很小或方差很小时,需要对图像进行增强处理。目标是使您的模型更灵活地适应现实世界图像中可能出现的变化。

在我的例子中,我将选择一种简单的数据增强技术,为每个可以预览的垂直翻转图像分配0.5的概率。然后,当模型列车时,这些增强会在飞翔上进行。

一旦正确设置了我的工作流,我将能够预览我的扩展,并选择必要的超参数,如纪元数/批大小,甚至检查点策略(我为此模型选择了最低的验证损失)。

在快速检查参数之后,我将开始培训。请注意,在使用代码时,除非您可以将其连接到现有虚拟机,否则您将需要等待长达24小时才能正确训练对象检测模型。该平台允许我使用其GPU在不到15分钟的时间内训练它。

从函数可以看出,模型的精度似乎随着历元数的增加而缓慢增加。1000个纪元似乎是一个非常合理的数字,因为相比之下,模型在400纪元以上的损失几乎减少了一半。

我们始终可以通过我们经过培训的模型访问这些统计数据,该模型现在显示在专门的部分中,以便于团队成员参考。

一旦一个模型经过了适当的训练,我手中的东西就被称为艺术品。模型必须集成到形成整个MLOPS流程的管道中,以便在经过适当验证后可以轻松地在生产中使用。例如,我们可能希望使用Kubernetes作为MLOps过程的下一步。

Datature最酷的一点是,它不仅仅停留在模型培训上,许多团队认为模型培训和注释是完整的故事,但这只是一半。我使用他们的开源平台(Portal)来验证模型是如何做出预测的。

我所要做的就是将我的模型和图像加载到Portal中,模型将根据棋盘上棋子的位置和类型进行推断。我们走吧!我们刚刚以无缝的方式训练了一个国际象棋检测模型。

实例分段怎么办?

我为数不多的想法之一是如何将其转化为实例细分项目。首先,注释必须作为分段/多边形单独更新-但这是一项非常耗时的任务。幸运的是,我是Datature的IntelliBrush早期访问的一部分,并在我的实验期间玩弄它。

IntelliBrush的前提是,用户只需选择“内部”区域,即点击人或动物的身体,就会自动生成一个多边形来将其绑定。更有趣的是,用户还能够选择感兴趣区域之外的区域,以微调对象的多边形选择。这在注释紧密堆叠在一起的对象时尤其有用,因为在这些对象中,往往会发生不同对象的重叠。

如果您相信IntelliBrush会帮助您的批注工作流,请考虑尝试一下!

原创文章,作者:fendouai,如若转载,请注明出处:https://panchuang.net/2021/09/20/%e4%bb%a5%e7%ae%80%e5%8c%96%e7%9a%84%e6%96%b9%e5%bc%8f%e5%88%9b%e5%bb%ba%e5%af%b9%e8%b1%a1%e6%a3%80%e6%b5%8b%e6%a8%a1%e5%9e%8b/


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK