如何复现Github上的项目以及conda的常用操作指令

news2024/11/13 16:25:58

在GitHub上关于深度学习的项目代码通常包含多种类型的文件,每种文件都有其特定的作用。以下是一些常见的文件及其作用的概述:

一个常用的项目结构如下:

  1. --project_name/ :项目名
  2. ----data/:数据集
  3. --------__init__.py
  4. ----datasets/:数据相关操作,如加载数据
  5. --------__init__.py
  6. --------data_loader.py:加载数据
  7. ----layers/:网络模型层
  8. --------__init__.py
  9. --------layer1.py:第1层
  10. --------layer2.py:第2层
  11. ----models/:backbone模型
  12. --------__init__.py
  13. --------a_model.py:a模型
  14. --------b_model.py:b模型
  15. ----exp/:包含定义、训练、验证、测试和预测方法
  16. --------__init__.py
  17. --------exp_main.py:包含定义、训练、验证、测试和预测方法
  18. ----configs/:配置文件
  19. --------__init__.py
  20. --------config.py:方便超参数搜索等
  21. ----utils/:用到的功能函数,可以是日志、评价指标计算等等
  22. --------__init__.py
  23. --------utils.py:功能函数
  24. --------metrics.py:评价指标计算
  25. ----logs/:日志文件
  26. --------__init__.py
  27. ----scripts/:脚本文件
  28. --------__init__.py
  29. ----checkpoints/:保存的模型权重
  30. --------__init__.py
  31. --------checkpoints.pt:保存的模型权重文件
  32. ----model_hub/:预训练模型权重
  33. --------__init__.py
  34. --------basic_model.pt:预训练好的模型权重文件
  35. ----main.py:主程序
  36. ----requirements.txt:需要的python依赖
  37. ----environment.yml:环境信息
  38. ----readme.md:项目说明                       

__init__.py:一个目录如果包含了__init__.py文件,那么它就变成了一个包。该文件可以为空,也可以定义包的属性和方法,但它必须存在。
datasets:数据相关操作,比如用Dataset封装数据集,再用Dataloader实现数据并加载。
layers:layers文件夹放的是模型所需要的层,不同model可能需要同样的网络层,为了保证模型代码的简洁性,单独列一个文件夹定义。
models:一般而言,核心的代码都是以model命名,或者就是以它这个模型的名字命名。可以有多个模型,一个模型一个.py文件。
exp:包含定义、训练、验证、测试、保存和预测方法,这些也可以放到main中,但是为了main的简洁性,单独设置一个文件夹进行定义。关于模型保存,Pytorch可以通过torch.save()函数将训练的模型保存为.pth/.pt/.pkl文件,Keras中训练的模型可以保存为.h5文件
configs:包含了一些预定义的配置文件,用于训练和测试深度学习模型。这些配置文件包含了模型架构、损失函数、优化器、训练和测试的超参数等,通过修改这些配置文件,可以方便地调整模型的参数和超参数,如将需要配置的参数均放在这个文件中,比如batchsize,transform,epochs,lr等超参数,以满足不同的需求和任务。
utils:通常是存放深度学习中常用的工具函数或类的文件夹,这些工具函数或类可以被多个深度模型共用,提高代码的复用性与可维护性,通常包括数据预处理函数、模型评估函数、损失函数等。
scripts:脚本文件集合,脚本文件是函数命令的集合。针对不同的任务,可以运行不同的脚本文件。
checkpoints:断点保存,保存模型权重,防止程序突然终止丢失权重文件。
model_hub:预训练好的模型权重, 是一个通过大量数据上进行训练并被保存下来的网络。可以将其通俗的理解为前人为了解决类似问题所创造出来的一个模型,有了前人的模型,当我们遇到新的问题时,便不再需要从零开始训练新模型,而可以直接用这个模型入手,进行简单的学习便可解决该新问题。
main.py:主程序,解析命令行传递超参数,执行exp中的训练、验证、测试、预测方法。
requirements.txt:需要的python依赖,可以在terminal中输入pip install -r requirements.txt命令快速在所使用环境中安装依赖。
environment.yml:用于定义和创建 Conda 环境的配置文件。它通常包含了项目所需的所有依赖项及其版本信息。可以使用该文件快速配置conda环境,具体使用方法可见:如何使用environment.yml文件配置conda环境
readme.md:一种说明文件,通常随着一个软件而发布,里面记载有软件的描述或注意事项。一般来说,开源项目的readme里作者都会写明如何使用代码和进行部署,这可以帮助我们实现这个项目。
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
                        
