feat: 适配 RTX 3090 (24GB) 环境优化
硬件迁移:从 RTX 5090 (32GB) 迁移到 RTX 3090 (24GB) 主要改动: - 所有启动脚本和配置文件中的 /home/xsl/ 路径替换为 /home/ubuntu/ - 适配新的 24GB VRAM 环境
This commit is contained in:
+12
-12
@@ -8,8 +8,8 @@
|
||||
3. 串行执行,记录每个发型成功/失败
|
||||
|
||||
用法:
|
||||
cd /home/xsl/change_hair/project/hair_service_sd
|
||||
python /home/xsl/change_hair/batch_train_hairstyles.py --src /home/xsl/change_hair/hair_type_images --gender girl [--only 圆-心形] [--start-from 心形-心形]
|
||||
cd /home/ubuntu/change_hair/project/hair_service_sd
|
||||
python /home/ubuntu/change_hair/batch_train_hairstyles.py --src /home/ubuntu/change_hair/hair_type_images --gender girl [--only 圆-心形] [--start-from 心形-心形]
|
||||
|
||||
注意:
|
||||
- 中文 hair_id 直接用文件名(去扩展名)作为 ID
|
||||
@@ -24,14 +24,14 @@ import argparse
|
||||
import subprocess
|
||||
from datetime import datetime
|
||||
|
||||
SRC_DEFAULT = "/home/xsl/change_hair/hair_type_images"
|
||||
WORK_DIR = "/home/xsl/change_hair/data/batch_train_inputs"
|
||||
LOG_FILE = "/home/xsl/change_hair/data/batch_train_log.txt"
|
||||
TRAIN_SCRIPT = "/home/xsl/change_hair/train_hairstyle_full.py"
|
||||
HAIR_SERVICE_DIR = "/home/xsl/change_hair/project/hair_service_sd"
|
||||
LOCK_FILE = "/home/xsl/change_hair/data/batch_train.pid"
|
||||
DONE_FILE = "/home/xsl/change_hair/data/batch_train_done.txt" # 已完成发型清单(断点续跑)
|
||||
LORA_DIR = "/home/xsl/change_hair/data/train_material" # LoRA 输出根目录
|
||||
SRC_DEFAULT = "/home/ubuntu/change_hair/hair_type_images"
|
||||
WORK_DIR = "/home/ubuntu/change_hair/data/batch_train_inputs"
|
||||
LOG_FILE = "/home/ubuntu/change_hair/data/batch_train_log.txt"
|
||||
TRAIN_SCRIPT = "/home/ubuntu/change_hair/train_hairstyle_full.py"
|
||||
HAIR_SERVICE_DIR = "/home/ubuntu/change_hair/project/hair_service_sd"
|
||||
LOCK_FILE = "/home/ubuntu/change_hair/data/batch_train.pid"
|
||||
DONE_FILE = "/home/ubuntu/change_hair/data/batch_train_done.txt" # 已完成发型清单(断点续跑)
|
||||
LORA_DIR = "/home/ubuntu/change_hair/data/train_material" # LoRA 输出根目录
|
||||
|
||||
|
||||
def acquire_lock():
|
||||
@@ -125,7 +125,7 @@ def run_one(hair_id, src_img, gender, py, done_set, force=False):
|
||||
log(f" 调用: {' '.join(cmd[:2])} ... --hair-id {hair_id}")
|
||||
try:
|
||||
# 子进程输出实时写到日志文件
|
||||
proc_log = os.path.join("/home/xsl/change_hair/data", f"subprocess_{hair_id}.log")
|
||||
proc_log = os.path.join("/home/ubuntu/change_hair/data", f"subprocess_{hair_id}.log")
|
||||
with open(proc_log, "w", encoding="utf-8") as f:
|
||||
r = subprocess.run(
|
||||
cmd, cwd=HAIR_SERVICE_DIR,
|
||||
@@ -152,7 +152,7 @@ def main():
|
||||
ap = argparse.ArgumentParser(description="批量训练发型")
|
||||
ap.add_argument("--src", default=SRC_DEFAULT, help="原图目录")
|
||||
ap.add_argument("--gender", default="girl", choices=["boy", "girl"])
|
||||
ap.add_argument("--py", default="/home/xsl/miniconda3/envs/my_hair/bin/python",
|
||||
ap.add_argument("--py", default="/home/ubuntu/miniconda3/envs/my_hair/bin/python",
|
||||
help="python 解释器")
|
||||
ap.add_argument("--only", default=None, help="只训练指定 hair_id(调试用)")
|
||||
ap.add_argument("--start-from", default=None,
|
||||
|
||||
@@ -8,7 +8,7 @@ import sys
|
||||
import cv2
|
||||
import numpy as np
|
||||
|
||||
HAIR_SERVICE_DIR = "/home/xsl/change_hair/project/hair_service_sd"
|
||||
HAIR_SERVICE_DIR = "/home/ubuntu/change_hair/project/hair_service_sd"
|
||||
sys.path.insert(0, HAIR_SERVICE_DIR)
|
||||
os.environ.setdefault("HF_HUB_OFFLINE", "1")
|
||||
|
||||
@@ -87,7 +87,7 @@ def gen_hairline_mask(img_path, mask_path):
|
||||
|
||||
if __name__ == "__main__":
|
||||
img_path = sys.argv[1] if len(sys.argv) > 1 else \
|
||||
"/home/xsl/change_hair/project/data/userImage/8488902485_20250630055547.jpg"
|
||||
"/home/ubuntu/change_hair/project/data/userImage/8488902485_20250630055547.jpg"
|
||||
mask_path = sys.argv[2] if len(sys.argv) > 2 else \
|
||||
"/home/xsl/change_hair/project/logs/hairgrow_test_mask.png"
|
||||
"/home/ubuntu/change_hair/project/logs/hairgrow_test_mask.png"
|
||||
gen_hairline_mask(img_path, mask_path)
|
||||
|
||||
@@ -14,15 +14,15 @@ import time
|
||||
import base64
|
||||
import requests
|
||||
|
||||
HAIR_SERVICE_DIR = "/home/xsl/change_hair/project/hair_service_sd"
|
||||
HAIR_SERVICE_DIR = "/home/ubuntu/change_hair/project/hair_service_sd"
|
||||
sys.path.insert(0, HAIR_SERVICE_DIR)
|
||||
os.chdir(HAIR_SERVICE_DIR)
|
||||
|
||||
BOY_IMG = "/home/xsl/change_hair/images/boy.png"
|
||||
GIRL_IMG = "/home/xsl/change_hair/images/girl.png"
|
||||
HAIRSTYLE_DIR = "/home/xsl/change_hair/project/data/ref_hairstyle"
|
||||
TRAIN_DIR = "/home/xsl/change_hair/data/train_material"
|
||||
PREVIEW_DIR = "/home/xsl/change_hair/hair_grow_service/static/previews" # 预览图存储目录
|
||||
BOY_IMG = "/home/ubuntu/change_hair/images/boy.png"
|
||||
GIRL_IMG = "/home/ubuntu/change_hair/images/girl.png"
|
||||
HAIRSTYLE_DIR = "/home/ubuntu/change_hair/project/data/ref_hairstyle"
|
||||
TRAIN_DIR = "/home/ubuntu/change_hair/data/train_material"
|
||||
PREVIEW_DIR = "/home/ubuntu/change_hair/hair_grow_service/static/previews" # 预览图存储目录
|
||||
SWAP_API = "http://127.0.0.1:8801/api/swapHair/v1"
|
||||
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
hair_template_material/<hair_id>/first##<name>.pkl 1k关键点
|
||||
|
||||
用法:
|
||||
cd /home/xsl/change_hair/project/hair_service_sd
|
||||
cd /home/ubuntu/change_hair/project/hair_service_sd
|
||||
python gen_template_material.py --hair-id new_test_001 --img /path/to/template.jpg
|
||||
"""
|
||||
import os
|
||||
@@ -19,7 +19,7 @@ import pickle
|
||||
import argparse
|
||||
|
||||
ssl._create_default_https_context = ssl._create_unverified_context
|
||||
HAIR_SERVICE_DIR = "/home/xsl/change_hair/project/hair_service_sd"
|
||||
HAIR_SERVICE_DIR = "/home/ubuntu/change_hair/project/hair_service_sd"
|
||||
os.chdir(HAIR_SERVICE_DIR)
|
||||
sys.path.insert(0, HAIR_SERVICE_DIR)
|
||||
os.environ.setdefault("HF_HUB_OFFLINE", "1")
|
||||
|
||||
+4
-4
@@ -6,12 +6,12 @@
|
||||
需要在 hair_service_sd 目录下运行(依赖其模块导入)。
|
||||
|
||||
用法:
|
||||
cd /home/xsl/change_hair/project/hair_service_sd
|
||||
/home/xsl/miniconda3/envs/my_hair/bin/python /home/xsl/change_hair/hair_grow_cli.py \
|
||||
cd /home/ubuntu/change_hair/project/hair_service_sd
|
||||
/home/ubuntu/miniconda3/envs/my_hair/bin/python /home/ubuntu/change_hair/hair_grow_cli.py \
|
||||
--img test.jpg --mask mask.png --strength 0.5 -o result.jpg
|
||||
|
||||
# 批量跑三档强度对比
|
||||
/home/xsl/miniconda3/envs/my_hair/bin/python /home/xsl/change_hair/hair_grow_cli.py \
|
||||
/home/ubuntu/miniconda3/envs/my_hair/bin/python /home/ubuntu/change_hair/hair_grow_cli.py \
|
||||
--img test.jpg --mask mask.png --compare
|
||||
"""
|
||||
import os
|
||||
@@ -20,7 +20,7 @@ import cv2
|
||||
import argparse
|
||||
|
||||
# 把 hair_service_sd 加入路径,使其模块可被导入
|
||||
HAIR_SERVICE_DIR = "/home/xsl/change_hair/project/hair_service_sd"
|
||||
HAIR_SERVICE_DIR = "/home/ubuntu/change_hair/project/hair_service_sd"
|
||||
sys.path.insert(0, HAIR_SERVICE_DIR)
|
||||
|
||||
# 设置离线模式(本机无法访问 huggingface.co)
|
||||
|
||||
@@ -6,9 +6,9 @@
|
||||
原始图 → 人脸检测+1k关键点 → Generator_Matte头发抠图 → 白底合成 + 居中裁剪 → 打标签
|
||||
|
||||
用法:
|
||||
cd /home/xsl/change_hair/project/hair_service_sd
|
||||
/home/xsl/miniconda3/envs/my_hair/bin/python /home/xsl/change_hair/prepare_train_data.py \
|
||||
--input /home/xsl/change_hair/train_images \
|
||||
cd /home/ubuntu/change_hair/project/hair_service_sd
|
||||
/home/ubuntu/miniconda3/envs/my_hair/bin/python /home/ubuntu/change_hair/prepare_train_data.py \
|
||||
--input /home/ubuntu/change_hair/train_images \
|
||||
--hair-id new_hairstyle_001 \
|
||||
--gender boy
|
||||
"""
|
||||
@@ -22,7 +22,7 @@ import argparse
|
||||
ssl._create_default_https_context = ssl._create_unverified_context
|
||||
|
||||
# 必须在 hair_service_sd 目录运行(依赖其模块)
|
||||
HAIR_SERVICE_DIR = "/home/xsl/change_hair/project/hair_service_sd"
|
||||
HAIR_SERVICE_DIR = "/home/ubuntu/change_hair/project/hair_service_sd"
|
||||
os.chdir(HAIR_SERVICE_DIR)
|
||||
sys.path.insert(0, HAIR_SERVICE_DIR)
|
||||
os.environ.setdefault("HF_HUB_OFFLINE", "1")
|
||||
|
||||
+4
-4
@@ -10,16 +10,16 @@
|
||||
# bash start_all.sh status # 查看状态
|
||||
# =====================================================================
|
||||
set -u
|
||||
BASE="/home/xsl/change_hair"
|
||||
BASE="/home/ubuntu/change_hair"
|
||||
PROJ="$BASE/project"
|
||||
LOGDIR="$PROJ/logs"
|
||||
PIDD="$LOGDIR/pids"
|
||||
mkdir -p "$LOGDIR" "$PIDD"
|
||||
|
||||
# conda 环境的 python 路径
|
||||
PY_HAIR="/home/xsl/miniconda3/envs/my_hair/bin/python"
|
||||
PY_SD="/home/xsl/miniconda3/envs/sdwebui/bin/python"
|
||||
PY_PHOTO="/home/xsl/miniconda3/envs/py310/bin/python"
|
||||
PY_HAIR="/home/ubuntu/miniconda3/envs/my_hair/bin/python"
|
||||
PY_SD="/home/ubuntu/miniconda3/envs/sdwebui/bin/python"
|
||||
PY_PHOTO="/home/ubuntu/miniconda3/envs/py310/bin/python"
|
||||
|
||||
# 公共环境变量
|
||||
export CRYPTOGRAPHY_OPENSSL_NO_LEGACY=1 # 旧版 cryptography 兼容
|
||||
|
||||
+2
-2
@@ -2,5 +2,5 @@
|
||||
export CRYPTOGRAPHY_OPENSSL_NO_LEGACY=1
|
||||
export CUDA_VISIBLE_DEVICES=0
|
||||
export APP_WORKER_ID=1
|
||||
cd /home/xsl/change_hair/project/hair_service_sd
|
||||
exec /home/xsl/miniconda3/envs/my_hair/bin/python run_copy_cost_colorb64.py
|
||||
cd /home/ubuntu/change_hair/project/hair_service_sd
|
||||
exec /home/ubuntu/miniconda3/envs/my_hair/bin/python run_copy_cost_colorb64.py
|
||||
|
||||
+2
-2
@@ -5,5 +5,5 @@ export CRYPTOGRAPHY_OPENSSL_NO_LEGACY=1
|
||||
export CUDA_VISIBLE_DEVICES=0
|
||||
export HF_HUB_OFFLINE=1
|
||||
export TRANSFORMERS_OFFLINE=1
|
||||
cd /home/xsl/change_hair/hair_grow_service
|
||||
exec /home/xsl/miniconda3/envs/my_hair/bin/python app.py
|
||||
cd /home/ubuntu/change_hair/hair_grow_service
|
||||
exec /home/ubuntu/miniconda3/envs/my_hair/bin/python app.py
|
||||
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
#!/bin/bash
|
||||
# 独立启动 photo_service,确保脱离会话
|
||||
export CRYPTOGRAPHY_OPENSSL_NO_LEGACY=1
|
||||
cd /home/xsl/change_hair/project/photo_service
|
||||
exec /home/xsl/miniconda3/envs/py310/bin/python -u lora_train_service_1.py
|
||||
cd /home/ubuntu/change_hair/project/photo_service
|
||||
exec /home/ubuntu/miniconda3/envs/py310/bin/python -u lora_train_service_1.py
|
||||
|
||||
+10
-10
@@ -4,7 +4,7 @@
|
||||
# 已传数据自动续传(--partial)
|
||||
|
||||
set -u
|
||||
LOGDIR="/home/xsl/change_hair/project/logs"
|
||||
LOGDIR="/home/ubuntu/change_hair/project/logs"
|
||||
DONE_MARKER="$LOGDIR/sync_all.done"
|
||||
mkdir -p "$LOGDIR"
|
||||
|
||||
@@ -14,15 +14,15 @@ mkdir -p "$LOGDIR"
|
||||
# 任务定义:名称|源|目标
|
||||
# 优先级排序:换发色关键链路优先 → 换发型 → 训练相关 → 大数据最后
|
||||
TASKS=(
|
||||
"photo_service|szlc@192.168.101.63:/home/szlc/project/photo_service/|/home/xsl/change_hair/project/photo_service/"
|
||||
"project_data|szlc@192.168.101.63:/home/szlc/project/data/|/home/xsl/change_hair/project/data/"
|
||||
"hair_service_sd|szlc@192.168.101.63:/home/szlc/project/hair_service_sd/|/home/xsl/change_hair/project/hair_service_sd/"
|
||||
"conda_py310|szlc@192.168.101.63:/home/szlc/miniconda3/envs/py310/|/home/xsl/miniconda3/envs/py310/"
|
||||
"conda_my_hair|szlc@192.168.101.63:/home/szlc/miniconda3/envs/my_hair/|/home/xsl/miniconda3/envs/my_hair/"
|
||||
"conda_sdwebui|szlc@192.168.101.63:/home/szlc/miniconda3/envs/sdwebui/|/home/xsl/miniconda3/envs/sdwebui/"
|
||||
"kohya_ss_home|szlc@192.168.101.63:/home/szlc/project/kohya_ss_home/|/home/xsl/change_hair/project/kohya_ss_home/"
|
||||
"onediff|szlc@192.168.101.63:/home/szlc/project/onediff/|/home/xsl/change_hair/project/onediff/"
|
||||
"train_material|szlc@192.168.101.63:/data/train_material/|/home/xsl/change_hair/data/train_material/"
|
||||
"photo_service|szlc@192.168.101.63:/home/szlc/project/photo_service/|/home/ubuntu/change_hair/project/photo_service/"
|
||||
"project_data|szlc@192.168.101.63:/home/szlc/project/data/|/home/ubuntu/change_hair/project/data/"
|
||||
"hair_service_sd|szlc@192.168.101.63:/home/szlc/project/hair_service_sd/|/home/ubuntu/change_hair/project/hair_service_sd/"
|
||||
"conda_py310|szlc@192.168.101.63:/home/szlc/miniconda3/envs/py310/|/home/ubuntu/miniconda3/envs/py310/"
|
||||
"conda_my_hair|szlc@192.168.101.63:/home/szlc/miniconda3/envs/my_hair/|/home/ubuntu/miniconda3/envs/my_hair/"
|
||||
"conda_sdwebui|szlc@192.168.101.63:/home/szlc/miniconda3/envs/sdwebui/|/home/ubuntu/miniconda3/envs/sdwebui/"
|
||||
"kohya_ss_home|szlc@192.168.101.63:/home/szlc/project/kohya_ss_home/|/home/ubuntu/change_hair/project/kohya_ss_home/"
|
||||
"onediff|szlc@192.168.101.63:/home/szlc/project/onediff/|/home/ubuntu/change_hair/project/onediff/"
|
||||
"train_material|szlc@192.168.101.63:/data/train_material/|/home/ubuntu/change_hair/data/train_material/"
|
||||
)
|
||||
|
||||
echo "========================================" | tee -a "$LOGDIR/sync_main.log"
|
||||
|
||||
+2
-2
@@ -1,8 +1,8 @@
|
||||
#!/bin/bash
|
||||
# 重新同步 conda 环境(上次被 sed 损坏,这次纯净拷贝)
|
||||
set -u
|
||||
CONDA_ENVS="/home/xsl/miniconda3/envs"
|
||||
LOGDIR="/home/xsl/change_hair/project/logs"
|
||||
CONDA_ENVS="/home/ubuntu/miniconda3/envs"
|
||||
LOGDIR="/home/ubuntu/change_hair/project/logs"
|
||||
mkdir -p "$CONDA_ENVS" "$LOGDIR"
|
||||
|
||||
echo "conda 环境重传开始: $(date '+%H:%M:%S')" | tee -a "$LOGDIR/sync_conda.log"
|
||||
|
||||
+3
-3
@@ -2,8 +2,8 @@
|
||||
"""端到端测试:生发走换发型工作流"""
|
||||
import base64, requests, time, sys
|
||||
|
||||
img_path = "/home/xsl/change_hair/project/data/userImage/8488902485_20250630055547.jpg"
|
||||
mask_path = "/home/xsl/change_hair/project/logs/hairgrow_test_mask.png"
|
||||
img_path = "/home/ubuntu/change_hair/project/data/userImage/8488902485_20250630055547.jpg"
|
||||
mask_path = "/home/ubuntu/change_hair/project/logs/hairgrow_test_mask.png"
|
||||
|
||||
with open(img_path, "rb") as f:
|
||||
img_b64 = "data:image/jpeg;base64," + base64.b64encode(f.read()).decode()
|
||||
@@ -24,7 +24,7 @@ try:
|
||||
d = r.json()
|
||||
print(f"HTTP {r.status_code} | state={d.get('state')} | msg={d.get('msg','')} | 耗时={time.time()-t0:.1f}s")
|
||||
if d.get("state") == 0:
|
||||
out = "/home/xsl/change_hair/project/logs/test_grow_swap_result.jpg"
|
||||
out = "/home/ubuntu/change_hair/project/logs/test_grow_swap_result.jpg"
|
||||
with open(out, "wb") as f:
|
||||
f.write(base64.b64decode(d["result"]))
|
||||
print(f"✅ 生发成功! 结果图: {out}")
|
||||
|
||||
+2
-2
@@ -2,7 +2,7 @@
|
||||
"""换发色接口测试"""
|
||||
import base64, json, requests, sys
|
||||
|
||||
img_path = "/home/xsl/change_hair/project/data/userImage/8488902485_20250630055547.jpg"
|
||||
img_path = "/home/ubuntu/change_hair/project/data/userImage/8488902485_20250630055547.jpg"
|
||||
with open(img_path, "rb") as f:
|
||||
img_b64 = base64.b64encode(f.read()).decode()
|
||||
|
||||
@@ -21,7 +21,7 @@ try:
|
||||
result = d.get("result", "")
|
||||
if d.get("state") == 0 and result:
|
||||
# 保存结果图
|
||||
out = "/home/xsl/change_hair/project/logs/test_haircolor_result.jpg"
|
||||
out = "/home/ubuntu/change_hair/project/logs/test_haircolor_result.jpg"
|
||||
with open(out, "wb") as f:
|
||||
f.write(base64.b64decode(result))
|
||||
print(f"✅ 换发色成功! 结果图已保存: {out} ({len(result)} bytes base64)")
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
"""测试 /api/hairGrow/v1 接口"""
|
||||
import base64, requests, sys
|
||||
|
||||
img_path = "/home/xsl/change_hair/project/data/userImage/8488902485_20250630055547.jpg"
|
||||
mask_path = "/home/xsl/change_hair/project/logs/hairgrow_test_mask.png"
|
||||
img_path = "/home/ubuntu/change_hair/project/data/userImage/8488902485_20250630055547.jpg"
|
||||
mask_path = "/home/ubuntu/change_hair/project/logs/hairgrow_test_mask.png"
|
||||
|
||||
with open(img_path, "rb") as f:
|
||||
img_b64 = "data:image/jpeg;base64," + base64.b64encode(f.read()).decode()
|
||||
@@ -26,7 +26,7 @@ try:
|
||||
print(f"HTTP {r.status_code} | msg={d.get('msg')} | state={d.get('state')} | 耗时={time.time()-t0:.1f}s")
|
||||
result = d.get("result", "")
|
||||
if d.get("state") == 0 and result:
|
||||
out = "/home/xsl/change_hair/project/logs/test_hairgrow_api_result.jpg"
|
||||
out = "/home/ubuntu/change_hair/project/logs/test_hairgrow_api_result.jpg"
|
||||
with open(out, "wb") as f:
|
||||
f.write(base64.b64decode(result))
|
||||
print(f"✅ 生发成功! 结果图: {out}")
|
||||
|
||||
+2
-2
@@ -2,7 +2,7 @@
|
||||
"""换发型接口测试"""
|
||||
import base64, json, requests, sys, time
|
||||
|
||||
img_path = "/home/xsl/change_hair/project/data/userImage/8488902485_20250630055547.jpg"
|
||||
img_path = "/home/ubuntu/change_hair/project/data/userImage/8488902485_20250630055547.jpg"
|
||||
with open(img_path, "rb") as f:
|
||||
img_b64 = base64.b64encode(f.read()).decode()
|
||||
|
||||
@@ -22,7 +22,7 @@ try:
|
||||
print(f"HTTP {r.status_code} | msg={d.get('msg')} | state={d.get('state')} | 耗时={time.time()-t0:.1f}s")
|
||||
data = d.get("data", "")
|
||||
if d.get("state") == 0 and data:
|
||||
out = "/home/xsl/change_hair/project/logs/test_swaphair_result.jpg"
|
||||
out = "/home/ubuntu/change_hair/project/logs/test_swaphair_result.jpg"
|
||||
with open(out, "wb") as f:
|
||||
f.write(base64.b64decode(data))
|
||||
print(f"✅ 换发型成功! 结果图已保存: {out} ({len(data)} bytes base64)")
|
||||
|
||||
+1
-1
@@ -4,7 +4,7 @@ import requests, json
|
||||
|
||||
# 用一个已有完整训练素材的发型
|
||||
HAIR_ID = "1905785164224868354"
|
||||
MATERIAL_DIR = f"/home/xsl/change_hair/data/train_material/{HAIR_ID}"
|
||||
MATERIAL_DIR = f"/home/ubuntu/change_hair/data/train_material/{HAIR_ID}"
|
||||
|
||||
payload = {
|
||||
"task_id": f"test_train_{HAIR_ID}",
|
||||
|
||||
@@ -15,7 +15,7 @@ import time
|
||||
import json
|
||||
import shutil
|
||||
|
||||
HAIR_SERVICE_DIR = "/home/xsl/change_hair/project/hair_service_sd"
|
||||
HAIR_SERVICE_DIR = "/home/ubuntu/change_hair/project/hair_service_sd"
|
||||
os.chdir(HAIR_SERVICE_DIR)
|
||||
sys.path.insert(0, HAIR_SERVICE_DIR)
|
||||
os.environ.setdefault("HF_HUB_OFFLINE", "1")
|
||||
@@ -26,15 +26,15 @@ import requests as req
|
||||
|
||||
# (hair_id, gender, template_img)
|
||||
HAIRSTYLES = [
|
||||
("chang_tuoyuan", "girl", "/home/xsl/change_hair/hair_type_images/chang_tuoyuan/chang_tuoyuan.jpg"),
|
||||
("chang_bolang", "girl", "/home/xsl/change_hair/hair_type_images/chang_bolang/chang_bolang.jpg"),
|
||||
("chang_zhixian", "girl", "/home/xsl/change_hair/hair_type_images/chang_zhixian/chang_zhixian.jpg"),
|
||||
("chang_huaban", "girl", "/home/xsl/change_hair/hair_type_images/chang_huaban/chang_huaban.jpg"),
|
||||
("chang_xinxing", "girl", "/home/xsl/change_hair/hair_type_images/chang_xinxing/chang_xinxing.jpg"),
|
||||
("chang_tuoyuan", "girl", "/home/ubuntu/change_hair/hair_type_images/chang_tuoyuan/chang_tuoyuan.jpg"),
|
||||
("chang_bolang", "girl", "/home/ubuntu/change_hair/hair_type_images/chang_bolang/chang_bolang.jpg"),
|
||||
("chang_zhixian", "girl", "/home/ubuntu/change_hair/hair_type_images/chang_zhixian/chang_zhixian.jpg"),
|
||||
("chang_huaban", "girl", "/home/ubuntu/change_hair/hair_type_images/chang_huaban/chang_huaban.jpg"),
|
||||
("chang_xinxing", "girl", "/home/ubuntu/change_hair/hair_type_images/chang_xinxing/chang_xinxing.jpg"),
|
||||
]
|
||||
|
||||
HAIR_CALLBACK = "http://127.0.0.1:8801/api/hair/trainCallBack"
|
||||
UPLOAD_TRAIN_DIR = "/home/xsl/change_hair/project/data/upload_train_imgs"
|
||||
UPLOAD_TRAIN_DIR = "/home/ubuntu/change_hair/project/data/upload_train_imgs"
|
||||
|
||||
# 导入 step4/step5 函数(会触发模型加载)
|
||||
from train_hairstyle_full import step4_template_material, step5_preview
|
||||
|
||||
@@ -6,8 +6,8 @@
|
||||
串接 prepare_train_data / gen_template_material / photo_service训练 / 回调 / 预览图
|
||||
|
||||
用法:
|
||||
cd /home/xsl/change_hair/project/hair_service_sd
|
||||
python /home/xsl/change_hair/train_hairstyle_full.py --hair-id huaban1 --input /home/xsl/change_hair/huaban1 --gender girl --template-img /home/xsl/change_hair/huaban1/huaban1.jpg
|
||||
cd /home/ubuntu/change_hair/project/hair_service_sd
|
||||
python /home/ubuntu/change_hair/train_hairstyle_full.py --hair-id huaban1 --input /home/ubuntu/change_hair/huaban1 --gender girl --template-img /home/ubuntu/change_hair/huaban1/huaban1.jpg
|
||||
"""
|
||||
import os
|
||||
import sys
|
||||
@@ -21,7 +21,7 @@ import argparse
|
||||
import requests as req
|
||||
|
||||
ssl._create_default_https_context = ssl._create_unverified_context
|
||||
HAIR_SERVICE_DIR = "/home/xsl/change_hair/project/hair_service_sd"
|
||||
HAIR_SERVICE_DIR = "/home/ubuntu/change_hair/project/hair_service_sd"
|
||||
os.chdir(HAIR_SERVICE_DIR)
|
||||
sys.path.insert(0, HAIR_SERVICE_DIR)
|
||||
os.environ.setdefault("HF_HUB_OFFLINE", "1")
|
||||
@@ -48,9 +48,9 @@ RESOLUTIONS = [512, 768, 1024, 1280, 1536]
|
||||
PHOTO_TRAIN = "http://127.0.0.1:32678/api/hair/train"
|
||||
HAIR_CALLBACK = "http://127.0.0.1:8801/api/hair/trainCallBack"
|
||||
SWAP_API = "http://127.0.0.1:8801/api/swapHair/v1"
|
||||
GIRL_IMG = "/home/xsl/change_hair/images/girl.png"
|
||||
BOY_IMG = "/home/xsl/change_hair/images/boy.png"
|
||||
PREVIEW_DIR = "/home/xsl/change_hair/hair_grow_service/static/previews"
|
||||
GIRL_IMG = "/home/ubuntu/change_hair/images/girl.png"
|
||||
BOY_IMG = "/home/ubuntu/change_hair/images/boy.png"
|
||||
PREVIEW_DIR = "/home/ubuntu/change_hair/hair_grow_service/static/previews"
|
||||
|
||||
_detector = _aligner = _matte = None
|
||||
def get_models():
|
||||
|
||||
@@ -8,8 +8,8 @@
|
||||
阶段C: 启动服务后串行 step3(回调生成ref材质) + step4(模板) + step5(预览)
|
||||
|
||||
用法:
|
||||
cd /home/xsl/change_hair/project/hair_service_sd
|
||||
python /home/xsl/change_hair/train_hairstyles_parallel.py
|
||||
cd /home/ubuntu/change_hair/project/hair_service_sd
|
||||
python /home/ubuntu/change_hair/train_hairstyles_parallel.py
|
||||
"""
|
||||
import os
|
||||
import sys
|
||||
@@ -18,7 +18,7 @@ import json
|
||||
import subprocess
|
||||
from concurrent.futures import ThreadPoolExecutor, as_completed
|
||||
|
||||
HAIR_SERVICE_DIR = "/home/xsl/change_hair/project/hair_service_sd"
|
||||
HAIR_SERVICE_DIR = "/home/ubuntu/change_hair/project/hair_service_sd"
|
||||
os.chdir(HAIR_SERVICE_DIR)
|
||||
sys.path.insert(0, HAIR_SERVICE_DIR)
|
||||
os.environ.setdefault("HF_HUB_OFFLINE", "1")
|
||||
@@ -29,11 +29,11 @@ os.environ.setdefault("CUDA_VISIBLE_DEVICES", "0")
|
||||
# ====== 配置:本次要训练的发型 ======
|
||||
# (hair_id, input_dir, gender, template_img)
|
||||
HAIRSTYLES = [
|
||||
("chang_tuoyuan", "/home/xsl/change_hair/hair_type_images/chang_tuoyuan", "girl", "/home/xsl/change_hair/hair_type_images/chang_tuoyuan/chang_tuoyuan.jpg"),
|
||||
("chang_bolang", "/home/xsl/change_hair/hair_type_images/chang_bolang", "girl", "/home/xsl/change_hair/hair_type_images/chang_bolang/chang_bolang.jpg"),
|
||||
("chang_zhixian", "/home/xsl/change_hair/hair_type_images/chang_zhixian", "girl", "/home/xsl/change_hair/hair_type_images/chang_zhixian/chang_zhixian.jpg"),
|
||||
("chang_huaban", "/home/xsl/change_hair/hair_type_images/chang_huaban", "girl", "/home/xsl/change_hair/hair_type_images/chang_huaban/chang_huaban.jpg"),
|
||||
("chang_xinxing", "/home/xsl/change_hair/hair_type_images/chang_xinxing", "girl", "/home/xsl/change_hair/hair_type_images/chang_xinxing/chang_xinxing.jpg"),
|
||||
("chang_tuoyuan", "/home/ubuntu/change_hair/hair_type_images/chang_tuoyuan", "girl", "/home/ubuntu/change_hair/hair_type_images/chang_tuoyuan/chang_tuoyuan.jpg"),
|
||||
("chang_bolang", "/home/ubuntu/change_hair/hair_type_images/chang_bolang", "girl", "/home/ubuntu/change_hair/hair_type_images/chang_bolang/chang_bolang.jpg"),
|
||||
("chang_zhixian", "/home/ubuntu/change_hair/hair_type_images/chang_zhixian", "girl", "/home/ubuntu/change_hair/hair_type_images/chang_zhixian/chang_zhixian.jpg"),
|
||||
("chang_huaban", "/home/ubuntu/change_hair/hair_type_images/chang_huaban", "girl", "/home/ubuntu/change_hair/hair_type_images/chang_huaban/chang_huaban.jpg"),
|
||||
("chang_xinxing", "/home/ubuntu/change_hair/hair_type_images/chang_xinxing", "girl", "/home/ubuntu/change_hair/hair_type_images/chang_xinxing/chang_xinxing.jpg"),
|
||||
]
|
||||
PARALLEL = 2 # LoRA 训练并发数
|
||||
|
||||
@@ -137,7 +137,7 @@ def main():
|
||||
log(f"阶段B完成: LoRA 训练完成 {len(completed)}/{len(step1_ok)}")
|
||||
|
||||
# 写一个完成清单文件,供阶段C脚本读取
|
||||
done_file = "/home/xsl/change_hair/project/logs/train_batch_done.json"
|
||||
done_file = "/home/ubuntu/change_hair/project/logs/train_batch_done.json"
|
||||
with open(done_file, "w") as f:
|
||||
json.dump({"completed": sorted(completed), "all": ids}, f)
|
||||
log(f"已写入完成清单: {done_file}")
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
通过 ThreadPoolExecutor 控制并发数。
|
||||
|
||||
用法:
|
||||
python /home/xsl/change_hair/train_lora_parallel.py
|
||||
python /home/ubuntu/change_hair/train_lora_parallel.py
|
||||
|
||||
前提:step1 训练数据已准备好(data/train_material/<hid>/images/1_hairstyle/*.png)
|
||||
"""
|
||||
@@ -16,11 +16,11 @@ import time
|
||||
import subprocess
|
||||
from concurrent.futures import ThreadPoolExecutor, as_completed
|
||||
|
||||
TRAIN_DIR = "/home/xsl/change_hair/data/train_material"
|
||||
KOHYA_WORKDIR = "/home/xsl/change_hair/project/kohya_ss_home/kohya_ss"
|
||||
BASE_MODEL = "/home/xsl/change_hair/project/onediff/stable-diffusion-webui/models/Stable-diffusion/v1-5-pruned-emaonly.safetensors"
|
||||
KOHYA_ACCEL = "/home/xsl/miniconda3/envs/kohya/bin/accelerate"
|
||||
LOG_DIR = "/home/xsl/change_hair/project/logs"
|
||||
TRAIN_DIR = "/home/ubuntu/change_hair/data/train_material"
|
||||
KOHYA_WORKDIR = "/home/ubuntu/change_hair/project/kohya_ss_home/kohya_ss"
|
||||
BASE_MODEL = "/home/ubuntu/change_hair/project/onediff/stable-diffusion-webui/models/Stable-diffusion/v1-5-pruned-emaonly.safetensors"
|
||||
KOHYA_ACCEL = "/home/ubuntu/miniconda3/envs/kohya/bin/accelerate"
|
||||
LOG_DIR = "/home/ubuntu/change_hair/project/logs"
|
||||
|
||||
# 本次要训练的发型
|
||||
HAIRSTYLES = ["chang_tuoyuan", "chang_zhixian", "chang_huaban", "chang_xinxing"]
|
||||
|
||||
Reference in New Issue
Block a user