Press "Enter" to skip to content

目标检测案例:基于计算机视觉的深度神经网络数据准备

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

在深度学习领域,特别是对于任何深度神经网络,主要问题是为模型训练创建高质量的数据。对于任何数据科学项目,您都需要掌握第一手数据。数据应该是定性的,不应该有偏见。在用数据训练任何模型之前,有一些事情需要非常精确地考虑。

 

在现实世界的场景中,对于任何给定的问题,都可能没有预先获得数据集。对于这些场景中的大多数,数据处理和准备都很方便。在相关数据收集和记录之后,下一个具有挑战性的任务是使数据适合于模型训练。作为一名数据科学家,在开始模型培训之前,总是应该更加小心。清洁操作后,应将数据转换为适当的格式。在深度学习的情况下,因为我们主要训练神经网络,这些神经网络本质上是数据和性能密集型网络。我们不能因为较少的定性数据而进行错误的、糟糕透顶的模型训练。在DNN的情况下,在开始长期的模型训练之前,我们必须拥有适当的高质量数据集。

 

大多数与DNN相关的问题陈述都存在模型训练格式不兼容的问题。原始数据并不总是与模型训练机制要求的格式相同。在我最近的实验中,我尝试了几乎相同的医疗图像数据。我正在开发基于深度神经网络的实时目标检测方法,以便使用神经网络高效地抓取目标。一如既往的主要问题是在训练模型之前的数据准备。对于这个用例和更具体的理解,我将讨论卷积神经网络,它通常对多媒体数据格式很有用,并且负责分类和检测任务!

 

机器学习和深度学习社区通常认为计算机视觉是DNNs的一个很好的合作伙伴。计算机视觉为处理多媒体数据提供了先进的工具,其原因是显而易见的,也很容易理解。现在让我们回到我们刚才谈到的数据标签和准备工作。CNN有不同的架构,如GoogLeNet、ResNet、AlexNet、DarkNet等等!通常,体系结构非常相似,只是内部层的类型和结构之间存在细微的差异。大多数网络在建模训练时依赖于特定的训练数据格式来读取/输入数据。

 

通常,对于任何对象检测任务,您向网络输入的是图像和具有图像的对象的位置坐标。我们尝试检测的对象可能不止一个。根据用例的不同,这些可能会发生变化。抽象地说,对于目标检测问题,DNN通常提供图像文件和相应的文本/json对象文件,其中包含带有位置坐标的对象名称/类,这样神经网络就可以得到我们试图让它们理解的东西。这有时是更大的挑战,因为可能没有预先标记的数据集。在我的例子中,我们没有任何带标签的数据集,而且由于敏感医疗数据的性质,我们可能不信任众包标签工具。对于这类数据准备和标注任务,计算机视觉应运而生!

 

本文的基本思想是利用OpenCV和计算机视觉的强大功能,实现数据的自动标注,利用基于OpenCV的自动目标检测算法为神经网络做好数据准备。让我们深入了解一下细节,以便更深入地了解它。

 

OpenCV-用C++编写的库具有更复杂和更高级的功能,可以从多媒体图像数据中检测复杂的形状、结构和形态特征。我们可以使用基于OpenCV的算法来检测多项式的形状、特征和高级结构。在图像处理领域,您确实有多种方法来完成某些任务。当涉及到图像时,所有东西都是一个n维的数组。您所拥有的只是一个数组,您将在其上执行一些数学运算(通常是内核技巧),以推导出对特性的某些理解。第一步总是关于图像的二值化,这意味着将图像转换成简单得多的灰度格式。每次转换成灰度格式后,我都会使用阈值处理的技巧。在这里,事情是直截了当的。对于每个像素,都会按照指定的方式应用相同的阈值。应该选择高度依赖于每种图像/数据类型的自适应阈值。

如您所见,图像阈值突出显示了指定的重要功能。下一步是关于侵蚀和膨胀等形态学操作。这些都是隔离、突出和提取形状轮廓的非常重要的魔术。简而言之:基于形状处理图像的一组操作。形态运算将结构元素应用于输入图像并生成输出图像。膨胀操作包括将图像A与某个核(B)进行卷积,核(B)可以是任何形状或大小,通常是正方形或圆形。而侵蚀手术是扩张的姊妹。它在给定的核区域上计算局部最小值。

每一次操作都有一个核B在图像上扫描,我们计算与B重叠的最大/最小像素值,并用该最小值替换锚点下的图像像素。

 

在此之后,我们将应用OpenCV最受欢迎的机制,即寻找轮廓。等高线可以简单地解释为连接所有连续点(沿边界)的曲线,具有相同的颜色或强度。轮廓是形状分析和目标检测与识别的有用工具。在OpenCV中,查找轮廓就像从黑色背景中查找白色对象一样。所以请记住,要找到的物体应该是白色的,背景应该是黑色的。在轮廓近似之后,我们将最终得到检测到的轮廓边界,如下图所示。

现在,我们有了最终检测到的形状,例如本例中的这个矩形。根据不同类型的对象结构,它可能会变得复杂。这种方法能够检测从矩形到非常复杂的物体,如多边形,甚至人。您所需要的只是形态运算、形状检测器和轮廓近似的适当混合。我们可能需要在循环中重复多次才能到达我们感兴趣的对象,但我肯定要说的是,对于对象定位问题,您几乎可以一致地检测到任何东西。

 

对于一些特殊和复杂的情况,还有其他的替代方法可以混合使用,比如Canny边缘检测器。Canny边缘检测是一种流行的边缘检测算法。它是一个多阶段的算法,包括去噪和去噪,寻找强度梯度,施加抑制,并在最后对过滤感兴趣的特征进行阈值处理。

现在,在图像中成功找到所有需要的对象后,我们只需以文本文件或json对象格式转储每个对象的标识坐标。神经网络通常选择这两种格式中的任何一种。由于这种方法可以高度自动化地处理一批相同类型的图像,所以我们可以非常高效和高度自动化地执行数据标注。

 

多亏了mLOp和数据版本控制(如DVC)的强大功能,我们可以在zsh(或bash脚本)例程中自动运行运行时,使用这种方法来运行数千个图像,从而获得每个图像的识别对象数据的相关文本文件/JSON对象。我们可以使用OpenCV来为我们准备DNNs的数据。在成功准备好带标签的训练数据之后,我们可以继续进行模型训练。 DVC

 

结论:

 

简而言之,我们可以说OpenCV内置了执行对象检测、定位、数据准备和数据增强的能力,这是最先进的深度学习算法所利用的。将其与正确的混合一起使用,我们可以使其工作,而无需加入繁琐或复杂的数据准备机制。事实上,对于更简单的对象检测,我们可以依靠OpenCV本身,而不是构建非常复杂的基于深度神经网络的模型(这在所有用例中不一定都很好)。

 

Be First to Comment

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注