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

news2024/11/18 19:46:21

 

一、说明

        欢迎来到我们每周的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.detections
    labels = [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 class
    if 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_label
                 det.confidence = None

        ## tag samples to look at later
        sample.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 field2

dataset = 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:          quickstart
              Media type:       image
              Num samples:      20
              Selected samples: 0
              Selected labels:  0
              Session URL:      http://localhost:5151/
              View stages:
                  1. Take(size=20, seed=None),
              Dataset:          quickstart
              Media type:       image
              Num samples:      20
              Selected samples: 0
              Selected labels:  0
              Session 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.coloradmin.cn/o/898769.html

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

相关文章

Games 103 作业一

Games 103 作业一 整个作业一的内容其实就是要自己动手实现一遍Impulse和Shape Matching这两个方法。作业中给的示例场景如下&#xff1a; 场景中有个兔子的刚体&#xff0c;我们要模拟的就是给兔子一个初始的速度&#xff0c;让其在重力的影响下&#xff0c;与两堵墙发生碰撞的…

嵌入式开发中的抽象、封装与继承

嵌入式开发中的抽象、封装与继承 ## 1 何从实现&#xff1f; OOP 是 CPP 的显著特征&#xff0c;尽管它是一种多重范式的语言 第一部分谈的是产品的实现&#xff08;implement&#xff09;而非产品的设计&#xff0c;因为对于个人开发者而言&#xff0c;往往是知道如何实现产…

港科夜闻|香港科大校长叶玉如教授、香港科大(广州)校长倪明选教授等两校领导共同出席香港科大(广州)首批本科新生见面会...

关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1、香港科大校长叶玉如教授、香港科大(广州)校长倪明选教授等两校领导共同出席香港科大(广州)首批本科新生见面会。8月16日&#xff0c;香港科大(广州)首批本科新生参加了一次具有特殊意义的见面会。香港科大、香港科大(广州…

菜单中的类似iOS中开关的样式

背景是我们有需求&#xff0c;做类似ios中开关的按钮。github上有一些开源项目&#xff0c;比如 SwitchButton&#xff0c; 但是这个项目中提供了很多选项&#xff0c;并且实际使用中会出现一些奇怪的问题。 我调整了下代码&#xff0c;把无关的功能都给删了&#xff0c;保留核…

Unsafe Filedownload

文件下载功能在很多web系统上都会出现&#xff0c;一般我们当点击下载链接&#xff0c;便会向后台发送一个下载请求&#xff0c;一般这个请求会包含一个需要下载的文件名称&#xff0c;后台在收到请求后会开始执行下载代码&#xff0c;将该文件名对应的文件response给浏览器&am…

XDR解决方案正式发布

面对日益严峻的网络安全形势&#xff0c;为了增强安全防护能力&#xff0c;不同单位经常不定期举行以真实网络目标为对象的攻防实战演练&#xff0c;旨在发现、暴露和解决安全问题&#xff0c;检验各个企业单位的网络安全防护水平和应急处置能力。 作为攻防实战防守方的蓝队&am…

WebStrom 前端项目Debug

1. 正常启动前端项目 2. 配置webStrom的JavaScript Debugger 点击Edit Configurations添加avaScript Debug填写URL 为项目启动路径配置要Debug的浏览器-remote-allow-origins* &#xff08;最重要&#xff0c;否则唤起的是一个about:blank空白页面&#xff09; 3. 启动Debug模…

[ MySQL ] — 基础增删查改的使用

目录 表的增删查改 Create 单行数据 全列插入 多行数据 全列插入 多行数据 指定列插入 不存在插入存在则更新 替换 Retrieve SELECT 列 全列查询 指定列查询 查询字段为表达式 为查询结果指定别名 结果去重 WHERE 条件 结果排序 筛选结果分页 Update De…

GPT系列总结

1.GPT1 无监督预训练有监督的子任务finetuning https://cdn.openai.com/research-covers/language-unsupervised/language_understanding_paper.pdf 1.1 Unsupervised pre-training &#xff08;1&#xff09;通过一个窗口的输入得到下一个token在目标token上的一个概率分布…

all in one之安装pve(第一章)

第一章 安装PVE PVE安装 pverufusultraISO下载地址下载地址下载地址 因为我使用的是SD卡存储&#xff0c;尝试rufus安装失败&#xff0c;建议使用 ultraISO进行镜像写入。 U盘推荐4G往上。 下载pve 我下载的pve版本是7.4 ultraISO 把镜像写入u盘 下载完成后需要把镜像文件…

小米分享 | 解密面试题:网易面试如何回答“创建线程有哪几种方式?”

大家好&#xff0c;我是你们的小米&#xff01;今天要和大家一起探讨一个在技术面试中常见的问题&#xff1a;创建线程有哪几种方式&#xff1f;这可是个经典面试题哦&#xff01;不过别担心&#xff0c;小米在这里为你详细解析&#xff0c;帮你轻松应对&#xff0c;让你在面试…

【Unity每日一记】关于五种范围检测方法的总结

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;uni…

Hlang--用Python写个编程语言-变量的实现

文章目录 前言语法规则表示次幂实现变量实现优先级实现步骤解析关键字语法解析解释器总结前言 先前的话,我们终于是把我们整个架子搭起来了,这里重复一下我们的流程,那就是,首先,我们通过解析文本,然后呢遍历文本当中的我们定义的合法关键字,然后呢,把他们封装为一个T…

基于Redis的Geo实现附近商铺搜索(含源码)

微信公众号访问地址&#xff1a;基于Redis的Geo实现附近商铺搜索(含源码) 推荐文章&#xff1a; 1、springBoot对接kafka,批量、并发、异步获取消息,并动态、批量插入库表; 2、SpringBoot用线程池ThreadPoolTaskExecutor异步处理百万级数据; 3、基于Redis的Geo实现附近商铺搜索…

34.Netty源码之Netty如何处理网络请求

highlight: arduino-light 通过前面两节源码课程的学习&#xff0c;我们知道 Netty 在服务端启动时会为创建 NioServerSocketChannel&#xff0c;当客户端新连接接入时又会创建 NioSocketChannel&#xff0c;不管是服务端还是客户端 Channel&#xff0c;在创建时都会初始化自己…

Azure文件共享

什么是Azure文件共享 Azure文件共享是一种在云中存储和访问文件的服务。它允许用户在不同的计算机、虚拟机和服务之间共享数据&#xff0c;并在应用程序中进行访问、修改和管理。 Azure文件共享可以用于各种用途&#xff0c;例如&#xff1a; 共享文件资源给多个虚拟机或服务…

P6685 可持久化动态仙人掌的直径问题

思路1&#xff1a;二分快速幂 #include<bits/stdc.h> using namespace std; #define int long long int n,m; bool check(int a,int b){int ans1;while(b){if(a>n)return false;if(b&1)ans*a;if(ans>n)return false;aa*a;b>>1;}return ans<n; } voi…

STM32CubeMx之freeRTOS定时器使用

需要修改定时器时钟 xTimerChangePeriod(tim1Handle,500,200);//发送队列等待时间 第二个参数为修改的ms xTimerStart(tim1Handle,100);//开启定时器 xTimerStop(tim1Handle,100);//关闭定时器 一定注意定时器任务优先级 要大一点 不然会使用不了

【GaussDB】 SQL 篇

建表语句 表的分类 普通的建表语句 复制表内容 只复制表结构 create table 新表名(like 源表名 including all); 如果希望注释被复制的话要指定including comments 复制索引、主键约束和唯一约束&#xff0c;那么需要指定including indexes including constraints &#xf…

AI 媒人:为什么图形神经网络比 MLP 更好?

一、说明 G拉夫神经网络&#xff08;GNN&#xff09;&#xff01;想象他们是人工智能世界的媒人&#xff0c;通过探索他们的联系&#xff0c;不知疲倦地帮助数据点找到朋友和人气。数字派对上的终极僚机。 现在&#xff0c;为什么这些GNN如此重要&#xff0c;你问&#xff1f;好…