原文链接:https://blog.csdn.net/weixin_51193374/article/details/137114938

  1. __init__.py:一个目录如果包含了__init__.py文件,那么它就变成了一个包。该文件可以为空,也可以定义包的属性和方法,但它必须存在。
  2. README.md: 这是项目的说明文件,通常包含项目的简介、如何安装和运行代码的指南,以及其他重要信息。
  3. requirements.txt : 这些文件列出了项目所需的依赖和库,确保其他用户能够复现相同的开发环境。
  4. environment.yml:用于定义和创建 Conda 环境的配置文件。它通常包含了项目所需的所有依赖项及其版本信息。可以使用该文件快速配置conda环境
  5. layers/: layers文件夹放的是模型所需要的层,不同model可能需要同样的网络层,为了保证模型代码的简洁性,单独列一个文件夹定义,可能包含自定义的层实现 。
  6. exp:包含定义、训练、验证、测试、保存和预测方法,这些也可以放到main中,但是为了main的简洁性,单独设置一个文件夹进行定义。关于模型保存,Pytorch可以通过torch.save()函数将训练的模型保存为.pth/.pt/.pkl文件,Keras中训练的模型可以保存为.h5文件。
  7. main.py 或 run.py: 这是项目的主要执行文件,包含了程序的入口点和主要逻辑。
  8. data/: 一个专门用于存放数据的文件夹,可能进一步分为原始数据(raw)、处理后的数据(processed)和外部数据(external)等子文件夹。
  9. datasets/: 存放数据集的文件夹,数据相关操作,比如用Dataset封装数据集,再用Dataloader实现数据并加载。可能包含train和val子文件夹。
  10. models/: 包含定义深度学习模型的文件,可能包含模型架构、损失函数和优化器等配置。
  11. utils/ 或 helpers/: 通常是存放深度学习中常用的工具函数或类的文件夹,这些工具函数或类可以被多个深度模型共用,提高代码的复用性与可维护性,通常包括数据预处理函数、模型评估函数、损失函数等。
  12. notebooks/: 包含Jupyter Notebook或其他交互式笔记本文件,用于实验、分析和模型开发。
  13. tests/: 如果项目包含自动化测试,这个文件夹将存放测试脚本。
  14. config/: 包含了一些预定义的配置文件,用于训练和测试深度学习模型。这些配置文件包含了模型架构、损失函数、优化器、训练和测试的超参数等,通过修改这些配置文件,可以方便地调整模型的参数和超参数,如将需要配置的参数均放在这个文件中,比如batchsize,transform,epochs,lr等超参数,以满足不同的需求和任务。
  15. model_hub:预训练好的模型权重, 是一个通过大量数据上进行训练并被保存下来的网络。可以将其通俗的理解为前人为了解决类似问题所创造出来的一个模型,有了前人的模型,当我们遇到新的问题时,便不再需要从零开始训练新模型,而可以直接用这个模型入手,进行简单的学习便可解决该新问题。
  16. results/ 或 outputs/: 存放模型生成的输出文件、报告或可视化结果。
  17. scripts/: 脚本文件集合,可能包括数据预处理、模型定义、训练、评估和实用工具等脚本,针对不同的任务,可以运行不同的脚本文件。
  18. docs/: 存放项目相关的文档,如API文档、设计文档或用户手册。
  19. src/: 源代码文件夹,可能包含多个子模块或包,遵循模块化设计。
  20. logs/: 存放训练日志的目录 。
  21. checkpoints/ 或 weights/: 保存训练过程中的模型权重。
  22. demos/examples: 工程demo或example文件夹 。
  23. LICENSE: 指定了项目的许可证,说明其他用户如何使用和分发该项目。

阅读项目中的README.md文件

一般这个文件会包括:环境配置、安装依赖包、数据集加载处理、模型训练与测试、模型推理

1.环境配置:

首先就是创建一个虚拟环境,这一步就包含了你所创建环境的python版本,使用指令

conda create -n myenv python=3.8

其中myenv是创建的虚拟环境的名字,python版本是3.8

 同时在进入和退出虚拟环境时可能会出现报错deactivate does not accept arguments
remainder_args: ['unet']

这是因为新版本的CUDA对进入和退出虚拟环境的指令做出了调整,如下:

//进入虚拟环境:
activate xx
//不需要在前面加上cuda

//退出虚拟环境
conda deactivate
//不需要在后面加上退出的虚拟环境的名字

还有一些关于操作虚拟环境的指令如下:

列出所有环境:
conda env list

删除环境 (如果需要删除创建的环境):
conda env remove -n myenv

在环境中安装包:
conda install -n myenv package_name

