최근 몇 년 동안 사람들은 기계 학습 데이터(ML 데이터)에 대한 심층적인 이해의 중요성에 대해 더 깊은 이해를 얻었습니다. 그러나 대규모 데이터 세트를 탐지하려면 일반적으로 많은 인적, 물적 투자가 필요하므로 컴퓨터 비전 분야에 널리 적용하려면 여전히 추가 개발이 필요합니다.
일반적으로 객체 감지(컴퓨터 비전의 하위 집합)에서는 경계 상자를 정의하여 이미지의 객체를 배치합니다. 객체를 식별할 수 있을 뿐만 아니라 객체의 컨텍스트, 크기 및 컨텍스트도 확인할 수 있습니다. 장면의 다른 요소와의 관계를 이해합니다. 동시에 클래스 분포, 객체 크기의 다양성, 클래스가 나타나는 공통 환경에 대한 포괄적인 이해는 평가 및 디버깅 중에 훈련 모델의 오류 패턴을 발견하는 데 도움이 됩니다. 더 많은 타겟을 선택하세요.
실제로 저는 다음과 같은 접근 방식을 취하는 경향이 있습니다.
아래에서는 Renomics Spotlight을 사용하여 대화형 객체 감지 시각화를 만드는 방법을 소개하겠습니다. 예를 들어 다음을 시도하겠습니다.
Renomics Spotlight의 목표 시각화. 출처: 작성자 작성
COCO 데이터 세트의 사람 이미지 다운로드
!pip install fiftyone ultralytics renumics-spotlight
의 재개 가능한 다운로드 기능을 활용하세요. COCO 데이터세트에서 다양한 이미지를 다운로드할 수 있습니다. 간단한 매개변수 설정으로 한 명 이상의 인물이 포함된 이미지 1,000개를 다운로드할 수 있습니다. 구체적인 코드는 다음과 같습니다.
importpandasaspdimportnumpyasnpimportfiftyone.zooasfoz# 从 COCO 数据集中下载 1000 张带人的图像dataset = foz.load_zoo_dataset( "coco-2017"、split="validation"、label_types=[ "detections"、],classes=["person"]、 max_samples=1000、dataset_name="coco-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"]), key=x.count) if len(set(x)) >1 else "only person"。)데이터를 Pandas DataFrame으로 준비합니다. 열에는 파일 경로, 경계 상자 범주, 테두리가 포함됩니다. 상자, 테두리 상자에 포함된 사람 및 이미지에 있는 사람의 컨텍스트를 지정하는 기본 카테고리(사람이 있더라도):
그런 다음 Spotlight를 통해 시각화할 수 있습니다.
From renumics import spotlightspotlight.show(df)Inspector 보기에서 보기 추가 버튼을 사용하고 테두리 보기에서 bboxs_persons 및 파일 경로를 선택하여 이미지와 함께 해당 테두리를 표시할 수 있습니다.
풍부한 데이터 삽입
Spotl
ight는 google/vit-base-patch16-224-in21k(ViT) 모델 및 UMAP 에 대한 지원을 통합하므로 파일 경로를 사용하여 다양한 삽입을 생성하면 자동으로 적용됩니다.
spotlight.show(df, embed=["filepath"])
通过上述代码,Spotlight 将各种嵌入进行计算,并应用 UMAP 在相似性地图中显示结果。其中,不同的颜色代表了主要的类别。据此,您可以使用相似性地图来浏览数据:
可用于快速识别物体的Ultralytics YOLOv8,是一套先进的物体检测模型。它专为快速图像处理而设计,适用于各种实时检测任务,特别是在被应用于大量数据时,用户无需浪费太多的等待时间。
为此,您可以首先加载预训练模型:
From ultralytics import YOLOdetection_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.boxes ifdetection.names[int(box.cls)] =="person"]), np.mean(]), "yolo_bboxs_persons":[np.array(box.xyxyn.tolist())[0] forboxindetection.boxes ifdetection.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], axis=1)spotlight.show(df_merged, embed=["filepath"])
下一步,Spotlight将再次计算各种嵌入,并应用UMAP到相似度图中显示结果。不过这一次,您可以为检测到的对象选择模型的置信度,并使用相似度图在置信度较低的集群中导航检索。毕竟,鉴于这些图像的模型是不确定的,因此它们通常有一定的相似度。
当然,上述简短的分析也表明了,此类模型在如下场景中会遇到系统性的问题:
您可以判断这些问题是否真的会影响您的人员检测目标,如果是的话,则应考虑使用额外的训练数据,来增强数据集,以优化模型在这些特定场景中的性能。
综上所述,预训练模型和 Spotlight 等工具的使用,可以让我们的对象检测可视化过程变得更加容易,进而增强数据科学的工作流程。您可以使用自己的数据去尝试和体验上述代码。
陈峻(Julian Chen),51CTO社区编辑,具有十多年的IT项目实施经验,善于对内外部资源与风险实施管控,专注传播网络与信息安全知识与经验。
原文标题: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。
위 내용은 이미지의 객체 감지를 위한 ML 데이터를 탐색하고 시각화하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!