基于卷積神經網絡的甲狀腺結節識別系統,resnet50,mobilenet模型【pytorch框架+python源碼】

??更多目標檢測、圖像分類識別、目標追蹤等項目可看我主頁其他文章

功能演示:

甲狀腺結節識別系統,卷積神經網絡,resnet50,mobilenet【pytorch框架,python源碼】_嗶哩嗶哩_bilibili

(一)簡介

基于卷積神經網絡的甲狀腺結節識別系統是在pytorch框架下實現的,這是一個完整的項目,包括代碼,數據集,訓練好的模型權重,模型訓練記錄,ui界面和各種模型指標圖表等。

該項目有兩個可選模型:resnet50和mobilenet,兩個模型都在項目中;GUI界面由pyqt5設計和實現,界面中給出模型預測病害的結果、概率和對應的防治措施。此項目的兩個模型可做對比分析,增加工作量。

該項目是在pycharm和anaconda搭建的虛擬環境執行,pycharm和anaconda安裝和配置可觀看教程:

超詳細的pycharm+anaconda搭建python虛擬環境_pycharm虛擬環境搭建-CSDN博客

(二)項目介紹

1. 項目結構

?????

該項目可以使用已經訓練好的模型權重,也可以自己重新訓練,自己訓練也比較簡單

以訓練resnet50模型為例:

第一步:修改model_resnet50.py的數據集路徑,模型名稱、模型訓練的輪數

???

第二步:模型訓練和驗證,即直接運行model_resnet50.py文件

第三步:使用模型,即運行gui_chinese.py文件即可通過GUI界面來展示模型效果

2. 數據結構

??????

部分數據展示:?

?????

3.GUI界面(技術棧:pyqt5+python+opencv)?
1)gui初始界面?

?

2)gui分類、識別界面?

?

?

????

4.模型訓練和驗證的一些指標及效果
?????1)模型訓練和驗證的準確率曲線,損失曲線

?

?????2)熱力圖

?

??3)準確率、精確率、召回率、F1值

?

4)模型訓練和驗證記錄

?

??

(三)代碼

由于篇幅有限,只展示核心代碼

    def main(self, epochs):# 記錄訓練過程log_file_name = './results/resnet50訓練和驗證過程.txt'# 記錄正常的 print 信息sys.stdout = Logger(log_file_name)print("using {} device.".format(self.device))# 開始訓練,記錄開始時間begin_time = time()# 加載數據train_loader, validate_loader, class_names, train_num, val_num = self.data_load()print("class_names: ", class_names)train_steps = len(train_loader)val_steps = len(validate_loader)# 加載模型model = self.model_load()  # 創建模型# 修改全連接層的輸出維度in_channel = model.fc.in_featuresmodel.fc = nn.Linear(in_channel, len(class_names))# 模型結構可視化x = torch.randn(16, 3, 224, 224)  # 隨機生成一個輸入# 模型結構保存路徑model_visual_path = 'results/resnet50_visual.onnx'# 將 pytorch 模型以 onnx 格式導出并保存torch.onnx.export(model, x, model_visual_path)  # netron.start(model_visual_path)  # 瀏覽器會自動打開網絡結構# 將模型放入GPU中model.to(self.device)# 定義損失函數loss_function = nn.CrossEntropyLoss()# 定義優化器params = [p for p in model.parameters() if p.requires_grad]optimizer = optim.Adam(params=params, lr=0.0001)train_loss_history, train_acc_history = [], []test_loss_history, test_acc_history = [], []best_acc = 0.0for epoch in range(0, epochs):# 下面是模型訓練model.train()running_loss = 0.0train_acc = 0.0train_bar = tqdm(train_loader, file=sys.stdout)# 進來一個batch的數據,計算一次梯度,更新一次網絡for step, data in enumerate(train_bar):# 獲取圖像及對應的真實標簽images, labels = data# 清空過往梯度optimizer.zero_grad()# 得到預測的標簽outputs = model(images.to(self.device))# 計算損失train_loss = loss_function(outputs, labels.to(self.device))# 反向傳播,計算當前梯度train_loss.backward()# 根據梯度更新網絡參數optimizer.step()  # 累加損失running_loss += train_loss.item()# 每行最大值的索引predict_y = torch.max(outputs, dim=1)[1]  # torch.eq()進行逐元素的比較,若相同位置的兩個元素相同,則返回True;若不同,返回Falsetrain_acc += torch.eq(predict_y, labels.to(self.device)).sum().item()# 更新進度條train_bar.desc = "train epoch[{}/{}] loss:{:.3f}".format(epoch + 1,epochs,train_loss)# 下面是模型驗證# 不啟用 BatchNormalization 和 Dropout,保證BN和dropout不發生變化model.eval()# accumulate accurate number / epochval_acc = 0.0  testing_loss = 0.0# 張量的計算過程中無需計算梯度with torch.no_grad():  val_bar = tqdm(validate_loader, file=sys.stdout)for val_data in val_bar:# 獲取圖像及對應的真實標簽val_images, val_labels = val_data# 得到預測的標簽outputs = model(val_images.to(self.device))# 計算損失val_loss = loss_function(outputs, val_labels.to(self.device))  testing_loss += val_loss.item()# 每行最大值的索引predict_y = torch.max(outputs, dim=1)[1]  # torch.eq()進行逐元素的比較,若相同位置的兩個元素相同,則返回True;若不同,返回Falseval_acc += torch.eq(predict_y, val_labels.to(self.device)).sum().item()train_loss = running_loss / train_stepstrain_accurate = train_acc / train_numtest_loss = testing_loss / val_stepsval_accurate = val_acc / val_numtrain_loss_history.append(train_loss)train_acc_history.append(train_accurate)test_loss_history.append(test_loss)test_acc_history.append(val_accurate)print('[epoch %d] train_loss: %.3f  val_accuracy: %.3f' %(epoch + 1, train_loss, val_accurate))# 保存最佳模型if val_accurate > best_acc:best_acc = val_accuratetorch.save(model.state_dict(), self.model_name)# 記錄結束時間end_time = time()run_time = end_time - begin_timeprint('該循環程序運行時間:', run_time, "s")# 繪制模型訓練過程圖self.show_loss_acc(train_loss_history, train_acc_history,test_loss_history, test_acc_history)# 畫熱力圖test_real_labels, test_pre_labels = self.heatmaps(model, validate_loader, class_names)# 計算混淆矩陣self.calculate_confusion_matrix(test_real_labels, test_pre_labels, class_names)

