在SQL中使用AI【EVA】

news2024/11/24 19:43:17

EVA 旨在支持使用深度学习模型对结构化数据(表格、特征向量)和非结构化数据(视频、播客、PDF 等)进行操作的数据库应用程序。 它使用一系列受久经考验的关系数据库系统启发的优化,包括函数缓存、采样和基于成本的谓词重新排序,将 AI 管道加速 10-100 倍。 EVA 支持面向 AI 的类 SQL 查询语言,专为分析非结构化数据而量身定制。 它带有用于分析非结构化数据的广泛模型,包括用于图像分类、对象检测、OCR、文本情感分类、人脸检测等的模型。它完全用 Python 实现并在 Apache 许可下获得许可。

EAV的主要特性如下:

  • 🔮 使用类似 SQL 的简短查询构建更简单的 AI 驱动的应用程序
  • ⚡️ 使用以 AI 为中心的查询优化,AI 管道速度提高 10-100 倍
  • 💰 节省花在 GPU 驱动推理上的钱
  • 🚀 通过用户定义的函数为您的自定义深度学习模型提供一流的支持
  • 📦 内置缓存以消除跨查询的冗余模型调用
  • ⌨️ 对 PyTorch 和 HuggingFace 模型的一流支持
  • 🐍 可通过 pip 安装并完全在 Python 中实现

以下是一些说明性的 EVA 支持的应用程序(它们都是可以在 Google Colab 中打开的 Jupyter 笔记本):

  • 🔮 分析十字路口的交通流量
  • 🔮 检查电影中演员的情感调色板
  • 🔮 根据内容对图像进行分类
  • 🔮 使用拥抱面进行图像分割
  • 🔮 识别车牌
  • 🔮 分析社交媒体模因的毒性

1、快速开始

使用 pip 包管理器安装 EVA。 EVA 支持 Python 版本 >= 3.7。

pip install evadb

要在 Jupyter notebook 中启动并连接到 EVA 服务器,请查看这个介绍性的情绪分析 notebook:

cursor = connect_to_server()

将视频加载到 EVA 服务器上(我们使用 ua_detrac.mp4 进行说明):

LOAD VIDEO "data/ua_detrac/ua_detrac.mp4" INTO TrafficVideo;

就是这样! 现在可以对加载的视频运行查询:

SELECT id, data FROM TrafficVideo WHERE id < 5;

在视频中搜索包含汽车的帧:

SELECT id, data FROM TrafficVideo WHERE ['car'] <@ Yolo(data).labels;

在视频中搜索包含行人和汽车的帧:

SELECT id, data FROM TrafficVideo WHERE ['pedestrian', 'car'] <@ Yolo(data).labels;

搜索超过三辆汽车的帧:

SELECT id, data FROM TrafficVideo WHERE ArrayCount(Yolo(data).labels, 'car') > 3;

在具有用户定义函数 (UDF) 的查询中使用自定义深度学习模型:

CREATE UDF IF NOT EXISTS MyUDF
INPUT  (frame NDARRAY UINT8(3, ANYDIM, ANYDIM))
OUTPUT (labels NDARRAY STR(ANYDIM), bboxes NDARRAY FLOAT32(ANYDIM, 4),
        scores NDARRAY FLOAT32(ANYDIM))
TYPE  Classification
IMPL  'eva/udfs/fastrcnn_object_detector.py';

在单个查询中组合多个模型以设置有用的 AI 管道。

   -- Analyse emotions of faces in a video
   SELECT id, bbox, EmotionDetector(Crop(data, bbox)) 
   FROM MovieVideo JOIN LATERAL UNNEST(FaceDetector(data)) AS Face(bbox, conf)  
   WHERE id < 15;

EVA 使用其以 AI 为中心的查询优化器更快地运行查询。 两个关键的优化是:

  • 💾 缓存:EVA自动缓存并复用之前的查询结果(尤其是模型推理结果),消除冗余计算,减少查询处理时间。
  • 🎯 谓词重新排序:EVA 优化了查询谓词的评估顺序(例如,首先运行速度更快、更具选择性的模型),从而加快查询速度并降低推理成本。
    考虑对 🐕 图像数据集的这两个探索性查询:
  -- Query 1: Find all images of black-colored dogs
  SELECT id, bbox FROM dogs 
  JOIN LATERAL UNNEST(Yolo(data)) AS Obj(label, bbox, score) 
  WHERE Obj.label = 'dog' 
    AND Color(Crop(data, bbox)) = 'black'; 

  -- Query 2: Find all Great Danes that are black-colored
  SELECT id, bbox FROM dogs 
  JOIN LATERAL UNNEST(Yolo(data)) AS Obj(label, bbox, score) 
  WHERE Obj.label = 'dog' 
    AND DogBreedClassifier(Crop(data, bbox)) = 'great dane' 
    AND Color(Crop(data, bbox)) = 'black';

