河间市网站建设公司学装修设计

news/2025/9/24 5:44:42/文章来源:
河间市网站建设公司,学装修设计,静态网站什么样,WordPress里面自定义功能本篇文章聊聊 Stable Diffusion WebUI 中的核心组件#xff0c;强壮的人脸图像面部画面修复模型 GFPGAN 相关的事情。 写在前面 本篇文章的主角是开源项目 TencentARC/GFPGAN#xff0c;和上一篇文章《Stable Diffusion 硬核生存指南#xff1a;WebUI 中的 CodeFormer》提…本篇文章聊聊 Stable Diffusion WebUI 中的核心组件强壮的人脸图像面部画面修复模型 GFPGAN 相关的事情。 写在前面 本篇文章的主角是开源项目 TencentARC/GFPGAN和上一篇文章《Stable Diffusion 硬核生存指南WebUI 中的 CodeFormer》提到的项目在某种程度上算是“开源项目的竞争者”。 有趣的是上一篇文章中的 CodeFormer 在实现过程中有非常多的项目代码有借鉴和使用 GFPGAN 主力维护者 xintao 的项目某种程度上来说两个项目存在一定的“亲缘”关系。 在去年五月份我写过一篇《使用 Docker 来运行 HuggingFace 海量模型》其中就使用了 GFPGAN 做了一期例子本文中提到的内容已经更新至之前的开源项目 soulteary/docker-gfpgan。 相关模型文件已经上传到网盘里了感兴趣可以自取别忘记“一键三连”。 下面依旧先进入热身阶段。 GFPGAN 相关前置知识 如果你对前置知识不感兴趣只是想快速上手可以跳过这个章节阅读“快速上手”部分。 如果你想系统的了解人脸恢复相关的知识强烈推荐扩展阅读这篇内容《A Survey of Deep Face Restoration: Denoise, Super-Resolution, Deblur, Artifact Removal》。 本文提到的 GFPGAN 属于 2021 年的“七代目”方案基于 GAN 网络和预训练模型来进行人脸修复。 主要思路是先通过 “degradation removal module (U-Net)” 模块对图片进行质量降低并添加一些模糊和燥点。看过《Stable Diffusion 硬核生存指南WebUI 中的 VAE》的同学是不是觉得有相似之处呢。 接着使用诸如 StyleGAN 方式的预训练人脸 GAN 模型处理这些获得人脸细节的潜在向量特征生成具备真实性但细节不完善的图像并结合一些 “Channel-Split Spatial Feature Transform (CS-SFT) ”通道连接不同模块的潜在向量特征然后结合其他模块进行数据处理。 在图像变清晰的过程中主要有四种挑战“Reconstruction Loss” 使用预训练的 VGG-19 网络来完成分辨率的增强“Adversarial Loss” 使用 StyleGAN2 中类似的方法来生成逼真的纹理“Facial Component Loss” 为了让面部细节真实使用辨别器单独生成和应用面部区块的补丁特别处理了眼睛、嘴巴等局部细节“Identity Preserving Loss” 使用预训练的 ArcFace 模型来帮助将原始图片中的身份特征恢复到 GFPGAN 生成的新图片中。 模型训练过程使用的数据集很有趣“真真假假” 两种都有 大量的合成数据在使用时预先对这些图片进行质量降低模拟真实场景。CelebFaces Attributes Dataset (CelebA)包含 20 万张名人的图片数据集。 在 Stable Diffusion WebUI 中的使用 在 Stable Diffusion 图片生成过程中它和前一篇文章《Stable Diffusion 硬核生存指南WebUI 中的 CodeFormer》中提到的 CodeFormer 一样也并不直接参与图片生成工作而是在图片绘制完毕之后在“后处理”阶段进行面部细节恢复操作这个后处理过程在 Stable Diffusion WebUI 的 process_images_inner 过程中。 同样的因为本文主角是 GFPGAN所以我们就先不过多展开不相关的细节啦。有关于 WebUI 和 GFPGAN 相关需要注意的部分在本文下面的章节中会聊。 准备工作 准备工作部分我们依旧只需要做两个工作准备模型文件和模型运行环境。 关于模型运行环境可以参考之前的文章《基于 Docker 的深度学习环境入门篇》如果你是 Windows 环境的用户可以参考这篇《基于 Docker 的深度学习环境Windows 篇》。 如果你不熟悉如何在 Docker 环境中使用 GPU建议仔细阅读。考虑篇幅问题本文就不赘述相关的话题啦。 只要你安装好 Docker 环境配置好能够在 Docker 容器中调用显卡的基础环境就可以进行下一步啦。 快速封装一个 GFPGAN Docker 容器应用 从 Docker GFPGAN 项目下载代码并进入项目目录 git clone https://github.com/soulteary/docker-gfpgan.gitcd docker-gfpgan执行项目中的镜像构建工具 scripts/build.sh耐心等待镜像构建完毕 # bash scripts/build.sh [] Building 71.8s (9/9) FINISHED [internal] load .dockerignore 0.1s transferring context: 2B 0.0s [internal] load build definition from Dockerfile 0.1s transferring dockerfile: 277B 0.0s [internal] load metadata for nvcr.io/nvidia/pytorch:23.04-py3 0.0s CACHED [1/4] FROM nvcr.io/nvidia/pytorch:23.04-py3 0.0s [internal] load build context 0.1s transferring context: 5.69kB 0.0s [2/4] RUN pip install gfpgan1.3.8 realesrgan0.3.0 facexlib0.3.0 gradio3.39.0 70.1s [3/4] WORKDIR /app 0.1s [4/4] COPY src/app.py ./ 0.1s exporting to image 1.5s exporting layers 1.5s writing image sha256:5ff7f79fe177c581f22c87bf575273ae4710fc604782cdbd5c955b7c27ef3b10 0.0s naming to docker.io/soulteary/docker-gfpgan 0.0s 同样因为项目锁定了 Python 3.8所以我们暂时只能使用 nvidia/pytorch:23.04-py3 来作为基础镜像。 在完成基础镜像构建之后可以从网盘下载 models.zip (如果地址失效请前往项目 issue 反馈)。模型应用运行需要的所有模型都在这里了下载完毕后解压缩模型压缩包将 gfpgan、model 两个目录放置到项目的根目录中完整的项目结构是这样的 ├── docker ├── gfpgan │ └── weights │ ├── detection_Resnet50_Final.pth │ └── parsing_parsenet.pth ├── LICENSE ├── model │ ├── GFPGANCleanv1-NoCE-C2.pth │ ├── GFPGANv1.2.pth │ ├── GFPGANv1.3.pth │ ├── GFPGANv1.4.pth │ ├── GFPGANv1.pth │ ├── README.md │ ├── RealESRGAN_x2plus.pth │ ├── realesr-general-x4v3.pth │ └── RestoreFormer.pth ├── README.md ├── scripts └── src准备好模型文件之后使用下面的命令启动模型应用 docker run --gpus all --ipchost --ulimit memlock-1 --ulimit stack67108864 --rm -it -v pwd/model:/app/model -v pwd/gfpgan:/app/gfpgan -p 7860:7860 soulteary/docker-gfpgan稍等片刻我们将看到类似下面的日志 Running on local URL: http://0.0.0.0:7860To create a public link, set shareTrue in launch().接着我们就可以打开浏览器访问 http://localhost:7860 或者 http://你的IP地址:7860 来试试看啦。 完整的代码和 Docker 封装逻辑都在 soulteary/docker-gfpgan 里因为接下来要聊 GFPGAN 的逻辑所以我们就不展开啦。 如果你想使用包含 v1 最初发布版本模型在内的功能可以参考文末 Stable Diffusion WebUI 小节中的方法。 显卡资源使用 GFPGAN 和 CodeFormer 类似显卡资源需求不多处理过程中一般情况也不需要额外的显存申请 ----------------------------------------------------------------------------- | NVIDIA-SMI 525.125.06 Driver Version: 525.125.06 CUDA Version: 12.0 | |--------------------------------------------------------------------------- | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | | | | MIG M. | || | 0 NVIDIA GeForce ... Off | 00000000:01:00.0 On | Off | | 32% 41C P2 68W / 450W | 2395MiB / 24564MiB | 4% Default | | | | N/A | -------------------------------------------------------------------------------------------------------------------------------------------------------- | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | || | 0 N/A N/A 7156 G /usr/lib/xorg/Xorg 244MiB | | 0 N/A N/A 7534 G /usr/bin/gnome-shell 142MiB | | 0 N/A N/A 7551 G ...libexec/mutter-x11-frames 14MiB | | 0 N/A N/A 8826 G ...AAAAAAAA --shared-files 20MiB | | 0 N/A N/A 9756 G /usr/bin/nautilus 24MiB | | 0 N/A N/A 10042 C python 1944MiB | -----------------------------------------------------------------------------图片处理简单测试对比 GFPGAN 的模型版本有许多种所以这里我就不展开测试了各种模型的差异就留给有好奇心的你啦。 GFPGAN 代码执行逻辑 GFPGAN 的模型执行逻辑简单来说和 CodeFormer 类似也是读取图片分析人脸使用模型进行处理、替换原图中的人脸保存图片。 模型的加载和使用逻辑 在 TencentARC/GFPGAN/gfpgan/utils.py 文件中定义了 GFPGANer 工具类包含了主要的流程逻辑默认提取并处理图像中的面部然后将图片尺寸调整为 512x512以及包含了对 GFPGAN 项目发布的各版本模型进行了调用上的兼容性处理。 在创建 GFPGAN 模型实例的时候我们可以选择三种 GFPGAN 架构的模型 clean 适用于第一个版本v1模型之外的模型架构使用 StyleGAN2 Generator 搭配 SFT 模块 (Spatial Feature Transform)这个选项也是程序的默认值程序文件在 gfpgan/archs/gfpganv1_clean_arch.py。bilinear 适用于在第三个版本v1.3和之后的模型双线性算法实现没有复杂的 UpFirDnSmooth程序文件在 gfpgan/archs/gfpgan_bilinear_arch.py。original 第一个版本v1模型使用的架构模型文件在 gfpgan/archs/gfpganv1_arch.py 在实际代码定义中前两种架构的调用参数是一致的而第三种 original 在参数 fix_decoder 上和前两者数值有差异为 True。 还有一种全新的架构RestoreFormer。这种架构就是我们第一篇硬核生存指南中提到的《Stable Diffusion 硬核生存指南WebUI 中的 VAE》相关程序文件在 gfpgan/archs/restoreformer_arch.py 在面部恢复过程中还会使用到上一篇文章中提到的 facexlib 项目中的 retinaface_resnet50 模型来对图片进行恢复和保存。 下面是简化后的程序包含了 GFPGAN 的处图片理流程 import cv2 import torch from basicsr.utils import img2tensor, tensor2img from torchvision.transforms.functional import normalizeclass GFPGANer():Helper for restoration with GFPGAN.Args:model_path (str): The path to the GFPGAN model. It can be urls (will first download it automatically).upscale (float): The upscale of the final output. Default: 2.arch (str): The GFPGAN architecture. Option: clean | original. Default: clean.channel_multiplier (int): Channel multiplier for large networks of StyleGAN2. Default: 2.bg_upsampler (nn.Module): The upsampler for the background. Default: None.def __init__(self, model_path, upscale2, archclean, channel_multiplier2, bg_upsamplerNone, deviceNone):self.upscale upscaleself.bg_upsampler bg_upsampler...self.gfpgan self.gfpgan.to(self.device)torch.no_grad()def enhance(self, img, has_alignedFalse, only_center_faceFalse, paste_backTrue, weight0.5):self.face_helper.clean_all()if has_aligned: # the inputs are already alignedimg cv2.resize(img, (512, 512))self.face_helper.cropped_faces [img]else:self.face_helper.read_image(img)# get face landmarks for each faceself.face_helper.get_face_landmarks_5(only_center_faceonly_center_face, eye_dist_threshold5)# eye_dist_threshold5: skip faces whose eye distance is smaller than 5 pixels# TODO: even with eye_dist_threshold, it will still introduce wrong detections and restorations.# align and warp each faceself.face_helper.align_warp_face()# face restorationfor cropped_face in self.face_helper.cropped_faces:# prepare datacropped_face_t img2tensor(cropped_face / 255., bgr2rgbTrue, float32True)normalize(cropped_face_t, (0.5, 0.5, 0.5), (0.5, 0.5, 0.5), inplaceTrue)cropped_face_t cropped_face_t.unsqueeze(0).to(self.device)try:output self.gfpgan(cropped_face_t, return_rgbFalse, weightweight)[0]# convert to imagerestored_face tensor2img(output.squeeze(0), rgb2bgrTrue, min_max(-1, 1))except RuntimeError as error:print(f\tFailed inference for GFPGAN: {error}.)restored_face cropped_facerestored_face restored_face.astype(uint8)self.face_helper.add_restored_face(restored_face)if not has_aligned and paste_back:# upsample the backgroundif self.bg_upsampler is not None:# Now only support RealESRGAN for upsampling backgroundbg_img self.bg_upsampler.enhance(img, outscaleself.upscale)[0]else:bg_img Noneself.face_helper.get_inverse_affine(None)# paste each restored face to the input imagerestored_img self.face_helper.paste_faces_to_input_image(upsample_imgbg_img)return self.face_helper.cropped_faces, self.face_helper.restored_faces, restored_imgelse:return self.face_helper.cropped_faces, self.face_helper.restored_faces, None 在 GFPGANer 初始化完毕后就可以调用 enhance 方法来对图片进行画面增强了依次会清理之前任务的战场、判断图片是否已经对齐如果是已经对齐的图片则直接将扣出来的人脸区域传递给下一个流程如果尚未进行图片对齐则读取图片然后获取所有的人脸区域。 接着依次将每一张人脸画面传递给 GFPGAN 模型进行处理将处理后的结果使用 tensor2img 转换回图片接着将处理好的人脸图像区域粘贴回原始图片。 这里如果用户设置了背景采样器则会调用相关模型方法处理背景。整体上和 CodeFormer 的流程差不多。 模型训练 在项目的 gfpgan/train.py 程序中包含了训练模型的入口。 执行程序实际会调用 gfpgan/models/gfpgan_model.py 文件进行模型训练这部分不是本文重点和 WebUI 关联性不大就不展开了。 Stable Diffusion WebUI 中的调用逻辑 在 WebUI 程序入口 webui.py 程序中能够看到 GFPGAN 在程序初始化时进行了模型的加载在 SD 主要绘图模型和上一篇文章提到的 CodeFormer 初始化之后 def initialize(): ...modules.sd_models.setup_model()startup_timer.record(setup SD model)codeformer.setup_model(cmd_opts.codeformer_models_path)startup_timer.record(setup codeformer) ...gfpgan.setup_model(cmd_opts.gfpgan_models_path)startup_timer.record(setup gfpgan) ...上一篇文章中CodeFormer 只能够通过一个参数来改变加载行为到了 GFPGAN 后我们能够使用的参数增加到了四个 parser.add_argument(--gfpgan-dir, typestr, helpGFPGAN directory, default(./src/gfpgan if os.path.exists(./src/gfpgan) else ./GFPGAN)) parser.add_argument(--gfpgan-model, typestr, helpGFPGAN model file name, defaultNone) parser.add_argument(--unload-gfpgan, actionstore_true, helpdoes not do anything.) parser.add_argument(--gfpgan-models-path, typestr, helpPath to directory with GFPGAN model file(s)., defaultos.path.join(models_path, GFPGAN))程序在启动过程中会调用 modules/launch_utils.py 程序中的 prepare_environment 来准备组件代码 def prepare_environment(): ...gfpgan_package os.environ.get(GFPGAN_PACKAGE, https://github.com/TencentARC/GFPGAN/archive/8d2447a2d918f8eba5a4a01463fd48e45126a379.zip) ...if not is_installed(gfpgan):run_pip(finstall {gfpgan_package}, gfpgan) ...这里使用的版本其实是 v1.3.5 版本后发布的一个临时提交 “update cog predict”而在项目的 requirement 依赖声明文件中我们能够看到项目会使用 1.3.8 版本的 GFPGAN。 当然这个代码只会在本地依赖缺失的时候执行但考虑到一致性我们可以将其更新改为相同版本这里我提交了一个版本修正的 PR如果作者合并之后这个不一致的潜在问题就没有啦。 类似的在模块程序 modules/gfpgan_model.py 中定义了使用 GFPGAN 的图片处理过程和上文中的处理逻辑也是一致的 import modules.face_restoration from modules import shareddef gfpgann():return modeldef send_model_to(model, device):model.gfpgan.to(device)model.face_helper.face_det.to(device)model.face_helper.face_parse.to(device)def gfpgan_fix_faces(np_image):return np_imagegfpgan_constructor Nonedef setup_model(dirname):def my_load_file_from_url(**kwargs):return load_file_from_url_orig(**dict(kwargs, model_dirmodel_path))def facex_load_file_from_url(**kwargs):return facex_load_file_from_url_orig(**dict(kwargs, save_dirmodel_path, model_dirNone))def facex_load_file_from_url2(**kwargs):return facex_load_file_from_url_orig2(**dict(kwargs, save_dirmodel_path, model_dirNone))class FaceRestorerGFPGAN(modules.face_restoration.FaceRestoration):def name(self):return GFPGANdef restore(self, np_image):return gfpgan_fix_faces(np_image)shared.face_restorers.append(FaceRestorerGFPGAN())不过默认的加载模型是 v1.4 版本如果你有风格上的指定速度或许也可以切换到 v1.3 版本。 实际调用 GFPGAN 的逻辑在 modules/postprocessing.py 和 scripts/postprocessing_gfpgan.py依旧是依赖后处理脚本执行逻辑。 当然因为 GFPGAN 和 CodeFormer 在项目中的作用类似所以存在选择到底使用哪一种方案的选择题这个模型选择功能程序文件在 scripts/xyz_grid.py def apply_face_restore(p, opt, x):opt opt.lower()if opt codeformer: ...elif opt gfpgan:is_active Truep.face_restoration_model GFPGANelse: ...p.restore_faces is_activeStable Diffusion WebUI 中 GFPGAN 的额外注意事项 GFPGAN 的模型加载策略比 CodeFormer 写的健壮一些。所以不用担心加载不到模型整个程序无法使用的问题。不过它在初始化过程中也不是没有问题比如初始化过程中这个模块会无限挂起如果遇到网络问题。 默认程序会查找程序目录下的 gfpgan/weights 的两个模型文件如果下载不到就会进行下载 Downloading: https://github.com/xinntao/facexlib/releases/download/v0.1.0/detection_Resnet50_Final.pth to .../gfpgan/weights/detection_Resnet50_Final.pthDownloading: https://github.com/xinntao/facexlib/releases/download/v0.2.2/parsing_parsenet.pth to .../gfpgan/weights/parsing_parsenet.pth这段行为的调用逻辑来自 GFPGAN 中的 gfpgan/utils.py from basicsr.utils.download_util import load_file_from_url...if model_path.startswith(https://):model_path load_file_from_url(urlmodel_path, model_diros.path.join(ROOT_DIR, gfpgan/weights), progressTrue, file_nameNone) loadnet torch.load(model_path) ...下载函数来自 XPixelGroup/BasicSR/basicsr/utils/download_util.py 程序中简单封装的 torch.hub 中的方法 from torch.hub import download_url_to_file, get_dirdef load_file_from_url(url, model_dirNone, progressTrue, file_nameNone):Load file form http url, will download models if necessary.Reference: https://github.com/1adrianb/face-alignment/blob/master/face_alignment/utils.pyArgs:url (str): URL to be downloaded.model_dir (str): The path to save the downloaded model. Should be a full path. If None, use pytorch hub_dir.Default: None.progress (bool): Whether to show the download progress. Default: True.file_name (str): The downloaded file name. If None, use the file name in the url. Default: None.Returns:str: The path to the downloaded file.if model_dir is None: # use the pytorch hub_dirhub_dir get_dir()model_dir os.path.join(hub_dir, checkpoints)os.makedirs(model_dir, exist_okTrue)parts urlparse(url)filename os.path.basename(parts.path)if file_name is not None:filename file_namecached_file os.path.abspath(os.path.join(model_dir, filename))if not os.path.exists(cached_file):print(fDownloading: {url} to {cached_file}\n)download_url_to_file(url, cached_file, hash_prefixNone, progressprogress)return cached_file而 PyTorch 中的 _modules/torch/hub.html#download_url_to_file 方法实现的也非常简单不包括任何重试、超时、握手错误等处理逻辑 def download_url_to_file(url, dst, hash_prefixNone, progressTrue):rDownload object at the given URL to a local path.Args:url (str): URL of the object to downloaddst (str): Full path where object will be saved, e.g. /tmp/temporary_filehash_prefix (str, optional): If not None, the SHA256 downloaded file should start with hash_prefix.Default: Noneprogress (bool, optional): whether or not to display a progress bar to stderrDefault: TrueExample: # xdoctest: REQUIRES(env:TORCH_DOCTEST_HUB) # xdoctest: REQUIRES(POSIX) torch.hub.download_url_to_file(https://s3.amazonaws.com/pytorch/models/resnet18-5c106cde.pth, /tmp/temporary_file)file_size Nonereq Request(url, headers{User-Agent: torch.hub})u urlopen(req)meta u.info()if hasattr(meta, getheaders):content_length meta.getheaders(Content-Length)else:content_length meta.get_all(Content-Length)if content_length is not None and len(content_length) 0:file_size int(content_length[0])# We deliberately save it in a temp file and move it after# download is complete. This prevents a local working checkpoint# being overridden by a broken download.dst os.path.expanduser(dst)dst_dir os.path.dirname(dst)f tempfile.NamedTemporaryFile(deleteFalse, dirdst_dir)try:if hash_prefix is not None:sha256 hashlib.sha256()with tqdm(totalfile_size, disablenot progress,unitB, unit_scaleTrue, unit_divisor1024) as pbar:while True:buffer u.read(8192)if len(buffer) 0:breakf.write(buffer)if hash_prefix is not None:sha256.update(buffer)pbar.update(len(buffer))f.close()if hash_prefix is not None:digest sha256.hexdigest()if digest[:len(hash_prefix)] ! hash_prefix:raise RuntimeError(invalid hash value (expected {}, got {}).format(hash_prefix, digest))shutil.move(f.name, dst)finally:f.close()if os.path.exists(f.name):os.remove(f.name)所以在实际使用的过程中如果存在网络问题最好预先下载好模型放在程序读取的到的位置然后再初始化程序。 另外在使用 v1 版本最初发布的模型时如果我们直接在程序中切换使用最初的发布的模型时会收到类似下面的错误信息 NameError: name fused_act_ext is not defined这是因为上文提到的架构不同除了传递参数有变化之外我们还需要指定一个环境变量 BASICSR_JITTrue python app.py在 Docker 中使用可以使用下面的命令将环境变量传递到容器内部 docker run --gpus all --ipchost --ulimit memlock-1 --ulimit stack67108864 --rm -it -e BASICSR_JITTrue -v pwd/model:/app/model -v pwd/gfpgan:/app/gfpgan -p 7860:7860 soulteary/docker-gfpgan想比较直接执行这里会进行 CUDA 插件的编译所以会需要额外的时间完成之后我们熟悉的界面将多两个选项 “v1” 版本的模型和 RealESR GAN 的“v2” 版本这是项目最初发布时的组合。 还有几个不影响实际使用的小问题。在安装准备环境过程中因为子依赖版本冲突报错的问题因为我们实际代码没有依赖和使用 google-auth-oauthlib 相关功能可以暂时忽略这个问题 ERROR: pips dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts. tensorboard 2.9.0 requires google-auth-oauthlib0.5,0.4.1, but you have google-auth-oauthlib 1.0.0 which is incompatible. tensorboard 2.9.0 requires tensorboard-data-server0.7.0,0.6.0, but you have tensorboard-data-server 0.7.1 which is incompatible.最后 本篇文章就先写到这里吧下一篇文章再见。 –EOF 我们有一个小小的折腾群里面聚集了一些喜欢折腾、彼此坦诚相待的小伙伴。 我们在里面会一起聊聊软硬件、HomeLab、编程上的一些问题也会在群里不定期的分享一些技术资料。 喜欢折腾的小伙伴欢迎阅读下面的内容扫码添加好友。 关于“交友”的一些建议和看法 添加好友时请备注实名和公司或学校、注明来源和目的珍惜彼此的时间 苏洋关于折腾群入群的那些事 本文使用「署名 4.0 国际 (CC BY 4.0)」许可协议欢迎转载、或重新修改使用但需要注明来源。 署名 4.0 国际 (CC BY 4.0) 本文作者: 苏洋 创建时间: 2023年08月04日 统计字数: 19172字 阅读时间: 39分钟阅读 本文链接: https://soulteary.com/2023/08/04/stable-diffusion-hardcore-survival-guide-gfpgan-in-webui.html

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

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