更新环境中的包:
conda update -n myenv package_name

在环境中创建新的Python可执行文件 (可选,适用于使用多个Python版本):
conda create -n myenv python=3.8 anaconda

导出环境 (导出环境的详细依赖列表):
conda env export > environment.yml

从导出的YAML文件重新创建环境:
conda env create -f environment.yml

其中Pytorch是必备的,安装之前需要大家先查看自己的cuda版本,使用

nvidia-smi

(注意高版本的CUDA没有那个文件夹NVSMI了,直接在命令行输入这条指令,没有空格!!!)

即可得到

可以看出最高支持的CUDA的版本是12.0,也就是说我们只要下载项目所需要的Pytorch版本且支持的CUDA版本低于12.0的就好。

去网址:Previous PyTorch Versions | PyTorch

找到适合自己的对应的命令,直接在终端运行即可安装。

安装依赖库:

可以通过:在terminal中输入 pip install -r requirements.txt 命令快速在所使用环境中安装依赖包。前提是项目中包含requirements.txt文件

2. 设置环境变量

这个不是每个项目都必须设置的,主要还是参照README.md文件进行设置。

比如一些模型需要依靠环境变量来了解原始数据、预处理数据和训练模型权重的存储位置。 要使用模型的全部功能,就必须设置这三个环境变量。

首先我们应该在项目文件夹下建立数据集文件夹,在数据集文件夹下要包含原始数据、预处理数据和训练模型权重这三个文件夹,

接着在对应模型的文件夹下的paths.py程序内的程序起始部分(import后),添加进去刚才设置的环境变量:

nnUNet_raw = "路径"
nnUNet_preprocessed = "路径"
nnUNet_results = "路径"

当然在windows系统下也可以直接设置为系统变量:

set nnUNet_raw = "路径"
set nnUNet_preprocessed = "路径"
set nnUNet_results = "路径"

在Linux或macOS系统中,你可以在命令行中这样设置环境变量

export nnUNet_raw = "路径"
export nnUNet_preprocessed = "路径"
export nnUNet_results = "路径"

3.数据集载入

需要将下载的数据集导入即添加到相应的路径对应的文件夹中,接着再按照格式要求使用脚本进行格式转换。

格式转换:

使用cd 命令打开脚本所在的文件夹

使用python 命令打开脚本程序,观察参数,找到函数入口(一般在程序下方)

if __name__ == '__main__'
    convert_msd_dataset('/home/tom/Test/nnUNet/DATSET/nnUNet_raw/Taske2_Heart',overwrite_target_id=201)

将数据集路径添加到函数脚本程序的函数入口中,运行脚本

python convert_xx_dataset.py

数据集格式就转换完成了。

4.数据集预处理

一般在项目中也会有一个对应的.py文件,进行数据处理,一般是preparexx.py。

打开python文件,同样的是需要找到函数入口,格式同上。

注意如果项目中存在两个或多个preparexx.py文件,一般是只有一个文件包含了函数入口,其他文件都是为了这个文件服务的,同样我们也是需要操作包含函数入口的这个文件的。

找到这个文件后需要cd 进入文件对应的文件夹中,观察执行函数需要传递的参数,同样使用github上给定的指令,在命令行输入进行数据处理。比如github中给的命令:

nnUNetv2_plan_and_preprocess -d DATASET_ID --verify_dataset_integrity

实际在命令行输入的代码:

python  plan_and_preprocess_entrypoints.py -d 002 --verify_dataset_integrity

其中plan_and_preprocess_entrypoints.py文件是我们的包含函数入口的数据处理文件,002是需要处理的数据集的ID,后面是验证不需要变动。

5.模型训练

首先找到模型训练脚本,一般在run文件夹下格式为train/training.py的程序,然后cd 进入对应的文件夹下,观察执行函数需要传递的参数,同样使用github上给定的指令,在命令行输入进行数据处理。比如github中给的命令:

nnUNetv2_train DATASET_NAME_OR_ID UNET_CONFIGURATION FOLD [additional options, see -h]

UNET_CONFIGURATION 是一个字符串,用于标识请求的 U-Net 配置(默认值:2d、3d_fullres、3d_lowres、 3d_cascade_lowres)。

DATASET_NAME_OR_ID 指定应在哪个数据集上进行训练。

FOLD 指定 5 倍交叉验证经过训练。

实际在命令行输入的代码:

python run_training.py 002 3d_fullers 0

其中002是数据集ID;3d_fullers是指3D U-Net模型的全分辨率配置,该模型处理3D数据时保持其原始分辨率,适用于需要高分辨率详细信息的分割任务;这些参数在github上都会有解释,根据自己的需求传入不同的参数,然后运行即可开始训练。

