深度學習ResNet模型提取影響特征

? ? ? ? 大家好,我是帶我去滑雪!

? ? ? ? 影像組學作為近年來醫學影像分析領域的重要研究方向,致力于通過從醫學圖像中高通量提取大量定量特征,以輔助疾病診斷、分型、預后評估及治療反應預測。這些影像特征涵蓋了形狀、紋理、灰度統計及波形變換等多個維度,能夠在無需侵入性操作的前提下,為臨床提供潛在的生物標志物。相比于傳統醫生的主觀評估,影像組學特征更加客觀、量化,能捕捉到肉眼難以察覺的圖像差異,從而提升疾病識別的敏感性與特異性。然而,隨著特征數量和維度的不斷增加,如何從海量數據中有效提取具有判別力的高階特征,成為制約影像組學發展的關鍵問題。傳統的手工特征提取方法依賴于專家經驗設計,往往具有局限性,難以適應復雜多變的臨床場景。此時,深度學習技術的引入為影像組學的發展帶來了新的突破。特別是卷積神經網絡(CNN)在圖像處理方面的卓越表現,為自動化特征提取提供了有力工具。

? ? ? ? ?在眾多CNN架構中,ResNet(殘差網絡)因其獨特的殘差連接機制,有效緩解了網絡加深帶來的梯度消失問題,能夠訓練更深層次的模型,從而捕捉更復雜、抽象的影像特征。相比淺層網絡或傳統方法,ResNet能自動從原始圖像中學習出更具區分性的表征,提升分類和預測性能。在影像組學應用中,ResNet不僅可以代替手工特征提取過程,還能與傳統特征融合,實現更高層次的特征整合,增強模型的泛化能力。因此,將ResNet應用于影像組學特征提取,不僅符合當前智能醫療發展的趨勢,也為精準醫學提供了強有力的技術支撐。

? ? ? ?這里使用公開的肺炎X-ray數據集,數據集包含5856張經過驗證的胸部X光片圖像,且被分為訓練集和獨立患者的測試集。數據集中所有文件已經被轉換為JPEG格式,并且已經被劃分為正常、肺炎兩個類別。

? ? ? ? ResNet模型提取影響特征代碼:

import os
import numpy as np
import pandas as pd
from glob import glob
from PIL import Image
from tqdm import tqdm
from sklearn.decomposition import PCA
from matplotlib import pyplot as pltimport torch
from torchvision.models import resnet50, ResNet50_Weights
from torchvision.models.feature_extraction import get_graph_node_names
from torchvision.models.feature_extraction import create_feature_extractor
from torchvision import transforms# 用于遍歷圖像
def images_iterator(image_dir):dataset_images = glob(f"{image_dir}/**/*.jpeg", recursive=True)for image_path in dataset_images:file_name = os.path.basename(image_path).split(".")[0]image = Image.open(image_path)# Resnet在預訓練使用的參數imagenet_mean = [0.485, 0.456, 0.406]imagenet_std = [0.229, 0.224, 0.225]# 參照Resnet預訓練時的圖像處理方式處理transform = transforms.Compose([# 轉換為 Tensor,自動將像素值歸一化到 [0, 1]transforms.ToTensor(),# 調整大小transforms.Resize((224, 224)),# resnet輸入要求通道數量為3transforms.Lambda(lambda x: x.repeat(3, 1, 1) if x.size(0) == 1 else x),# 對像素取值歸一化transforms.Normalize(mean=imagenet_mean,std=imagenet_std)])input_tensor = transform(image)input_tensor = input_tensor.unsqueeze(0)# dimensions of input_tensor are [1, 3, 224, 224]# 返回文件名和預處理之后的圖像yield file_name, input_tensordef pca_plot(csv_path="./test.csv"):# 加載提出的特征df_data = pd.read_csv(csv_path)df_x = df_data.iloc[:, 2:].to_numpy()df_y = df_data.iloc[:, 1].to_numpy()# 通過PCA算法將Resnet提取的2048個特征降為3個pca = PCA(n_components=3)x = pca.fit(df_x).transform(df_x)# 繪制圖像的一些參數設置category_names = ["NORMAL", "PNEUMONIA"]ax = plt.figure().add_subplot(projection='3d')colors = ["navy", "turquoise"]lw = 2# 繪制圖像for color, target_name in zip(colors, category_names):ax.scatter(x[df_y == target_name, 0],x[df_y == target_name, 1],x[df_y == target_name, 2],color=color, alpha=0.8,lw=lw,label=target_name)plt.title("PCA of Chest X-ray")plt.show()def main():# 加載預訓練的resnet50模型resnet50_weight = ResNet50_Weights.DEFAULTprint(resnet50_weight.transforms())resnet50_mdl = resnet50(weights=ResNet50_Weights.DEFAULT).eval()# 輸出每一層的名稱nodes_name, _ = get_graph_node_names(resnet50_mdl)# 根據輸出結果,我們可以知道resnet50在通過全連接層分類之前的網絡層名稱是flattenprint(nodes_name)return_nodes = {"flatten": "final_feature_map"}# 基于選擇的輸出和resnet50構建特征提取器feature_extracter = create_feature_extractor(resnet50_mdl, return_nodes=return_nodes)# 設定影像路徑chest_xray = os.path.join(os.getcwd(), "chest_xray")train_dataset_dir = os.path.join(chest_xray, "train")test_dataset_dir = os.path.join(chest_xray, "test")# 設定列名column_names = ["patient_id", "category"] + [f"resnet_feature_{i + 1}" for i in range(2048)]with torch.no_grad():df_train = pd.DataFrame()df_test = pd.DataFrame()# 進行訓練集印象特征提取for image_name, image_tensor in tqdm(images_iterator(train_dataset_dir)):# dimensions of out is [1, 2048]out = feature_extracter(image_tensor)out_features = out["final_feature_map"]out_features = out_features.cpu().numpy()[0]if "NORMAL" in image_name:category = "NORMAL"else:category = "PNEUMONIA"row_data = [image_name, category] + list(out_features)df_train = pd.concat([df_train, pd.Series(row_data)], ignore_index=True, axis=1)# 保存到csv文件df_train = df_train.Tdf_train.columns = column_namesdf_train.to_csv("train.csv", index=False)# 進行測試集影像特征提取for image_name, image_tensor in tqdm(images_iterator(test_dataset_dir)):# dimensions of out is [1, 2048]out = feature_extracter(image_tensor)out_features = out["final_feature_map"]out_features = out_features.cpu().numpy()[0]if "NORMAL" in image_name:category = "NORMAL"else:category = "PNEUMONIA"row_data = [image_name, category] + list(out_features)df_test = pd.concat([df_test, pd.Series(row_data)], ignore_index=True, axis=1)# 保存到csv文件df_test = df_test.Tdf_test.columns = column_namesdf_test.to_csv("test.csv", index=False)if __name__ == "__main__":main()pca_plot()