通过重用第一个查询的结果并根据可用的缓存推理结果对谓词重新排序,EVA 运行第二个查询的速度提高了 10 倍!

2、示例应用

  • 🔮 流量分析(目标检测模型)
    在这里插入图片描述

🔮 MNIST 数字识别(图像分类模型)
在这里插入图片描述

🔮 电影情感分析(人脸检测+情感分类模型)

在这里插入图片描述

🔮 车牌识别(车牌检测 + OCR 提取模型)
在这里插入图片描述

🔮 Meme 有害性分类(OCR 提取 + 毒性分类模型)
在这里插入图片描述


原文链接:AI增强的关系数据库 — BimAnt

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

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

相关文章

mybatisPlus初识

文章目录 什么是mybatisplus依赖入门案例自动填充乐观锁悲观锁乐观锁 mybatisPlus实现乐观锁批量查询根据指定条件查询 什么是mybatisplus mybatisplus是mybatis的增强工具&#xff0c;支持多种类型的数据库。 依赖 <dependency><groupId>com.baomidou</group…

我的服务器被挖矿了,原因竟是。。。

「作者简介」&#xff1a;CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」&#xff1a;对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 挖矿木马应急响应 一、什么是挖矿二、被挖矿主机现象三、挖矿木马处置思路1&#xff09;隔…

Git 使用教程:最详细、最正宗手把手教学(万字长文)

目录 一&#xff1a;Git二&#xff1a;SVN与Git的的区别三、安装Git四&#xff1a;常规操作五&#xff1a;远程仓库六&#xff1a;创建与合并分支七&#xff1a;bug分支八&#xff1a;多人协作九&#xff1a;git可视化工具 Git Git 是一种分布式版本控制系统&#xff0c;用于…

搭建免费的Plex媒体服务器 - 打造超级多媒体中心【异地远程连接】

文章目录 1.前言2. Plex网站搭建2.1 Plex下载和安装2.2 Plex网页测试2.3 cpolar的安装和注册 3. 本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 1.前言 用手机或者平板电脑看视频&#xff0c;已经算是生活中稀松平常的场景了&#xff0c;特别是各…

科普, API 是这么演变而来的

API&#xff0c;全称为 Application Programming Interface&#xff0c;中文翻译为应用程序编程接口&#xff0c;是为了方便应用程序之间的数据和功能交互而设计的一些标准方法。API 的使用让开发者能够快速、高效地构建应用程序&#xff0c;从而加速了应用程序的开发速度。在 …

第二章物理层

1.物理层的基本概念 物理层考虑的是怎样才能在连接各种计算机的传输媒体上传输数据比特流。物理层为数据链路层屏蔽了各种传输媒体的差异&#xff0c;使数据链路层只需要考虑如何完成本层的协议和服务&#xff0c;而不必考虑网络具体的传输媒体是什么。 物理层协议的主要任务 机…

21.ThreadLocal有哪些内存泄漏问题?如何避免?

ThreadLocal有以下几个内存泄漏问题&#xff1a; 长期不清理&#xff1a;如果ThreadLocal对象被长期占用&#xff0c;且不及时清理&#xff0c;会导致内存泄漏&#xff1b;使用static ThreadLocal&#xff1a;如果将ThreadLocal定义为static变量&#xff0c;就会导致它的生命周…

Java程序设计-案例:自由落体

程序模拟物体从10000米高空掉落后的反弹行为。 球体每落地一次&#xff0c;就会反弹至原高度的一半。按用户输入的弹跳次数&#xff0c;计算球体每次弹跳的高度。 实现过程&#xff1a; 1. 新建项目&#xff1b; 2. 接收 用户输入的弹跳次数&#xff1a; &#xff08;1&#…

全国快递物流 API 实现快递单号自动识别的原理解析

概述 全国快递物流 API 是一种提供快递物流单号查询的接口&#xff0c;涵盖了包括申通、顺丰、圆通、韵达、中通、汇通等600快递公司的数据。该 API 的目标是为快递公司、电商、物流平台等提供便捷、快速、准确的快递物流信息查询服务。 数据采集和处理 全国快递物流 API 的…

