Spaces:
Runtime error
Runtime error
| # 🤝 AI 交接文档 · Stable-Makeup 妆容迁移部署 | |
| > 写给下一位 AI:请从 AutoDL 终端开始,跑通推理流程。 | |
| --- | |
| ## 项目目标 | |
| 部署 Stable-Makeup(妆容迁移 AI):用户上传素颜照 + 妆容参考图 → AI 输出迁移后的照片。 | |
| ## 当前状态 | |
| 用户在 **AutoDL** 租了一台 GPU 实例: | |
| - **显卡**: RTX 2080Ti 11GB | |
| - **环境**: PyTorch 2.x + CUDA 12.1 + Python 3.12 + Ubuntu 22.04 | |
| - **状态**: 实例已创建,JupyterLab 已打开,还没开始操作 | |
| 代码仓库:`https://www.modelscope.cn/studios/guobc2026/stable-makeup.git` | |
| --- | |
| ## 下一步(在 AutoDL JupyterLab Terminal 里执行) | |
| ### 第 1 步:拉代码 + 装依赖 | |
| ```bash | |
| git clone https://www.modelscope.cn/studios/guobc2026/stable-makeup.git | |
| cd stable-makeup && pip install -r requirements.txt | |
| ``` | |
| 预计 3-5 分钟。依赖已锁版本,AutoDL 干净环境不会冲突。 | |
| ### 第 2 步:启动 | |
| ```bash | |
| python app.py | |
| ``` | |
| 模型加载(下载 + 加载到 GPU)预计 5-10 分钟。成功标志:打印 `✅ 模型加载完成 (float16 GPU + DDIM)`。 | |
| ### 第 3 步:测试 | |
| Gradio 会打印公网链接(`https://xxx.gradio.live`),打开后上传素颜照和妆容图,点「开始试妆」测试。 | |
| --- | |
| ## 技术架构(关键信息) | |
| ### 推理链路 | |
| ``` | |
| 素颜照 → batch_face.RetinaFace(人脸检测) → SPIGA(98点关键点) → 骨架图 → ControlNet | |
| 参考图 → CLIP ViT-L/14 → SSR Attention → cross-attention注入 | |
| → SD1.5 UNet(DDIM 30步) → 输出 | |
| ``` | |
| ### 文件说明 | |
| | 文件 | 作用 | | |
| |------|------| | |
| | `app.py` | 主入口,Gradio UI + 推理函数 | | |
| | `spiga_draw.py` | 人脸关键点检测 + 骨架图生成 | | |
| | `pipeline_sd15.py` | 自定义 StableDiffusionControlNetPipeline(支持双路 ControlNet + SSR attention) | | |
| | `detail_encoder/` | 妆容编码器(CLIP + SSR cross-attention) | | |
| | `requirements.txt` | 完整依赖,版本已锁定 | | |
| ### 依赖版本链(不可单拆) | |
| ``` | |
| diffusers==0.29.2 + transformers==4.42.4 + peft==0.10.0 | |
| ``` | |
| 这三个版本互相依赖,改任何一个会导致 import 报错。`pipeline_sd15.py` 专为 diffusers 0.29.2 编写。 | |
| ### 模型下载源 | |
| - **SD1.5 / CLIP / SPIGA**: 从 ModelScope 下载(`_ms_download` 函数) | |
| - **Stable-Makeup 预训练权重**: 从 HuggingFace Hub 下载(`Xiaojiu-z/Stable-Makeup`) | |
| - **人脸检测**: batch_face 包(pip 安装,不依赖 GitHub) | |
| ### 精度 | |
| - GPU: float16 | |
| - CPU: float32 | |
| - `app.py` 第 18 行自动判断:`DTYPE = torch.float16 if DEVICE == "cuda" else torch.float32` | |
| --- | |
| ## 已知坑(已踩过) | |
| | 坑 | 症状 | 原因 | 解决 | | |
| |----|------|------|------| | |
| | peft/transformers 版本冲突 | `ImportError: cannot import name 'EncoderDecoderCache'` | peft 新版本要求 transformers ≥ 4.45 | 锁死 peft==0.10.0 | | |
| | GitHub 不可达 | facelib 安装超时 | ModelScope/AutoDL 可能无法访问 GitHub | 用 batch_face 替代 | | |
| | .gitignore 误伤 vendor | `ModuleNotFoundError: _vendor.facelib` | `models/` 递归匹配 | 已删除 vendor 方案 | | |
| | float16 在 CPU 报错 | 推理崩溃 | CPU 不支持 float16 运算 | 自适应精度 | | |
| | 调度器不匹配 | 推理结果不对 | 默认 DPMSolver 不是论文原版 | 改用 DDIMScheduler | | |
| --- | |
| ## 成功标准 | |
| 1. `app.py` 启动无报错 | |
| 2. 模型加载打印 `✅ 模型加载完成` | |
| 3. 上传两张照片后返回一张 512×512 的妆容迁移结果 | |
| 4. 推理时间:GPU 上约 10-20 秒/张 | |