? ? ? ?輸出結果:

? ? ? ? ?使用ResNet模型提取的影像特征和傳統方法提取的影像特征是一樣的,最主要的區別只是深度學習算法提取的特征沒有名稱。獲取ResNet提取的特征之后,就可以使用其它統計分析方法進行下一步分析。下面使用PCA對提取的特征進行降維,并進行可視化:


更多優質內容持續發布中,請移步主頁查看。

? ?點贊+關注,下次不迷路!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/901467.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/901467.shtml
英文地址,請注明出處:http://en.pswp.cn/news/901467.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

DeepSeek 接入 Word 完整教程

一、前期準備 1.1 注冊并獲取 API 密鑰 訪問 DeepSeek 平臺: 打開瀏覽器,訪問 DeepSeek 官方網站(或您使用的相應平臺)。注冊并登錄您的賬戶。 創建 API 密鑰: 在用戶控制面板中,找到“API Keys”或“API…

驅動開發硬核特訓 · Day 7:深入掌握 Linux 驅動資源管理機制(Resource Management)

🔍 B站相應的視屏教程: 📌 內核:博文視頻 - 總線驅動模型實戰全解析 —— 以 PCA9450 PMIC 為例 敬請關注,記得標為原始粉絲。 🚩 在 Linux 驅動開發中,資源管理機制決定了驅動的穩定性與可靠性…

什么是TensorFlow?

TensorFlow 是由 Google Brain 團隊開發的開源機器學習框架,被廣泛應用于深度學習和人工智能領域。它的基本概念包括: 1. 張量(Tensor):在 TensorFlow 中,數據以張量的形式進行處理。張量是多維數組的泛化…

【ChCore Lab 01】Bomb Lab 拆炸彈實驗(ARM匯編逆向工程)

文章目錄 1. 前言2. 實驗代碼版本問題3. 關于使用問題4. 宏觀分析5. read_line 函數介紹6. phase_0 函數6.1. read_int 函數6.2. 回到 phase_0 函數繼續分析6.3. 驗證結果 7. phase_1 函數7.2. 驗證結果 8. phase_2 函數8.1. read_8_numbers 函數8.2. 回到 phase_2 函數繼續分析…

《Vue Router實戰教程》20.路由懶加載

歡迎觀看《Vue Router 實戰(第4版)》視頻課程 路由懶加載 當打包構建應用時,JavaScript 包會變得非常大,影響頁面加載。如果我們能把不同路由對應的組件分割成不同的代碼塊,然后當路由被訪問的時候才加載對應組件&am…

docker 多主機容器組網

一、服務器A 1、初始化Swarm集群(管理節點) docker swarm init --advertise-addr 主節點ip 2、獲取工作節點??加入Swarm集群所需的Token 和完整命令 docker swarm join-token worker 3、創建Overlay網絡 docker network create -d overlay --subnet…

rancher 解決拉取dashboard-shell鏡像失敗的問題

問題背景 在 Kubernetes 集群中部署 Rancher 后,點擊右上角的 "Shell" 按鈕時,Rancher 會動態創建一個 dashboard-shell-xxxxx Pod,用于提供 Web 終端功能。然而,由于默認鏡像 rancher/shell:v0.1.21 托管在 Docker Hu…