[深度学习]Ring All-reduce的数学性质

分布式深度学习里的通信严重依赖于规则的集群通信诸如 all-reduce, reduce-scatter, all-gather 等&#xff0c;因此&#xff0c;实现高度优化的集群通信&#xff0c;以及根据任务特点和通信拓扑选择合适的集群通信算法至关重要。 本文以数据并行经常使用的 all-reduce 为例来…

PCIe物理层链路训练和初始化(详细)总结附图文解析-PCIe专题知识(三)

目录 前言一、简介1.1 链路过程总结 二、基本概念2.1 常用字符序列2.1.1 TS1 TS2序列2.1.2 Idle序列2.1.3 FTS(Fast training sequence)序列2.1.4 SKIP序列 2.2 链路训练相关知识 三、具体过程3.1 detect状态3.2 polling状态3.3 config状态3.4 L0状态3.5 Recovery状态3.5.1 Rec…

【Git】全面详细了解开发者必备工具Git(2.0)

✍️ 作者简介: 前端新手学习中。 &#x1f482; 作者主页: 作者主页查看更多前端教学 &#x1f393; 专栏分享&#xff1a;css重难点教学 Node.js教学 从头开始学习 ajax学习 文章目录 学习目标起步——关于版本的控制  文件的版本  版本控制软件  使用版本控制软件的好…

Ubuntu 23.04 安装 Conda

Ubuntu 23.04 安装 Conda 1. 下载 Conda 安装脚本2. 运行安装脚本3. 安装完成后&#xff0c;关闭当前终端并打开新终端&#xff0c;这将激活 Conda4. 更新 Conda 至最新版本5. 添加必要的 Conda 通道以获取更多软件包6. 测试是否安装成功 1. 下载 Conda 安装脚本 wget https:/…

[Gitops--10]微服务项目部署流水线编写

微服务项目部署流水线编写 1. 部署环境说明 序号管理地址作用1192.168.31.199GitLab2192.168.31.104Harbor3192.168.31.131kubesphere 1.1 GitLab 1.2 流水线 1.2.1 创建流水线 1.2.2 创建凭证 1.2.3 创建kubeconfig凭证 这里需要注意的是,config中如果使用的是域名,那么需…

JavaWeb ( 三 ) Web Server 服务器

1.5.Web Server服务器 Web Server 服务器是一种安装在服务器主机上的应用程序, 用于处理客户端(Web浏览器)的请求&#xff0c;并返回响应内容。服务器使用HTTP(超文本传输协议)与客户机浏览器进行信息交流。 简单说就是将http协议的信息翻译成对应开发语言可以处理的对象信息。…

lombok常用的注解及使用方法

lombok是⼀种简化源码提⾼编程效率的⼯具&#xff0c;⽤于⽣成常⽤的代码。 如何使用lombok 引⼊依赖 <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${lombok.version}</ver…

【ChatGPT】吴恩达『提示工程』课程完全笔记下载

版权说明&#xff1a;『ChatGPT Prompt Engineering for Developers』是DeepLearning.AI出品的免费课程&#xff0c;版权属于DeepLearning.AI(https://www.deeplearning.ai/)。 本文是对该课程内容的翻译整理&#xff0c;只作为教育用途&#xff0c;不作为任何商业用途。 吴恩达…

Activiti7流程操作详解

一、Activiti流程操作步骤 定义流程&#xff0c;按照BPMN的规范&#xff0c;使用流程定义工具&#xff0c;用流程符号把整个流程描述出来 部署流程&#xff0c;把画好的流程定义文件&#xff0c;加载到数据库中&#xff0c;生成表的数据 启动流程&#xff0c;使用java代码来操…

4D成像雷达风口,谁在快速崛起?

4D成像雷达正进入规模量产落地的关键窗口期。 高工智能汽车注意到&#xff0c;毫米波雷达的发展某种程度上可以分为两个阶段&#xff1a;第一个阶段&#xff0c;传统毫米波雷达时代&#xff0c;市场基本被博世、大陆、安波福等国际Tier1巨头把持&#xff0c;市场格局长期稳固&…

树形结构的三级分类如何实现?

概述&#xff1a; 本三级联动分类服务端使用的是: Springboot MyBatis-plus&#xff0c;前端使用的是&#xff1a;VueElementUI&#xff0c;树形控件使用的是el-tree。本三级联动分类可以把任一拖拽子项到其它目录&#xff0c;可以添加、编辑、删除分类。 效果图&#xff1a…