小白如何学会完整挪用Github项目?(以pix2pix为例)

[目录]
0.如何完整地复现/应用一个Github项目
1.建立适用于项目的环境
2.数据准备与模型训练阶段
3.训练过程中的一些命令行调试必备知识

0.如何完整地复现/应用一个Github项目


前日在健身房的组间同一位好友交流时,得到了一个一致结论—— ** Github \texttt{Github} Github 上有 80% \texttt{80\%} 80%的项目都是垃圾代码**,有包括笔者在内的不少小白尝试复用某些看似高大上的项目时,发现其code存在各种千奇百怪的问题最严重时可能导致我们电脑损坏。并且,在复现项目的过程中,会涉及到许多新手不甚熟悉的常用命令行操作,因此,本文目标旨在为新手梳理复现一个可靠的 Github \texttt{Github} Github项目的完整的复现/应用过程,以及帮助大家熟悉常见的命令行操作。

首先,本文选用的是pix2pix,一个 star \texttt{star} star数超 23.9k \texttt{23.9k} 23.9k、并且其论文发表在2017年的 CVPR \texttt{CVPR} CVPR的超强风格迁移模型(这些数据表明了这个项目是可靠的):

pix2pix效果示例

而在此处,直接给出复现项目的一个完整流程图。这个流程图相当之重要,几乎所有的复现项目思路都是如此:

完整流程示意

如果有初学者想要挑战一下的话,不妨可以直接就着这张流程图,通过下面两种方式,试试自己能不能实现复现:

  1. 自行上 pix2pix \texttt{pix2pix} pix2pix官网,尤其是issues部分,这里可能有很多人与你的问题能够共鸣。

  2. 合理使用LLMs。尤其是对这种开放网站,AI的阅读效率可比人高多了:

1.建立适用于项目的环境


  1. 安装 pix2pix \texttt{pix2pix} pix2pix

    • 访问pytorch-CycleGAN-and-pix2pix GitHub 仓库
    • 点击页面上绿色的 “Code” 按钮,选择 “Download ZIP” 下载代码压缩包。
    • 将压缩包解压到一个目录,例如:"D:\Sophomore\DesignExperiment\pytorch-CycleGAN-and-pix2pix"
  2. 本地环境配置
    P l a n A Plan \ A Plan A:使用 Docker \texttt{Docker} Docker

    Docker \texttt{Docker} Docker是一个容器化平台,简单来说,它就像一个“打包好的软件箱子”。

    这个箱子里包含了运行 pix2pix 所需的所有东西(比如 Python、PyTorch 等依赖项),我们无需自己手动安装这些依赖。使用 Docker \texttt{Docker} Docker的好处是:

    • 环境一致:无论您用的是 Windows、Mac 还是 Linux,pix2pix 的运行效果都一样。
    • 省去麻烦:不用自己配置复杂的深度学习环境。

    但是! 考虑到并非所有Github项目的作者都准备好了一个预构建的 Docker \texttt{Docker} Docker镜像,我们的重点还是讲解 P l a n B Plan \ B Plan B

    自行创建新环境:

    1. 为什么要建立一个新环境?

    最主要的目的还是避免与自己原有的环境相冲突。

    1. 使用bash或者conda创建一个新环境
      bash命令

      python -m venv pix2pix_env
      

      conda命令

      conda create -n pix2pix_env python=3.11
      

      pix2pix_env是环境名,大家取啥都可以。

    2. 激活该新环境并安装依赖项:
      激活环境(确保有这个步骤,避免安装到默认的base环境):

      conda activate pix2pix_env
      

      安装依赖项

      pip install -r requirements.txt
      

      P.S.:requirements.txt中并不一定有运行 pix2pix \texttt{pix2pix} pix2pix中所需的所有库,譬如OpenCV。不过这其实也好办,大家大可以先去run后面的代码,系统提醒你还缺什么库时再安装即可。

      P.S.S: 如果大家使用的是VScode的话,那么选择打开终端是默认打开的powershell,而我们更习惯使用的Anaconda Prompt间存在一定区别,好奇这两种Command Line Interface(CLI)区别的读者可以阅读本人本地通过Vscode连接服务器完整流程的第一部分。总而言之就是,如果你希望再powershell中使用conda命令,你需要进行一些对于系统路径进行一些微调,可以参考此文: 安装Anaconda后如何在powershell使用conda activate命令(Windows)

