FifthOne:计算机视觉提示和技巧


 

一、说明

        欢迎来到我们每周的FiftyOne提示和技巧博客,我们回顾了最近在Slack,GitHub,Stack Overflow和Reddit上弹出的问题和答案。FiftyOne是一个开源机器学习工具集,使数据科学团队能够通过帮助他们策划高质量数据集、评估模型、查找错误、可视化嵌入。

二、什么是FifthOne?

        FiftyOne 是一个开源机器学习工具集,使数据科学团队能够通过帮助他们策划高质量数据集、评估模型、查找错误、可视化嵌入并更快地投入生产来提高其计算机视觉模型的性能。

 
  • 如果你喜欢在GitHub上看到的内容,给这个项目加一颗星。
  • 开始吧!我们使几分钟内启动和运行变得容易。
  • 加入 FiftyOne Slack 社区,我们总是很乐意提供帮助。

好的,让我们深入了解本周的提示和技巧!

三、省略检测实例很少的类

        社区松弛成员西尔维娅施密特问道:

        “当按特定字段中的值对样本进行分组时,我想省略具有数据集中很少出现的值的样本。怎么能做到这一点呢?

        实现此目的的一种方法是使用来获取整个 or 对象中给定字段中每个唯一值的出现次数的计数,获取比所需截止值更频繁出现的值,并使用该方法获取包含这些值的样本。count_values()DatasetDatasetViewmatch()

        例如,如果要从“野生家庭”数据集的测试拆分中获取值在数据集中出现十次以上的样本,则可以执行以下操作:name

import fiftyone as fo
import fiftyone.zoo as foz
from fiftyone import ViewField as F## load the dataset
dataset = foz.load_zoo_dataset("fiw", split="test")counts = dataset.count_values("name")
keep_names = [name for name, count in counts.items() if count > 10]## filter for samples with these names
view = dataset.match(F("name").is_in(keep_names))session = fo.launch_app(view)

名称在“野生家庭”数据集中出现十次以上的图像。

然后,您可以将此生成的视图传递到按字段中的值或所需的任何其他聚合进行分组。group_by()

在 FiftyOne 文档中了解有关 count_values()、is_in() 和使用聚合的更多信息。

四、保存对示例字段所做的更改

        社区松弛成员西尔维娅施密特问道:

        “在添加示例字段以及稍后在视图中更改这些值时,是否必须通过调用'数据集'对象来持久进行更改,或者如果数据集已经持久化,是否会保存这些更改?”save()

        好问题,西尔维娅!通常,当对 or 中的单个样本进行更改时,需要通过调用样本而不是数据集来保存更改。即使数据集是持久性的,情况也是如此,即如果DatasetDatasetViewsave()

dataset.persistent = True

        例如,可以更改快速入门数据集中第一个样本的首次检测的类标签,如下所示:

