当前位置:首页 > 数码 > 计算机视觉中的目标检测数据预处理-必不可少的步骤和最佳实践 (计算机视觉中的数学方法)

计算机视觉中的目标检测数据预处理-必不可少的步骤和最佳实践 (计算机视觉中的数学方法)

admin5个月前 (05-11)数码16

简介

在计算机视觉中,目标检测是一项重要的任务,它涉及在图像或视频中识别和定位感兴趣的目标。为了有效地解决目标检测问题,选择用于训练机器学习模型的数据集非常重要。本教程将指导您了解如何使用 Python 根据特定标准(例如图像质量、目标覆盖等)从数据集中选择最佳图像。

先决条件

要遵循本教程,您需要具备以下先决条件: Python 3.6 或更高版本 NumPy 库 OpenCV 库

示例 Python 脚本

以下示例 Python 脚本展示了如何基于某些标准(例如图像质量、目标覆盖等)从数据集中选择最佳图像,用于解决计算机视觉中的检测问题。本示例假定您拥有一个带有注释图像的数据集,并希望基于特定标准(例如图像质量、目标覆盖等)识别最佳图像。 ```python import os import cv2 import numpy as np 定义选择标准 min_image_quality = 0.8 最低图像质量 min_target_coverage = 0.5 目标覆盖的最小百分比 遍历数据集中的图像 best_images = [] for filename in os.listdir("dataset"): image = cv2.imread(os.path.join("dataset", filename)) 检查图像质量 image_quality = cv2.getStructuralSimilarityIndex(image, cv2.blur(image, (5, 5))) if image_quality < min_image_quality: continue 检查目标覆盖 annotations = ... 从注释文件中获取目标边界框 计算目标覆盖 target_coverage = 0 for annotation in annotations: target_coverage += cv2.contourArea(annotation) / image.shape[0] / image.shape[1] if target_coverage < min_target_coverage: continue 将图像添加到最佳图像列表中 best_images.append(filename) 保存最佳图像 with open("best_images.txt", "w") as f: for image in best_images: f.write(image + "\n") ```

用法

要使用上述脚本,请执行以下步骤: 1. 将数据集放置在名为 "dataset" 的目录中。 2. 根据图像质量和目标覆盖定义选择标准。 3. 运行脚本。 4. 最佳图像将保存到 "best_images.txt" 文件中。

结论

本教程展示了如何使用 Python 根据特定标准(例如图像质量、目标覆盖等)从数据集中选择最佳图像,用于目标检测问题。通过使用此脚本,您可以从数据集中识别最适合训练机器学习模型的图像。
计算机视觉中的数学方法

目标检测系列(一):R-CNN

