驾驭AI绘画:《AI魔法绘画》带你秒变顶级画手!

news2024/12/23 10:55:45

  大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法行业就业。希望和大家一起成长进步。

  今天给大家带来的文章是驾驭AI绘画:《AI魔法绘画》带你秒变顶级画手!,希望能对学习AI绘画的同学们有所帮助。

文章目录

  • 1. 前言
  • 2. 书籍推荐《AI魔法绘画:用Stable Diffusion挑战无限可能》
  • 3. 粉丝福利
  • 4. 自主购买

1. 前言

同学们,抖音买家秀中的那些极具设计感的作品是怎么来的?

你还在羡慕别人的绘画天赋,对着空白的画纸发呆吗?

有没有想过将生硬的代码和灵动的艺术完美融合?

有没有感到现代技术带来了戏剧性改变,从替代马车的汽车,到取代传统影像的数字摄影,再到今天的AI美术创作?

是的,“AI绘画”,它来了。

AI绘画,如雷贯耳,无处不在。

曾几何时,人们认为艺术需要人工创作,需要才情与灵感的瞬间迸发。

然而,技术的高速发展,打破了这种观念,AI绘画正在逐渐崭露头角,成为新的画坛巨擘。

但聊一聊看似高大上的AI技术可能让你觉得高不可攀。那就跟我一起,用Stable Diffusion挑战无限可能,一窥AI绘画的花花世界!


  Stable Diffusion WebUI 中的核心组件,人脸图像面部画面修复模型 CodeFormer的核心代码如下所示:

import math
import torch
from torch import nn, Tensor
import torch.nn.functional as F
from typing import Optional

from modules.codeformer.vqgan_arch import VQAutoEncoder, ResBlock
from basicsr.utils.registry import ARCH_REGISTRY


