實時瞳孔分割算法-RITnet論文復現

源代碼在這里RITnet-Github

????????這個模型比較小眾,我們實驗室使用了官方提供的模型進行瞳孔中心位置提取,以實現視線追蹤,效果很好


一、數據集準備

????????RITnet也是那一屆openEDS數據集挑戰賽的冠軍模型,openEDS數據集可以從Kaggle上下載,一共9G,大家不用去找openEDS論文里提供的數據集下載地址,那個需要Facebook賬戶去進行申請,很麻煩

????????從Kaggle上下載下來的數據集長這樣:

????????只需要openEDS,它包括了以下內容:

????????可以看到有很多文件夾,但代碼中只用到了traintest文件夾中的文件,所以其它的先不用管

看看瞳孔圖像的樣子:

展示了上述內容后,相信大家對數據集這塊有足夠的了解了!最重要的一點:只需要把Semantic_Segmentation_Dataset拷貝進代碼項目中(不拷貝也行,重定義一下路徑就好了),文件擺放格式什么的都不用改,妥妥的保姆級


二、環境配置

????????我所用的 IDE 是 Pycharm 。從 Github 上下載下來的項目文件中包含2個對項目所需環境的描述文件:requirements.txt、environment.yml,前者只是記錄了項目所用的包的名字,并沒有各個包的具體版本信息;后者是一種便捷的環境打包文件,記錄的就是原作者運行代碼時的全部環境,但我在淺淺嘗試之后就放棄了這種方法,因為我不會而且也用不好

????????所以我自己新創建了一個 conda 虛擬環境,對新手更友好,條理也非常清晰!

1.創建 python = 3.8 的 Anaconda 虛擬環境

????????沒有經驗的同學可以參考這篇帖子:從零開始創建conda環境及pycharm配置項目環境

????????打開 Anaconda Prompt,使用下面這條指令就能創建新的虛擬環境了

# Success 是自定義的環境名,python=3.8也是自定義的python版本
conda create -n Success python=3.8

????????再使用下面這條指令看看環境有沒有創建好,出現下圖就是好消息

activate Success

這個環境的具體位置在你之前下載的 Anaconda 文件夾下,看看我的:

Anaconda2023 是我當時在安裝 Anaconda 時新建的文件夾名,而 envs 中就存放著我們建立過的所有虛擬環境啦

創建好之后,把這個環境配置進?Pycharm 里。步驟為:

左上角 -> 設置

項目:RITNet -> Python解釋器 -> 添加解釋器 -> 添加本地解釋器

Virtualenv環境 -> 上面提到的 Anaconda 所處位置 -> envs -> 虛擬環境文件夾 -> python.exe(目標文件),選定 python.exe 點“確定”就好了

右下角變成這樣就大功告成了

2.在當前虛擬環境中安裝所需包

????????這塊是最復雜最關鍵的部分,所用篇幅較長

a.Pytorch-GPU 安裝

? ? ? ? 在 RITnet 項目中用到了 GPU 來加速模型訓練,需要安裝 GPU 版本的 Pytorch,這里有很多坑,但經過我長時間的摸索已經總結出一套必殺技:

????????大家應該經常在網上看到這2條指令 nvcc -V 、nvidia-smi 它們都是用來查看自己電腦上所安裝的CUDA版本的,區別在于 nvidia-smi?所查看是自己電腦本身的 CUDA 版本,而?nvcc -V 指令只有你的電腦上有 Pytorch 時才能運行成功(不論GPU版本還是CPU版本),這2條語句的差別很大,而我們只需使用?nvidia-smi 來查看自己電腦的 CUDA 信息即可,如:

????????我電腦的 CUDA 版本是 12.3,我們需要根據它來安裝 CUDA ,進而安裝對應版本的 Pytorch-GPU.

????????CUDA 安裝總體可以參考這篇帖子:全網最詳細的安裝pytorch GPU方法全網最詳細之如何安裝gpu版的pytorch,但別完全參考,有小坑

?????而在安裝 CUDA 時我遇到了 “NVIDIA 安裝程序失敗的問題”,很棘手,但解決了,解決方式如下:

????????在選擇組件(自定義安裝)的時候,將 CUDA 中的 Nsight VSEVisual Studio Integration 取消勾選,后選擇下一步,即可安裝成功。此招式來自NVIDIA安裝CUDA在安裝階段提示NVIDIA安裝程序失敗超級有用(給磕了)


????????安裝好 CUDA 后,不要使用 pip install 指令直接從 Pytorch 官網下載 GPU 版本的 Pytorch,我下了超多次,結果下下來的都是 CPU 版本的,參考這個全網最詳細之如何安裝gpu版的pytorch

????????我將安裝的 CUDA 和 torch 等包的對應關系放進下方的表格里,完全按照這個來就行

CUDA12.0.0
torch2.0.0
torchvision0.15.1
torchaudio2.0.1

? ? ? ?點擊進入下載地址,我們需要根據上述表格下載以下3個文件(需要VPN,不然超慢)

torch 下載

torchvision 下載

torchaudio 下載

