前言今天我要和大家探讨一种可能改变脑肿瘤诊断效率的技术——基于向量数据库的智能图像搜索。脑肿瘤的诊断往往因肿瘤大小和位置的多样性而极具挑战性。通常专业神经外科医生的精准分析是保障 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_urlfhttps://api.github.com/repos/{repo_owner}/{repo_name}/contents/{folder_path}?ref{branch}# Send the request and process the responsecontentsrequests.get(api_url).json()# Create the local directory if it doesnt existfPathf./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_urlfhttps://raw.githubusercontent.com/{repo_owner}/{repo_name}/{branch}{folder_path}/{item[name]}print(file_url)rrequests.get(file_url,timeout4.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_ownerKxSystems,repo_namekdbai-samples,branchmain,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_diros.path.join(parent_dir,sub_folder)image_paths[sub_folder][os.path.join(sub_dir,file)forfileinos.listdir(sub_dir)]returnimage_pathsimage_paths_mapextract_file_paths_from_folder(data)该image_dataset_from_directory()函数使用与图像目录对应的类标签保存每个图像。这是一种快速简便的方法可以将我们的数据及其标签以正确的格式进行嵌入。datasetimage_dataset_from_directory( data, labelsinferred, label_modecategorical, shuffleFalse, seed1, image_size(224,224), batch_size1,)为了创建图像嵌入我们将使用一个已经在脑肿瘤分类问题上预先训练过的神经网络。在此示例中我们采用包含 ResNet-50 主干网络的模型。ResNet-50 是一种常用于图像分类任务的流行神经网络架构具有良好的通用性能。ResNet-50 最初是在 ImageNet 数据集上训练的——尽管 ImageNet 数据集包含数百万张图像其中包括 MRI 扫描图像但并未涵盖不同类型脑肿瘤的示例。因此我们的自定义模型是在 ResNet-50 的基础上构建的首先在 ImageNet 上进行预训练然后重新训练以适应 MRI 脑部扫描图像分类的特定需求。这实际上是迁移学习的一个典型应用——我们利用一个已为一般任务ImageNet 图像分类预训练的模型ResNet-50并将其作为解决更具体问题MRI 脑部扫描图像分类的起点。迁移学习的优势在于可以显著减少训练时间同时充分利用预训练模型中已有的特征学习能力从而提高特定任务的表现。modelfrom_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 labelsembeddingsnp.empty([len(dataset),2048])labelsnp.empty([len(dataset),4])# for each image in dataset, get its embedding and class labelfori,imageintqdm(enumerate(dataset),totallen(dataset)):embeddings[i,:]model.predict(image[0],verbose0)labels[i,:]image[1]创建嵌入后我们需要将它们存储在向量数据库中以实现高效搜索。我们可以看到通过第二个测试图像我们得到了一组相似的大脑扫描它们与第二个测试图像非常匹配并且都属于同一类别。这种结果可以帮助医生确认他们自己的假设。最后的最后感谢你们的阅读和喜欢作为一位在一线互联网行业奋斗多年的老兵我深知在这个瞬息万变的技术领域中持续学习和进步的重要性。为了帮助更多热爱技术、渴望成长的朋友我特别整理了一份涵盖大模型领域的宝贵资料集。这些资料不仅是我多年积累的心血结晶也是我在行业一线实战经验的总结。这些学习资料不仅深入浅出而且非常实用让大家系统而高效地掌握AI大模型的各个知识点。如果你愿意花时间沉下心来学习相信它们一定能为你提供实质性的帮助。这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】大模型知识脑图为了成为更好的 AI大模型 开发者这里为大家提供了总的路线图。它的用处就在于你可以按照上面的知识点去找对应的学习资源保证自己学得较为全面。经典书籍阅读阅读AI大模型经典书籍可以帮助读者提高技术水平开拓视野掌握核心技术提高解决问题的能力同时也可以借鉴他人的经验。对于想要深入学习AI大模型开发的读者来说阅读经典书籍是非常有必要的。实战案例光学理论是没用的要学会跟着一起敲要动手实操才能将自己的所学运用到实际当中去这时候可以搞点实战案例来学习。面试资料我们学习AI大模型必然是想找到高薪的工作下面这些面试题都是总结当前最新、最热、最高频的面试题并且每道题都有详细的答案面试前刷完这套面试题资料小小offer不在话下640套AI大模型报告合集这套包含640份报告的合集涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师还是对AI大模型感兴趣的爱好者这套报告合集都将为您提供宝贵的信息和启示。这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】