class CodeFormer(VQAutoEncoder):
    def __init__(self, dim_embd=512, n_head=8, n_layers=9,
                codebook_size=1024, latent_size=256,
                connect_list=('32', '64', '128', '256'),
                fix_modules=('quantize', 'generator')):
        super(CodeFormer, self).__init__(512, 64, [1, 2, 2, 4, 4, 8], 'nearest',2, [16], codebook_size)

        if fix_modules is not None:
            for module in fix_modules:
                for param in getattr(self, module).parameters():
                    param.requires_grad = False

        self.connect_list = connect_list
        self.n_layers = n_layers
        self.dim_embd = dim_embd
        self.dim_mlp = dim_embd*2

        self.position_emb = nn.Parameter(torch.zeros(latent_size, self.dim_embd))
        self.feat_emb = nn.Linear(256, self.dim_embd)

        # transformer
        self.ft_layers = nn.Sequential(*[TransformerSALayer(embed_dim=dim_embd, nhead=n_head, dim_mlp=self.dim_mlp, dropout=0.0)
                                    for _ in range(self.n_layers)])

        # logits_predict head
        self.idx_pred_layer = nn.Sequential(
            nn.LayerNorm(dim_embd),
            nn.Linear(dim_embd, codebook_size, bias=False))

        self.channels = {
            '16': 512,
            '32': 256,
            '64': 256,
            '128': 128,
            '256': 128,
            '512': 64,
        }

        # after second residual block for > 16, before attn layer for ==16
        self.fuse_encoder_block = {'512':2, '256':5, '128':8, '64':11, '32':14, '16':18}
        # after first residual block for > 16, before attn layer for ==16
        self.fuse_generator_block = {'16':6, '32': 9, '64':12, '128':15, '256':18, '512':21}

        # fuse_convs_dict
        self.fuse_convs_dict = nn.ModuleDict()
        for f_size in self.connect_list:
            in_ch = self.channels[f_size]
            self.fuse_convs_dict[f_size] = Fuse_sft_block(in_ch, in_ch)

    def _init_weights(self, module):
        if isinstance(module, (nn.Linear, nn.Embedding)):
            module.weight.data.normal_(mean=0.0, std=0.02)
            if isinstance(module, nn.Linear) and module.bias is not None:
                module.bias.data.zero_()
        elif isinstance(module, nn.LayerNorm):
            module.bias.data.zero_()
            module.weight.data.fill_(1.0)

    def forward(self, x, w=0, detach_16=True, code_only=False, adain=False):
        # ################### Encoder #####################
        enc_feat_dict = {}
        out_list = [self.fuse_encoder_block[f_size] for f_size in self.connect_list]
        for i, block in enumerate(self.encoder.blocks):
            x = block(x)
            if i in out_list:
                enc_feat_dict[str(x.shape[-1])] = x.clone()

        lq_feat = x
        # ################# Transformer ###################
        # quant_feat, codebook_loss, quant_stats = self.quantize(lq_feat)
        pos_emb = self.position_emb.unsqueeze(1).repeat(1,x.shape[0],1)
        # BCHW -> BC(HW) -> (HW)BC
        feat_emb = self.feat_emb(lq_feat.flatten(2).permute(2,0,1))
        query_emb = feat_emb
        # Transformer encoder
        for layer in self.ft_layers:
            query_emb = layer(query_emb, query_pos=pos_emb)

        # output logits
        logits = self.idx_pred_layer(query_emb) # (hw)bn
        logits = logits.permute(1,0,2) # (hw)bn -> b(hw)n

        if code_only: # for training stage II
          # logits doesn't need softmax before cross_entropy loss
            return logits, lq_feat

        # ################# Quantization ###################
        # if self.training:
        #     quant_feat = torch.einsum('btn,nc->btc', [soft_one_hot, self.quantize.embedding.weight])
        #     # b(hw)c -> bc(hw) -> bchw
        #     quant_feat = quant_feat.permute(0,2,1).view(lq_feat.shape)
        # ------------
        soft_one_hot = F.softmax(logits, dim=2)
        _, top_idx = torch.topk(soft_one_hot, 1, dim=2)
        quant_feat = self.quantize.get_codebook_feat(top_idx, shape=[x.shape[0],16,16,256])
        # preserve gradients
        # quant_feat = lq_feat + (quant_feat - lq_feat).detach()

        if detach_16:
            quant_feat = quant_feat.detach() # for training stage III
        if adain:
            quant_feat = adaptive_instance_normalization(quant_feat, lq_feat)

        # ################## Generator ####################
        x = quant_feat
        fuse_list = [self.fuse_generator_block[f_size] for f_size in self.connect_list]

        for i, block in enumerate(self.generator.blocks):
            x = block(x)
            if i in fuse_list: # fuse after i-th block
                f_size = str(x.shape[-1])
                if w>0:
                    x = self.fuse_convs_dict[f_size](enc_feat_dict[f_size].detach(), x, w)
        out = x
        # logits doesn't need softmax before cross_entropy loss
        return out, logits, lq_feat

2. 书籍推荐《AI魔法绘画:用Stable Diffusion挑战无限可能》

俗话说,知识就是力量,掌握AI绘画技术,你不仅可以创造出令人眼花缭乱的艺术作品,还可能在众多同行中脱颖而出,走上职业生涯的新高峰。

看看那些因为AI的到来,开始大规模裁员的公司,你是否意识到了自己该学习AI绘画的重要性?答案是明显的。掌握潮流,主宰未来,你准备好了吗?

这里,向大家强烈推荐一本书——《AI魔法绘画:用Stable Diffusion挑战无限可能》

它是一本以实际操作为导向的入门级AI绘画图书。

书中详细讲解了基于Stable Diffusion进行AI绘画的完整学习路线,包括绘画技巧、图片生成、提示词编写、ControlNet插件、模型训练等等。

如果你是零基础,无须恐惧,书中涵盖了丰富的实际操作案例,易懂易学,轻松入门。

如果你已经步入职场,那么这本书中的丰富技术内容,绝对能让你大有收获。

重要的是,本书的内容超级全面。无论是始于入门的基础理论知识,还是No-Code模型训练必备的ControlNet插件的详解,甚至是AI绘画全流程的操作教程,本书一应俱全,让你提前预知并掌握AI绘画的全貌,将你从菜鸟级别提升至大师级

此外,**书中包括了一些非常实用的商业设计案例,**如家具效果图、AI插画与插图、AI宠物、原创IP角色、自媒体运营等,这将为你的创新设计思路添砖加瓦!

……

资源丰富,内容详细,各章节知识体系完备,示例形象生动,操作步骤清晰明了,还有读者交流群可与作者互动,本书简直是你学习AI绘画的绝佳教程!