相关文章

网站 整体架构网址大全电脑版

今天,我们将看到有关此工具的信息,该工具使使用JPA Criteria更加容易。 使用该库的应用程序将在JPA实现中更加简洁,易于使用和可移植。 在本文的结尾,您将找到要下载的源代码。 什么是标准? 当前是创建动态查询的最佳…

莱特币做空国外网站佛山网络科技公司有哪些

CVE-2024-1430 是一个影响 Netgear R7000 路由器的安全漏洞,漏洞来源于该路由器 Web 管理界面的信息泄露问题。攻击者通过访问 /currentsetting.htm 文件,可能泄露敏感信息,如 Wi-Fi 密码等。 在测试和验证 CVE-2024-1430 时,您需…

制作网站的模板下载软件wordpress无法连接数据库

文档讲解:代码随想录 (programmercarl.com) 视频讲解:代码随想录的个人空间-代码随想录个人主页-哔哩哔哩视频 (bilibili.com) LeetCode 300.最长递增子序列 题目链接:300. 最长递增子序列 - 力扣(LeetCode) 解题代码…

创建网站投资多少钱北京网页设计电脑培训

晚上好,我是老杨。 Ping这几个字母,已经深入网工人的骨髓了吧? 把Ping用到工作里,肯定不少人在用,但对Ping的了解和理解是不是足够深,取决了你能在工作里用到什么程度,能让它帮你到什么地步。…

