☰
Stable Diffusion v2 完整实践指南:从文本到图像、深度条件生成到图像修复的推理与配置解析
2026/10/1 8:03:57 网站建设 项目流程
  • 计算机视觉
  • 媒体生成
  • 深度学习
  • 基础模型

【免费下载链接】stablediffusion

High-Resolution Image Synthesis with Latent Diffusion Models

项目地址:https://gitcode.com/GitHub_Trending/st/stablediffusion
点击查看免费下载

Stable Diffusion v2 是本仓库(Stable Diffusion Version 2)的核心主题:一系列从零训练、持续更新的潜空间扩散模型(Latent Diffusion Models),涵盖 768×768 文本生成图像、深度条件生成、x4 超分辨率、图像修复与 Stable unCLIP 图像变体等能力。本文以仓库根目录 README.md 为主体骨架,结合 scripts/txt2img.py、scripts/img2img.py 等推理脚本与configs/stable-diffusion/下的完整配置,逐项讲解环境搭建、命令行采样、核心参数含义、底层架构与配置原理,帮助你直接复现并深入理解这套模型体系的每一个推理入口。

一、模型家族与版本演进

README 以 News 时间线记录了 v2 系列模型的关键里程碑,理解这些版本差异是正确选择权重与配置文件的前提。

1.1 v2.0:从零训练的起点(2022-11-24)

  • Stable Diffusion 2.0-v:768×768 分辨率,U-Net 参数量与 1.5 相同,但文本编码器换成了 OpenCLIP-ViT/H,并且是从零训练。它是所谓的v-prediction模型(参见 arXiv:2202.00512),即模型预测的不是噪声本身,而是速度分量v。
  • Stable Diffusion 2.0-base:512×512 分辨率,标准的噪声预测(noise-prediction)模型,2.0-v 在其基础上微调而来。
  • 同时发布了三类下游模型:x4 潜空间文本引导超分辨率模型、深度引导扩散模型(基于 MiDaS 单目深度估计,用于保持结构的 img2img 与形状条件合成)、文本引导图像修复模型(由 2.0-base 微调)。

1.2 v2.1:更宽松的过滤策略(2022-12-07)

  • Stable Diffusion 2.1-v(768×768)与Stable Diffusion 2.1-base(512×512),参数量与架构与 2.0 完全一致,只是在 LAION-5B 数据集更宽松的 NSFW 过滤子集上微调。
  • 一个重要的推理细节:当未安装xformers时,模型的注意力操作默认以全精度(fp32)计算。若希望启用 fp16(在 v2.1 模型上,原生注意力模块可能引发数值不稳定),需以环境变量方式运行脚本:
ATTN_PRECISION=fp16 python <thescript.py>

1.3 Stable unCLIP 2.1(2023-03-24)

