news 2026/8/27 14:07:05

多模态RAG破局:ImageSearch引领图像搜索新革命

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
多模态RAG破局:ImageSearch引领图像搜索新革命

前言

今天,我要和大家探讨一种可能改变脑肿瘤诊断效率的技术——基于向量数据库的智能图像搜索。

脑肿瘤的诊断往往因肿瘤大小和位置的多样性而极具挑战性。通常,专业神经外科医生的精准分析是保障 MRI 报告准确性的关键。然而,在许多发展中国家,缺乏熟练医生和系统化的肿瘤知识,这导致从 MRI 扫描中生成诊断报告的过程既耗时又繁琐。

这是否可以通过技术手段改善呢?答案可能在于自动化的向量数据库搜索系统。通过语义搜索功能,KDB.AI 提供了一种高效的解决方案。它能够根据语义上下文,从脑部扫描数据集中快速检索最相似的图像,即使查询内容与数据库内容并非完全一致。

这种能力,不仅能提升诊断效率,还可能帮助医生更精准地了解患者的病情。接下来,让我们深入探讨这一技术如何革新脑部 MRI 图像搜索的流程和应用。

在本教程中,我们将逐步演示如何将图像数据存储到向量数据库中,并通过预训练的神经网络生成称为向量嵌入的数据结构。我们将使用 KDB.AI 的向量数据库产品,来查找与输入查询图像在向量嵌入上相似的图像。

本教程将涵盖以下内容:加载图像数据,创建图像向量嵌入,将嵌入存储到 KDB.AI,查询 KDB.AI 表,搜索与目标图像相似的图像,以及删除 KDB.AI 数据库和表格。

首先获取数据

### !!! Only run this cell if you need to download the data into your environment, for example in Colab### This downloads image dataimportrequestsimportosfromPILimportImageimportio !mkdir-p./data/meningioma_tumor !mkdir-p./data/glioma_tumor !mkdir-p./data/no_tumor !mkdir-p./data/pituitary_tumordefget_github_repo_contents(repo_owner,repo_name,branch,folder_path):# Construct the API URLapi_url=f"https://api.github.com/repos/{repo_owner}/{repo_name}/contents/{folder_path}?ref={branch}"# Send the request and process the responsecontents=requests.get(api_url).json()# Create the local directory if it doesn't existfPath=f"./data/{folder_path.split('/')[-1]}"foritemincontents:# Recursively list contents of subfolderifitem['type']=='dir':get_github_repo_contents(repo_owner,repo_name,branch,f"{folder_path}/{item['name']}")# Download and save fileelifitem['type']=='file':file_url=f"https://raw.githubusercontent.com/{repo_owner}/{repo_name}/{branch}{folder_path}/{item['name']}"print(file_url)r=requests.get(file_url,timeout=4.0)r.raise_for_status()# Raises an exception for HTTP errorswithImage.open(io.BytesIO(r.content))asim:im.save(f"{fPath}/{item['name']}")# Get dataget_github_repo_contents(repo_owner='KxSystems',repo_name='kdbai-samples',branch='main',folder_path='/image_search/data')

此示例中使用的数据集是从 Kaggle 获取的脑肿瘤分类图像数据集。该数据集由 MRI 脑部扫描图像组成,根据图像中是否存在肿瘤分为四类:神经胶质瘤、黑脑膜瘤、垂体瘤和无肿瘤。

原始 Kaggle 数据集包含两个文件夹:Training 文件夹Testing 文件夹,它们均按照上述肿瘤类别对图像进行分类和组织。作为预处理步骤,我们已将原始图像的大小调整为 (224, 224, 3),其中高度和宽度均为 224,红色、绿色和蓝色像素强度分别占据 3 个通道。此外,我们重新命名了每个图像文件,使其名称对应于类别,并在其目录中为每个图像分配了唯一的 ID。

在数据后处理阶段,我们将原始数据集中的Training 文件夹用于训练 ResNet 模型,该模型将在本教程中用于生成向量嵌入。同时,经过后处理的Testing 文件夹已重命名为data,并将在本教程中使用。需要注意的是,这些数据并未被 ResNet 模型见过,因此在生成向量嵌入时可以有效避免过拟合问题。

接下来,让我们从 ‘Testing’ 目录中的不同子文件夹中提取图像文件路径。这些需要传递给下一节中的函数以创建嵌入。

defextract_file_paths_from_folder(parent_dir:str)->dict:image_paths={}forsub_folderinos.listdir(parent_dir):sub_dir=os.path.join(parent_dir,sub_folder)image_paths[sub_folder]=[os.path.join(sub_dir,file)forfileinos.listdir(sub_dir)]returnimage_paths
image_paths_map=extract_file_paths_from_folder("data")

image_dataset_from_directory()函数使用与图像目录对应的类标签保存每个图像。这是一种快速简便的方法,可以将我们的数据及其标签以正确的格式进行嵌入。

dataset=image_dataset_from_directory(` `"data",` `labels="inferred",` `label_mode="categorical",` `shuffle=False,` `seed=1,` `image_size=(224,224),` `batch_size=1,``)

为了创建图像嵌入,我们将使用一个已经在脑肿瘤分类问题上预先训练过的神经网络。在此示例中,我们采用包含 ResNet-50 主干网络的模型。ResNet-50 是一种常用于图像分类任务的流行神经网络架构,具有良好的通用性能。