????????將上述3個文件都下載好后,進入文件所在目錄(切記),在上面的搜索欄里輸入 cmd,然后回車即可進入 dos

????????在 dos 里激活剛剛創建好的虛擬環境后,使用下面這3行指令將上述3個文件都安裝進我們的虛擬環境

pip install "torch-2.0.0+cu118-cp38-cp38-win_amd64.whl"pip install "torchvision-0.15.1+cu118-cp38-cp38-win_amd64.whl"pip install "torchaudio-2.0.1+cu118-cp38-cp38-win_amd64.whl"

????????結束了,一切都結束了!最終用下面這段測試代碼美美驗證一下 Pytorch-GPU 到底裝好沒有!

import torch    # 測試是否安裝完成torch模塊
import torchvision  # 測試是否安裝完成torchvision模塊
import osif __name__ == '__main__':print("安裝torch版本為: ", torch.__version__)print("是否安裝完成Pytorch-GPU : ", torch.cuda.is_available())arr = torch.zeros(5, 5)print("生成全零矩陣:\n", arr)

????????可喜可賀,實在是可喜可賀!

b.其它包的安裝

????????全部使用 pip 進行安裝(一定要關掉 VPN)

pip install scikit-learn
pip install numpy
pip install opencv-python  # 即cv2
pip install pillow
pip install matplotlib
pip install tqdm
pip install torchsummary
pip install argparse

三、代碼調整

????????想要運行 train.py,我們還需對其它 .py 文件進行調整.由于給原始瞳孔圖像添加星爆圖像這部分一直報錯(維度問題),嘗試解決了很多次,但都沒能成功解決,于是把這部分圖像預處理代碼注釋掉了,如果后續有哪位朋友解決了這個問題,還請和大家分享分享!

????????1.將 dataset.py 中的 Starburst_augment 類全部注釋,同時在?IrisDataset 類中的 __getitem__ 函數中注釋掉調用 Starburst_augment 類的代碼

????????2.將 __init__中的一行代碼轉移到__getitem__?中去.具體操作見下方:

class IrisDataset(Dataset):def __init__(self, filepath, split='train', transform=None, **args):self.transform = transformself.filepath = osp.join(filepath, split)self.split = splitlistall = []for file in os.listdir(osp.join(self.filepath, 'images')):if file.endswith(".png"):listall.append(file.strip(".png"))self.list_files = listallself.testrun = args.get('testrun')# 將下面這行代碼換個位置,換到下方的__getitem__函數中去self.clahe = cv2.createCLAHE(clipLimit=1.5, tileGridSize=(8, 8))def __len__(self):if self.testrun:return 10return len(self.list_files)def __getitem__(self, idx):# 從init移過來的self.clahe = cv2.createCLAHE(clipLimit=1.5, tileGridSize=(8, 8))imagepath = osp.join(self.filepath, 'images', self.list_files[idx] + '.png')pilimg = Image.open(imagepath).convert("L")H, W = pilimg.width, pilimg.height

????????整體復現流程就是這樣,如果大家自己在復現過程中遇到解決不了的問題可以來私信我(復現論文真的好麻煩好累但別無它選

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

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

相關文章

數據結構--關鍵路徑

事件v1-表示整個工程開始(源點:入度為0的頂點) 事件v9-表示整個工程結束(匯點:出度為0的頂點) 關鍵路徑:路徑長度最長的路徑 求解關鍵路徑問題(AOE網) 定義四個描述量 …

網絡網絡層之(6)ICMPv4協議

網絡網絡層之(6)ICMPv4協議 Author: Once Day Date: 2024年6月2日 一位熱衷于Linux學習和開發的菜鳥,試圖譜寫一場冒險之旅,也許終點只是一場白日夢… 漫漫長路,有人對你微笑過嘛… 全系列文章可參考專欄: 通信網絡技術_Once-Day的博客-CS…

華為OD刷題C卷 - 每日刷題 7(字符串分隔(二)、歡樂的周末)

兩段代碼分別解決了兩個不同的問題,下面是對它們的概述: 1、(字符串分隔(二)): 這段代碼是解決“字符串分隔(二)”的問題。它提供了一個Java類Main,其中包含…

Java面試題-Tomcat高級面試題

Tomcat 9相較于之前的版本有哪些主要的新特性? Tomcat 9相較于之前的版本,主要有以下幾個新特性: HTTP/2支持:Tomcat 9引入了對HTTP/2協議的支持,這可以顯著提高網站的性能和安全性。HTTP/2協議允許單個連接上進行多…

多語言for循環遍歷總結

多語言for循環遍歷總結 工作中經常需要遍歷對象,但不同編程語言之間存在一些細微差別。為了便于比較和參考,這里對一些常用的遍歷方法進行了總結。 JAVA 數組遍歷 Test void ArrayForTest() {String[] array {"劉備","關羽", &…

大模型備案項目補貼政策一覽【保持更新】

大模型項目、AI類項目、大模型備案通過后等一籃子財政補貼政策 上海市 加快創新體系構建 1. 提升自主創新水平:對引領大模型發展或取得顛覆性突破的項目,最高給予1000萬元補貼支持。 2. 加強算力資源保障:實施算力伙伴計劃,對…

力扣174題動態規劃:地下城游戲(含模擬面試)

?????? 歡迎來到我的博客。希望您能在這里找到既有價值又有趣的內容,和我一起探索、學習和成長。歡迎評論區暢所欲言、享受知識的樂趣! 推薦:數據分析螺絲釘的首頁 關注微信公眾號 數據分析螺絲釘 免費領取價值萬元的python/java/商業…

Java進階學習筆記36——算法

什么是算法? 解決某個實際問題的過程和方法。 1)導航; 2)滴滴打車; 3)抖音; 不同的算法,效率高、性能好! 在Java中,代碼已經幫我們寫好了,但為…

