社区应用 最新帖子 精华区 社区服务 会员列表 统计排行
  • 407阅读
  • 4回复

[转帖]不懂算法的人,如何理解Midjourney人工智能绘画底层原理

楼层直达
z3960 
级别: 茶馆馆主
发帖
770593
飞翔币
207694
威望
215657
飞扬币
2511651
信誉值
8

— 本帖被 任逍遥 执行压帖操作(2023-04-29) —

Midjourney是一款AI艺术生成器,擅长创作抽象绘画作品。其底层原理基于生成对抗网络(GAN)和深度学习技术。为了帮助大家更好地理解Midjourney的原理,我们今天尝试用最通俗的语言进行底层原理解释。
生成对抗网络(GAN)的原理类似于一个擅长伪造画作的画贼与一位专业鉴定师之间的博弈。在这个过程中,画贼试图模仿名画家的风格来伪造作品,而鉴定师则努力识别出这些伪造品。随着时间的推移,画贼的技艺逐渐提高,伪造作品愈发逼真,鉴定师也变得越来越敏锐。在GAN中,生成器(画贼)试图创建逼真的图像,而判别器(鉴定师)则努力区分生成的图像和真实图像。通过这种相互竞争的过程,生成器逐渐学会创作出更高质量的图像。
深度学习是Midjourney的另一个核心技术,它可以看作是一个勤奋的学生。这个学生通过阅读大量的艺术作品,学习各种艺术风格和技巧,然后将所学应用到自己的创作中。与人类艺术家相似,Midjourney也需要不断地学习和练习,以提高其创作能力。
OK废话不多说,我们用一个具体的例子来说明Midjourney的工作过程。假设我们想让Midjourney创作一幅抽象的夜晚星空画。首先,我们会给它一些关键词,如“抽象”、“夜晚”和“星空”。然后,Midjourney会从其庞大的艺术品数据库中学习相关的风格和元素。接着,生成器会尝试根据这些信息创作出一幅新的作品,而判别器则会评估这幅作品的质量。通过多次迭代和优化,Midjourney最终会生成一幅令人满意的抽象夜晚星空画。
在实际应用中,Midjourney可以根据用户提供的关键词来生成各种风格和主题的作品。以下是一些prompt的示例:

"美丽的海洋风景":Midjourney将根据这个prompt创作出一幅具有抽象元素的海洋风景画。





"立体主义的城市景观":根据这个提示,Midjourney会尝试模仿立体主义风格,创作出一幅独特的城市景观画。





"光影交错的森林":在这个示例中,Midjourney将结合印象派的绘画技巧,呈现出一幅充满生机的森林画作。







"城市姐妹":在这个示例中,Midjourney直接生成两个女孩肖像。


关键词: bot 提供 帮助
 
我不喜欢说话却每天说最多的话,我不喜欢笑却总笑个不停,身边的每个人都说我的生活好快乐,于是我也就认为自己真的快乐。可是为什么我会在一大群朋友中突然地就沉默,为什么在人群中看到个相似的背影就难过,看见秋天树木疯狂地掉叶子我就忘记了说话,看见天色渐晚路上暖黄色的灯火就忘记了自己原来的方向。
z3960 
级别: 茶馆馆主
发帖
770593
飞翔币
207694
威望
215657
飞扬币
2511651
信誉值
8

只看该作者 1 发表于: 2023-04-29

Transformer 是一种用于自然语言处理(NLP)的神经网络架构,自 2017 年由 Vaswani 等人提出以来,已经在诸如机器翻译、文本摘要、问答系统等多个 NLP 任务中取得了突破性的成果。以下是用通俗的语言解释 Transformer 是如何处理自然语言的:
图1 Ai绘图示例

