GPEN命令行参数大全:-i -o指定输入输出实战演示
你是不是也遇到过这样的问题:下载好了GPEN人像修复模型,却卡在“怎么把我的照片喂进去”这一步?明明看到命令里有-i和-o,但试了几次不是报错“file not found”,就是输出文件名不对、路径乱跑,甚至修复结果直接覆盖了原图……别急,这篇就带你彻底搞懂GPEN推理脚本的命令行参数逻辑,不讲虚的,只说你真正会用到的——尤其是-i(输入)和-o(输出)这两个最常用、也最容易踩坑的参数。
我们用的是CSDN星图上预装好的GPEN人像修复增强模型镜像。它不是从零搭环境的折腾版本,而是真正“开箱即用”的工程化镜像:PyTorch 2.5、CUDA 12.4、Python 3.11 全部配平,facexlib人脸对齐、basicsr超分底层、OpenCV图像处理等关键依赖一个不少,连模型权重都提前下好放在本地缓存里。你不需要 pip install、不用手动下载模型、更不用改路径——只要进对目录,参数写对,一张模糊旧照,几秒就能变清晰人像。
下面我们就从最基础的调用开始,一层层拆解inference_gpen.py支持的所有命令行参数,重点聚焦-i和-o的实际组合用法,并给出真实可复现的命令示例、常见错误还原和避坑建议。所有操作均基于镜像内预置环境,无需额外配置。
1. 参数总览:哪些参数真正影响你的输入输出流程
GPEN的推理脚本inference_gpen.py支持十余个命令行参数,但对绝大多数用户来说,真正需要关注、且直接影响“能不能跑通”“结果出在哪”的,其实就五个核心参数。其他参数(如--size、--channel)属于效果微调项,可以后续再学。我们先划清主次:
| 参数 | 短格式 | 长格式 | 是否必需 | 作用说明 | 小白一句话理解 |
|---|---|---|---|---|---|
| 输入路径 | -i | --input | 否(但没它就没得修) | 指定要修复的原始图片位置 | “你要修哪张照片?告诉它路径” |
| 输出路径 | -o | --output | ❌ 否(默认自动生成) | 指定修复后图片保存位置 | “修完放哪儿?你自己说了算” |
| 模型路径 | -m | --model_path | ❌ 否(镜像已预置) | 指定GPEN生成器权重文件 | “用哪个模型修?镜像里已配好” |
| 人脸检测器 | --detect_model | — | ❌ 否(镜像已预置) | 指定dlib或retinaface检测模型 | “怎么找脸?镜像里两个都备着” |
| GPU设备 | --gpu | — | ❌ 否(默认0) | 指定使用哪块GPU(如0,1) | “用哪张显卡修?默认第一张” |
你会发现,-i和-o是唯二完全由你掌控、且直接决定工作流起点和终点的参数。它们不涉及模型结构、不牵扯训练逻辑,就是纯粹的“文件搬运工”。但恰恰因为简单,反而容易被忽略细节——比如路径是否带空格、相对路径从哪算起、扩展名要不要手写……这些细节,才是你反复失败的真正原因。
2.-i参数详解:三种写法,对应三种使用场景
-i(或--input)的作用非常明确:告诉脚本“我要修的这张图,现在存放在哪里”。但它接受的路径格式有讲究,不同写法适用于不同场景。我们用镜像内的实际目录结构来演示(假设你已执行cd /root/GPEN):
2.1 绝对路径:最稳妥,适合脚本批量调用
绝对路径以/开头,指向系统中某个确定位置。它的优势是不会因当前工作目录变化而失效,特别适合写成自动化脚本。
python inference_gpen.py -i /root/my_photos/family_old.jpg -o /root/output/family_fixed.png正确点:
/root/my_photos/family_old.jpg是完整路径,脚本能精准定位- 输出也用绝对路径,避免结果“找不到家”
注意点:
- 确保路径中没有中文、空格、特殊符号(如
/root/我的照片/会报错) - 如果路径含空格,必须用引号包裹:
-i "/root/my photos/old.jpg"
2.2 相对路径:最常用,适合交互式快速测试
相对路径以当前工作目录为基准。当你执行cd /root/GPEN后,所有相对路径都从/root/GPEN这个文件夹开始算。
# 假设你的照片就放在GPEN项目根目录下 python inference_gpen.py -i test_input.jpg -o result_fixed.jpg # 或者放在子文件夹里(比如images/) python inference_gpen.py -i images/portrait_blur.jpg -o output/enhanced_portrait.png正确点:
test_input.jpg表示/root/GPEN/test_input.jpgimages/portrait_blur.jpg表示/root/GPEN/images/portrait_blur.jpg
注意点:
- 不要加
./前缀(虽然语法允许,但GPEN脚本内部处理时可能异常) - 子目录必须事先存在,否则脚本会报
FileNotFoundError,但不会自动创建目录
2.3 不带-i:走默认路径,适合首次体验
如果你完全不写-i参数,脚本会自动加载内置测试图:Solvay_conference_1927.jpg(那张著名的1927年索尔维会议科学家合影)。这是开发者预留的“出厂测试图”,方便你第一时间验证环境是否正常。
python inference_gpen.py # 等价于 python inference_gpen.py -i Solvay_conference_1927.jpg优点:零配置,秒启动,适合刚打开终端的新手。
❌ 缺点:你永远修不了自己的照片——除非你把它重命名为Solvay_conference_1927.jpg并放到/root/GPEN/下(不推荐)。
关键提醒:无论用哪种路径写法,
-i后面必须紧跟一个存在的、可读的图片文件(支持.jpg,.jpeg,.png,.bmp)。如果文件不存在、权限不足、或根本不是图片,脚本会在加载阶段直接报错退出,不会进入修复流程。
3.-o参数详解:命名自由,但路径规则不能破
-o(或--output)是你对结果的“主权声明”:你想让修复后的高清人像叫什么名字?存在哪个文件夹?全由你定。它比-i更灵活,但也更容易因“想当然”而出错。
3.1 只指定文件名:结果保存在当前目录
python inference_gpen.py -i my_face.jpg -o fixed_face.png效果:
- 输入:
/root/GPEN/my_face.jpg - 输出:
/root/GPEN/fixed_face.png(和输入在同一目录)
适用场景:快速测试、单张图临时修复、不想动目录结构。
3.2 指定完整路径+文件名:精准控制存储位置
python inference_gpen.py -i /home/user/input/old_id.jpg -o /home/user/output/id_enhanced.jpg效果:
- 输入从
/home/user/input/读取 - 输出强制写入
/home/user/output/(注意:该目录必须已存在!)
适用场景:生产环境批量处理、按日期/人物分类存储、与上游/下游系统对接。
3.3 只指定目录(不带文件名):这是无效写法!
# ❌ 错误!以下命令会报错 python inference_gpen.py -i photo.jpg -o /root/results/原因:GPEN脚本要求-o参数必须包含完整的文件名和扩展名(如result.png),它不会自动为你补.png。如果你只给一个目录,脚本会尝试把整个目录当“文件名”去写,导致OSError: [Errno 21] Is a directory。
正确做法:
- 手动补全:
-o /root/results/photo_fixed.png - 或用shell变量简化:
-o "/root/results/$(basename -s .jpg photo.jpg)_fixed.png"
3.4 扩展名决定输出格式,且必须与输入兼容
GPEN支持的输出格式取决于你写的扩展名:
你写的-o扩展名 | 实际输出格式 | 说明 |
|---|---|---|
.png | PNG | 无损压缩,推荐用于保存高质量人像,保留透明通道(如有) |
.jpg/.jpeg | JPEG | 有损压缩,文件小,适合网页展示、社交分享 |
.bmp | BMP | 未压缩,体积巨大,一般不用 |
重要限制:输出格式不能随意指定。例如,如果你输入是photo.png,但-o写成result.jpg,脚本会正常运行;但如果你输入是photo.bmp,而-o写成result.png,同样没问题。真正不能跨的是位深度和色彩空间,不过日常人像图基本都是RGB 8-bit,所以只要你用常见扩展名,就不会出错。
4.-i与-o黄金组合:5个真实可用的命令模板
光讲规则不够,我们直接给你5个在镜像里复制粘贴就能跑通的命令。每个都标注了适用场景和潜在风险,帮你避开90%的初学者陷阱。
4.1 单张图快速修复(新手首选)
# 把你的照片放到/root/GPEN/目录下,重命名为input.jpg cp ~/Downloads/my_photo.jpg /root/GPEN/input.jpg # 运行修复,结果叫output.png,就在同一目录 python inference_gpen.py -i input.jpg -o output.png为什么安全:路径简单、无空格、无嵌套、扩展名标准。
输出位置:/root/GPEN/output.png
4.2 批量修复同一目录下所有JPG照片
# 创建输出文件夹 mkdir -p /root/GPEN/batch_output # 用for循环逐张处理(注意:确保输入目录只有.jpg文件) for img in /root/GPEN/batch_input/*.jpg; do # 提取文件名(不含路径和扩展名) name=$(basename "$img" .jpg) # 执行修复,输出到batch_output目录,保持原名+enhanced后缀 python inference_gpen.py -i "$img" -o "/root/GPEN/batch_output/${name}_enhanced.png" done为什么高效:一条命令处理几十张,输出自动归类。
注意:$img用双引号包裹,防止文件名含空格时报错。
4.3 修复并覆盖原图(谨慎使用!)
# 警告:此操作不可逆!请先备份原图 python inference_gpen.py -i original.jpg -o original.jpg适用场景:磁盘空间紧张,且确认原图质量极差、无需保留。
❌ 风险:一旦输出失败(如显存不足),原图可能被损坏或清空。强烈建议仅在测试环境尝试。
4.4 指定GPU设备 + 自定义输出(多卡用户)
# 假设你有两块GPU,想用第二块(ID=1)来跑,避免和其它任务抢资源 python inference_gpen.py -i portrait.jpg -o enhanced.png --gpu 1为什么必要:单机多卡时,不指定--gpu默认用GPU 0,可能被其它进程占满显存导致OOM。
输出位置:/root/GPEN/enhanced.png
4.5 处理带空格的路径(Windows用户迁移常见)
# Windows习惯:照片在"My Photos"文件夹 # 正确写法:用单引号或双引号包裹整个路径 python inference_gpen.py -i '/root/My Photos/2010_family.jpg' -o '/root/My Photos/2010_family_fixed.png' # 或者用双引号(效果相同) python inference_gpen.py -i "/root/My Photos/2010_family.jpg" -o "/root/My Photos/2010_family_fixed.png"关键:引号必须同时包裹-i和-o的值,不能只包一部分。
5. 常见报错还原与速查解决方案
即使参数写对,也可能因环境细节报错。以下是我们在镜像中高频复现的5个错误,附带10秒内可验证的解决步骤:
| 报错信息(截取关键段) | 最可能原因 | 3步速查法 | 一键修复命令 |
|---|---|---|---|
FileNotFoundError: [Errno 2] No such file or directory: 'xxx.jpg' | -i路径写错,或文件真不存在 | 1.ls -l xxx.jpg看文件是否存在2. pwd确认当前目录3. file xxx.jpg确认是图片 | cp /path/to/real/photo.jpg /root/GPEN/ && cd /root/GPEN |
OSError: [Errno 21] Is a directory: '/root/output/' | -o只写了目录,没写文件名 | 1. 检查-o后面有没有.png等扩展名2. echo "test" > /root/output/test.txt看目录是否可写 | 改成:-o /root/output/result.png |
cv2.error: OpenCV(4.9.0) ... error: (-215:Assertion failed) !_src.empty() | 输入图片损坏,或路径指向非图片文件 | 1.identify xxx.jpg(需ImageMagick)2. head -c 20 xxx.jpg | hexdump -C看是否JPEG头3. 用 eog xxx.jpg图形界面打开 | 换一张确认正常的JPG/PNG |
RuntimeError: CUDA out of memory... | 图片太大(如>4000x3000)或GPU显存不足 | 1.nvidia-smi看显存占用2. identify -format "%wx%h\n" xxx.jpg看分辨率3. free -h看系统内存 | 加参数:--size 1024(缩放至1024px宽再修复) |
ModuleNotFoundError: No module named 'facexlib' | 环境未激活 | 1.which python看是否在/root/miniconda3/envs/torch25/bin/python2. conda env list看torch25是否存在3. python -c "import facexlib; print('OK')" | conda activate torch25 && cd /root/GPEN |
记住:90%的GPEN运行失败,根源都在输入输出路径上,而不是模型或代码本身。每次报错,先问自己三个问题:
- 我的
-i路径,用ls命令能列出来吗? - 我的
-o路径,包含完整的文件名和扩展名了吗? - 我当前在
/root/GPEN目录下吗?(用pwd确认)
6. 总结:掌握-i和-o,你就掌握了GPEN的钥匙
回顾一下,我们今天没有讲模型原理、没有调超参、也没有碰训练代码——我们只聚焦在如何把你的照片,稳稳当当地送进去,再干干净净地取出来。而这,正是工程落地的第一步,也是最关键的一步。
你已经知道:
-i不是随便写个名字就行,它必须是存在、可读、格式正确的图片路径,绝对路径最稳,相对路径最常用;-o不是“随便起个名”,它必须是带扩展名的完整文件路径,目录要提前建好,名字要符合Linux文件规范;-i和-o可以自由组合,但路径中的空格、中文、特殊符号,永远是隐形杀手,用引号包裹是最简单的防御;- 所有报错,优先检查路径——
ls、pwd、file这三个命令,就是你的瑞士军刀。
现在,打开你的终端,进入/root/GPEN,挑一张最想修复的老照片,用今天学到的任意一个模板命令跑起来。几秒钟后,你会看到一张细节清晰、皮肤自然、眼神有光的人像——那一刻,你不是在调参,你是在唤醒记忆。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。