考幼师证去哪个网站做试题,如何分析网站建设,二维码转链接在线生成器,北京网站优化服务有限公司近年来#xff0c;人们越来越认识到深入理解机器学习数据#xff08;ML-data#xff09;的必要性。不过#xff0c;鉴于检测大型数据集往往需要耗费大量人力物力#xff0c;它在计算机视觉#xff08;computer vision#xff09;领域的广泛应用#xff0c;尚有待进一步…近年来人们越来越认识到深入理解机器学习数据ML-data的必要性。不过鉴于检测大型数据集往往需要耗费大量人力物力它在计算机视觉computer vision领域的广泛应用尚有待进一步开发。
通常在物体检测Object Detection属于计算机视觉的一个子集中通过定义边界框来定位图像中的物体不仅可以识别物体还能够了解物体的上下文、大小、以及与场景中其他元素的关系。同时针对类的分布、物体大小的多样性、以及类出现的常见环境进行全面了解也有助于在评估和调试中发现训练模型中的错误模式从而更有针对性地选择额外的训练数据。
在实践中我往往会采取如下方法
利用预训练的模型或基础模型的增强功能为数据添加结构。例如创建各种图像嵌入并采用 t-SNE 或 UMAP 等降维技术。这些都可以生成相似性的地图从而方便数据的浏览。此外使用预先训练的模型进行检测也可以方便提取上下文。使用能够将此类结构与原始数据的统计和审查功能整合在一起的可视化工具。
下面我将介绍如何使用Renumics Spotlight来创建交互式的对象检测可视化。作为示例我将试着
为图像中的人物探测器建立可视化。可视化包括相似性地图、筛选器和统计数据以便浏览数据。通过地面实况Ground Truth和 Ultralytics YOLOv8 的检测详细查看每一张图像。 在Renumics Spotlight上的目标可视化。资料来源作者创建
下载COCO数据集中的人物图像
首先通过如下命令安装所需的软件包 !pip install fiftyone ultralytics renumics-spotlight利用FiftyOne的可恢复性下载功能您可以从COCO 数据集处下载各种图像。通过简单的参数设置我们即可下载包含一到多个人物的 1,000 幅图像。具体代码如下 importpandasaspd
importnumpyasnp
importfiftyone.zooasfoz
# 从 COCO 数据集中下载 1000 张带人的图像
dataset foz.load_zoo_dataset(coco-2017、splitvalidation、label_types[detections、],classes[person]、max_samples1000、dataset_namecoco-2017-person-1k-validations、
) 接着您可以使用如下代码 def xywh_too_xyxyn(bbox) convert from xywh to xyxyn format return[bbox[0], bbox[1], bbox[0] bbox[2], bbox[1] bbox[3]].
行 []
fori, samplein enumerate(dataset)labels [detection.labelfordetectioninsample.ground_truth.detections] bboxs [...bboxs [xywh_too_xyxyn(detection.bounding_box)fordetectioninsample.ground_truth.detections]bboxs_persons [bboxforbbox, labelin zip(bboxs, labels)iflabel person] 行。row.append([sample.filepath, labels, bboxs, bboxs_persons])df pd.DataFrame(row, columns[filepath,categories, bboxs, bboxs_persons])
df[major_category] df[categories].apply(lambdax:max(set(x) -set([person]), keyx.count)if len(set(x)) 1else only person。
) 将数据准备为 Pandas DataFrame其中的列包括有文件路径、边框盒bounding boxe类别、边框盒、边框盒包含的人物、以及主要类别尽管有人物以指定图像中人物的上下文 然后您可以通过 Spotlight 将其可视化 From renumics import spotlight
spotlight.show(df)您可以使用检查器视图中的添加视图按钮并在边框视图中选择bboxs_persons和filepath以显示带有图像的相应边框 嵌入丰富的数据
要使得数据具有结构性我们可以采用各种基础模型的图像嵌入即密集向量表示。为此您可以使用 UMAP 或 t-SNE 等进一步降维技术将整个图像的Vision TransformerViT嵌入应用到数据集的结构化从而提供图像的二维相似性图。此外您还可以使用预训练对象检测器的输出结果按照包含对象的大小或数量对数据进行分类进而构建数据。由于 COCO 数据集已经提供了此方面的信息因此我们完全可以直接使用它。
由于Spotlight 集成了对google/vit-base-patch16-224-in21kViT模型和UMAP 的支持因此当您使用文件路径创建各种嵌入时它将会被自动应用 spotlight.show(df, embed[filepath]) 通过上述代码Spotlight 将各种嵌入进行计算并应用 UMAP 在相似性地图中显示结果。其中不同的颜色代表了主要的类别。据此您可以使用相似性地图来浏览数据 预训练YOLOv8的结果
可用于快速识别物体的Ultralytics YOLOv8是一套先进的物体检测模型。它专为快速图像处理而设计适用于各种实时检测任务特别是在被应用于大量数据时用户无需浪费太多的等待时间。
为此您可以首先加载预训练模型 From ultralytics import YOLO
detection_model YOLO(yolov8n.pt) 并执行各种检测 detections []
forfilepathindf[filepath].tolist()detection detection_model(filepath)[0]detections.append({yolo_bboxs[np.array(box.xyxyn.tolist())[0]forboxindetection.boxes]、yolo_conf_persons: np.mean([np.array(box.conf.tolist())[0].forboxindetection.boxesifdetection.names[int(box.cls)] person]), np.mean(]),yolo_bboxs_persons[np.array(box.xyxyn.tolist())[0]forboxindetection.boxesifdetection.names[int(box.cls)] person],yolo_categories: np.array([np.array(detection.names[int(box.cls)])forboxindetection.boxes], yolo_categories: np.array(),})
df_yolo pd.DataFrame(detections) 在12gb的GeForce RTX 4070 Ti上上述过程在不到20秒的时间内便可完成。接着您可以将结果包含在DataFrame中并使用Spotlight将其可视化。请参考如下代码 df_merged pd.concat([df, df_yolo], axis1)
spotlight.show(df_merged, embed[filepath]) 下一步Spotlight将再次计算各种嵌入并应用UMAP到相似度图中显示结果。不过这一次您可以为检测到的对象选择模型的置信度并使用相似度图在置信度较低的集群中导航检索。毕竟鉴于这些图像的模型是不确定的因此它们通常有一定的相似度。 当然上述简短的分析也表明了此类模型在如下场景中会遇到系统性的问题
由于列车体积庞大站在车厢外的人显得非常渺小对于巴士和其他大型车辆而言车内的人员几乎看不到有人站在飞机的外面食物的特写图片上有人的手或手指
您可以判断这些问题是否真的会影响您的人员检测目标如果是的话则应考虑使用额外的训练数据来增强数据集以优化模型在这些特定场景中的性能。
小结
综上所述预训练模型和 Spotlight 等工具的使用可以让我们的对象检测可视化过程变得更加容易进而增强数据科学的工作流程。您可以使用自己的数据去尝试和体验上述代码。
原文标题How to Explore and Visualize ML-Data for Object Detection in Images作者Markus Stoll
链接https://itnext.io/how-to-explore-and-visualize-ml-data-for-object-detection-in-images-88e074f46361。