(1)输入表示:Transformer 首先将输入的文本转换为数值表示。文本中的每个单词被替换为一个向量(一串数字),这个向量能捕捉到词的语义信息。通常使用词嵌入(word embedding)技术来实现这一转换。
(2)位置编码:文本中单词的顺序对理解语义至关重要。因此,Transformer 使用位置编码来表示单词在句子中的位置。位置编码是一种特殊的向量,可以与词向量相加,从而同时表示单词的语义和位置信息。
(3)自注意力机制:Transformer 的核心组件是自注意力(self-attention)机制。自注意力机制使模型能够关注输入句子中的每个单词,并根据与其他单词的关系分配不同的权重。这有助于模型捕捉句子中的长距离依赖关系和上下文信息。自注意力机制通过计算输入向量之间的点积、缩放、softmax 归一化和加权求和等操作来实现。
(4)层次化结构:Transformer 由多个编码器和解码器层堆叠而成。这种分层结构使模型具有较强的表达能力,可以捕捉文本中的复杂模式和结构。通常情况下,层数越多,模型的性能越好,但计算量也越大。
(5)训练与优化:Transformer 通常使用监督学习的方法进行训练。给定一组成对的输入和输出(例如,源语言句子和目标语言句子),模型将学习这些数据之间的映射关系。训练过程中,模型的预测结果与实际输出之间的差异(损失)将被用来优化模型的参数。这个过程通常使用梯度下降法和反向传播算法实现。
(6)解码与生成:在训练完成后,Transformer 可以用于生成自然语言。对于给定的输入,解码器会逐步生成输出序列。在生成过程中,解码器会关注已生成的单词和输入序列,并利用自注意力机制、多头注意力和前馈神经网络等组件生成下一个单词。这个过程会持续进行,直到生成一个特殊的结束符号或达到预定的最大长度
Transformer通过输入表示、位置编码、自注意力机制、多头注意力、前馈神经网络、层次化结构、训练与优化以及解码与生成等组件和步骤来处理自然语言。这种模型目前在stable diffusion中采用,同时也在chatgpt中采用。
以下是使用 Python 和 PyTorch 实现。这个示例展示了 Transformer 的主要结构和组件帮助大家理解:
import torch
import torch.nn as nn
class MultiHeadAttention(nn.Module):
def __init__(self, d_model, num_heads):
super().__init__()
self.num_heads = num_heads
self.d_head = d_model // num_heads
self.qkv_proj = nn.Linear(d_model, d_model * 3)
self.attention = nn.Softmax(dim=-1)
self.out_proj = nn.Linear(d_model, d_model)
def forward(self, x):
batch_size, seq_length, _ = x.size()
qkv = self.qkv_proj(x).view(batch_size, seq_length, 3, self.num_heads, self.d_head).transpose(2, 3)
q, k, v = qkv[0], qkv[1], qkv[2]
scores = torch.matmul(q, k.transpose(-2, -1)) / (self.d_head ** 0.5)
attention_weights = self.attention(scores)
context = torch.matmul(attention_weights, v).transpose(1, 2).contiguous().view(batch_size, seq_length, -1)
return self.out_proj(context)
class TransformerLayer(nn.Module):
def __init__(self, d_model, num_heads):
super().__init__()
self.multi_head_attention = MultiHeadAttention(d_model, num_heads)
self.norm1 = nn.LayerNorm(d_model)
self.ffn = nn.Sequential(
nn.Linear(d_model, d_model * 4),
nn.ReLU(),
nn.Linear(d_model * 4, d_model)
)
self.norm2 = nn.LayerNorm(d_model)
def forward(self, x):
attn_output = self.multi_head_attention(x)
x = self.norm1(x + attn_output)
ffn_output = self.ffn(x)
x = self.norm2(x + ffn_output)
return x
class Transformer(nn.Module):
def __init__(self, vocab_size, d_model, num_heads, num_layers):
super().__init__()
self.embedding = nn.Embedding(vocab_size, d_model)
self.transformer_layers = nn.ModuleList([TransformerLayer(d_model, num_heads) for _ in range(num_layers)])
self.fc = nn.Linear(d_model, vocab_size)
def forward(self, x):
x = self.embedding(x)
for layer in self.transformer_layers:
x = layer(x)
x = self.fc(x)
return x

