当前位置: 首页 > news >正文

【论文10】复现代码tips

一、准备工作

1.创建一个虚拟环境

conda create --name drgcnn38 python=3.8.18

2.激活虚拟环境

conda activate drgcnn38

注意事项

在Pycharm中终端(terminal)显示PS而不是虚拟环境base

问题如下所示

解决方法:shell路径改成cmd.exe

重启终端显示虚拟环境

3.安装torch 

conda install pytorch==2.1.0 torchvision==0.16.0 torchaudio==2.1.0 cpuonly -c pytorch

安装一系列包

注意事项

Pycharm远程连接Linux服务器实现代码同步

1.工具-->部署-->配置

2.选择SFTP远程连接,路径填与服务器要同步的路径地址

二、代码学习

各部分的作用

  • eye_pre_process:视网膜眼底图像预处理模块。
  • Encoder:编码器训练模块。
  • modules:包含模型结构、损失函数和学习率降低策略。
  • utils:包含一些常用函数和评估指标。
  • BFFN:双眼特征融合网络训练模块。
  • CAM:类别注意力模块。

eye_pre_process

copy.py

# 创建一个ArgumentParser对象,用于处理命令行参数  
parser = argparse.ArgumentParser()  # 添加一个命令行参数 '--image-folder',类型为字符串,默认值为 'D:/cv_paper/lesson/Dataset/ceshi'  
# 这个参数用于指定输入图像的文件夹路径  
parser.add_argument('--image-folder', type=str, default=r'D:/cv_paper/lesson/Dataset/ceshi')  # 添加一个命令行参数 '--output-folder',类型为字符串,默认值为 'D:\cv_paper\lesson/Dataset/ceshi_output'  
# 注意:这里路径中的反斜杠在不同的操作系统中可能需要特别注意,Python字符串中推荐使用原始字符串(r前缀)来避免转义字符的问题  
# 这个参数用于指定输出结果的文件夹路径  
parser.add_argument('--output-folder', type=str, default=r'D:\cv_paper\lesson/Dataset/ceshi_output')  # 添加一个命令行参数 '--crop-size',类型为整数,默认值为512  
# 这个参数用于指定图像裁剪的大小  
parser.add_argument('--crop-size', type=int, default=512, help='crop size of image')  # 添加一个命令行参数 '-n' 或 '--num-processes',类型为整数,默认值为8  
# 这个参数用于指定处理任务时要使用的进程数  
# '-n' 是 '--num-processes' 的简写形式,帮助信息说明了该参数的作用  
parser.add_argument('-n', '--num-processes', type=int, default=8, help='number of processes to use')
# 转换一个包含多个任务的列表,每个任务由文件名、目标路径和裁剪大小组成  
# 对于jobs列表中的每个任务(索引为j),它首先检查是否已经处理了100个任务(作为进度指示),然后调用convert函数来执行实际的图像转换。
def convert_list(i, jobs):  for j, job in enumerate(jobs):  # 每处理100个任务打印一次进度  if j % 100 == 0:  print(f'worker{i} has finished {j} tasks.')  # 解包任务元组并调用convert函数  convert(*job)  # 转换单个图像文件,包括模糊处理、裁剪和保存  
def convert(fname, tgt_path, crop_size):  img = Image.open(fname)  # 打开图像文件  blurred = img.filter(ImageFilter.BLUR)  # 应用模糊滤镜  ba = np.array(blurred)  # 将图像转换为NumPy数组  h, w, _ = ba.shape  # 获取图像的高度、宽度和通道数  # 尝试根据图像的亮度分布来识别前景区域  if w > 1.2 * h:  # 计算左右两侧的最大亮度值  left_max = ba[:, :w // 32, :].max(axis=(0, 1)).astype(int)  right_max = ba[:, -w // 32:, :].max(axis=(0, 1)).astype(int)  max_bg = np.maximum(left_max, right_max)  foreground = (ba > max_bg + 10).astype(np.uint8)  # 识别前景区域  bbox = Image.fromarray(foreground).getbbox()  # 获取前景区域的最小边界框  # 如果边界框太小或不存在,则打印消息并可能设置为None  if bbox is None:  print(f'No bounding box found for {fname} (???)')  else:  left, upper, right, lower = bbox  if right - left < 0.8 * h or lower - upper < 0.8 * h:  print(f'Bounding box too small for {fname}')  bbox = None  else:  bbox = None  # 如果图像已经是合适的宽高比,则不尝试识别前景  # 如果未找到有效的边界框,则使用正方形边界框  if bbox is None:  bbox = square_bbox(img)  # 使用边界框裁剪图像,并调整大小  cropped = img.crop(bbox)  cropped = cropped.resize([crop_size, crop_size], Image.ANTIALIAS)  # 注意:ANTIALIAS可能是个拼写错误,应该是ANTIALIASIS  save(cropped, tgt_path)  # 保存图像  # 返回一个正方形裁剪框的边界  
def square_bbox(img):  w, h = img.size  left = max((w - h) // 2, 0)  upper = 0  right = min(w - (w - h) // 2, w)  lower = h  return (left, upper, right, lower)  # 保存PIL图像到文件  
def save(img, fname):  img.save(fname, quality=100, subsampling=0)  # 注意:subsampling参数可能不是所有格式都支持  # 假设的main函数,用于组织整个流程(注意:这里只是一个示例)  
def main():  # 示例任务列表,每个任务是一个(文件名, 目标路径, 裁剪大小)元组  jobs = [  ('input1.jpg', 'output1_resized.jpg', 256),  ('input2.jpg', 'output2_resized.jpg', 256),  # ... 更多任务  ]  # 假设有一个工作者ID为1  convert_list(1, jobs)  if __name__ == "__main__":  main()  

Encoder 

main.py

# 定义主函数入口  
def main():  # 解析配置参数  args = parse_configuration()  # 加载配置文件  cfg = load_config(args.config)  # 获取配置中保存的路径  save_path = cfg.config_base.config_save_path  # 如果保存路径不存在,则创建该路径  if not os.path.exists(save_path):  os.makedirs(save_path)  # 将配置文件复制到保存路径  copy_config(args.config, cfg.config_base.config_save_path)  # 执行工作函数  worker(cfg)  # 定义工作函数,负责训练、验证和测试模型  
def worker(cfg):  # 根据配置生成模型  model = generate_model(cfg)  # 计算模型总参数数量  total_param = 0  for param in model.parameters():  total_param += param.numel()  print("Parameter: %.2fM" % (total_param / 1e6))  # 打印模型参数数量(单位:百万)  # 根据配置生成训练、验证和测试数据集  train_dataset, test_dataset, val_dataset = generate_dataset(cfg)  # 初始化性能评估器  estimator = PerformanceEvaluator(cfg.config_train.config_criterion, cfg.config_data.config_num_classes)  # 执行训练过程  train(  cfg=cfg,  model=model,  train_dataset=train_dataset,  val_dataset=val_dataset,  estimator=estimator,  )  # 测试最佳验证模型性能  print('This is the performance of the best validation model:')  checkpoint = os.path.join(cfg.config_base.config_save_path, 'best_validation_weights.pt')  cfg.config_train.config_checkpoint = checkpoint  # 设置检查点路径为最佳验证模型  model = generate_model(cfg)  # 重新生成模型以加载权重  evaluate(cfg, model, test_dataset, estimator)  # 评估模型性能  # 测试最终模型性能  print('This is the performance of the final model:')  checkpoint = os.path.join(cfg.config_base.config_save_path, 'final_weights.pt')  cfg.config_train.config_checkpoint = checkpoint  # 设置检查点路径为最终模型  model = generate_model(cfg)  # 重新生成模型以加载权重  evaluate(cfg, model, test_dataset, estimator)  # 评估模型性能  # 如果此脚本作为主程序运行,则调用main函数  
if __name__ == '__main__':  main()

Encoder_predict.py

进行模型的训练,具体来说,它定义了一个训练循环&#x

相关文章:

【论文10】复现代码tips

一、准备工作 1.创建一个虚拟环境 conda create --name drgcnn38 python=3.8.18 2.激活虚拟环境 conda activate drgcnn38 注意事项 在Pycharm中终端(terminal)显示PS而不是虚拟环境base 问题如下所示 解决方法:shell路径改成cmd.exe 重启终端显示虚拟环境 3.安装torch …...

分布式缓存获取以及设置

1. 通用代码 public SysUser getCache(String sysUserId) {String cacheKey "litgery:warehouse:" sysUserId;// 尝试从缓存中获取数据CacheData cacheData redisUtils.get(cacheKey);if (null ! cacheData) {if (Boolean.TRUE.equals(cacheData.getExist())) {re…...

SMO算法,platt论文的原始算法及优化算法

platt论文&#xff1a;[PDF] Sequential Minimal Optimization : A Fast Algorithm for Training Support Vector Machines | Semantic Scholar 算法优化&#xff1a;[PDF] Improvements to Platts SMO Algorithm for SVM Classifier Design | Semantic Scholar 包含个人plat…...

2.3 openCv -- 对矩阵执行掩码操作

在矩阵上进行掩模操作相当简单。其基本思想是根据一个掩模矩阵(也称为核)来重新计算图像中每个像素的值。这个掩模矩阵包含的值决定了邻近像素(以及当前像素本身)对新的像素值产生多少影响。从数学角度来看,我们使用指定的值来做一个加权平均。 具体而言,掩模操作通常涉…...

【Django】 js实现动态赋值、显示show隐藏hide效果

文章目录 需要达到的前端效果预览&#xff1a;实现步骤复制bootstrp代码&#xff08;buttons&#xff09;复制bootstrp代码&#xff08;Alert警告框&#xff09;写js测试效果 需要达到的前端效果预览&#xff1a; {% load static %} <!DOCTYPE html> <html lang"…...

qt--做一个拷贝文件器

一、项目要求 使用线程完善文件拷贝器的操作 主窗口不能假死主窗口进度条必须能动改写文件大小的单位&#xff08;自适应&#xff09; 1TB1024GB 1GB1024MB 1MB1024KB 1KB1024字节 二、所需技术 1.QFileDialog 文件对话框 QFileDialog也继承了QDialog类&#xff0c;直接使用静态…...

Eclipse 搭建 C/C++ 开发环境以及eclipse的使用

一、下载、安装 MinGW 1、下载: 下载地址&#xff1a;MinGW - Minimalist GNU for Windows - Browse Files at SourceForge.net 点击“Download Latest Version”即可 下载完成后&#xff0c;得到一个名为 mingw-get-setup.exe 的安装文件。双击运行&#xff0c;安装即可。 …...

【初阶数据结构】复杂度算法题篇

旋转数组 力扣原题 方案一 循环K次将数组所有元素向后移动⼀位&#xff08;代码不通过) 时间复杂度O(n2) 空间复杂度O(1) void rotate(int* nums, int numsSize, int k) {while (k--) {int end nums[numsSize - 1];for (int i numsSize - 1; i > 0; i--) {nums[i] num…...

20240725项目的maven环境报红-重新配置maven

1.在编辑器里面打开项目&#xff0c;导入源码 &#xff08;1&#xff09;找到项目的地址C:\Users\zzz\IdeaProjects\datasys&#xff0c;然后右击用idea编辑器打开。 &#xff08;2&#xff09;idea中上菜单栏打开open&#xff0c;然后输入file&#xff0c;选择源代码文件 2.…...

若依 ruoyi poi Excel合并行的导入

本文仅针对文字相关的合并做了处理 &#xff0c;图片合并及保存需要另做处理&#xff01;&#xff01; 目标&#xff1a;Excel合并行内容的导入 结果&#xff1a; 1. ExcelUtil.java 类&#xff0c;新增方法&#xff1a;判断是否是合并行 /*** 新增 合并行相关代码&#xff1a;…...

优化算法:1.遗传算法(GA)及Python实现

一、定义 遗传算法就像是在模拟“优胜劣汰”的进化过程&#xff0c;通过选择最优秀的个体&#xff0c;交配产生下一代&#xff0c;并引入一定的变异&#xff0c;逐步优化解决问题。 二、具体步骤 初始化种群(Initialization)&#xff1a; 假设你要找到一个迷宫的最佳出口路径。…...

企业化运维(8)Docker容器技术

###1.Docker介绍### 什么是Docker Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中&#xff0c;然后发布到任何流行的 Linux或Windows 机器上&#xff0c;也可以实现虚拟化。容器是完全使用沙箱机制&#xff0c;相互之间…...

Unity C#底层原理(二)

委托 方法的容器&#xff1a;委托可以存储一个或多个方法的引用。可以使用委托对象来调用这些方法。函数/方法的变量类型&#xff1a;委托类型可以像变量一样声明和使用&#xff0c;存储方法的引用。存储、传递方法&#xff1a;委托可以作为参数传递给方法&#xff0c;也可以作…...

计算机网络-配置路由器ACL(访问控制列表)

配置访问控制列表ACL 拓扑结构 拓扑结构如下&#xff1a; 要配置一个ACL&#xff0c;禁止PC0访问PC3&#xff0c;禁止PC4访问PC0&#xff0c;其它正常。 配置Router0 配置接口IP地址&#xff1a; interface fastethernet 0/0 ip address 192.168.1.1 255.255.255.0 no shu…...

51单片机嵌入式开发:20、STC89C52R基于C51嵌入式点阵广告屏的设计

STC89C52R基于C51嵌入式点阵广告屏的设计 1 概述2 LED点阵介绍2.1 特点和优势2.2 工作原理&#xff1a;2.3 使用方法&#xff1a; 3 LED点阵原理3.1 Led点阵内部电路3.2 原理图电路3.3 74HC595 4 软件实现点阵图案的滑动4.1 软件工程代码4.2 Protues仿真 5 总结 配套示例程序 1…...

VLC输出NDI媒体流

目录 1. 下载安装VLC Play 2. 首先在电脑上安装NDI Tools 3. 运行VLC进行输出配置 4. 播放视频 5. 验证 (1)用Studio Monitor验证 (2)用OBS验证 NDI(Network Device Interface)即网络设备接口,是由美国 NewTek 公司开发的免费标准,它可使兼容的视频产品以高质量…...

WiFi 局域网通信 - 发现服务和解析

1. nsdManager nsdManager requireContext().getSystemService(Context.NSD_SERVICE) as NsdManager2. NsdManager.DiscoveryListener 注意&#xff1a;在onStartDiscoveryFailed 和 onStopDiscoveryFailed里不要调用nsdManager.stopServiceDiscovery(this) 方法&#xff0…...

ChatGPT建议前端学习计划

HTML&CSS基础 - 学习HTML标签、CSS属性、页面布局等基础知识 JavaScript基础 - 学习变量、数据类型、控制流、函数等基础知识 jQuery - 学习如何使用jQuery处理文档对象模型&#xff08;DOM&#xff09;、事件、动画等 Ajax - 全称为 Asynchronous JavaScript and XML&…...

YOLO5项目目录最强解析

YOLO5项目目录解析 YOLOv5 项目目录下的文件和目录的结构&#xff0c;以下是对每个目录和文件的解释&#xff1a; 目录 &#x1f4c1; .github: 存放 GitHub 相关配置和文件&#xff0c;如 GitHub Actions 工作流文件、Issue 模板等&#xff0c;用于自动化构建和持续集成等功…...

【python】sklearn基础教程及示例

【python】sklearn基础教程及示例 Scikit-learn&#xff08;简称sklearn&#xff09;是一个非常流行的Python机器学习库&#xff0c;提供了许多常用的机器学习算法和工具。以下是一个基础教程的概述&#xff1a; 1. 安装scikit-learn 首先&#xff0c;确保你已经安装了Python和…...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中&#xff0c;iftop是网络管理的得力助手&#xff0c;能实时监控网络流量、连接情况等&#xff0c;帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

【Java学习笔记】Arrays类

Arrays 类 1. 导入包&#xff1a;import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序&#xff08;自然排序和定制排序&#xff09;Arrays.binarySearch()通过二分搜索法进行查找&#xff08;前提&#xff1a;数组是…...

《Playwright:微软的自动化测试工具详解》

Playwright 简介:声明内容来自网络&#xff0c;将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具&#xff0c;支持 Chrome、Firefox、Safari 等主流浏览器&#xff0c;提供多语言 API&#xff08;Python、JavaScript、Java、.NET&#xff09;。它的特点包括&a…...

什么是库存周转?如何用进销存系统提高库存周转率?

你可能听说过这样一句话&#xff1a; “利润不是赚出来的&#xff0c;是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业&#xff0c;很多企业看着销售不错&#xff0c;账上却没钱、利润也不见了&#xff0c;一翻库存才发现&#xff1a; 一堆卖不动的旧货…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题&#xff1a;docker pull 失败 网络不同&#xff0c;需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战

在现代战争中&#xff0c;电磁频谱已成为继陆、海、空、天之后的 “第五维战场”&#xff0c;雷达作为电磁频谱领域的关键装备&#xff0c;其干扰与抗干扰能力的较量&#xff0c;直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器&#xff0c;凭借数字射…...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务&#xff1a; test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

安卓基础(aar)

重新设置java21的环境&#xff0c;临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的&#xff1a; MyApp/ ├── app/ …...

服务器--宝塔命令

一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行&#xff01; sudo su - 1. CentOS 系统&#xff1a; yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下&#xff0c;卢森堡罗伯特舒曼医院&#xff08;the Robert Schuman Hospitals, HRS&#xff09;凭借在无菌制剂生产流程中引入增强现实技术&#xff08;AR&#xff09;创新项目&#xff0c;荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…...