FifthOne:计算机视觉提示和技巧
一、说明
二、什么是FifthOne?
FiftyOne 是一个开源机器学习工具集,使数据科学团队能够通过帮助他们策划高质量数据集、评估模型、查找错误、可视化嵌入并更快地投入生产来提高其计算机视觉模型的性能。
- 如果你喜欢在GitHub上看到的内容,给这个项目加一颗星。
- 开始吧!我们使几分钟内启动和运行变得容易。
- 加入 FiftyOne Slack 社区,我们总是很乐意提供帮助。
好的,让我们深入了解本周的提示和技巧!
三、省略检测实例很少的类
社区松弛成员西尔维娅施密特问道:
“当按特定字段中的值对样本进行分组时,我想省略具有数据集中很少出现的值的样本。怎么能做到这一点呢?
实现此目的的一种方法是使用来获取整个 or 对象中给定字段中每个唯一值的出现次数的计数,获取比所需截止值更频繁出现的值,并使用该方法获取包含这些值的样本。count_values()
Dataset
DatasetView
match()
例如,如果要从“野生家庭”数据集的测试拆分中获取值在数据集中出现十次以上的样本,则可以执行以下操作: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 中的单个样本进行更改时,需要通过调用样本而不是数据集来保存更改。即使数据集是持久性的,情况也是如此,即如果Dataset
DatasetView
save()
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_vals
field_name
view.tag_samples(tags)
tags
如果您知道需要循环访问 or 并对每个示例进行更改,而不是调用每个示例,则传递 to 对操作进行批处理会更有效。例如,要为数据集中的每个样本设置一个带有随机数的字段,我们可以运行:Dataset
DatasetView
save()
autosave=True
iter_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_raw
model_processed
model_raw
对于每个样本,检查是否有三个或更多具有相同类标签的对象。为了简单起见,我们假设就是这个类。如果有,则对于未标记为 s in 的所有对象,如果其类置信度分数低于某个阈值,则将其类标签设置为 in 。dog
dog
model_raw
dog
model_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 应用程序的实例。您可以使用以下方法启动特定数据集或视图的会话:Dataset
DatasetView
launch_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 社区,我们总是很乐意提供帮助。
雅各布·马克斯
相关文章:

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

Oracle19c-补丁升级报错合集(一)
前言: 本文主要介绍Oracle19c补丁升级遇到的问题,涉及安装补丁prepatch步骤,apply应用报错以及datapatch -verbose数据字典更新报错 问题一: 在执行补丁rootcrs.sh -prepatch操作时,发生执行检查命令cluutil -chkshare报错 CLSRSC-180: An …...

