实时瞳孔分割算法-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.mzph.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…

大模型备案项目补贴政策一览【保持更新】

大模型项目、AI类项目、大模型备案通过后等一篮子财政补贴政策 上海市 加快创新体系构建 1. 提升自主创新水平:对引领大模型发展或取得颠覆性突破的项目,最高给予1000万元补贴支持。 2. 加强算力资源保障:实施算力伙伴计划,对…

力扣174题动态规划:地下城游戏(含模拟面试)

❤️❤️❤️ 欢迎来到我的博客。希望您能在这里找到既有价值又有趣的内容,和我一起探索、学习和成长。欢迎评论区畅所欲言、享受知识的乐趣! 推荐:数据分析螺丝钉的首页 关注微信公众号 数据分析螺丝钉 免费领取价值万元的python/java/商业…

Java进阶学习笔记36——算法

什么是算法? 解决某个实际问题的过程和方法。 1)导航; 2)滴滴打车; 3)抖音; 不同的算法,效率高、性能好! 在Java中,代码已经帮我们写好了,但为…

离散点云拟合三维平面参数推导(基于最小二乘)

1、背景介绍 实际中,很多人工构造物是由平面结构构造而成,如下图所示,为一典型的由多个平面组成的人工构筑物。因此,根据离散点拟合成平面,获取拟合平面方程,是点云数据处理中非常常见的数据处理操作。 2、…

鸿蒙Ability Kit(程序框架服务)【ExtensionAbility组件】

ExtensionAbility组件 ExtensionAbility组件是基于特定场景(例如服务卡片、输入法等)提供的应用组件,以便满足更多的使用场景。 每一个具体场景对应一个[ExtensionAbilityType],开发者只能使用(包括实现和访问&#…

WPS的excel表格设置了编辑权限,要怎么取消?

在日常生活和工作中,我们经常会使用WPS Office办公软件来处理各种文档,其中WPS Excel表格是我们进行数据处理和分析的重要工具。为了保护表格中的数据不被随意修改,我们有时会设置编辑权限。然而,随着时间的推移或需求的变更&…

基于FPGA的SystemVerilog练习

文章目录 一、认识SystemVerilogSystemVerilog的语言特性SystemVerilog的应用领域SystemVerilog的优势SystemVerilog的未来发展方向 二、流水灯代码流水灯部分testbench仿真文件 三、用systemVerilog实现超声波测距计时器测距部分led部分数码管部分采样部分顶层文件引脚绑定效果…

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…

idea项目maven下载依赖报错

报错: 1、Failure to find bad.robot:simple-excel:jar:1.0 in https://maven.aliyun.com/repository/public was cached in the local repository, resolution will not be reattempted until the update interval of aliyunmaven has elapsed or updates are forc…

python的while循环与for循环总结

前两章中,我们跟着海绵宝宝的故事,掌握了 while 循环和 for 循环,这两种不同的循环模式。while 循环和 for 循环都需要有 循环体 和 缩进,我们来复习一下它俩的语法规则: while 循环与 for 循环辨析 学到这里&#x…

在鲲鹏服务器搭建k8s高可用集群分享

高可用架构 本文采用kubeadm方式搭建k8s高可用集群,k8s高可用集群主要是对apiserver、etcd、controller-manager、scheduler做的高可用;高可用形式只要是为: 1. apiserver利用haproxykeepalived做的负载,多apiserver节点同时工作…

易联众智慧云胶片平台,助推医学影像服务“向云端”

在门诊室里,张女士焦急地告诉主治医师,自己忘了带CT胶片。“您别急,我用系统查询一下。”医生轻点几下鼠标进入云胶片平台,只用不到10秒就顺利完成了影像调取。“不仅我可以看到,您在手机上也能随时随地查阅。”张女士根据提示操作,不仅能调阅自己的影像档案,连抽血化验结果都可…

[GeoServer系列]Shapefile数据发布

【GeoServer系列】——安装与发布shapefile数据-CSDN博客 将待发布数据放置指定目录下 webapps\geoserver\data\data 创建存储仓库 新建矢量数据源 发布图层 设置边框 设置样式 使用 方式1 let highRoad new Cesium.WebMapServiceImageryProvider({url: http://local…

Spring Cloud学习笔记(Nacos):Nacos持久化(未完成)

这是本人学习的总结,主要学习资料如下 - 马士兵教育 1、Overview2、单机使用MySQL 1、Overview 我们关闭单机下的Nacos后,再重新启动会发现之前配置的内容没有被删除。这时因为Nacos有内嵌的数据库derby,会自己持久化。 但是在集群的情况下…