基于 SD2.1-768 微调的新模型,支持图像变体(image variations)与混合操作(原理见Hierarchical Text-Conditional Image Generation with CLIP Latents,本文第九节也会展开。

1.4 v2 的架构定位

README 明确给出 v2 的定义性配置:下采样因子 8 的自编码器(AutoencoderKL)+ 865M 参数的 U-Net + OpenCLIP ViT-H/14 文本编码器,SD 2-v 模型输出 768×768 像素图像。文本编码器取penultimate(倒数第二层)嵌入作为条件,这一点在 configs/stable-diffusion/v2-inference-v.yaml 的cond_stage_config中写为layer: "penultimate",对应 ldm/modules/encoders/modules.py 中FrozenOpenCLIPEmbedder的实现。

仓库在 8 组无分类器引导尺度(1.5、2.0、3.0、4.0、5.0、6.0、7.0、8.0)与 50 步 DDIM 采样下评估了各 checkpoint 的相对提升,结果见下图:

二、环境准备与依赖安装

2.1 基础依赖

README 给出的安装路径是直接复用已有的 latent diffusion 环境,核心命令如下:

conda install pytorch==1.12.1 torchvision==0.13.1 -c pytorch pip install transformers==4.19.2 diffusers invisible-watermark pip install -e .

对照仓库根目录的 environment.yaml 可以看到完整的推荐环境:python=3.8.5、cudatoolkit=11.3、pytorch=1.12.1、torchvision=0.13.1、transformers==4.19.2、open_clip_torch==2.0.2、invisible-watermark>=0.1.5、streamlit==1.12.1、omegaconf==2.1.1、pytorch-lightning==1.4.2等。其中invisible-watermark用于给输出打不可见水印,streamlit与streamlit-drawable-canvas用于 Web Demo,open_clip_torch提供 v2 所需的 OpenCLIP 文本编码器。

2.2 xformers 高效注意力

README 强烈推荐安装 xformers 以获得 GPU 上的效率与速度提升(官方在 A100 + CUDA 11.4 上测试)。安装需要较新的nvcc与gcc/g++:

export CUDA_HOME=/usr/local/cuda-11.4 conda install -c nvidia/label/cuda-11.4.0 cuda-nvcc conda install -c conda-forge gcc conda install -c conda-forge gxx_linux-64==9.5.0

然后编译安装(编译最长约 30 分钟):

cd .. git clone https://github.com/facebookresearch/xformers.git cd xformers git submodule update --init --recursive pip install -r requirements.txt pip install -e . cd ../stablediffusion

安装成功后,代码会自动将 U-Net 与自编码器中的自注意力、交叉注意力层切换为 memory efficient attention 实现。这一机制可以从 scripts/txt2img.py 的采样流程中得到印证:整个推理在torch.no_grad()下执行,注意力精度行为受环境变量与依赖共同决定。

三、Text-to-Image 文本生成图像

3.1 权重与配置准备

首先下载SD2.1-v与SD2.1-base权重。仓库提供了两套推理配置:

  • configs/stable-diffusion/v2-inference-v.yaml:SD2-v(768px,v-prediction);
  • configs/stable-diffusion/v2-inference.yaml:SD2-base(512px,标准噪声预测)。

3.2 采样命令

从SD2.1-v模型采样:

python scripts/txt2img.py --prompt "a professional photograph of an astronaut riding a horse" --ckpt <path/to/768model.ckpt/> --config configs/stable-diffusion/v2-inference-v.yaml --H 768 --W 768

从 base 模型采样:

python scripts/txt2img.py --prompt "a professional photograph of an astronaut riding a horse" --ckpt <path/to/model.ckpt/> --config <path/to/config.yaml/>

默认使用DDIM 采样器(arXiv:2010.02502),以 50 步渲染 768×768 图像。经验上,v 系列模型可以配合更高的引导尺度使用。下面两张是 README 展示的 txt2img 示例输出:

3.3 命令行参数全解

scripts/txt2img.py 中的parse_args()提供了完整的采样控制项,整理如下:

参数默认值含义
--prompt"a professional photograph of an astronaut riding a triceratops"渲染用的提示词
--outdiroutputs/txt2img-samples结果输出目录
--steps50DDIM 采样步数
--plmsFalse(flag)改用 PLMS 采样(arXiv:2202.09778)
--dpmFalse(flag)改用 DPM-Solver(2) 采样器(arXiv:2206.00927)
--fixed_codeFalse(flag)所有样本使用相同的起始噪声码,便于对照
--ddim_eta0.0DDIM 的 eta 值,0.0对应确定性采样
--n_iter3重复采样轮数
--H/--W512/512输出图像的高/宽(像素空间)
--C4潜空间通道数
--f8下采样因子(通常为 8 或 16)
--n_samples3每个提示词生成的样本数(即 batch size)
--n_rows0网格图行数(默认为n_samples)
--scale9.0无分类器引导尺度:eps = eps(x, empty) + scale * (eps(x, cond) - eps(x, empty))
--from-file无从文本文件按行读取提示词
--configconfigs/stable-diffusion/v2-inference.yaml构建模型的配置文件
--ckpt无模型 checkpoint 路径
--seed42随机种子(用于可复现采样)
--precisionautocastfull或autocast
--repeat1文件中每条提示词重复的次数
--devicecpucpu或cuda
--torchscript/--ipex/--bf16False(flag)Intel CPU 优化相关,见第四节

采样器选择逻辑在main()中:--plms优先于--dpm,否则回退到DDIMSampler。三条采样路径分别对应 ldm/models/diffusion/ddim.py、ldm/models/diffusion/plms.py 与 ldm/models/diffusion/dpm_solver/sampler.py。输出时,脚本会把每个 batch 的样本保存为独立 PNG(samples/子目录),同时用make_grid拼接成网格图grid-XXXX.png。

3.4 推理配置逐项解析

以 configs/stable-diffusion/v2-inference-v.yaml 为例,逐项说明关键字段(注释已内嵌于配置中):

  • parameterization: "v":v-prediction 参数化,这是 2.0-v / 2.1-v 与 base 模型(该行缺失,即噪声预测)的核心区别;
  • linear_start: 0.00085/linear_end: 0.0120:扩散噪声调度表的边界值;timesteps: 1000为总扩散步数;
  • image_size: 64:潜空间特征图尺寸(512 ÷ 8 = 64,768 分辨率时相应为 96);
  • channels: 4:潜空间通道数(即上面的--C);
  • conditioning_key: crossattn:使用交叉注意力注入文本条件;
  • scale_factor: 0.18215:潜空间缩放因子,在get_first_stage_encoding阶段对编码结果做缩放;
  • use_ema: False:这是推理专用配置的关键。README 明确说明:所有版本的推理配置都设计为配合EMA-only checkpoint使用,因此必须保持use_ema=False,否则代码会尝试从非 EMA 权重切换到 EMA 权重而报错;
  • unet_config:UNetModel,model_channels: 320、channel_mult: [1,2,4,4]、num_res_blocks: 2、attention_resolutions: [4,2,1]、num_head_channels: 64,并开启use_spatial_transformer: True、use_linear_in_transformer: True、transformer_depth: 1,context_dim: 1024与 OpenCLIP 倒数第二层嵌入维度对齐;
  • first_stage_config:AutoencoderKL,embed_dim: 4、z_channels: 4、resolution: 256、ch: 128、ch_mult: [1,2,4,4]——即下采样因子 8 的自编码器;
  • cond_stage_config:FrozenOpenCLIPEmbedder,freeze: True、layer: "penultimate"。

值得注意的是,scripts/txt2img.py 在 TorchScript 路径中构造的上下文张量形状为(2, 77, 1024),印证了文本侧按 77 token 截断、嵌入维度 1024 的约定。

3.5 不可见水印

txt2img.py 在保存每张图片前调用put_watermark(),将字节串"SDV2"通过dwtDct算法编码进图像(imwatermark.WatermarkEncoder)。配套的验证脚本是 scripts/tests/test_watermark.py,它用WatermarkDecoder('bytes', 136)解码并打印水印内容,可用来确认输出确实为机器生成:

python scripts/tests/test_watermark.py <path-to-image>

四、Intel CPU 上的推理优化(IPEX)

如果你计划在 Intel CPU 上运行 Text-to-Image,README 提供了基于 TorchScript + Intel® Extension for PyTorch*(IPEX)的优化路径:将算子内存布局优化为 Channel Last、利用机器上最先进的指令集、优化算子实现等。

4.1 依赖安装

apt-get install numactl libjemalloc-dev pip install intel-openmp pip install intel_extension_for_pytorch -f https://software.intel.com/ipex-whl-stable

官方在Ubuntu 20.04上验证过该路径。对应的推理配置位于 configs/stable-diffusion/intel/,与 GPU 配置的关键差异是use_checkpoint: False、use_fp16: False(bf16 版额外增加use_bf16: True)。

4.2 fp32 采样命令

从SD2.1-v模型采样(--ninstance指定并发实例数):

MALLOC_CONF=oversize_threshold:1,background_thread:true,metadata_thp:auto,dirty_decay_ms:9000000000,muzzy_decay_ms:9000000000 python -m intel_extension_for_pytorch.cpu.launch --ninstance <number of an instance> --enable_jemalloc scripts/txt2img.py --prompt "a corgi is playing guitar, oil on canvas" --ckpt <path/to/768model.ckpt/> --config configs/stable-diffusion/intel/v2-inference-v-fp32.yaml --H 768 --W 768 --precision full --device cpu --torchscript --ipex

base 模型同理,使用 configs/stable-diffusion/intel/v2-inference-fp32.yaml:

MALLOC_CONF=oversize_threshold:1,background_thread:true,metadata_thp:auto,dirty_decay_ms:9000000000,muzzy_decay_ms:9000000000 python -m intel_extension_for_pytorch.cpu.launch --ninstance <number of an instance> --enable_jemalloc scripts/txt2img.py --prompt "a corgi is playing guitar, oil on canvas" --ckpt <path/to/model.ckpt/> --config configs/stable-diffusion/intel/v2-inference-fp32.yaml --n_samples 1 --n_iter 4 --precision full --device cpu --torchscript --ipex

4.3 bf16 采样命令

若 CPU 支持bfloat16,可用 bf16 获得额外性能提升:

# SD2.1-v MALLOC_CONF=oversize_threshold:1,background_thread:true,metadata_thp:auto,dirty_decay_ms:9000000000,muzzy_decay_ms:9000000000 python -m intel_extension_for_pytorch.cpu.launch --ninstance <number of an instance> --enable_jemalloc scripts/txt2img.py --prompt "a corgi is playing guitar, oil on canvas" --ckpt <path/to/768model.ckpt/> --config configs/stable-diffusion/intel/v2-inference-v-bf16.yaml --H 768 --W 768 --precision full --device cpu --torchscript --ipex --bf16 # SD2.1-base MALLOC_CONF=oversize_threshold:1,background_thread:true,metadata_thp:auto,dirty_decay_ms:9000000000,muzzy_decay_ms:9000000000 python -m intel_extension_for_pytorch.cpu.launch --ninstance <number of an instance> --enable_jemalloc scripts/txt2img.py --prompt "a corgi is playing guitar, oil on canvas" --ckpt <path/to/model.ckpt/> --config configs/stable-diffusion/intel/v2-inference-bf16.yaml --precision full --device cpu --torchscript --ipex --bf16

从源码角度看,scripts/txt2img.py 中--bf16仅在torchscript+ipex组合下受支持;若 bf16 配置搭配 fp16 权重或反之,脚本会抛出明确的 ValueError,提示使用configs/stable-diffusion/intel/下对应的 bf16/fp32 配置。

五、深度条件生成(Depth-Conditional Stable Diffusion)

经典的 img2img 会引入相对初始图像较明显的语义变化。如果希望保持形状结构,README 提供了深度条件模型:由 MiDaS 推断单目深度,再以(相对)深度输出作为扩散模型的条件。

5.1 准备与运行

下载 depth-conditional stable diffusion 模型权重,以及dpt_hybridMiDaS 模型权重,将后者放入midas_models文件夹,然后运行 Gradio Demo:

python scripts/gradio/depth2img.py configs/stable-diffusion/v2-midas-inference.yaml <path-to-ckpt>

或 Streamlit Demo:

streamlit run scripts/streamlit/depth2img.py configs/stable-diffusion/v2-midas-inference.yaml <path-to-ckpt>

该方法可直接用于 base 模型自己生成的样本。以 assets/stable-samples/depth2img/old_man.png 为例:depth2img.py先让 MiDaS 推断单目深度,再让扩散模型以该(相对)深度为条件重绘。该模型尤其适合写实风格;当强度达到最大值 1.0 时,模型会丢弃所有像素级信息,只依赖文本提示与推断出的单目深度。仓库给出了完整的端到端演示动图:

5.2 配置要点

configs/stable-diffusion/v2-midas-inference.yaml 中,模型目标为LatentDepth2ImageDiffusion,conditioning_key: hybrid;新增depth_stage_config指定MiDaSInference且model_type: "dpt_hybrid";U-Net 的in_channels变为5(4 通道潜变量 + 1 通道深度图),这正是"深度条件"在架构上的直接体现。

六、经典 img2img

img2img本质上是 SDEdit 的一个应用(作者 Chenlin Meng 来自斯坦福 AI Lab)。命令:

python scripts/img2img.py --prompt "A fantasy landscape, trending on artstation" --init-img <path-to-img.jpg> --strength 0.8 --ckpt <path/to/model.ckpt>

并相应调整 checkpoint 与 config 路径。

从 scripts/img2img.py 的源码可看清其工作原理:

  1. load_img()先把输入图缩放到 64 的整数倍(w - w % 64),归一化到[-1, 1];
  2. model.encode_first_stage()将图像编码到潜空间,再经get_first_stage_encoding()缩放得到init_latent;
  3. t_enc = int(strength * ddim_steps)——--strength决定加噪步数占比,取值必须在[0.0, 1.0],1.0对应初始图像信息的完全破坏;
  4. sampler.stochastic_encode()对潜变量加噪到t_enc,再由sampler.decode()在文本条件下逐步去噪;
  5. 输出同样经过"SDV2"不可见水印。

img2img.py的其余参数与txt2img.py基本一致(--scale默认 9.0、--ddim_steps默认 50、--ddim_eta默认 0.0、--seed默认 42),但它只使用DDIMSampler。你可以在 assets/stable-samples/img2img/ 看到官方提供的 img2img 与超分辨率示例输入/输出。

七、x4 文本引导超分辨率

下载 x4 upscaler 权重后,运行 Gradio Demo:

python scripts/gradio/superresolution.py configs/stable-diffusion/x4-upscaling.yaml <path-to-checkpoint>

或 Streamlit Demo:

streamlit run scripts/streamlit/superresolution.py -- configs/stable-diffusion/x4-upscaling.yaml <path-to-checkpoint>

该模型既可用于真实输入,也可用于模型合成图。对合成图,README 建议设置更高的noise_level,例如noise_level=100。

配置 configs/stable-diffusion/x4-upscaling.yaml 的技术要点:

  • 目标类LatentUpscaleDiffusion,low_scale_key: "lr",parameterization: "v",image_size: 128,scale_factor: 0.08333;
  • low_scale_config使用ImageConcatWithNoiseAugmentation,其max_noise_level: 350定义了注入噪声的强度上限——这就是 GUI 中noise_level滑杆的物理含义;
  • U-Netin_channels: 7(4 通道潜变量 + 低分辨率图通道 + 噪声级条件),num_classes: 1000用于噪声级时间步条件,model_channels: 256、channel_mult: [1,2,2,4]、disable_self_attentions: [True,True,True,False]。

示例输出见 assets/stable-samples/upscaling/(如merged-dog.png、sampled-bear-x4.png、snow-leopard-x4.png)。

八、文本引导图像修复(Inpainting)

下载 SD 2.0-inpainting checkpoint后运行:

python scripts/gradio/inpainting.py configs/stable-diffusion/v2-inpainting-inference.yaml <path-to-checkpoint>

或:

streamlit run scripts/streamlit/inpainting.py -- configs/stable-diffusion/v2-inpainting-inference.yaml <path-to-checkpoint>

该 Demo 添加了不可见水印(源自 RunwayML 仓库 的做法),但两者与对应的 checkpoints/configs 可以互换使用。示例效果:

从 scripts/gradio/inpainting.py 与 configs/stable-diffusion/v2-inpainting-inference.yaml 可以确认其实现:

  • 目标类为LatentInpaintDiffusion,conditioning_key: hybrid;
  • U-Netin_channels: 9,对应"4 通道原图潜变量 + 4 通道遮罩图潜变量 + 1 通道二值遮罩"的拼接输入;
  • 前端把遮罩二值化(mask[mask < 0.5] = 0,mask[mask >= 0.5] = 1),并构造masked_image = image * (mask < 0.5)传入模型;
  • 配置中附带的data段展示了训练时的数据管线(LAION tar 分片 +AddMask后处理,mode: "512train-large"、p_drop: 0.25),可作为理解该模型训练机制的参考,推理时无需理会。

九、Stable unCLIP:图像变体与 Stable Karlo

doc/UNCLIP.MD 是 README 中 unCLIP 条目的完整展开。unCLIP 是 OpenAI DALL·E 2 背后的方法:训练模型反转 CLIP 图像嵌入。Stable Diffusion 2.1 微调后可以额外接受一个 CLIP ViT-L/14 图像嵌入,从而既能做图像变体,也能与文本到图像的嵌入先验组合成完整的 768×768 文本到图像模型。

9.1 图像变体

两个模型(基于 OpenAI CLIP-L 与 OpenCLIP-H 图像嵌入训练)从 https://huggingface.co/stabilityai/stable-diffusion-2-1-unclip 的提示)。变体效果示例:

9.2 Diffusers 集成

unCLIP 变体已集成进 🧨 diffusers 库,可用StableUnCLIPImg2ImgPipeline直接使用:

#pip install git+https://github.com/huggingface/diffusers.git transformers accelerate import requests import torch from PIL import Image from io import BytesIO from diffusers import StableUnCLIPImg2ImgPipeline #Start the StableUnCLIP Image variations pipeline pipe = StableUnCLIPImg2ImgPipeline.from_pretrained( "stabilityai/stable-diffusion-2-1-unclip", torch_dtype=torch.float16, variation="fp16" ) pipe = pipe.to("cuda") #Get image from URL url = "https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/stable_unclip/tarsila_do_amaral.png" response = requests.get(url) init_image = Image.open(BytesIO(response.content)).convert("RGB") #Pipe to make the variation images = pipe(init_image).images images[0].save("tarsila_variation.png")

9.3 Streamlit UI 与 noise_level

也可以直接启动本仓库自带的 Streamlit 脚本:

streamlit run scripts/streamlit/stableunclip.py

它支持同时用 CLIP-L 与 OpenCLIP-H 两个模型做图像变体。两个模型都接受noise_level参数,指定添加到 CLIP 嵌入上的高斯噪声量,用于增大输出方差:

9.4 Stable Karlo:与 KARLO 组合

KakaoBrain 开源的 Karlo 是 unCLIP 的大规模复现。Stable Karlo即 Karlo CLIP 图像嵌入先验与 Stable Diffusion v2.1-768 的组合。运行前先下载 KARLO checkpoint:

mkdir -p checkpoints/karlo_models cd checkpoints/karlo_models wget https://arena.kakaocdn.net/brainrepo/models/karlo-public/v1.0.0.alpha/096db1af569b284eb76b3881534822d9/ViT-L-14.pt wget https://arena.kakaocdn.net/brainrepo/models/karlo-public/v1.0.0.alpha/0b62380a75e56f073e2844ab5199153d/ViT-L-14_stats.th wget https://arena.kakaocdn.net/brainrepo/models/karlo-public/v1.0.0.alpha/85626483eaca9f581e2a78d31ff905ca/prior-ckpt-step%3D01000000-of-01000000.ckpt cd ../../

再下载微调后的 SD2.1 unCLIP-L checkpoint 并放入checkpoints文件夹,随后运行:

streamlit run scripts/streamlit/stableunclip.py

在 GUI 中勾选use_karlo选项。脚本还支持采样完整的 Karlo 模型(需额外下载 64×64 decoder 与 64→256 upscaler):

cd checkpoints/karlo_models wget https://arena.kakaocdn.net/brainrepo/models/karlo-public/v1.0.0.alpha/efdf6206d8ed593961593dc029a8affa/decoder-ckpt-step%3D01000000-of-01000000.ckpt wget https://arena.kakaocdn.net/brainrepo/models/karlo-public/v1.0.0.alpha/4226b831ae0279020d134281f3c31590/improved-sr-ckpt-step%3D1.2M.ckpt cd ../../

仓库中的 assets/stable-samples/stable-unclip/panda.jpg 与 ldm/modules/karlo/ 目录(含 CLIP 编码器、prior、decoder、超分模块)即为该组合路径的样例与实现。

十、使用注意事项与许可

  • 通用免责声明:Stable Diffusion 属于通用的文本到图像扩散模型,会镜像训练数据中的偏见与误解。虽然训练中已努力减少露骨色情内容,但 README 明确建议:不要在没有额外安全机制与考量的情况下,将提供的权重用于服务或产品。权重是研究产物,应如此对待。训练流程、数据与预期用途详见对应的 model card。
  • 权重许可:权重通过 StabilityAI。
  • 代码许可:本仓库代码以 MIT License 发布。
  • 引用方式:使用本模型请引用论文High-Resolution Image Synthesis with Latent Diffusion Models(Rombach 等,CVPR '22 Oral),仓库 README.md 底部提供了完整的 BibTeX 条目。
  • 推理配置约束:所有推理配置均面向 EMA-only checkpoint 设计,务必保持use_ema=False;未安装 xformers 时注意力默认全精度,v2.1 上启用 fp16 请使用ATTN_PRECISION=fp16前缀(见第一节)。
  • 计算机视觉
  • 媒体生成
  • 深度学习
  • 基础模型

【免费下载链接】stablediffusion

High-Resolution Image Synthesis with Latent Diffusion Models

项目地址:https://gitcode.com/GitHub_Trending/st/stablediffusion
点击查看免费下载

相关推荐

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询