import fiftyone as fo
import fiftyone.zoo as foz## load dataset
dataset = foz.load_zoo_dataset("quickstart")## get sample
sample = dataset.first()## change label
sample.ground_truth.detections[0].label = "bear"## save changes to dataset
sample.save()

        仅在编辑数据集级元数据(如 .save()dataset.info

        但是,在某些情况下,无需显式运行即可将更改传播回数据集。其中包括方法(该方法接收值列表并将这些值写入视图中示例的字段)以及将标记添加到视图中所有示例的方法。sample.save()view.set_values(field_name, field_vals)field_valsfield_nameview.tag_samples(tags)tags

        如果您知道需要循环访问 or 并对每个示例进行更改,而不是调用每个示例,则传递 to 对操作进行批处理会更有效。例如,要为数据集中的每个样本设置一个带有随机数的字段,我们可以运行:DatasetDatasetViewsave()autosave=Trueiter_samples()random

import random
import fiftyone as fo
import fiftyone.zoo as foz## load dataset
dataset = foz.load_zoo_dataset("quickstart")## Automatically saves sample edits in efficient batches
for sample in dataset.select_fields().iter_samples(autosave=True):sample["random"] = random.random()

在 FiftyOne 文档中了解有关 set_values() 和标记示例的更多信息。

五、预测齐次图像中的类标签

        社区松弛成员乔治·皮尔斯问道:

        “处理对象的标签与示例中其他对象的标签紧密交织的应用程序的最佳方法是什么?例如,我可能有一些图像,通常是所有猫的人群,或者所有狗的人群,但不是同时包含猫和狗的人群。

        好问题,乔治!有很多方法可以处理这样的数据。一种方法是积累大量这样的示例,并根据这些数据训练模型。给定足够高质量的示例,模型应该(理论上)能够学习这些关系。

        作为仅使用现有数据的替代方法,您可以根据模型预测的输出对样本中的标签执行后处理。例如,如果模型的预测存储在样本的字段中,则可以创建新的标签字段,并根据该样本的内容填充此新字段的内容。model_rawmodel_processedmodel_raw

        对于每个样本,检查是否有三个或更多具有相同类标签的对象。为了简单起见,我们假设就是这个类。如果有,则对于未标记为 s in 的所有对象,如果其类置信度分数低于某个阈值,则将其类标签设置为 in 。dogdogmodel_rawdogmodel_processed

        这可能是这样的:

import numpy as np
import fiftyone as fo
import fiftyone.zoo as foz
from fiftyone import ViewField as F## create or load your dataset
dataset = fo.Dataset(..)## clone predictions into new field
dataset.clone_sample_field("model_raw", "model_processed"
)## set a class confidence threshold
conf_thresh = 0.3## iterate through samples in dataset
for sample in dataset.iter_samples(autosave=True):dets = sample.model_processed.detectionslabels = [det.label for det in dets]unique_labels, label_counts = np.unique(labels, return_counts=True)## find samples with at least 3 labels of same classif max(label_counts) > 2:crowd_label = unique_labels[np.argmax(label_counts)]for det in dets:if (det.label != crowd_label) and (det.confidence < conf_thresh):det.label = crowd_labeldet.confidence = None## tag samples to look at latersample.tags.append("possible homogeneous crowd")

        然后,您可以比较这些已处理模型预测与原始预测不同的标记样本,并在 FiftyOne 应用程序中对其进行检查。

        在 FiftyOne 文档中了解有关保存、保留和克隆示例字段的更多信息。

六、匹配分类结果

        社区松弛成员纳达夫问道:

        “我有一个有两种分类的数据集。在代码或应用中创建仅包含两个分类一致的示例的视图的最佳方法是什么?

        在代码中执行此操作的一种方法是使用 FiftyOne 的内置筛选和匹配功能。该方法将返回一个视图,其中包含条件为 true 的所有样本。dataset.match(my_condition)my_condition

        在您的情况下,您可以使用 ViewField 在两个分类之间创建协议条件。下面是它的外观:

import fiftyone as fo
import fiftyone.zoo as foz
from fiftyone import ViewField as F# create or load your dataset with
# classifications in field1 and field2dataset = fo.Dataset(...)
view = dataset.match(F("field1.label") == F("field2.label")
)session = fo.launch_app(view)

        如果您想要一个包含两个分类不对齐的所有样本的视图,则可以将相等运算符替换为等式运算符。==!=

        在 FiftyOne 文档中了解有关筛选的更多信息。

七、关闭会话

        社区松弛成员斯科特问道:“如何断开启动的会话?”

        在 FiftyOne 中,会话是连接到特定或 的 FiftyOne 应用程序的实例。您可以使用以下方法启动特定数据集或视图的会话:DatasetDatasetViewlaunch_app()

import fiftyone as fo
import fiftyone.zoo as foz## load dataset
dataset = foz.load_zoo_dataset("quickstart")## launch one session
session1 = fo.launch_app(dataset)## create a view
view = dataset.take(20)## launch another session
session2 = fo.launch_app(view)

        您还可以通过以下方式查看所有已注册的会话:fo.core.session.session._subscribed_sessions

defaultdict(set,{5151: {Dataset:          quickstartMedia type:       imageNum samples:      20Selected samples: 0Selected labels:  0Session URL:      http://localhost:5151/View stages:1. Take(size=20, seed=None),Dataset:          quickstartMedia type:       imageNum samples:      20Selected samples: 0Selected labels:  0Session URL:      http://localhost:5151/View stages:1. Take(size=20, seed=None)}})

        当您终止运行 FiftyOne 的 Python 进程时,所有会话都将关闭,因此通常不需要显式关闭会话。

        但是,如果您想随时终止会话,则可以使用私有方法执行此操作:_unregister_session()

from fiftyone.core.session.session import _unregister_session
_unregister_session(session1)

        在 FiftyOne 文档中了解有关会话的更多信息,包括如何在远程计算机上启动多个应用程序实例。

八、加入五十一社区!

        加入已经使用FiftyOne解决当今计算机视觉中一些最具挑战性问题的数千名工程师和数据科学家的行列!

  • 1,350+ FiftyOne Slack members
  • 2,550+ stars on GitHub
  • 3,200+ Meetup members
  • Used by 246+ repositories
  • 56+ contributors

九、下一步是什么?

  • 如果你喜欢在GitHub上看到的内容,给这个项目加一颗星。
  • 开始吧!我们使几分钟内启动和运行变得容易。
  • 加入 FiftyOne Slack 社区,我们总是很乐意提供帮助。

    雅各布·马克斯

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/44691.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解锁项目成功的关键:项目经理的结构化思维之道

1. 项目经理的核心职责 作为项目经理&#xff0c;我们的工作不仅仅是跟踪进度和管理团队。我们的角色在整个项目生命周期中都是至关重要的&#xff0c;从初始概念到最终交付。以下是项目经理的几个核心职责&#xff1a; 确保项目目标的清晰性项目的成功在很大程度上取决于其目…

深入浅出Pytorch函数——torch.nn.init.kaiming_normal_

分类目录&#xff1a;《深入浅出Pytorch函数》总目录 相关文章&#xff1a; 深入浅出Pytorch函数——torch.nn.init.calculate_gain 深入浅出Pytorch函数——torch.nn.init.uniform_ 深入浅出Pytorch函数——torch.nn.init.normal_ 深入浅出Pytorch函数——torch.nn.init.c…

【Redis】什么是缓存雪崩,如何预防缓存雪崩?

【Redis】什么是缓存雪崩&#xff0c;如何预防缓存雪崩&#xff1f; 如果缓存集中在一段时间内失效&#xff0c;也就是通常所说的热点数据集中失效 &#xff08;一般都会给缓存设定一个失效时间&#xff0c;过了失效时间后&#xff0c;该数据库会被缓存直接删除&#xff0c;从…

Linux(入门篇)

Linux&#xff08;入门篇&#xff09; Linux概述Linux是什么Linux的诞生Linux和Unix的渊源GNU/LinuxLinux的发行版Linux VS Windows Linux概述 Linux是什么 Linux是一个操作系统(OS) Linux的诞生 作者&#xff1a;李纳斯托瓦兹&#xff08;git也是他开发的&#x1f602;&am…

判断平面中两射线是否相交的高效方法

1. 简介 最近在工作中遇到判断平面内两射线是否相交的问题。 对于这个问题的解决,常规的方法是将两条射线拓展为直线,计算直线的交点,而后判断交点是否在射线上。 这种方法,在思路上较为直观,也易于理解。然后,该方法在计算量上相对较大。对于少量射线间的交点计算尚可…

Docker容器:docker的资源控制及docker数据管理

文章目录 一.docker的资源控制1.CPU 资源控制1.1 资源控制工具1.2 cgroups有四大功能1.3 设置CPU使用率上限1.4 进行CPU压力测试1.5 设置50%的比例分配CPU使用时间上限1.6 设置CPU资源占用比&#xff08;设置多个容器时才有效&#xff09;1.6.1 两个容器测试cpu1.6.2 设置容器绑…

科技资讯|苹果Vision Pro新专利曝光:可调节液态透镜

苹果公司近日申请了名为“带液态镜头的电子设备”&#xff0c;概述了未来可能的头显设计。头显设备中的透镜采用可调节的液态透镜&#xff0c;每个透镜可以具有填充有液体的透镜腔&#xff0c;透镜室可以具有形成光学透镜表面的刚性和 / 或柔性壁。 包括苹果自家的 Vision Pr…

计算机视觉之三维重建(一)(摄像机几何)

针孔摄像机 添加屏障&#xff1a; 使用针孔(o光圈针孔摄像机中心)&#xff0c;实现现实与成像一对一映射&#xff0c;减少模糊。其中针孔与像平面的距离为f(焦距)&#xff1b;虚拟像平面位于针孔与真实物体之间&#xff0c;与像平面互为倒立关系。位置映射&#xff1a;利用相似…

牛客网华为OD前端岗位,面试题库练习记录02

题目一 删除字符串中出现次数最少的字符(HJ23) JavaScript Node ACM 模式 const rl require("readline").createInterface({ input: process.stdin }); var iter rl[Symbol.asyncIterator](); const readline async () > (await iter.next()).value;void (asyn…

(牛客网)链表相加(二)

嗯哼~ 题目 描述 假设链表中每一个节点的值都在 0 - 9 之间&#xff0c;那么链表整体就可以代表一个整数。 给定两个这种链表&#xff0c;请生成代表两个整数相加值的结果链表。 数据范围&#xff1a;0 ≤ n,m ≤ 1000000&#xff0c;链表任意值 0 ≤ val ≤ 9 要求&#x…

博客系统之功能测试

博客系统共有&#xff1a;用户登录功能、发布博客功能、查看文章详情功能、查看文章列表功能、删除文章功能、退出功能 1.登录功能&#xff1a; 1.1测试对象&#xff1a;用户登录 1.2测试用例 方法&#xff1a;判定表 用例 编号 操作步骤预期结果实际结果截图1 1.用户名正确…

vue3+elementPlus table里添加输入框并提交校验

<template><div><el-form :model"info" ref"forms"><el-tableref"tableRef":data"info.data"border><el-table-column align"center" property"name" label"*姓名"><…

vite项目 postcss-px-to-viewport适配vant

关于vite项目postcss-px-to-viewport适配vant的问题&#xff0c;网上很多文章都已经过时或者都是基于webpack的配置&#xff0c;很少vite相关的配置教程&#xff0c;故做一下笔记希望帮到正在踩坑的同学。 postcss-px-to-viewport插件已经抛弃使用请使用postcss-px-to-viewpor…

ARM 配置晶振频率

文章目录 前言串口乱码问题定位内核修改晶振频率uboot 修改晶振频率番外篇 前言 上篇文章《ARM DIY 硬件调试》介绍了 DIY ARM 板的基础硬件焊接&#xff0c;包括电源、SOC、SD 卡座等&#xff0c;板子已经可以跑起来了。 但是发现串口乱码&#xff0c;今天就来解决串口乱码问…

阿里云 K8s PVC 绑定 StorageClass 申领 PV 失败

错误场景: 因为阿里云没有默认的 StorageClass 我也懒得更新&#xff0c;所以就创建了一个类型是云盘的 StorageClass。 但是在创建 PVC 之后发现一直是 Pending 状态就查询了一下日志&#xff0c;然后看到很多下面这种错误 liuduiMacBookM1Pro ~ % kubectl describe pvc graf…

1043:整数大小比较

【题目描述】 输入两个整数&#xff0c;比较它们的大小。若x>y&#xff0c;输出>&#xff1b;若xy&#xff0c;输出&#xff1b;若x<y&#xff0c;输出<。 【输入】 一行&#xff0c;包含两个整数x和y&#xff0c;中间用单个空格隔开。0≤x<232, −231≤y<…

sql update执行返回0,能否判断数据不存在

答案&#xff1a;不能。 update执行返回0的情况 1、没有找到需要更新的数据&#xff0c;就是这条记录不存在 例如&#xff1a;where后面的条件是id0&#xff0c;那这条记录肯定是不存在的&#xff0c;返回结果是0 2、更新时的数据和要更新的数据完全一致时 例如&#xff1a;更…

kafka使用心得(二)

kafka进阶 消息顺序保证 Kafka它在设计的时候就是要保证分区下消息的顺序&#xff0c;也就是说消息在一个分区中的顺序是怎样的&#xff0c;那么消费者在消费的时候看到的就是什么样的顺序。 消费者和分区的对应关系 参考这篇文章。 分区文件 一个分区对应着log.dirs下的…

【python办公自动化】PysimpleGUI中更新Listbox组件选定元素的格式

pysimplegui中更新Listbox组件选定元素的格式 背景问题解决创建窗口布局创建窗口背景 在进行打分时候,由于打分的指标较多,因此为了辨别已经打完分数的指标,可以考虑对打过分的指标进行标记,故可以采用格式修改的方法调整,比如添加一些特殊标记 问题解决 import PySim…

在Orangepi5开发板3588s使用opencv获取摄像头画面

先感谢香橙派群的管理员耐心指导&#xff0c;经过不断的调试修改最后成功通过opencv调用mipi摄像头获取画面 就记录分享一下大概步骤希望大家少踩点坑&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 我用的固件系统是ubuntu2022.0.4 固件是&#x…