2.1数据准备与模型训练阶段


2.1数据准备

调用别人的模型前,肯定要仔细阅读关于数据格式的问题,pix2pix关于数据集的官方文档。

一个优秀的项目,关于如何能让别人使用,一定是说得清清楚楚的, pix2pix \texttt{pix2pix} pix2pix确实做到了一点。在此处不再赘述其官方处理数据的要求,只是提醒一点,务必按照指定的文件格式调用代码,比如在下面的数据合并代码中,/path/to/data/A文件夹中,一定还在在文件夹A中划分A/TestA/Train,而非直接存放图片。在大家有足够的代码水平前,切莫随意自由发挥。

下面是从官网文档提取出的数据处理部分的代码,以及调用方式:

  • bash code
python datasets/combine_A_and_B.py --fold_A /path/to/data/A --fold_B /path/to/data/B --fold_AB /path/to/data

当然,想要调用上述代码,肯定得先进入存放 datasets \texttt{datasets} datasets的文件夹(以本人存放 pix2pix \texttt{pix2pix} pix2pix datasets \texttt{datasets} datasets为例)

 cd "D:\Sophomore\DesignExperiment\pytorch-CycleGAN-and-pix2pix"

具体调用代码则是:

python datasets/combine_A_and_B_new.py --fold_A "D:\Sophomore\DesignExperiment\pytorch-CycleGAN-and-pix2pix\mydatasets\X" --fold_B "D:\Sophomore\DesignExperiment\pytorch-CycleGAN-and-pix2pix\mydatasets\Y" --fold_AB "D:\Sophomore\DesignExperiment\pytorch-CycleGAN-and-pix2pix\mydatasets\Converge"

文件名中切忌空格、中文等特殊字符。

P.S.: 细心的读者会发现,为啥调用的python文件是datasets/combine_A_and_B_new.py?对,datasets/combine_A_and_B_new.py是我自己在原本的datasets/combine_A_and_B_new.py上改的,至于原因,大家看到最后一节就明白了。