# 创建一个简单的 Transformer 模型
vocab_size = 3000
d_model = 512
num_heads = 8
num_layers = 6
model = Transformer(vocab_size, d_model, num_heads, num_layers)

# 随机生成一个输入序列
input_sequence = torch.randint(vocab_size, (1, 10))

# 使用 Transformer 模型进行前向传播
output = model(input_sequence)
print("Input sequence shape:", input_sequence.shape)
print("Output shape:", output.shape)

这个示例包括了 MultiHeadAttention、TransformerLayer 和 Transformer 类。MultiHeadAttention 类实现了多头自注意力机制,TransformerLayer 类组合了多头自注意力和前馈神经网络,而 Transformer 类将多个 TransformerLayer 堆叠起来构建一个完整的Transformer 模型。这个示例中,我们使用 nn.Embedding 将输入的词汇 ID 转换为向量表示。此外,我们还创建了一个线性层(nn.Linear)将 Transformer 的输出转换为预测的词汇分布。
在这个简化的示例中,我们没有包括位置编码。在实际应用中,你可能需要为输入加上位置编码,以便模型能够捕捉单词在句子中的位置信息。此外,这个示例没有包括解码器部分,因此它不能直接用于类似机器翻译的生成任务。要应用 Transformer 解决实际问题,还需要对这个示例进行扩展和调整。
请注意,这个示例需要安装 PyTorch 库。你可以使用以下命令安装:
pip install torch

运行这个示例,你将看到输入序列的形状为 (1, 20),表示一个批次中有 1 个句子,每个句子包含 20 个单词。输出形状为 (1, 20, 10000),表示对于每个输入单词,模型预测了一个大小为 10000 的词汇分布。
这样以来,我们就可用“sandy shore, sparkling water, palm trees, beach umbrellas, beach chairs, gentle waves, sea breeze, suntan lotion, beach volleyball, seashells”生成大约5000个预测,用来指导stable diffusion刻画一个海滩美景。
Prompt:
(8k, RAW photo:1.2),best quality, ultra high res, highly detailed,intricate detail,masterpiece,silver_necklace, detailed face, looking at viewer, tank top,shorts,dynamic pose,beautiful detailed girl, extremely detailed eyes and face,20 years old,adorable,(loving viewer), (sandy shore, sparkling water, palm trees, beach umbrellas, beach chairs, gentle waves, sea breeze, suntan lotion, beach volleyball, seashells), sharp colors, soft cinematic light, hyperdetail, hdr, sharp focus,<lora:cuteGirlMix4_v10:0.3>,mix4,
沙滩,闪耀的水面,棕榈树,沙滩伞,沙滩椅,轻柔的波浪,海风,防晒霜,沙滩排球,海贝壳
AI的场景和角色生成效果如下:






我不喜欢说话却每天说最多的话,我不喜欢笑却总笑个不停,身边的每个人都说我的生活好快乐,于是我也就认为自己真的快乐。可是为什么我会在一大群朋友中突然地就沉默,为什么在人群中看到个相似的背影就难过,看见秋天树木疯狂地掉叶子我就忘记了说话,看见天色渐晚路上暖黄色的灯火就忘记了自己原来的方向。
级别: 超级版主
发帖
837519
飞翔币
228830
威望
224673
飞扬币
2467758
信誉值
0

只看该作者 2 发表于: 2023-04-29
来看一下
级别: 超级版主
发帖
837519
飞翔币
228830
威望
224673
飞扬币
2467758
信誉值
0

只看该作者 3 发表于: 2023-04-29
也就看看
级别: 超级版主
发帖
837519
飞翔币
228830
威望
224673
飞扬币
2467758
信誉值
0

只看该作者 4 发表于: 2023-04-29
不错,了解了