?????(四)總結

以上即為整個項目的介紹,整個項目主要包括以下內容:完整的程序代碼文件、訓練好的模型、數據集、UI界面和各種模型指標圖表等。

整套項目資料齊全,一步到位,省心省力。

項目運行過程如出現問題,請及時交流!

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

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

相關文章

C++--類與對象

1.封裝 封裝是c面向對象的三大特性之一 將屬性和行為作為一個整體 將屬性和行為加以權限控制 語法: class 類名{ 訪問權限: 屬性/行為 }; 訪問權限 public 公共權限 類內類外均可以訪問 protected 保護權限 類內可以訪問,類外不可以訪問 pr…

區塊鏈期末復習3:跨鏈原子交換其他加密貨幣

參考教材:《區塊鏈:技術驅動金融》 一、跨鏈原子交換(不可分割的交叉鏈互換) 1.實施步驟 假設Alice要拿1BTC交換Bob的3BCY。Alice作為交易的發起者。 1)Alice創建一個secret(一個隨機數x), 并計算其哈希…

OCR實踐-Table-Transformer

前言 書接上文 OCR實踐—PaddleOCR Table-Transformer 與 PubTables-1M table-transformer,來自微軟,基于Detr,在PubTables1M 數據集上進行訓練,模型是在提出數據集同時的工作, paper PubTables-1M: Towards comp…

重裝操作系統后 Oracle 11g 數據庫數據還原

場景描述: 由于SSD系統盤損壞,更換硬盤后重裝了操作系統,Oracle數據庫之前安裝在D盤(另一個硬盤),更換硬盤多添加一個盤符重裝系統后盤符從D變成E,也就是之前的D:/app/... 變成了現在的 E:/app/...,重新安裝…

gozero項目接入elk的配置與實戰

在 **GoZero** 項目中接入 **ELK(Elasticsearch、Logstash、Kibana)** 來進行日志管理,是一個非常強大的監控和分析方案。通過集成 ELK,你可以收集、存儲、查詢和可視化日志數據。 在這里,我將介紹如何在 GoZero 項目中…

探索PIL庫:Python圖像處理的強大工具

