RAG破局:ImageSearch引領(lǐng)圖像搜索新革命)
前言今天我要和大家探討一種可能改變腦腫瘤診斷效率的技術(shù)——基于向量數(shù)據(jù)庫的智能圖像搜索。腦腫瘤的診斷往往因腫瘤大小和位置的多樣性而極具挑戰(zhàn)性。通常專業(yè)神經(jīng)外科醫(yī)生的精準(zhǔn)分析是保障 MRI 報告準(zhǔn)確性的關(guān)鍵。然而在許多發(fā)展中國家缺乏熟練醫(yī)生和系統(tǒng)化的腫瘤知識這導(dǎo)致從 MRI 掃描中生成診斷報告的過程既耗時又繁瑣。這是否可以通過技術(shù)手段改善呢答案可能在于自動化的向量數(shù)據(jù)庫搜索系統(tǒng)。通過語義搜索功能KDB.AI 提供了一種高效的解決方案。它能夠根據(jù)語義上下文從腦部掃描數(shù)據(jù)集中快速檢索最相似的圖像即使查詢內(nèi)容與數(shù)據(jù)庫內(nèi)容并非完全一致。這種能力不僅能提升診斷效率還可能幫助醫(yī)生更精準(zhǔn)地了解患者的病情。接下來讓我們深入探討這一技術(shù)如何革新腦部 MRI 圖像搜索的流程和應(yīng)用。在本教程中我們將逐步演示如何將圖像數(shù)據(jù)存儲到向量數(shù)據(jù)庫中并通過預(yù)訓(xùn)練的神經(jīng)網(wǎng)絡(luò)生成稱為向量嵌入的數(shù)據(jù)結(jié)構(gòu)。我們將使用 KDB.AI 的向量數(shù)據(jù)庫產(chǎn)品來查找與輸入查詢圖像在向量嵌入上相似的圖像。本教程將涵蓋以下內(nèi)容加載圖像數(shù)據(jù)創(chuàng)建圖像向量嵌入將嵌入存儲到 KDB.AI查詢 KDB.AI 表搜索與目標(biāo)圖像相似的圖像以及刪除 KDB.AI 數(shù)據(jù)庫和表格。首先獲取數(shù)據(jù)### !!! 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)此示例中使用的數(shù)據(jù)集是從 Kaggle 獲取的腦腫瘤分類圖像數(shù)據(jù)集。該數(shù)據(jù)集由 MRI 腦部掃描圖像組成根據(jù)圖像中是否存在腫瘤分為四類神經(jīng)膠質(zhì)瘤、黑腦膜瘤、垂體瘤和無腫瘤。原始 Kaggle 數(shù)據(jù)集包含兩個文件夾Training 文件夾和Testing 文件夾它們均按照上述腫瘤類別對圖像進行分類和組織。作為預(yù)處理步驟我們已將原始圖像的大小調(diào)整為 (224, 224, 3)其中高度和寬度均為 224紅色、綠色和藍(lán)色像素強度分別占據(jù) 3 個通道。此外我們重新命名了每個圖像文件使其名稱對應(yīng)于類別并在其目錄中為每個圖像分配了唯一的 ID。在數(shù)據(jù)后處理階段我們將原始數(shù)據(jù)集中的Training 文件夾用于訓(xùn)練 ResNet 模型該模型將在本教程中用于生成向量嵌入。同時經(jīng)過后處理的Testing 文件夾已重命名為data并將在本教程中使用。需要注意的是這些數(shù)據(jù)并未被 ResNet 模型見過因此在生成向量嵌入時可以有效避免過擬合問題。接下來讓我們從 ‘Testing’ 目錄中的不同子文件夾中提取圖像文件路徑。這些需要傳遞給下一節(jié)中的函數(shù)以創(chuàng)建嵌入。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()函數(shù)使用與圖像目錄對應(yīng)的類標(biāo)簽保存每個圖像。這是一種快速簡便的方法可以將我們的數(shù)據(jù)及其標(biāo)簽以正確的格式進行嵌入。datasetimage_dataset_from_directory( data, labelsinferred, label_modecategorical, shuffleFalse, seed1, image_size(224,224), batch_size1,)為了創(chuàng)建圖像嵌入我們將使用一個已經(jīng)在腦腫瘤分類問題上預(yù)先訓(xùn)練過的神經(jīng)網(wǎng)絡(luò)。在此示例中我們采用包含 ResNet-50 主干網(wǎng)絡(luò)的模型。ResNet-50 是一種常用于圖像分類任務(wù)的流行神經(jīng)網(wǎng)絡(luò)架構(gòu)具有良好的通用性能。ResNet-50 最初是在 ImageNet 數(shù)據(jù)集上訓(xùn)練的——盡管 ImageNet 數(shù)據(jù)集包含數(shù)百萬張圖像其中包括 MRI 掃描圖像但并未涵蓋不同類型腦腫瘤的示例。因此我們的自定義模型是在 ResNet-50 的基礎(chǔ)上構(gòu)建的首先在 ImageNet 上進行預(yù)訓(xùn)練然后重新訓(xùn)練以適應(yīng) MRI 腦部掃描圖像分類的特定需求。這實際上是遷移學(xué)習(xí)的一個典型應(yīng)用——我們利用一個已為一般任務(wù)ImageNet 圖像分類預(yù)訓(xùn)練的模型ResNet-50并將其作為解決更具體問題MRI 腦部掃描圖像分類的起點。遷移學(xué)習(xí)的優(yōu)勢在于可以顯著減少訓(xùn)練時間同時充分利用預(yù)訓(xùn)練模型中已有的特征學(xué)習(xí)能力從而提高特定任務(wù)的表現(xiàn)。modelfrom_pretrained_keras(KxSystems/mri_resnet_model)該模型有四個層ResNet-50、Flat 和兩個 Dense 層。ResNet-50 “層” 實際上是許多層抽象在一個名稱下。這就是它包含數(shù)百萬個參數(shù)的原因。Flatten 層不包含任何參數(shù) - 其唯一目的是將 ResNet-50 的輸出“展平”為 2048 維向量稱為特征向量。最后兩個 Dense 層將 ResNet-50 特征向量轉(zhuǎn)換為輸入圖像的 4 維分類。盡管 Dense 層對于訓(xùn)練 ResNet-50 對我們的四種腦腫瘤類別進行分類至關(guān)重要但我們將不再需要它們。在此示例中我們感興趣的是嵌入而不是分類輸出。因此我們將通過調(diào)用pop來刪除預(yù)訓(xùn)練模型的最后兩層。這意味著模型的新輸出是 2048 維特征向量 - 輸入圖像的 ResNet-50 嵌入。為了生成圖像嵌入我們將遍歷數(shù)據(jù)集通過在圖像上調(diào)用model.predict來獲取 2048 維嵌入并保存相應(yīng)的類向量。# 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]創(chuàng)建嵌入后我們需要將它們存儲在向量數(shù)據(jù)庫中以實現(xiàn)高效搜索。我們可以看到通過第二個測試圖像我們得到了一組相似的大腦掃描它們與第二個測試圖像非常匹配并且都屬于同一類別。這種結(jié)果可以幫助醫(yī)生確認(rèn)他們自己的假設(shè)。最后的最后感謝你們的閱讀和喜歡作為一位在一線互聯(lián)網(wǎng)行業(yè)奮斗多年的老兵我深知在這個瞬息萬變的技術(shù)領(lǐng)域中持續(xù)學(xué)習(xí)和進步的重要性。為了幫助更多熱愛技術(shù)、渴望成長的朋友我特別整理了一份涵蓋大模型領(lǐng)域的寶貴資料集。這些資料不僅是我多年積累的心血結(jié)晶也是我在行業(yè)一線實戰(zhàn)經(jīng)驗的總結(jié)。這些學(xué)習(xí)資料不僅深入淺出而且非常實用讓大家系統(tǒng)而高效地掌握AI大模型的各個知識點。如果你愿意花時間沉下心來學(xué)習(xí)相信它們一定能為你提供實質(zhì)性的幫助。這份完整版的大模型 AI 學(xué)習(xí)資料已經(jīng)上傳CSDN朋友們?nèi)绻枰梢晕⑿艗呙柘路紺SDN官方認(rèn)證二維碼免費領(lǐng)取【保證100%免費】大模型知識腦圖為了成為更好的 AI大模型 開發(fā)者這里為大家提供了總的路線圖。它的用處就在于你可以按照上面的知識點去找對應(yīng)的學(xué)習(xí)資源保證自己學(xué)得較為全面。經(jīng)典書籍閱讀閱讀AI大模型經(jīng)典書籍可以幫助讀者提高技術(shù)水平開拓視野掌握核心技術(shù)提高解決問題的能力同時也可以借鑒他人的經(jīng)驗。對于想要深入學(xué)習(xí)AI大模型開發(fā)的讀者來說閱讀經(jīng)典書籍是非常有必要的。實戰(zhàn)案例光學(xué)理論是沒用的要學(xué)會跟著一起敲要動手實操才能將自己的所學(xué)運用到實際當(dāng)中去這時候可以搞點實戰(zhàn)案例來學(xué)習(xí)。面試資料我們學(xué)習(xí)AI大模型必然是想找到高薪的工作下面這些面試題都是總結(jié)當(dāng)前最新、最熱、最高頻的面試題并且每道題都有詳細(xì)的答案面試前刷完這套面試題資料小小offer不在話下640套AI大模型報告合集這套包含640份報告的合集涵蓋了AI大模型的理論研究、技術(shù)實現(xiàn)、行業(yè)應(yīng)用等多個方面。無論您是科研人員、工程師還是對AI大模型感興趣的愛好者這套報告合集都將為您提供寶貴的信息和啟示。這份完整版的大模型 AI 學(xué)習(xí)資料已經(jīng)上傳CSDN朋友們?nèi)绻枰梢晕⑿艗呙柘路紺SDN官方認(rèn)證二維碼免費領(lǐng)取【保證100%免費】