建设银行 福建 招聘网站沈阳 建设工程 招标中心网站

目录 前言 算法原理 姿态估计 2D姿态估计 3D姿态估计 3D形态估计 应用案例

手机网站模板使用方法怎么建设一个开源平台网站

在软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,程序员要尽量根据6条原则来开发程序,从而提高软件开发效率、节约软件开发成本和维护成本。 开闭原则 对扩展开放,对修改关闭。在程序需…

湛江h5建站wordpress 工作室主题

%d 十进制有符号整数 %u 十进制无符号整数 %f 浮点数 %s 字符串 %c 单个字符 %p 指针的值 %e 指数形式的浮点数 %x, %X 无符号以十六进制表示的整数 %0 无符号以八进制表示的整数 %g 自动选择合适的表示法 可以在”%”和字母之间加小写字母l, 表示输出的是长型数。 …

查建设标准网站优化网站除了百度站长

从政府工作报告探计算机行业发展 政府工作报告作为政府工作的全面总结和未来规划,不仅反映了国家整体的发展态势,也为各行各业提供了发展的指引和参考。随着信息技术的快速发展,计算机行业已经成为推动经济社会发展的重要引擎之一。因此&…

建设网站的功能定位是什么意思wordpress自动判断当前分类并获取tag标签

Redis | 集群模式 随着互联网应用规模的不断扩大,单一节点的数据库性能已经无法满足大规模应用的需求。为了提高数据库的性能和可扩展性,分布式数据库成为了解决方案之一。Redis 作为一个高性能的内存数据库,自然也有了自己的分布式部署方式…