训练结束后,一般会产生一个result的文件夹,里面通常包含训练过程的权重,照片,系统文件,日志文件等等等。

6.模型推理预测

首先找到模型推理脚本,一般格式为predictxx.py的程序,然后cd 进入对应的文件夹下,找到函数入口,观察执行函数需要传递的参数,进行调整。例如:

predictor.initialize_from_trained_model_folder(
    join(nnUNet_results, 'Dataset002_Heart/nnUNetTrainer__nnUNetPlans__3d_fullres')
    use folds=(0,),
    checkpoint name='checkpoint best.pth',

predictor.predict_from_files(join(nnUNet raw,'Dataset002 Heart/imagesTs'),
                            join(nnUNet raw,'Dataset002 Heart/imagesTs predlowres'),
                            save_probabilities=False, overwrite=False,
                            num_processes_preprocessing=2,num_processes_segmentation export=2,
                            folder_with_segs_from_prev_stage=None, num_parts=1, part_id=0)

'Dataset002_Heart/nnUNetTrainer__nnUNetPlans__3d_fullres'是数据集地址。

checkpoint name是权重文件路径,替换为在上一步的模型训练中已经得到的权重。

'Dataset002 Heart/imagesTs'是我们数据集下的测试集,把数据集名字替换为我们的名字。

'Dataset002 Heart/imagesTs predlowres'是用来保存预测结果的文件夹,需要我们提前在数据集Dataset002 Heart下创建一个名为magesTs predlowres的文件夹。

保存完以后在终端直接运行,开始推理。

就可以得到退了结果和输出。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2054674.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue+elementui 主题配色修改-打造个性化配色系统

上一期中利用global.css来覆盖elementui原有的配色,修改了按钮和消息框。这一期继续尝试修改其他的控件。 1 修改info 类型按钮 上次修改了primary按钮,这次修改一下info按钮,在global.css中添加 .el-button--info {background-color: #d9d…

deepspeed的并行模式介绍笔记

1.整体框架 2.并行模式 1.数据并行DDP 数据切分以后,分开单张卡训练得到参数,然后综合在单卡计算。 要点:前向计算和反向计算两步骤走并汇总。 1.前向计算 需要留一块主卡一定空间用于综合。 2.反向传播 利用前向传播的汇总参数得到各个…

深度学习基础—超参数调试

1.超参数调试顺序 在训练深度网络最难的事情之一是超参数的选择,如何选择合适的超参数取值?下面我将谈谈,如下是我所理解的超参数调试顺序: 重要性排序 超参数 Top1梯队 学习率a Top2梯队 min-batch大小,隐层神经…

10 VS Code 调试技巧之逐断点、逐过程、单步调试与单步跳出

目录 1 断点调试 1.1 断点调试介绍 1.2 如何设置断点 1.3 如何开启调试 2 调试类型 2.1 逐断点调试 2.2 逐过程调试 2.3 单步调试 2.4 单步跳出 1 断点调试 遇到难以捉摸的软件错误时,老练的程序员会推荐断点调试。通过设置断点,逐步跟踪…

nvidia jetson 系列开发板交叉编译方法,CUDA依赖程序

资源 Toolchain Information jetson-linux jetpack 文章目录 资源1 方案1 qemu-aarch64-static和docker 容器编译jetson2 方案2 模拟器交叉编译器2.1 应对库缺失的情况,进行环境准备2.1.1 模拟器(方案1)2.1.2 在jetson上面进行安装(方案2)2.…

如何有效清理宝塔控制面板中的垃圾文件与优化系统性能

宝塔控制面板(BT-Panel)作为一款流行的服务器管理软件,极大地简化了Linux服务器的管理任务,包括网站部署、数据库管理、文件操作等。然而,随着服务器运行时间的增长,系统中会积累各种临时文件、日志文件、缓…

STM32G474按钮输入和点灯

在获取到工程模板后,学习某个CPU的第一步通常都是IO口操作。因此按钮输入和点灯,就是本次学习的第一个程序。先从简单入手。 和GPIO操作有关的函数如下: __HAL_RCC_GPIOA_CLK_ENABLE();//使能GPIOA时钟 __HAL_RCC_GPIOB_CLK_ENABLE();//使能GPIOB时钟 _…

Redis7基础篇(四)

Redis管道 引入 set k1 v1.......需要往返三次 这是一个比较消耗性能的一件事情 怎么就可以一次性的将这些命令执行 就是使用mset这个方法 这个mset就相当于一个管道 把这些命令做成一个流水线的形式进行处理 解决思路 案例 两个set类型的三个哈希类型的一个list类型的 我们要…

知乎信息流广告效果如何?与其他信息流广告平台有何区别?

广告的有效触达与高效转化成为了品牌营销的核心挑战,知乎作为国内最大的知识分享平台,其信息流广告以其独特的优势脱颖而出,成为众多企业首选的营销工具,云衔科技助力企业实现高效知乎广告投放与代运营服务。 一、知乎信息流广告…

基于STM32+手机APP设计的智能停车场系统——程序源码原理图设计原理设计文档演示视频框图等(文末工程资料下载)

基于STM32手机APP设计的智能停车场系统 演示视频 基于STM32手机APP设计的智能停车场系统 元器件:DHT11、MQ2、STM32F103C8T6、SG90舵机、RC522频射模块、HC-SR04超声波模块、OLED、wifi模块、LED灯、蜂鸣器 功能简介 1、进出停车场时需要刷卡,进行一个…

深度学习-----------------------含并行连结的网络GoogLeNet

目录 含并行连结的网络GoogLeNet最好的卷积层超参数inception块inception 结构inception原始结构inception 降维11卷积核的降维功能GoogLeNet段1&2段3段4&5 Inception 的各种变种Inception V3块,段3Inception V3块,段4Inception V3块&#xff0…

突破FPGA限制:TS-M4i系列数字化仪利用GPU加速实现高效块平均处理

一、应用背景 块或分段内存平均模式常用于在不同应用当中,移除信号中不相干的噪声。不管是哪家的数字化仪制造商,几乎所有基于FPGA实现的块平均模式都会受到块或者段内存大小的限。该限制一般取决于FPGA的容量,最大样品量通常在32k到500k之间…

RS232(旧协议)与RS485(新协议)

RS232: RS485: RS485和RS232是两种常见的串行通信标准,它们在通信距离、速度、拓扑结构等方面存在显著差异。以下是它们的主要区别: 1. 物理层接口 RS232: 使用单端信号传输,即信号通过一根信号线和一根公共地线(GND&#xff09…

外呼触发通知发送闪信(mod_cti基于FreeSWITCH)

文章目录 前言联系我们手动外呼配置方法例子一:接收到180或183时触发闪信发送例子二:挂断后触发闪信发送 自动外呼配置方法例子:接收到180或183时触发闪信发送 前言 在呼叫中心中间件中,自动外呼触发闪信发送,我们可以…

电销机器人引领电销变革

以前电销都是都是通过盲打,现在有了电话机器人的出现,为电销公司带来新的篇章。 我们都知道外呼中心的人员离职率始终居高不下,人员的培训频繁成本很高,外部电话水平参差不齐,服务态度不够稳定等问题,都是难…

【硬件模块】震动传感器模块

震动传感器模块实物图 DO:数字信号量输出,接单片机管脚; AO:模拟输出,无效,一般不接。 无震动,DO输出高电平,信号指示灯灭; 有震动,DO输出低电平,…

50道深度NLP和人工智能领域面试题+答案

编者按:分享一个很硬核的免费人工智能学习网站,通俗易懂,风趣幽默, 可以当故事来看,轻松学习。 什么是自然语言处理(NLP)?自然语言处理是一种人工智能领域,致力于使计算机…

letcode 分类练习 BST 530.二叉搜索树的最小绝对差 501.二叉搜索树中的众数 236. 二叉树的最近公共祖先(自底向上的典型例子)

letcode 分类练习 BST 530.二叉搜索树的最小绝对差 501.二叉搜索树中的众数 236. 二叉树的最近公共祖先 BST530.二叉搜索树的最小绝对差501.二叉搜索树中的众数236. 二叉树的最近公共祖先 BST 重要性质:它的中序遍历是一个有序数组 530.二叉搜索树的最小绝对差 BS…

linux 远程访问及控制 (SSH)

目录 一、SSH远程管理 1.1 配置OpenSSH服务端 1.1.1 SSH协议介绍 1.1.2 服务监听选项 1.1.3 用户登录控制 1.1.4 登录验证方式 1.2 使用SSH客户端程序 1.3 密钥对验证的SSH体系 二、TCP Wrapppers访问控制 2.1 TCP Wrappers概述 2.1.1 TCP Wrappers简介 2.1.2 TCP…

会声会影2023安装好后运行显示乱码的解决方法

会声会影2019安装好了之后,打开软件之后,会有个乱码弹窗错误,其实这个乱码提示只有简体中文版本上才会是乱码, 英文版上显示的是″You do not appear to be a register user. Please re-install the application or call custome…