OpenCV day2

Matplotlib相關知識 Matplotlib相關操作: import numpy as np from matplotlib import pyplot as pltx np.linspace(0, 2 * np.pi, 100) y1 np.sin(x) y2 np.cos(x)# 使用紅色虛線,圓點標記,線寬1.5,標記大小為6繪制sin plt.p…

【網絡安全】通過 JS 尋找接口實現權限突破

未經許可,不得轉載。 本文所述所有風險點均已修復。 文章目錄 引言正文引言 以下些漏洞已被起亞方面修復;起亞方面確認,這些漏洞從未被惡意利用過。 2024年6月11日,我們發現起亞汽車存在一系列嚴重安全漏洞,攻擊者僅憑車牌號即可遠程控制車輛的核心功能。該攻擊不需要接觸…

LabVIEW 發電機勵磁系統監測與診斷

在現代工業體系中,發電機作為關鍵的電能轉換設備,其穩定運行對于電力供應的可靠性起著決定性作用。而勵磁系統作為發電機的核心控制部分,直接影響著發電機的性能和電力系統的穩定性。一旦勵磁系統出現故障,可能引發發電機電壓波動…

MacOS紅隊常用攻擊命令

MacOS紅隊常用攻擊命令 1.自動化武器2.系統信息3.服務 & 內核信息4.快捷命令5.網絡相關6.brew相關 / 軟件包相關7.高權限命令8.創建一個管理員權限的后門用戶 1.自動化武器 1、linPEAS LinPEAS 是一個腳本,用于在 Linux/Unix/MacOS 主機上搜索提權路徑 2、me…

【數據結構_8】棧和隊列

一、反向輸出鏈表元素 Ⅰ使用遞歸進行反向輸出 package stack; public class Test2 {static class Node{public String val;public Node next;//構造方法public Node(String val) {this.val val;this.next null;}}//利用遞歸來反向輸出鏈表public static void reverse(Nod…

Java 正則表達式綜合實戰:URL 匹配與源碼解析

在 Web 應用開發中,我們經常需要對 URL 進行格式驗證。今天我們結合 Java 的 Pattern 和 Matcher 類,深入理解正則表達式在實際應用中的強大功能,并剖析一段實際的 Java 示例源碼。 package com.RegExpInfo;import java.util.regex.Matcher; …

蝦分發平臺平臺優勢

平臺優勢 高效與成本優化 一鍵分發與自動化工具減少人工操作,加速測試周期;免費分發流量和透明價格套餐降低中小團隊開支。 安全與合規 自研CDN與封裝技術平衡性能與安全性,適配復雜分發場景;全球CDN網絡加速保障極速下載。 服務…

c語言學習16——內存函數

內存函數 一、memcpy使用和模擬實現1.1參數1.2 使用1.3 模擬實現 二、memmove使用和模擬實現2.1 參數2.2 使用2.3 模擬實現 三、memset使用3.1 參數3.2 使用 四、memcmp使用4.1 參數4.2 使用 一、memcpy使用和模擬實現 1.1參數 因為內存中不知道存的是什么類型的地址&#xff…

TLA:用于接觸-豐富操作的觸覺-語言-動作模型

25年3月來自三星中國研發中心、中科院自動化所和北京智源的論文“TLA: Tactile-Language-Action Model for Contact-Rich Manipulation”。 視覺-語言模型已取得顯著進展。然而,在語言條件下進行機器人操作以應對接觸-密集型任務方面,仍未得到充分探索&…

【JavaEE】SpringBoot 統一功能處理

目錄 一、攔截器1.1 使用1.1 定義攔截器1.2 注冊配置攔截器 1.2 攔截器詳解1.2.1 攔截路徑1.2.2 攔截器執?流程 1.3 適配器模式 二、統一數據返回格式2.1 簡單用法2.2 問題及解決 三、統一異常處理 一、攔截器 攔截器:攔截器是Spring框架提供的核?功能之?&#…

【前端實戰】使用 BroadcastChannel API 實現跨標簽頁通信

一、引言 在現代 Web 應用開發中,我們常常會遇到需要在不同瀏覽器標簽頁之間進行通信的需求。例如,在一個電商應用中,用戶在一個標簽頁中添加商品到購物車,希望在其他標簽頁中也能實時顯示購物車的更新信息。傳統的實現方式可能會…

微信小程序 - [渲染層錯誤] Uncaught TypeError: Cannot read property ‘D‘ of undefined

問題:[渲染層錯誤] Uncaught TypeError: Cannot read property D of undefined 解決: 該錯誤可能還是小程序的渲染模式有關系,查看app.json中是否有如下配置,刪除即可,或者降低小程序調試基礎庫版本。

【MySQL高級】事務,存儲引擎,索引(一)

Mysql高級 DQL查詢語句 反引號 模糊查詢避免%出現在開頭,會造成索引失效 order by排序先后 表名列名都需要用${},他們不能帶’’ 去重統計數量 null的運算 分組函數會自動忽略null,不用對null進行處理 截取子串substr(字段,下標…