雪花算法詳解及源碼分析

雪花算法的簡介: 雪花算法用來實現全局唯一ID的業務主鍵,解決分庫分表之后主鍵的唯一性問題,所以就單從全局唯一性來說,其實有很多的解決方法,比如說UUID、數據庫的全局表的自增ID 但是在實際的開發過程中&#xff0…

離散點云擬合三維平面參數推導(基于最小二乘)

1、背景介紹 實際中,很多人工構造物是由平面結構構造而成,如下圖所示,為一典型的由多個平面組成的人工構筑物。因此,根據離散點擬合成平面,獲取擬合平面方程,是點云數據處理中非常常見的數據處理操作。 2、…

鴻蒙Ability Kit(程序框架服務)【ExtensionAbility組件】

ExtensionAbility組件 ExtensionAbility組件是基于特定場景(例如服務卡片、輸入法等)提供的應用組件,以便滿足更多的使用場景。 每一個具體場景對應一個[ExtensionAbilityType],開發者只能使用(包括實現和訪問&#…

WPS的excel表格設置了編輯權限,要怎么取消?

在日常生活和工作中,我們經常會使用WPS Office辦公軟件來處理各種文檔,其中WPS Excel表格是我們進行數據處理和分析的重要工具。為了保護表格中的數據不被隨意修改,我們有時會設置編輯權限。然而,隨著時間的推移或需求的變更&…

基于FPGA的SystemVerilog練習

文章目錄 一、認識SystemVerilogSystemVerilog的語言特性SystemVerilog的應用領域SystemVerilog的優勢SystemVerilog的未來發展方向 二、流水燈代碼流水燈部分testbench仿真文件 三、用systemVerilog實現超聲波測距計時器測距部分led部分數碼管部分采樣部分頂層文件引腳綁定效果…

魯教版七年級數學下冊-筆記

文章目錄 第七章 二元一次方程組1 二元一次方程組2 解二元一次方程組3 二元一次方程組的應用4 二元一次方程與一次函數5 三元一次方程組 第八章 平行線的有關證明1 定義與命題2 證明的必要性3 基本事實與定理4 平行線的判定定理5 平行限的性質定理6 三角形內角和定理 第九章 概…

dpdk uio整體分析及網卡加載

參考:https://zhuanlan.zhihu.com/p/477600165 一、Linux內核知識點 1. __attribute__ constructor/destructor (1)若函數被設定為constructor屬性,則該函數會在 main()函數執行之前被自動的執行。 (2)若函數被設定為destructor屬性,則該函數會在main()函數執…

開發和滲透偷懶利器utools

目錄 1.前言 1.1 工具簡介 1.2 核心特性 1.3 使用場景 1.4 安裝與使用 1.4.1 下載: 1.4.2 安裝: 1.4.3 配置: 1.4.4 插件市場: 2.懶狗插件介紹 基本介紹 2.1 數據模擬 2.2 隨機生成虛假數據 2.3 API市場 2.4 Hoppscot…

【十二】圖解mybatis日志模塊之設計模式

圖解mybatis日志模塊之設計模式 概述 最近經常在思考研發工程師初、中、高級工程師以及系統架構師各個級別的工程師有什么區別,隨著年齡增加我們的技術級別也在提升,但是很多人到了高級別反而更加憂慮,因為it行業35歲年齡是個坎這是行業里的共…

一文讀懂數據庫中的DB、DBMS、DBS、DBAS

目前數據庫的應用非常廣泛,幾乎各行各業都在直接或間接地與數據庫打交道,例如網上購物、銀行業務、鐵路購票和酒店住宿等。在實際應用中,數據庫、數據庫管理系統、數據庫系統和數據庫應用系統經常被統稱為數據庫,而實質上這4個概念是不一樣的,它們具有不同的定義和含義。下…

暴力數據結構之排序大雜燴

1. 冒泡排序:O(N^2) 邏輯解析: 冒泡排序并沒有什么實際意義,但是有教學意義,相信大部分小白在學習的初期第一個接觸的排序就是冒泡排序。那么接下來我們了解一下他的底層邏輯: 冒泡排序顧名思義就是將最大&#xff08…

PID——調參的步驟

第一步:確定比例增益P 確定比例增益 P 時,首先去掉 PID 的積分項和微分項,一般是令 Ti0、 Td0(具體見PID 的參數設定說明),使PID 為純比例調節。 輸入設定為系統允許的最大值60%~70%,由0逐漸加…