网站建设知名公司排名,济宁网站建设案例展示,wordpress 完整主题下载,汽车金融网站怎么做人工智能太疯狂#xff0c;传统劳动力和内容创作平台被AI枪毙#xff0c;弃尸尘埃。并非空穴来风#xff0c;也不是危言耸听#xff0c;人工智能AI图像增强框架ControlNet正在疯狂地改写绘画艺术的发展进程#xff0c;你问我绘画行业未来的样子#xff1f;我只好指着Cont…人工智能太疯狂传统劳动力和内容创作平台被AI枪毙弃尸尘埃。并非空穴来风也不是危言耸听人工智能AI图像增强框架ControlNet正在疯狂地改写绘画艺术的发展进程你问我绘画行业未来的样子我只好指着ControlNet的方向。本次我们在M1/M2芯片的Mac系统下体验人工智能登峰造极的绘画艺术。
本地安装和配置ControlNet
ControlNet在HuggingFace训练平台上也有体验版请参见 https://huggingface.co/spaces/hysts/ControlNet
但由于公共平台算力有限同时输入参数也受到平台的限制一次只能训练一张图片不能让人开怀畅饮。
为了能和史上最伟大的图像增强框架ControlNet一亲芳泽我们选择本地搭建ControlNet环境首先运行Git命令拉取官方的线上代码
git clone https://github.com/lllyasviel/ControlNet.git拉取成功后进入项目目录
cd ControlNet由于Github对文件大小有限制所以ControlNet的训练模型只能单独下载模型都放在HuggingFace平台上https://huggingface.co/lllyasviel/ControlNet/tree/main/models需要注意的是每个模型的体积都非常巨大达到了5.71G令人乍舌。
下载好模型后需要将其放到ControlNet的models目录中
├── models
│ ├── cldm_v15.yaml
│ ├── cldm_v21.yaml
│ └── control_sd15_canny.pth这里笔者下载了control_sd15_canny.pth模型即放入models目录中其他模型也是一样。
随后安装运行环境官方推荐使用conda虚拟环境安装好conda后运行命令激活虚拟环境即可
conda env create -f environment.yaml
conda activate control但笔者查看了官方的environment.yaml配置文件
name: control
channels: - pytorch - defaults
dependencies: - python3.8.5 - pip20.3 - cudatoolkit11.3 - pytorch1.12.1 - torchvision0.13.1 - numpy1.23.1 - pip: - gradio3.16.2 - albumentations1.3.0 - opencv-contrib-python4.3.0.36 - imageio2.9.0 - imageio-ffmpeg0.4.2 - pytorch-lightning1.5.0 - omegaconf2.1.1 - test-tube0.7.5 - streamlit1.12.1 - einops0.3.0 - transformers4.19.2 - webdataset0.2.5 - kornia0.6 - open_clip_torch2.0.2 - invisible-watermark0.1.5 - streamlit-drawable-canvas0.8.0 - torchmetrics0.6.0 - timm0.6.12 - addict2.4.0 - yapf0.32.0 - prettytable3.6.0 - safetensors0.2.7 - basicsr1.4.2一望而知Python版本是老旧的3.8Torch版本1.12并不支持Mac独有的Mps训练模式。
同时Conda环境也有一些缺点
环境隔离可能会导致一些问题。虽然虚拟环境允许您管理软件包的版本和依赖关系但有时也可能导致环境冲突和奇怪的错误。
Conda环境可以占用大量磁盘空间。每个环境都需要独立的软件包副本和依赖项。如果需要创建多个环境这可能会导致磁盘空间不足的问题。
软件包可用性和兼容性也可能是一个问题。Conda环境可能不包含某些软件包或库或者可能不支持特定操作系统或硬件架构。
在某些情况下Conda环境的创建和管理可能会变得复杂和耗时。如果需要管理多个环境并且需要在这些环境之间频繁切换这可能会变得困难。
所以我们也可以用最新版的Python3.10来构建ControlNet训练环境编写requirements.txt文件
pytorch1.13.0
gradio3.16.2
albumentations1.3.0
opencv-contrib-python4.3.0.36
imageio2.9.0
imageio-ffmpeg0.4.2
pytorch-lightning1.5.0
omegaconf2.1.1
test-tube0.7.5
streamlit1.12.1
einops0.3.0
transformers4.19.2
webdataset0.2.5
kornia0.6
open_clip_torch2.0.2
invisible-watermark0.1.5
streamlit-drawable-canvas0.8.0
torchmetrics0.6.0
timm0.6.12
addict2.4.0
yapf0.32.0
prettytable3.6.0
safetensors0.2.7
basicsr1.4.2随后运行命令
pip3 install -r requirements.txt至此基于Python3.10来构建ControlNet训练环境就完成了关于Python3.10的安装请移玉步至一网成擒全端涵盖在不同架构(Intel x86/Apple m1 silicon)不同开发平台(Win10/Win11/Mac/Ubuntu)上安装配置Python3.10开发环境这里不再赘述。
修改训练模式(Cuda/Cpu/Mps)
ControlNet的代码中将训练模式写死为CudaCUDA是NVIDIA开发的一个并行计算平台和编程模型因此不支持NVIDIA GPU的系统将无法运行CUDA训练模式。
除此之外其他不支持CUDA训练模式的系统可能包括
没有安装NVIDIA GPU驱动程序的系统
没有安装CUDA工具包的系统
使用的NVIDIA GPU不支持CUDA较旧的GPU型号可能不支持CUDA
没有足够的GPU显存来运行CUDA训练模式尤其是在训练大型深度神经网络时需要大量显存
需要注意的是即使系统支持CUDA也需要确保所使用的机器学习框架支持CUDA否则无法使用CUDA进行训练。
我们可以修改代码将训练模式改为Mac支持的Mps请参见闻其声而知雅意,M1 Mac基于PyTorch(mps/cpu/cuda)的人工智能AI本地语音识别库Whisper(Python3.10)这里不再赘述。
如果代码运行过程中报下面的错误
RuntimeError: Attempting to deserialize object on a CUDA device but torch.cuda.is_available() is False. If you are running on a CPU-only machine, please use torch.load with map_locationtorch.device(cpu) to map your storages to the CPU.说明当前系统不支持cuda模型需要修改几个地方以项目中的gradio_canny2image.py为例子需要将gradio_canny2image.py文件中的cuda替换为cpu同时修改/ControlNet/ldm/modules/encoders/modules.py文件将cuda替换为cpu修改/ControlNet/cldm/ddim_hacked.py文件将cuda替换为cpu。至此训练模式就改成cpu了。
开始训练
修改完代码后直接在终端运行gradio_canny2image.py文件
python3 gradio_canny2image.py程序返回
➜ ControlNet git:(main) ✗ /opt/homebrew/bin/python3.10 /Users/liuyue/wodfan/work/ControlNet/gradio_cann
y2image.py
logging improved.
No module xformers. Proceeding without it.
/opt/homebrew/lib/python3.10/site-packages/pytorch_lightning/utilities/distributed.py:258: LightningDeprecationWarning: pytorch_lightning.utilities.distributed.rank_zero_only has been deprecated in v1.8.1 and will be removed in v2.0.0. You can import it from pytorch_lightning.utilities instead. rank_zero_deprecation(
ControlLDM: Running in eps-prediction mode
DiffusionWrapper has 859.52 M params.
making attention of type vanilla with 512 in_channels
Working with z of shape (1, 4, 32, 32) 4096 dimensions.
making attention of type vanilla with 512 in_channels
Loaded model config from [./models/cldm_v15.yaml]
Loaded state_dict from [./models/control_sd15_canny.pth]
Running on local URL: http://0.0.0.0:7860 To create a public link, set shareTrue in launch().此时在本地系统的7860端口上会运行ControlNet的Web客户端服务。
访问 http://localhost:7860就可以直接上传图片进行训练了。
这里以本站的Logo图片为例子 通过输入引导词和其他训练参数就可以对现有图片进行扩散模型的增强处理这里的引导词的意思是红宝石、黄金、油画。训练结果可谓是言有尽而意无穷了。
除了主引导词系统默认会添加一些辅助引导词比如要求图像品质的best quality, extremely detailed等等完整代码
from share import *
import config import cv2
import einops
import gradio as gr
import numpy as np
import torch
import random from pytorch_lightning import seed_everything
from annotator.util import resize_image, HWC3
from annotator.canny import CannyDetector
from cldm.model import create_model, load_state_dict
from cldm.ddim_hacked import DDIMSampler apply_canny CannyDetector() model create_model(./models/cldm_v15.yaml).cpu()
model.load_state_dict(load_state_dict(./models/control_sd15_canny.pth, locationcpu))
model model.cpu()
ddim_sampler DDIMSampler(model) def process(input_image, prompt, a_prompt, n_prompt, num_samples, image_resolution, ddim_steps, guess_mode, strength, scale, seed, eta, low_threshold, high_threshold): with torch.no_grad(): img resize_image(HWC3(input_image), image_resolution) H, W, C img.shape detected_map apply_canny(img, low_threshold, high_threshold) detected_map HWC3(detected_map) control torch.from_numpy(detected_map.copy()).float().cpu() / 255.0 control torch.stack([control for _ in range(num_samples)], dim0) control einops.rearrange(control, b h w c - b c h w).clone() if seed -1: seed random.randint(0, 65535) seed_everything(seed) if config.save_memory: model.low_vram_shift(is_diffusingFalse) cond {c_concat: [control], c_crossattn: [model.get_learned_conditioning([prompt , a_prompt] * num_samples)]} un_cond {c_concat: None if guess_mode else [control], c_crossattn: [model.get_learned_conditioning([n_prompt] * num_samples)]} shape (4, H // 8, W // 8) if config.save_memory: model.low_vram_shift(is_diffusingTrue) model.control_scales [strength * (0.825 ** float(12 - i)) for i in range(13)] if guess_mode else ([strength] * 13) # Magic number. IDK why. Perhaps because 0.825**120.01 but 0.826**120.01 samples, intermediates ddim_sampler.sample(ddim_steps, num_samples, shape, cond, verboseFalse, etaeta, unconditional_guidance_scalescale, unconditional_conditioningun_cond) if config.save_memory: model.low_vram_shift(is_diffusingFalse) x_samples model.decode_first_stage(samples) x_samples (einops.rearrange(x_samples, b c h w - b h w c) * 127.5 127.5).cpu().numpy().clip(0, 255).astype(np.uint8) results [x_samples[i] for i in range(num_samples)] return [255 - detected_map] results block gr.Blocks().queue()
with block: with gr.Row(): gr.Markdown(## Control Stable Diffusion with Canny Edge Maps) with gr.Row(): with gr.Column(): input_image gr.Image(sourceupload, typenumpy) prompt gr.Textbox(labelPrompt) run_button gr.Button(labelRun) with gr.Accordion(Advanced options, openFalse): num_samples gr.Slider(labelImages, minimum1, maximum12, value1, step1) image_resolution gr.Slider(labelImage Resolution, minimum256, maximum768, value512, step64) strength gr.Slider(labelControl Strength, minimum0.0, maximum2.0, value1.0, step0.01) guess_mode gr.Checkbox(labelGuess Mode, valueFalse) low_threshold gr.Slider(labelCanny low threshold, minimum1, maximum255, value100, step1) high_threshold gr.Slider(labelCanny high threshold, minimum1, maximum255, value200, step1) ddim_steps gr.Slider(labelSteps, minimum1, maximum100, value20, step1) scale gr.Slider(labelGuidance Scale, minimum0.1, maximum30.0, value9.0, step0.1) seed gr.Slider(labelSeed, minimum-1, maximum2147483647, step1, randomizeTrue) eta gr.Number(labeleta (DDIM), value0.0) a_prompt gr.Textbox(labelAdded Prompt, valuebest quality, extremely detailed) n_prompt gr.Textbox(labelNegative Prompt, valuelongbody, lowres, bad anatomy, bad hands, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality) with gr.Column(): result_gallery gr.Gallery(labelOutput, show_labelFalse, elem_idgallery).style(grid2, heightauto) ips [input_image, prompt, a_prompt, n_prompt, num_samples, image_resolution, ddim_steps, guess_mode, strength, scale, seed, eta, low_threshold, high_threshold] run_button.click(fnprocess, inputsips, outputs[result_gallery]) block.launch(server_name0.0.0.0)其他的模型比如gradio_hed2image.py它可以保留输入图像中的许多细节适合图像的重新着色和样式化的场景 还记得AnimeGANv2模型吗神工鬼斧惟肖惟妙M1 mac系统深度学习框架Pytorch的二次元动漫动画风格迁移滤镜AnimeGANv2Ffmpeg(图片视频)快速实践之前还只能通过统一模型滤镜进行转化现在只要修改引导词我们就可以肆意地变化出不同的滤镜人工智能技术的发展就像发情的海汹涌澎湃。
结语
“人类嘛时候会被人工智能替代呀”
“就是现在就在今天” 就算是达芬奇还魂齐白石再生他们也会被现今的人工智能AI技术所震撼纵横恣肆的笔墨抑扬变化的形态左右跌宕的心气焕然飞动的神采历史长河中这一刻大千世界里这一处让我们变得疯狂