朋友们,生活永远充满无限可能。

但是,如果你想把握未来的潮流,扬帆起航,那么记得装备自己,勇往直前。

快来!开始你的AI绘画之旅,与我一起,**用《AI魔法绘画,用stable Diffusion挑战无限可能》探秘AI绘画的奥妙之处,**在不断迭代的技术驱动下,一起走进神奇的AI绘画世界,一起挑战无限可能吧!

3. 粉丝福利

  🎁本次送书1~3本【取决于阅读量,阅读量越多,送的越多】👈
  ⌛️活动时间:截止到2024-1月13号
  ✳️参与方式:关注博主+三连(点赞、收藏、评论)

4. 自主购买

  小伙伴也可以访问链接进行自主购买哦~

  直达京东购买链接🔗:购买地址《AI魔法绘画:用Stable Diffusion挑战无限可能》

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

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

相关文章

1.2.1 相机模型—内参、外参

相机模型-内参、外参 更多内容,请关注: github:https://github.com/gotonote/Autopilot-Notes.git) 针孔相机模型,包含四个坐标系:物理成像坐标系、像素坐标系、相机坐标系、世界坐标系。 相机参数包含&…

最适合初学者的Python入门详细攻略,一文讲清,赶紧收藏!

前言 目前python可以说是一门非常火爆的编程语言,应用范围也非常的广泛,工资也挺高,未来发展也极好。 Python究竟应该怎么学呢,我自己最初也是从零基础开始学习Python的,给大家分享Python的学习思路和方法。一味的买…

UI风格汇:毛玻璃风格风靡的原因解读