目标检测(object detection)是计算机视觉中非常重要的一个领域。 在卷积神经网络出现之前,都利用一些传统方法手动提取图像特征进行目标检测及定位,这些方法不仅耗时而且性能较低。 而在卷积神经网络出现之后,目标检测领域发生了翻天覆地的变化。 最著名的目标检测系统有RCNN系列、YOLO和SSD,本文将介绍RCNN系列的开篇作RCNN。 RCNN系列的技术演进过程可参见 基于深度学习的目标检测技术演进:R-CNN、Fast R-CNN、Faster R-CNN 。 目标检测分为两步:第一步是对图像进行分类,即图像中的内容是什么;第二步则是对图像进行定位,找出图像中物体的具体位置。 简单来说就是图像里面有什么,位置在哪。 然而,由于不同图片中物体出现的大小可能不同(多尺度),位置也可能不同,而且摆放角度,姿态等都可以不同,同时一张图片中还可以出现多个类别。 这使得目标检测任务异常艰难。 上面任务用专业的说法就是:图像识别+定位两个不同的分支分别完成不同的功能,分类和定位。 回归(regression)分支与分类分支(classification)共享网络卷积部分的参数值。 还是刚才的分类识别+回归定位思路。 只是现在我们提前先取好不同位置的框,然后将这个框输入到网络中而不是像思路一将原始图像直接输入到网络中。 然后计算出这个框的得分,取得分最高的框。 如上,对于同一个图像中猫的识别定位。 分别取了四个角四个框进行分类和回归。 其得分分别为0.5,0.75,0.6,0.8,因此右下角得分最高,选择右下角的黑框作为目标位置的预测(这里即完成了定位任务)。 这里还有一个问题——检测位置时的框要怎么取,取多大?在上面我们是在257x257的图像中取了221x221的4个角。 以不同大小的窗口从左上角到右下角依次扫描的话,数据量会非常大。 而且,如果考虑多尺度问题的话,还需要在将图像放缩到不同水平的大小来进行计算,这样又大大增加了计算量。 如何取框这个问题可以说是目标检测的核心问题之一了,RCNN,fast RCNN以及faster RCNN对于这个问题的解决办法不断地进行优化,这个到了后面再讲。 总结一下思路: 对于一张图片,用各种大小的框将图片截取出来,输入到CNN,然后CNN会输出这个框的类别以及其位置得分。 对于检测框的选取,一般是采用某种方法先找出可能含有物体的框(也就是候选框,比如1000个候选框),这些框是可以互相重叠互相包含的,这样我们就可以避免暴力枚举所有框了。 讲完了思路,我们下面具体仔细来看看RCNN系列的实现,本篇先介绍RCNN的方法。 R-CNN相比于之前的各种目标检测算法,不仅在准确率上有了很大的提升,在运行效率上同样提升很大。 R-CNN的过程分为4个阶段: 在前面我们已经简单介绍了selective search方法,通过这个方法我们筛选出了2k左右的候选框。 然而搜索出的矩形框大小是不同的。 而在AlexNet中由于最后全连接层的存在,对于图像尺寸有固定的要求,因此在将候选框输入之前,作者对这些候选框的大小进行了统一处理——放缩到了统一大小。 文章中作者使用的处理方法有两种: (1)各向异性缩放因为图片扭曲可能会对后续CNN模型训练产生影响,于是作者也测试了各向同性缩放的方法。 有两种方法: 此外,作者对于bounding box还尝试了padding处理,上面的示意图中第1、3行就是结合了padding=0,第2、4行结果采用padding=16的结果。 经过最后的试验,作者发现采用各向异性缩放、padding=16的精度最高。 卷积神经网络训练分为两步:(1)预训练;(2)fine-tune。 先在一个大的数据集上面训练模型(R-CNN中的卷机模型使用的是AlexNet),然后利用这个训练好的模型进行fine-tune(或称为迁移学习),即使用这个预训练好的模型参数初始化模型参数,然后在目标数据集上面进行训练。 此外,在训练时,作者还尝试采用不同层数的全连接层,发现一个全连接层比两个全连接层效果要好,这可能是因为使用两个全连接层后过拟合导致的。 另一个比较有意思的地方是:对于CNN模型,卷积层学到的特征其实就是基础的共享特征提取层,类似于传统的图像特征提取算法。 而最后的全连接层学到的则是针对特定任务的特征。 譬如对于人脸性别识别来说,一个CNN模型前面的卷积层所学习到的特征就类似于学习人脸共性特征,然后全连接层所学习的特征就是针对性别分类的特征了。 最后,利用训练好的模型对候选框提取特征。 关于正负样本的问题:由于选取的bounding box不可能与人工label的完全相同,因此在CNN训练阶段需要设置IOU阈值来为bounding box打标签。 在文章中作者将阈值设置为0.5,即如果候选框bounding box与人工label的区域重叠面积大于0.5,则将其标注为物体类别(正样本),否则我们就把他当做背景类别(负样本)。 作者针对每一个类别都训练了一个二分类的SVM。 这里定义正负样本的方法与上面卷积网络训练的定义方法又不相同。 作者在文章中尝试了多种IoU阈值(0.1~0.5)。 最后通过训练发现,IoU阈值为0.3的时候效果最好(选择为0精度下降了4个百分点,选择0.5精度下降了5个百分点)。 即当IoU小于0.3的时候我们将其视为负样本,否则为正样本。 目标检测问题的衡量标准是重叠面积:许多看似准确的检测结果,往往因为候选框不够准确,重叠面积很小。 故需要一个位置精修步骤。 在实现边界回归的过程中发现了两个微妙的问题。 第一是正则化是重要的:我们基于验证集,设置λ=1000。 第二个问题是,选择使用哪些训练对(P,G)时必须小心。 直观地说,如果P远离所有的检测框真值,那么将P转换为检测框真值G的任务就没有意义。 使用像P这样的例子会导致一个无望的学习问题。 因此,只有当提案P至少在一个检测框真值附近时,我们才执行学习任务。 “附近”即,将P分配给具有最大IoU的检测框真值G(在重叠多于一个的情况下),并且仅当重叠大于阈值(基于验证集,我们使用的阈值为0.6)。 所有未分配的提案都被丢弃。 我们为每个目标类别执行一次,以便学习一组特定于类别的检测框回归器。 在测试时,我们对每个提案进行评分,并预测其新的检测框一次。 原则上,我们可以迭代这个过程(即重新评估新预测的检测框,然后从它预测一个新的检测框,等等)。 但是,我们发现迭代不会改进结果。 使用selective search的方法在测试图片上提取2000个region propasals ,将每个region proposals归一化到227x227,然后再CNN中正向传播,将最后一层得到的特征提取出来。 然后对于每一个类别,使用为这一类训练的SVM分类器对提取的特征向量进行打分,得到测试图片中对于所有region proposals的对于这一类的分数,再使用贪心的非极大值抑制(NMS)去除相交的多余的框。 再对这些框进行canny边缘检测,就可以得到bounding-box(then B-BoxRegression)。 参考: Rich feature hierarchies for accurate object detection and semantic -将CNN引入目标检测的开山之作-晓雷的文章 基于深度学习的目标检测技术演进:R-CNN、Fast R-CNN、Faster R-CNN R-CNN 论文翻译