嵌入式:ARM Day6
作业:完成cortex-A7核UART总线实验 目的:1.输入a,显示b,将输入的字符的ASCII码下一位字符输出 2.原样输出输入的字符串 源码: uart4.h #ifndef __UART4_H__ #define __UART4_H__#include "stm32mp1xx_rcc.h" #incl…...
ClickHouse安装步骤
文章目录 ClickHouse安装步骤背景安装启动用户相关修改密码登录验证新增用户config配置文件 基本操作服务管理 ClickHouse安装步骤 背景 经过研究ClickHouse是列式数据库,下面是在Centos7.9版本单机版的安装的演示 安装 首先安装yum-utils工具包 sudo yum inst…...
Android CCodec (二十) CCodec Native服务实现分析
1、C2解码服务registerAsService注册流程 google实现CCodec的vendor默认解码服务代码路径是在frameworks/av/media/codec2/hidl/services/vendor.cpp中,而其注册的是HIDL服务,本文就对HIDL服务注册做简要分析。首先看下vendor.cpp中的代码注册流程。 int main(int /* argc *…...
Shell编程学习之while循环语句和for循环语句的应用
Shell编程中的while循环:可以类比C语言中的while循环进行学习,详见本人原创博客链接: https://blog.csdn.net/qq_41878292/article/details/132081302?spm1001.2014.3001.5502伪代码表示: while 表达式 do循环体 done用法类比S…...

【校招VIP】CSS校招考点之选择器优先级
考点介绍: 选择器是CSS的基础,也是校招中的高频考点,特别是复合选择器的执行优先级,同时也是实战中样式不生效的跟踪依据。 因为选择器的种类较多,很难直接记忆,可以考虑选择一个相对值,比如id类…...

Netty+springboot开发即时通讯系统笔记(四)终
实时性 1.线程池多线程,把消息同步给其他端和对方用户,其中数据持久化往往是最浪费时间的操作,可以使用mq异步存储,因为其他业务不需要拿着整条数据,只需要这条数据的id进行操作。 2。消息校验前置,放在t…...
java -jar 启动服务后,关闭命令窗口后服务停止
java -jar 启动服务后,关闭命令窗口后服务停止 问题:当我们用java -jar命令启动服务后,只有一直保持Xshell的窗口开启且正常连接服务器时才能访问服务,当关闭命令窗口时,服务会停止运行 解决:使用nohup命…...
Android PowerManager的使用
唤醒锁定 如果需要使 CPU 保持运行状态,以便在设备进入休眠模式之前完成某项工作,可以使用“唤醒锁定” 。 添加权限 <uses-permission android:name"android.permission.WAKE_LOCK" />设置唤醒锁定 PowerManager powerManager (Po…...

安防监控/视频集中存储/云存储平台EasyCVR v3.3增加首页告警类型
安防监控/视频集中存储/云存储EasyCVR视频汇聚平台,可支持海量视频的轻量化接入与汇聚管理。平台能提供视频存储磁盘阵列、视频监控直播、视频轮播、视频录像、云存储、回放与检索、智能告警、服务器集群、语音对讲、云台控制、电子地图、平台级联、H.265自动转码等…...

7-6 统计字符出现次数
分数 20 全屏浏览题目 切换布局 作者 C课程组 单位 浙江大学 本题要求编写程序,统计并输出某给定字符在给定字符串中出现的次数。 输入格式: 输入第一行给出一个以回车结束的字符串(少于80个字符);第二行输入一个…...

美国大模型风向速报(一)为何重视提示工程?LangChain+向量数据库+开源大模型真香...
多家,且独家来自美国的信源同时向“亲爱的数据”表示, 提示工程(Prompt Engineering)在美国大模型领域备受重视。 读者都要聊, 那就干活。 (一)开源真香 现阶段,AI开源极客大展身手&…...

excel统计函数篇2之count系列
1、COUNT(value1,[value2],…):计算参数列表中数字的个数 2、COUNTA(value1,[value2],…):计算参数列表中值的个数 联想在excel之数学函数、excel中的通配符一文中提到求和函数: SUMIF(range,ceriteria,[sum_range]):对范围内符合指定条件的…...

vue3组件多个根节点报错
打开扩展商店搜索下载 vetur 打开设置命令面板 搜索eslint 将下面的勾选取消...
基于Rust的QuickLZ压缩算法的详细实现与分析
1. 引言 QuickLZ是一种被广泛应用的高效压缩算法。在许多应用中,快速的数据压缩和解压缩是非常关键的,特别是在网络传输和存储空间有限的场景中。为了满足现代软件开发的需求,我们将使用Rust语言来实现这一算法。Rust是一种专为系统级编程而…...

next.js 创建 react ant design ts 项目
环境说明:next.js 官方文档要求node版本在16.8以上。笔者使用的 node版本是16.20.1,不要使用16.13.0,笔者在使用 node16.13.0环境时创建的 react 项目点击事件无效 next.js官网截图 next.js 官网:https://nextjs.org/ react 官网…...

无涯教程-Perl - use函数
描述 此函数将MODULE导出的所有功能(或仅LIST引用的功能)导入当前包的名称空间。有效等效于- BEGIN { require "Module.pm"; Module->import(); }也用于在当前脚本上强加编译器指令(编译指示),尽管从本质上讲它们只是模块。 请注意,use语句在编译时进行判断。在…...

(7)(7.6) 恢复任务回放
文章目录 前言 7.6.1 配置 7.6.2 工作原理 7.6.3 局限性 前言 本页介绍了什么是"任务继续时后退"功能以及如何使用该功能。 !Note 从 4.1 版起,Plane、Copter 和 Rover 均可使用此功能。 在某些应用或运行区域,为了消除冲突&…...
spark yarn 开启动态资源分配
概念 不需要指定并发,只需要指定内存, 程序在运行后会动态调节并发数量,我们只需要设置一个上线即可 在spark 配置文件设置: spark.dynamicAllocation.enabled true spark.shuffle.service.enabled true 准备shuffer jar 将spar…...

idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...

大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...

MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

均衡后的SNRSINR
本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt 根发送天线, n r n_r nr 根接收天线的 MIMO 系…...

10-Oracle 23 ai Vector Search 概述和参数
一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI,使用客户端或是内部自己搭建集成大模型的终端,加速与大型语言模型(LLM)的结合,同时使用检索增强生成(Retrieval Augmented Generation &#…...
IP如何挑?2025年海外专线IP如何购买?
你花了时间和预算买了IP,结果IP质量不佳,项目效率低下不说,还可能带来莫名的网络问题,是不是太闹心了?尤其是在面对海外专线IP时,到底怎么才能买到适合自己的呢?所以,挑IP绝对是个技…...

MySQL:分区的基本使用
目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区(Partitioning)是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分(分区)可以独立存储、管理和优化,…...
Spring Security 认证流程——补充
一、认证流程概述 Spring Security 的认证流程基于 过滤器链(Filter Chain),核心组件包括 UsernamePasswordAuthenticationFilter、AuthenticationManager、UserDetailsService 等。整个流程可分为以下步骤: 用户提交登录请求拦…...
十九、【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建
【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建 前言准备工作第一部分:回顾 Django 内置的 `User` 模型第二部分:设计并创建 `Role` 和 `UserProfile` 模型第三部分:创建 Serializers第四部分:创建 ViewSets第五部分:注册 API 路由第六部分:后端初步测…...