2.2模型训练、保存与调用
  1. 模型训练

    • P.S.: 希望完成官方自带的完整可视化的话,首先需要wandb包。下面给出的是训练模型的bash代码
    python train.py `--dataroot "D:\Sophomore\DesignExperiment\pytorch-CycleGAN-and-pix2pix\mydatasets\Converge" `--model pix2pix `--dataset_mode aligned `--direction AB `--name just_a_try `--display_id 0 `--gpu_ids -1 `--batch_size 1
    

    上述的各行代码意思应该都比较直接,比如--gpu_ids -1表示使用CPU,--display_id 0表示不启动过程中的可视化。有些训练选项是必须的,比如--name,--dataroot等等;还有一部分则是非必须的,会有默认值,比如--display_id默认是0.

    上述并非全部的训练可调选项,还可以调整--niter(初始学习率下的轮数)和 --niter_decay(线性衰减学习率到零的轮数)等等,大家可以在官网 Github \texttt{Github} Github上找到完整的可调选项(不过似乎藏得挺深)。

    官网给出的bash代码是写在一行之中的,考虑到事实上这样并没有那么便于阅读,本人改写成了多行的方式。“ ` (反引号 )”类似与告诉Windows命令行“我在换行”。

  2. 模型保存(训练数据记录)与调用

训练好的模型保存在 ./checkpoints/[name] 目录下,例如我的 --name just_a_try 会保存在 ./checkpoints/just_a_try。在./checkpoints/[name]中,会有loss_log的文档记录训练过程的Loss情况。

如果希望调用模型,可以使用如下代码:

python test.py --dataroot [测试数据路径] `
--name just_a_try `
--model pix2pix`
--direction AB`

3.训练过程中的一些 CLI \texttt{CLI} CLI调试必备知识:如何终止进程


随着我们完成的任务难度上升,尤其是使用 CLI \texttt{CLI} CLI直接与电脑交互时,我们可能会遇到一些意料不到的情况:譬如,在数据合并时,如果我们真的直接在Windows系统上直接调用了combine_A_and_B.py,我们会发现自己的CPU不幸地被干烧,并且我们不知道如何停止。关于为什么会出现该情况,具体原因可以看看为什么我们需要if name == main(所以这也是为何我在前文写了combine_A_and_B_new.py文件的原因)。

现在我们来说说如何终止 CLI \texttt{CLI} CLI中的进程:

  1. 按下Win+X,打开“终端(管理员)”。一定要选择带“管理员”的,否则有时可能无法终止进程。

  2. 查找正在运行的python程序:

    tasklist finstr | "python"
    
  3. 这时会弹出一串正在运行的python程序,几列的含义分别为进程名称(如python.exe,这意味着它们是由Python解释器启动的进程)、PID(Process Identifier,进程标识符)、会话类型(如Console,这意味着它们是在命令行或控制台窗口中启动的)、优先级类以及内存使用量。假定是在我们的调试情境下,那么占用内存最多的肯定就是正在干烧我们GPU的执行数据合并的程序。

  4. 于是我们根据PID精准地将其终结:

taskkill /F /PID 3524

当然,我们如果拿不准到底是哪个程序的话,完全可以一棒子打死:

taskkill /F /IM python.exe

其中/F是强制终止进程,/IM是指定进程名

在输入上述的终止代码后,再返回原本正在run模型的终端,会出现令人长舒一口气的显示:

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

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

相关文章

蓝桥杯 5. 交换瓶子

交换瓶子 原题目链接 题目描述 有 N 个瓶子,编号为 1 ~ N,放在架子上。 例如有 5 个瓶子,当前排列为: 2 1 3 5 4每次可以拿起 2 个瓶子,交换它们的位置。 要求通过若干次交换,使得瓶子的编号从小到大…

Linux 系统渗透提权

Linux 系统渗透提权 比赛题库-Linux 系统渗透提权 文章目录 Linux 系统渗透提权比赛题库-Linux 系统渗透提权 前言一、解题过程1.使用渗透机对服务器信息收集,并将服务器中 SSH 服务端口号作为 flag 提 交;2.使用渗透机对服务器信息收集,并将…

华为OD机试真题——查找接口成功率最优时间段(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现

2025 A卷 100分 题型 本专栏内全部题目均提供Java、python、JavaScript、C、C、GO六种语言的最佳实现方式; 并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析; 本文收录于专栏:《2025华为OD真题目录…

华为OD机试真题——绘图机器(2025A卷:100分)Java/python/JavaScript/C++/C/GO最佳实现

2025 A卷 100分 题型 本文涵盖详细的问题分析、解题思路、代码实现、代码详解、测试用例以及综合分析; 并提供Java、python、JavaScript、C、C语言、GO六种语言的最佳实现方式! 本文收录于专栏:《2025华为OD真题目录全流程解析/备考攻略/经验…

基于 Python(selenium) 的百度新闻定向爬虫:根据输入的关键词在百度新闻上进行搜索,并爬取新闻详情页的内容

该项目能够根据输入的关键词在百度新闻上进行搜索,并爬取新闻详情页的内容。 一、项目准备 1. 开发环境配置 操作系统:支持 Windows、macOS、Linux 等主流操作系统,本文以 Windows 为例进行说明。Python 版本:建议使用 Python 3.8 及以上版本,以确保代码的兼容性和性能。…

MySQL表的操作 -- 表的增删改查

目录 1. 表的创建2. 表的查看3. 表的修改4. 表的删除5. 总结 1. 表的创建 1.查看字符集及效验规则 2. 表的创建 CREATE TABLE table_name ( field1 datatype, field2 datatype, field3 datatype ) character set 字符集 collate 校验规则 engine 存储引擎;创建用户表1 创建用…

如何解决极狐GitLab 合并冲突?

极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有: 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 合并冲突 (BASIC ALL) 合并冲突发生在合并请求的两个分支(源分支和目标分支)对相同代码行进行了不同…

oracle不同数据库版本的自增序列

-- 查看数据库版本 SELECT * FROM v$version WHERE banner LIKE Oracle%; 1. Oracle 12c及以上版本支持 id NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY, id NUMBER GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1) PRIMARY KEY, -- 语法 id NUMBER GENER…

VIC-3D非接触全场应变测量系统用于小尺寸测量之电子元器件篇—研索仪器DIC数字图像相关技术

在5G通信、新能源汽车电子、高密度集成电路快速迭代的今天,电子元件的尺寸及连接工艺已进入亚毫米级竞争阶段,这种小尺寸下的力学性能评估对测量方式的精度有更高的要求,但传统应变测量手段常因空间尺寸限制及分辨率不足难以捕捉真实形变场。…

pod 创建私有库指南

步骤 参考:iOS Pod 私有库创建指南-百度开发者中心 下面主要是对参考链接里面的解释: 创建两个仓库: 一个叫podframe.git,用来存放自定义的framework,比如TestPodFrame.framework一个叫podspec.git,用来…

【JavaEE】Spring AOP的注解实现

目录 一、AOP 与 Spring AOP二、Spring AOP简单实现三、详解Spring AOP3.1 Spring AOP 核心概念3.1.1 切点(Pointcut)3.1.2 连接点(Join Point)3.1.3 通知(Advice)3.1.4 切面(Aspect&#xff09…

协作开发攻略:Git全面使用指南 — 结语

协作开发攻略:Git全面使用指南 — 结语 Git 是一种分布式版本控制系统,用于跟踪文件和目录的变更。它能帮助开发者有效管理代码版本,支持多人协作开发,方便代码合并与冲突解决,广泛应用于软件开发领域。 文中内容仅限技…

如何用AI主动突出画面主体!涂鸦新方案助剪辑、工业巡检、医疗影像等领域,实现自动追踪+智能放大

随着智能 IPC 设备(如安防摄像头、宠物陪伴机器人、婴儿监视器等)日益普及,越来越多的生活场景被实时记录。然而在实际使用中,由于设备安装位置不当、广角镜头视野过大等原因,经常会出现拍摄主体占比过小的问题&#x…

数据湖DataLake和传统数据仓库Datawarehouse的主要区别是什么?优缺点是什么?

数据湖和传统数据仓库的主要区别 以下是数据湖和传统数据仓库的主要区别,以表格形式展示: 特性数据湖传统数据仓库数据类型支持结构化、半结构化及非结构化数据主要处理结构化数据架构设计扁平化架构,所有数据存储在一个大的“池”中多层架…

当智驾成标配,车企暗战升级|2025上海车展

文|刘俊宏 编|王一粟 智能化无处不在的2025年上海车展,回归了卖车的初衷。 光锥智能在展会暴走两天,最大的感触是今年的车展少了争奇斗艳,多了些许务实。 回顾智能汽车时代的三场重要车展。2023年的上海车展充满了…

如何在Spring Boot中禁用Actuator端点安全性

在 Spring Boot 应用中,Spring Boot Actuator 提供了一系列用于监控和管理应用的端点(如 /actuator/health、/actuator/metrics),这些端点默认可能受到 Spring Security 的保护,要求身份验证或授权。然而,在…

【mongodb】系统保留的数据库名

目录 1. admin2. config3. local4. test(非严格保留,但常作为默认测试数据库)5. 注意事项6. 其他相关说明 1. admin 1.用途:用于存储数据库的权限和用户管理相关数据。2.特点:该数据库是 MongoDB 的超级用户数据库&am…

Redis是单线程的,如何提高多核CPU的利用率?

一句话回答: Redis 是单线程处理客户端命令,但可以通过 多实例部署、I/O 多路复用、后台线程 Redis 6 的 I/O Thread 支持,来充分利用多核 CPU。 一、Redis 单线程 ≠ 整个 Redis 都是单线程! Redis 主要的 网络事件 命令执行 …

关于mysql的事务和索引

1. 事务四大特性(ACID) 原子性:事务的操作要么全部成功,要么全部失败回滚,不可分割。 一致性:事务执行前后,数据必须满足业务规则(如账户总额不变)。 隔离性&#xff1…

【Python】保持Selenium稳定爬取的方法(防检测策略)

selenium 防检测策略的方法汇总: 合理设置延迟:请求间添加随机延迟 (2-10秒) 限制爬取频率:控制每小时/每天的请求量 轮换用户代理:准备至少10个不同的User-Agent 使用住宅代理:优先选择高质量的住宅代理IP 处理验…