3D目标检测(教程+代码)

探索3D目标检测:深度学习与几何学的交融在计算机视觉的前沿领域,三维目标检测如璀璨明星,赋予我们更精准的物体定位,尤其在自动驾驶等关键应用中,性能与效率的提升至关重要。然而,挑战也随之而来——数据的获取、处理和标注无疑是最具挑战性的环节。本文将带你深入理解基于PointNet++的3D目标检测技术,如何从环境搭建到模型训练,实现GPU加速的高效过程。

PointNet++:细节捕捉的基石我们首先从基础出发,探讨如何构建一个稳健的框架。通过点云数据预处理,我们构建了适合PointNet++的输入结构,以便模型能够理解并解析三维空间的复杂性。在训练阶段,我们巧妙地利用GPU的强大性能,加速模型的学习过程,确保了模型的准确性和实时性。

3D Objectron:动态与静态的全能战士接下来,我们转向3D Objectron,这款移动实时物体检测的解决方案。无论是单个主导物体的两阶段检测,还是面对多个物体的单阶段模型,Objectron凭借MobileNetv2的轻量化架构,同时处理形状预测、检测和回归,通过EPnP算法无缝衔接,实现了3D坐标和姿态的精准恢复。

解决数据难题:AR辅助的创新之路然而,精细3D标注数据的缺乏一直是瓶颈。我们打破常规,利用AR技术开发了一种新的数据管道。ARCore/ARKit的加入,使得智能手机能够实时捕捉3D点云,我们设计的AR注释工具则能快速、准确地标注3D边界框,通过分屏视图进行高效验证。对于静态对象,只需一次标注,姿态信息的实时更新使其适用于实时应用和毕业设计。

总的来说,3D目标检测是一个融合了深度学习智慧与创新技术的领域,每个环节都需要精细的设计和优化。本文提供的PointNet++实现和AR辅助的标注方法,无疑为这个领域增添了实用性和未来潜力。让我们共同期待,随着技术的不断进步,3D目标检测将在更多领域展现出强大的实力。

免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。

标签: 计算机视觉

“计算机视觉中的目标检测数据预处理-必不可少的步骤和最佳实践 (计算机视觉中的数学方法)” 的相关文章

从二维到三维的未来趋势-计算机视觉的演变 (从二维到三维教案)

从二维到三维的未来趋势-计算机视觉的演变 (从二维到三维教案)

引言 计算机视觉(CV)是人工智能(AI)领域的一个重要分支,旨在让计算机理解并解释图像和视频数据。随着技术的不断发展,CV正朝着从二维到三维的方向迈进,这将为人们带来更加真实、全面的视觉体...