Hello,我是大千UI工场,设计风格是我们新开辟的栏目,主要讲解各类UI风格特征、辨识方法、应用场景、运用方法等,本次带来的是毛玻璃风格的解读,有设计需求可以私聊。 一、什么是毛玻璃风格 毛玻璃风格(Fros…

论文阅读:MotionNet基于鸟瞰图的自动驾驶联合感知和运动预测

MotionNet: Joint Perception and Motion Prediction for Autonomous Driving Based on Bird’s Eye View Maps MotionNet:基于鸟瞰图的自动驾驶联合感知和运动预测 论文地址:MotionNet: Joint Perception and Motion Prediction for Autonomous Drivi…

Linux——系统文件I/O

系统文件I/O 注:学习本次内容之前,最好先对C语言文件操作有所了解 本章思维导图: 注:思维导图对应的.xmind文件和.png文件都已同步导入至资源,可供免费查阅 在以前学习的C语言中,我们可以通过fwrite和fre…

Ansible file文件模块 设置文件的属性,比如创建文件、创建链接文件、删除文件

目录 语法创建目录创建链接文件删除文件 每个值的属性 语法 创建目录 ansible slave -m file -a path/data/app statedirectory path/data/app # 定义创建路径 statedirectory # 如果目录不存在就创建目录这就是创建目录成功之后的回显 可以看到,已经打印出目录a…

智慧公厕:让智慧城市的公共厕所焕发“智慧活力”

智慧城市的建设已经进入了一个新的阶段,不仅仅是智慧交通、智慧环保,如今甚至连公厕都开始迎来智慧化时代。智慧公厕作为智慧城市的神经末梢,正在通过信息化、数字化和智慧化的方式,实现全方位的精细化管理。本文以智慧公厕源头专…

Ubuntu忘记登录密码重置步骤

Ubuntu忘记登录密码重置步骤 1.开机界面长按shitf键,进入grub,并选择Advanced options for ubuntu,按下回车 2.选择一个较新版本的recovery mode,按下回车 3.会跑一些数据,等待跑完后会出现下面的界面,选择…

pm2常用命令有哪些?

PM2 是一个流行的 Node.js 进程管理工具,用于管理和监控 Node.js 应用程序。以下是一些常用的 PM2 命令: 启动应用程序: pm2 start app.js这将启动名为 app.js 的 Node.js 应用程序。 列出所有应用程序: pm2 list这将列出当前所有…

牛客小白月赛87

A 思路&#xff1a;贪心。将数列倒序分别计算两人的和即可。 #include <bits/stdc.h> using namespace std; int a[110]; void solve() {int n;cin>>n;int sum10,sum20;int flag1;for (int i1;i<n;i) cin>>a[i];for (int in;i>1;i--){if(flag1){sum1a…

阿里云服务器租用收费标准价格表(2024年更新)

2024年最新阿里云服务器租用费用优惠价格表&#xff0c;轻量2核2G3M带宽轻量服务器一年61元&#xff0c;折合5元1个月&#xff0c;新老用户同享99元一年服务器&#xff0c;2核4G5M服务器ECS优惠价199元一年&#xff0c;2核4G4M轻量服务器165元一年&#xff0c;2核4G服务器30元3…

OpenCV中的边缘检测技术及实现

介绍: 边缘检测是计算机视觉中非常重要的技术之一。它用于有效地识别图像中的边缘和轮廓&#xff0c;对于图像分析和目标检测任务至关重要。OpenCV提供了多种边缘检测技术的实现&#xff0c;本博客将介绍其中的两种常用方法&#xff1a;Canny边缘检测和Sobel边缘检测。 理论介…

第三节作业:基于 InternLM 和 LangChain 搭建你的知识库

参考文档&#xff1a;https://github.com/InternLM/tutorial/tree/main/langchain 基础作业&#xff1a;复现课程知识库助手搭建过程 (截图) 1.环境配置 2.知识库搭建 &#xff08;1&#xff09;数据收集 收集由上海人工智能实验室开源的一系列大模型工具开源仓库作为语料库来…

Mybatis——Javaweb进阶学习(五)

目录 一、Mybatis快速入门1.创建Springboot工程&#xff0c;数据库表user&#xff0c;实体类User2.引入Mybaties相关依赖3.编写Sql语句 二、lombok1.基本概念2.使用方法 三、基础操作1.环境准备a.数据库准备b.创建员工实体类Emp数据类型对比命名对比 c.Mapper接口创建 2.删除操…

EasyRecovery2024功能强大的电脑数据恢复软件

EasyRecovery是一款功能强大的数据恢复软件&#xff0c;支持从各种存储介质中恢复丢失或删除的文件。以下是EasyRecovery的下载教程、功能介绍以及最新版本简介&#xff1a; EasyRecovery支持多种操作系统版本。对于Windows系统&#xff0c;它支持Windows XP、Windows Vista、W…

智能网卡(SmartNIC):增强网络性能

在当今的数字时代&#xff0c;网络性能和数据安全是各行各业面临的关键挑战。智能网卡是一项颠覆性的技术创新&#xff0c;对增强网络性能和加强数据安全性具有关键推动作用。本文旨在探讨智能网卡的工作原理及其在不同应用场景中的重要作用。 什么是智能网卡&#xff1f; 智…

QtApplets-线程池

QtApplets-线程池 ​ 今天咱们稍微看下Qt的线程池。QThreadPool&#xff0c;浅浅搞一下。 文章目录 QtApplets-线程池QThreadPoolQThreadPool 与 QThread 区别替代方案Qt Concurrent QThreadPool 与 Qt Concurrent 区别Demo运行效果 ☞ 源码 关键字&#xff1a; Qt、QRunnable…

Netty中的适配器、Handler共享和资源管理

ChannelHandler的适配器 有一些适配器类可以将编写自定义的ChannelHandler所需要的工作降到最低限度&#xff0c; 因为它们提供了定义在对应接口中的所有方法的默认实现。因为有时会忽略那些不感兴趣的 事件&#xff0c;所以Netty提供了抽象积累ChannelInboundHandlerAdapter(…

SORA:OpenAI最新文本驱动视频生成大模型技术报告解读

Video generation models as world simulators&#xff1a;作为世界模拟器的视频生成模型 1、概览2、Turning visual data into patches&#xff1a;将视觉数据转换为补丁3、Video compression network&#xff1a;视频压缩网络4、Spacetime Latent Patches&#xff1a;时空潜在…

HTTP缓存技术

大家好我是苏麟 , 今天说说HTTP缓存技术 . 资料来源 : 小林coding 小林官方网站 : 小林coding (xiaolincoding.com) HTTP缓存技术 HTTP 缓存有哪些实现方式? 对于一些具有重复性的 HTTP 请求&#xff0c;比如每次请求得到的数据都一样的&#xff0c;我们可以把这对「请求-响…