ResNet-50 最初是在 ImageNet 数据集上训练的——尽管 ImageNet 数据集包含数百万张图像,其中包括 MRI 扫描图像,但并未涵盖不同类型脑肿瘤的示例。因此,我们的自定义模型是在 ResNet-50 的基础上构建的:首先在 ImageNet 上进行预训练,然后重新训练以适应 MRI 脑部扫描图像分类的特定需求。

这实际上是迁移学习的一个典型应用——我们利用一个已为一般任务(ImageNet 图像分类)预训练的模型(ResNet-50),并将其作为解决更具体问题(MRI 脑部扫描图像分类)的起点。迁移学习的优势在于可以显著减少训练时间,同时充分利用预训练模型中已有的特征学习能力,从而提高特定任务的表现。

model=from_pretrained_keras("KxSystems/mri_resnet_model")

该模型有四个层:ResNet-50、Flat 和两个 Dense 层。ResNet-50 “层” 实际上是许多层,抽象在一个名称下。这就是它包含数百万个参数的原因。Flatten 层不包含任何参数 - 其唯一目的是将 ResNet-50 的输出“展平”为 2048 维向量,称为特征向量。最后两个 Dense 层将 ResNet-50 特征向量转换为输入图像的 4 维分类。

尽管 Dense 层对于训练 ResNet-50 对我们的四种脑肿瘤类别进行分类至关重要,但我们将不再需要它们。在此示例中,我们感兴趣的是嵌入,而不是分类输出。因此,我们将通过调用pop()来删除预训练模型的最后两层。这意味着模型的新输出是 2048 维特征向量 - 输入图像的 ResNet-50 嵌入。

为了生成图像嵌入,我们将遍历数据集,通过在图像上调用model.predict()来获取 2048 维嵌入,并保存相应的类向量。

# create empty arrays to store the embeddings and labelsembeddings=np.empty([len(dataset),2048])labels=np.empty([len(dataset),4])
# for each image in dataset, get its embedding and class labelfori,imageintqdm(enumerate(dataset),total=len(dataset)):embeddings[i,:]=model.predict(image[0],verbose=0)labels[i,:]=image[1]

创建嵌入后,我们需要将它们存储在向量数据库中以实现高效搜索。

我们可以看到,通过第二个测试图像,我们得到了一组相似的大脑扫描,它们与第二个测试图像非常匹配,并且都属于同一类别。这种结果可以帮助医生确认他们自己的假设。

最后的最后

感谢你们的阅读和喜欢,作为一位在一线互联网行业奋斗多年的老兵,我深知在这个瞬息万变的技术领域中,持续学习和进步的重要性。

为了帮助更多热爱技术、渴望成长的朋友,我特别整理了一份涵盖大模型领域的宝贵资料集。

这些资料不仅是我多年积累的心血结晶,也是我在行业一线实战经验的总结。

这些学习资料不仅深入浅出,而且非常实用,让大家系统而高效地掌握AI大模型的各个知识点。如果你愿意花时间沉下心来学习,相信它们一定能为你提供实质性的帮助。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

大模型知识脑图

为了成为更好的 AI大模型 开发者,这里为大家提供了总的路线图。它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

经典书籍阅读

阅读AI大模型经典书籍可以帮助读者提高技术水平,开拓视野,掌握核心技术,提高解决问题的能力,同时也可以借鉴他人的经验。对于想要深入学习AI大模型开发的读者来说,阅读经典书籍是非常有必要的。

实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

面试资料

我们学习AI大模型必然是想找到高薪的工作,下面这些面试题都是总结当前最新、最热、最高频的面试题,并且每道题都有详细的答案,面试前刷完这套面试题资料,小小offer,不在话下

640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/27 14:02:47

STM32 MCU软件体系全解析:从开发环境到调试烧录实战

做STM32开发这些年,我有个越来越深的体会:硬件决定下限,软件决定上限。很多朋友觉得选一颗性价比高的MCU、画好原理图,项目就完成了大半,但真到跑起来才发现,工程模板乱、调试工具不会用、外设驱动调不通&a…

作者头像 李华
网站建设 2026/8/27 14:01:25

ReAct:AI智能体进化的灵魂,小白也能看懂的Agent架构指南!

简介 ReAct是AI智能体的核心架构,通过"思考-行动-观察"循环,让大模型在推理与行动间形成闭环。它结合了思维链推理能力和工具调用能力,解决了AI只会思考不会行动的"认知鸿沟"。ReAct提供可解释性、动态纠错能力和外部生态…

作者头像 李华
网站建设 2026/8/27 14:00:38

《AI提示工程:基础 ·应用·实例》AI大模型提示词工程简单易懂的入门指南,(附PDF)

前言 本书旨在探讨AI提示工程(通常简称提示工程或Prompt工程)在各领域的应用。大语言模型是人工智能领域的重要成果,在自然语言处理和生成任务中发挥着重要的作用。读者通过深了解和应用提示工程,能充分挖掘和利用大语言模型的潜力,提升效率、…

作者头像 李华
网站建设 2026/8/27 13:56:30

KKCE: 网站测速能否定位TLS证书链错误?-快快测

一、引言:为什么浏览器显示“证书有效”,网站测速却提示部分地区 TLS 握手失败? 在 HTTPS 部署中,我们常以为只要浏览器地址栏显示小锁图标,证书配置就“完美无缺”。运维在本地用 SSL Labs 测试拿到 A 评分&#xff…

作者头像 李华