文章一覽 前言一、PIL圖像處理庫簡介二、基本概念2.1顏色模型2.1.1 RGB 顏色模型2.1.2 CMY色彩空間 2.2 通道2.3 圖像數據2.4 模式 三、用PIL做圖像處理3.1 圖像縮放、翻轉等處理3.1.1 圖像縮放處理3.1.2 圖像旋轉處理(1)PIL 提供的函數:(2&a…

boot工程需求

1、 關閉看門狗、初始化中斷和trap向量表,進行時鐘和外設初始化,讓芯片正常運行起來 2、 提供CAN ETH等用于通訊功能的驅動,能夠接受外部數據的傳輸請求 3、 提供Flash的讀寫與擦除驅動,設置服務來對通訊端接受到的數據更新代…

C#中的類型和函數參數傳遞

1.類型 C#中類型分為兩類:值類型和引用類型 1.值類型 所有值類型繼承自System.ValueType類(這是System.Object的一個子類) 值類型變量是直接存儲數據,值類型變量聲明后,不管是否賦值,編譯器都會為其分配…

android系統查找應用包名以及主activity:

一、查找應用的主activity: pm list packages 發現所有的包 dumpsys package 包名: 獲取所有的包信息,可以所有關鍵詞MAIN來找主activity 也可以通過下面命令找到所有activity,看下面大概率com.android.settings/.Settings為主ac…

微信V3支付報錯 平臺證書及平臺證書序列號

1.平臺證書及平臺證書序列號設置錯誤報錯: 錯誤1: Verify the response’s data with: timestamp1735184656, noncea5806b8cabc923299f8db1a174f3a4d0, signatureFZ5FgD/jtt4J99GKssKWKA/0buBSOAbWcu6H52l2UqqaJKvrsNxvodB569ZFz5G3fbassOQcSh5BFq6hvE…

在Ubuntu下通過Docker部署Mastodon服務器

嘿,朋友們,今天咱們來聊聊如何在Ubuntu上通過Docker部署Mastodon服務器。想要擁有自己的社交媒體平臺?Mastodon就是個不錯的選擇!🌐🚀 Docker與Mastodon簡介 Docker是一個開源的容器化平臺,讓…

Es搭建——單節點——Linux

Es搭建——單節點——Linux 一、安裝 下載安裝包: 官網下載地址:https://www.elastic.co/downloads/elasticsearch 上傳包到linux 切換到安裝目錄下 解壓:tar -zxvf elasticsearch-7.17.1-linux-x86_64.tar.gz 重命名安裝文件夾 mv elastics…

【機器學習】梯度下降

文章目錄 1. 梯度下降概念2. 梯度下降的技巧2.1 動態設置學習率2.2 Adagrad調整梯度2.3 隨機梯度下降(SGD)2.4 特征縮放 3. 梯度下降理論基礎 1. 梯度下降概念 梯度:Loss 對參數在某一點的偏微分,函數沿梯度的方向具有最大的變化…

數據庫在大數據領域的探索與實踐:動態存儲與查詢優化

在大數據時代,數據庫的靈活性與高效性成為數據存儲與分析的重要基石。從關系型數據庫到 NoSQL 數據庫的演進,開發者逐漸可以在結構化與非結構化數據間找到平衡。本文將聚焦大數據場景下的數據庫實踐,尤其是如何動態存儲與查詢復雜數據&#x…

【Python科研數據爬蟲】基于國家標準查詢平臺和能源標準化信息平臺的海上風電相關行業標準查詢信息爬取及處理

基于國家標準查詢平臺和能源標準化信息平臺的海上風電相關行業標準查詢信息爬取及處理 1 背景2 標準檢索平臺2.1 能源標準化信息平臺2.2 全國標準信息公共服務平臺3 標準信息數據的爬取與處理3.1 能源標準化信息平臺的信息爬取3.2 全國標準信息公共服務平臺的信息爬取3.3 標準信…

AWS Certified AI Practitioner 自學考試心得

學習目標: 考取 AWS Certified AI Practitioner 那什么是 AWS Certified AI Practitioner 認證 是基礎級的認證 比較簡單 — 學習內容: 1. AWS網站自學網站 極客時間免費課程:http://gk.link/a/12sJL 配合極客時間課程的章節測試檢驗自…

Ngnix介紹、安裝、實戰及用法!!!

一、Nginx簡介 1、Nginx概述 Nginx (“engine x”) 是一個高性能的 HTTP 和 反向代理服務器,特點是占有內存少,并發能力強,能經受高負載的考驗,有報告表明能支持高達 50,000 個并發連接數 。 2、正向代理 正向代理:如果把局…

05.HTTPS的實現原理-HTTPS的握手流程(TLS1.2)

05.HTTPS的實現原理-HTTPS的握手流程(TLS1.2) 簡介1. TLS握手過程概述2. TLS握手過程細化3. 主密鑰(對稱密鑰)生成過程4. 密碼規范變更 簡介 主要講述了混合加密流程完成后,客戶端和服務器如何共同獲得相同的對稱密鑰…

YOLO11全解析:從原理到實戰,全流程體驗下一代目標檢測

前言 一、模型介紹 二、網絡結構 1.主干網絡(Backbone) 2.頸部網絡(Neck) 3.頭部網絡(Head) 三、算法改進 1.增強的特征提取 2.優化的效率和速度 3.更高的準確性與更少的參數 4.環境適應性強 5.…

C++ 與 Python(靜態類型語言與動態語言)

C 與 Python(靜態類型語言與動態語言) 一、說明 Python和C到底有啥區別?在使用的時候有啥特殊的益處?這種問題的意義在于:如果對語言了解越清楚,越能夠更加大膽地應用哪些極限功能,從而最大限…