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; 确保项目目标的清晰性项目的成功在很大程度上取决于其目…

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"*姓名"><…

ARM 配置晶振频率

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

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

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

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

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

拒绝摆烂!C语言练习打卡第四天

&#x1f525;博客主页&#xff1a;小王又困了 &#x1f4da;系列专栏&#xff1a;每日一练 &#x1f31f;人之为学&#xff0c;不日近则日退 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、选择题 &#x1f4dd;1.第一题 &#x1f4dd;2.第二题 &#x1f4d…

Android Studio 新建module报错:No signature of method

android平台uni原生插件开发过程中&#xff0c;使用Android Studio 新增 module 报错 选择app --> create new module &#xff0c;填写相关信息 Android Studio 新建module报错&#xff1a; 原因&#xff1a;Android Studio 版本过高&#xff0c;新增了namespace&#x…

QT SSL handshake failed问题分析与解决 QT基础入门【网络编程】openssl

问题: 使用https方式进行post 和get请求时,有时候会出现SSL handshake failed的问题,其实是调用Qt QNetworkAccessManager出现的问题。 其实SSL握手是建立HTTPS连接过程的第一步。为了验证和建立连接,用户的浏览器和网站的服务器必须经过一系列检查(握手),从而建立HTTP…

40万字完整版智能矿山项目建设整体解决方案WORD

导读&#xff1a;原文《40万字完整版智能矿山项目建设整体解决方案WORD》&#xff08;获取来源见文尾&#xff09;&#xff0c;本文精选其中精华及架构部分&#xff0c;逻辑清晰、内容完整&#xff0c;为快速形成售前方案提供参考。 1.1 总体技术要求 1.1.1 核心业务架构 智…

Java算法_ 二叉树的最大深度(LeetCode_Hot100)

题目描述&#xff1a;给定一个二叉树 &#xff0c;返回其最大深度。root 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 获得更多&#xff1f;算法思路:代码文档&#xff0c;算法解析的私得。 运行效果 完整代码 /*** 2 * Author: LJJ* 3 * Date: 2023/…

【Python机器学习】实验14 手写体卷积神经网络(PyTorch实现)

文章目录 LeNet-5网络结构&#xff08;1&#xff09;卷积层C1&#xff08;2&#xff09;池化层S1&#xff08;3&#xff09;卷积层C2&#xff08;4&#xff09;池化层S2&#xff08;5&#xff09;卷积层C3&#xff08;6&#xff09;线性层F1&#xff08;7&#xff09;线性层F2 …

ant-design-vue在ios使用AUpload组件唤起了相机,HTML的 `capture` 属性

在使用ant design vue组件的上传组件AUpload的时候有一个问题&#xff0c;直接按照demo写&#xff0c;在ios上会唤起相机&#xff0c;但是实际上我们的需求是弹出选择相册/相机这个弹框。 解决办法是加一个 cupture"null"这个属性即可 <a-upload:capture"nu…