浙江中立建设网站茶酒行业网站建设

很高兴告诉大家,我们StoneDB-8.0-V2.1.0企业版正式发布了!经过一个月的开发,我们的研发团队用极高的效率对2.0新架构版本查漏补缺,完善了最新架构的代码,并对性能、稳定性做出了优化,同时也修复了一些用户们…

如何 html5 网站常州房地产网站建设

近日,灵隐寺PPT汇报用上数据大屏疯狂刷屏,有做东南亚本土电商的老板发现这种数据大屏的模式可以很好地展现店铺运营状况。 所以就有老板来问:EasyBoss能不能也上线实时数据大屏的功能?没问题!立马安排! 要有…

15年做那些网站致富wordpress自动alt

avi文件格式详解 AVI是音频视频交错(Audio Video Interleaved)的英文缩写,它是Microsoft公司开发的一种符合RIFF文件规范的数字音频与视频文件格式,原先用于Microsoft Video for Windows (简称VFW)环境,现在已被Windows 95/98、OS/2等多数操…

上海网站推广模板汉中公司网站建设

NextQRCode ZXing开源库的精简版 **基于ZXing Android实现生成二维码图片和相机扫描二维码图片即时解码的功能原文博客 附源码下载地址** 与原ZXingMini项目对比 NextQRCode做了重大架构修改,原ZXingMini项目与当前NextQRCode不兼容 dependencies {compile com.gith…

网站建设成品常州企业家坠楼公司发讣告后删除

c qt–页面布局(第五部分) 一.页面布局 在设计页面的左侧一栏的组件中我们可以看到进行页面布局的一些组件 布局组件的使用 1.水平布局 使用:将别的组件拖到水平布局的组件中即可,可以选择是在哪个位置 2.垂直布局 使用&…

洛阳便宜网站建设漫画网站建设教程

文章目录 准备安装安装宝塔面板开启ssh和修改ssh的密码导出镜像问题解决宝塔面板无法开启防火墙无法启动ssh设置密码nginx安装失败设置开机启动相关服务准备 演示的系统环境:Ubuntu 22.04.3 LTS更新安装/升级docker到最新版本升级docker相关命令如下# 更新软件包列表并自动升级…

网站开发专业课程oa软件有哪些公司

在一个比较大的C项目中,我们有很多包,每个包都有一个自己的src、include、CMakeLists.txt和其它文件,比如以下文件结构: project- pkg1- datas- data.json- src- xxx1.cpp- include- xxx1.h - CMakeLists.txt- pkg2- src- xxx2.…

网站建设英文如何表达广州搜索seo网站优化

Dart 中的多态教程 一、多态的概念 多态是面向对象编程中的一个重要概念。它允许将子类类型的指针赋值给父类类型的指针,同一个函数调用会有不同的执行效果。换句话说,子类的实例可以赋值给父类的引用。多态的核心在于父类定义一个方法不去实现&#x…

可信赖的响应式网站最好的看vr影片的设备是哪个

在学习Linux的时候,今天遇到了$-,什么意思呢?网上搜索了一些帖子: 帖子1: linux命令 $- 是什么意思 $- 是什么意思?有什么用?可以判断什么交互式shell? $-记录着当前设置的shell…

黄岩区建设局网站如何建一个公司的网站

轿车产业链股9日盘中走势活跃,截至发稿,恒勃股份、博俊科技“20cm”涨停,德迈仕涨超17%,上声电子涨超14%,川环科技涨超10%,圣龙股份、科华控股、沪光股份、上海沿浦、日盈电子、赛力斯等均涨停。 工作方面…