【AI绘画】Midjourney账号注册与AI绘画生成初体验

18 篇文章 12 订阅
16 篇文章 11 订阅

在这里插入图片描述

博客主页: [小ᶻZ࿆]
本文专栏: AI绘画 | Midjourney


在这里插入图片描述


💯前言


1 为什么要学习Midjourney?

  1. 行业应用广泛:在AI绘画的初步阶段,许多公司仍使用Midjourney作为主力工具,尽管SD的新版本不断推出,但很多公司尚未进化到只使用SD的阶段,也不了解AI绘画的前沿技术,因此学习Midjourney仍然是必要的。
  2. 任务完成能力:Midjourney已经具备独立完成一些设计任务的能力,如壁纸设计、logo设计、产品灵感图和IP设计等。虽然SD也能完成这些任务,但Midjourney整体更简单一些,可能在某些应用场景中仍有其独特价值
  3. AI工作流的一环:Midjourney可以作为AI工作流的重要一环,尤其对于小公司而言。在没有能力或资金训练大型模型的情况下,可以选择使用Midjourney生成面料图等,尽管效果可能不如专门训练的SD模型,但成本低廉。通过Midjourney和SD的配合,可以形成低成本、高效果的AI工具流
    在这里插入图片描述

2 Midjourney学习难点

学习Midjourney,一个显著的困难在于其英语门槛。作为一个基于外国网站提供服务的平台,Midjourney的整个网页界面都是英文的,这对于英文水平不是很好的同学来说,无疑是一个巨大的挑战。打开界面,面对满屏的英文,往往感觉如同天书一般,无从下手。

然而,困难并非不可克服。首先,勤学苦练是一个有效的方法。即使一开始不能完全理解每个英文单词的意思,但通过频繁的操作和练习,可以逐渐熟悉每个按钮的功能,达到熟能生巧的境界。在这个过程中,不仅学会了如何使用Midjourney,还顺便提升了英语水平。

其次,熟练地使用翻译工具也是克服英语门槛的关键。遇到不懂的地方,可以立即使用百度翻译或 AI工具进行翻译,帮助理解并记忆相关的英文单词和短语。通过不断的翻译和实践,英文水平也会逐渐得到提升。
在这里插入图片描述


3 Discord与Midjourney的关系

Discord:https://discord.com/
Discord,这款国外的聊天软件,为用户提供了一个跨越地域界限的交流平台。在这个平台上,网友们可以在各个聊天室进行自由的交流和互动。而Midjourney,则是Discord这款聊天工具中的一个独特功能,它为用户提供了在Discord平台上进行特定服务的能力。

简而言之,Midjourney与Discord的关系就是:Midjourney是Discord平台上的一个功能,它依赖于Discord平台提供服务。如果你想要使用Midjourney,那么你就必须先在Discord上注册一个账号。这就是为什么在注册和登录Midjourney时,我们总是会提到Discord这款软件。

在这里插入图片描述


💯Midjourney入门

Discord:https://discord.com/

接下来本文将从Discord账号的注册与登录讲起,特别是针对注册时可能遇到的“手机号码无效”问题提供解决方案。 随后将深入介绍Midjourney在Discord上的各个频道,包括INFOgetting-startedannouncementsupportchat以及FEEDBACK,帮助您快速熟悉这一平台的布局与资源。 更进一步将指导您如何在Discord新建自己的服务器,并邀请Midjourney Bot加入,以便您更便捷地使用其服务。 最后将简述订阅Midjourney的流程,以及如何生成你的第一张Midjourney图片,让你的创意之旅由此开启。

在这里插入图片描述


1 Midjourney/Discord账号注册

1.进入Discord官网点击右上角进入Discord

Discord:https://discord.com/
在这里插入图片描述
2. 点击注册按钮
在这里插入图片描述
3. 填写个人信息时,需要注意填写的出生日期必须满足年龄大于18岁,否则就算注册了 也使用不了Midjourney的功能。
在这里插入图片描述
4. 接着绑定一下手机号
在这里插入图片描述
5. 验证密码就就可以完成手机号绑定了
在这里插入图片描述
6. 注册成功了
在这里插入图片描述
7.下载DiscordPC端,进入Discord PC端的频道
在这里插入图片描述
8. 登录刚刚注册好的账号
在这里插入图片描述
9. 成功进入频道页面在这里插入图片描述


附:注册提示手机号码无效问题

在这里插入图片描述
在这里插入图片描述

看了网上的很多方法,例如开magic挂别的地区后下载Discord移动端APP进行绑定,还有修改手机语言关闭定位等等一大堆的,步骤很繁琐,不知道是不是自己步骤出错了,试了一下似乎并不管用ƈ ͡ (ुŏ̥̥̥̥ ‸ ŏ̥̥̥̥) ु
还有刚刚在csdn一个帖子上看到要使用Chrome浏览器,试了也还是不行。

最后找到一个合适的解决方法

  1. 通过Discord官网下载PC端
    Discord:https://discord.com/
    在这里插入图片描述
    在这里插入图片描述
  1. 安装成功后进入pc端,填入原先在官网注册的账号密码
    在这里插入图片描述
  2. 和网页上注册一样会提示要绑定手机号
    在这里插入图片描述
  3. 如果没有开启magic的话会有如下提示,还是注册不了
    在这里插入图片描述
  4. 开启magic后就可以正常发送接收验证码了
    在这里插入图片描述

2 Midjourney频道介绍

Midjourney频道在Discord中是一个充满活力和学习资源的社区。它提供了一系列的聊天室,这些聊天室被细分为多个板块,为用户提供了丰富的交流和探索空间。在这个频道中,我们可以深刻体会到学习AI的一个独特挑战:即使是AI的创作者,也常常无法预知他们的模型训练后能达到的具体效果。这突显了社区探索和实践的重要性。只有通过不断的尝试和摸索,我们才能逐渐了解这些模型的潜力和边界

这种探索不仅对个人学习有益,还能激发我们的创造力。当我们看到其他用户通过特定操作产生出令人惊叹的效果时,我们不禁会思考:为什么我自己无法生成这样级别的图片呢?这种思考推动着我们不断学习、尝试新的方法,并努力提升自己的技能。

进入DIscordPC端,点击发现找到Midjourney社区进入
在这里插入图片描述
在这里插入图片描述


2.1 INFO

Midjourney频道的INFO部分也是一个不可忽视的资源。INFO是information的缩写,代表信息的意思。在这里,频道会发布一些重要的公告和信息,让用户能够及时了解到最新的相关资讯。比如,作者有什么新的宣布,或者关于我们在Midjourney视频中的角色和职责,都会在这里得到明确的告知。这使得INFO部分成为了一个获取最新动态和指导的重要窗口
在这里插入图片描述


2.2 getting-started

对于刚刚加入Discord中Midjourney频道的新人朋友来说,“getting-started”(入门指南)部分是一个非常重要的资源。虽然这里提供的教程是英文的,并且相对抽象,但它为新人提供了一个简单的入门路径。为了更好地理解和利用这个频道,建议新人朋友同时参考中文社区的相关内容,这样可以更轻松地掌握频道的基本操作和规则。通过“getting-started”部分和中文社区的帮助,新人将能够更快地融入Midjourney频道,并开始享受其中的丰富资源和互动体验
在这里插入图片描述


2.3 announcement

在Discord的Midjourney频道中,有一个非常重要的部分就是“announcement”(公告)。这里是作者或管理员发布重要信息的地方,比如新的设计规则、频道更新、活动通知等。通过关注这个部分,我们可以及时了解到频道内的最新动态和相关信息。比如,作者会在这里明确告诉我们在Midjourney视频中的角色和职责,帮助我们更好地参与和贡献于这个社区。因此,想要紧跟Midjourney频道的步伐,就一定不要错过announcement部分的任何一条信息。
在这里插入图片描述


2.4 support

在Discord的Midjourney频道中,“support”(支持)部分是一个为用户提供帮助和指导的重要区域。如果你在使用过程中遇到任何问题或困惑,比如付款流程、操作难题等,无论是技术难题还是使用心得,你都可以在“support”部分找到所需的支持和帮助。在这里插入图片描述

2.4 chat

chat”功能,它提供了一个纯粹的聊天室环境,让你可以与其他用户讨论问题、分享经验或寻求建议。
在这里插入图片描述


2.5 FEEDBACK

在Discord的Midjourney频道中,“feedback”(反馈)部分是一个用户与开发者或管理员进行交流的重要渠道。如果你在使用Midjourney的过程中遇到了任何问题,比如bug、模型错误或其他需要改进的地方,你都可以在这里进行反馈。你的反馈将有助于开发者或管理员了解用户的使用体验,从而进一步优化和完善Midjourney的功能和服务。因此,如果你有任何建议或问题,不妨在“feedback”部分留下你的声音。
在这里插入图片描述


3 如何在Discord中使用Midjourney?

在探索创意与技术融合的奇妙世界里,Midjourney作为一个强大的AI绘画工具,在Discord平台上为众多用户提供了前所未有的绘画体验。想要在Discord中充分利用Midjourney的功能,你需要了解一系列操作步骤从创建个人服务器到邀请Midjourney Bot,再到订阅服务并最终生成你的第一张AI绘画作品。接下来本文将一步步引导你,在Discord中入门Midjourney开启你的AI绘画之旅

在这里插入图片描述


3.1 在Discord新建个人服务器

1.点击左列的添加服务器
在这里插入图片描述
2.点击亲自创建
在这里插入图片描述
3. 选择仅供我和我的朋友使用
在这里插入图片描述
4.自定义创建服务器的名字
在这里插入图片描述
5. 在Discord创建好个人服务器后,你可能会发现服务器只有你一个人Midjourney相当于Discord聊天软件内的一个机器人,它具备生成图片等实用功能。通过邀请Midjourney机器人加入你的服务器,Midjourney才可以为你的服务器成员提供更多的互动和娱乐内容,。
在这里插入图片描述


3.2 邀请Midjourney Bot进入个人服务器

1.回到Midjourney社区中点击右上角显示成员名单
在这里插入图片描述
2. 找到==Midjourney Bot ==并点击 添加APP
在这里插入图片描述
3. 选择添加到服务器
在这里插入图片描述
4. 选择我们刚刚创建的服务器
在这里插入图片描述
5. 授权
在这里插入图片描述
6. 验证一下在这里插入图片描述
7. 添加成功
在这里插入图片描述
8. 可以看到Midjourney Bot已经成功显示在我们刚刚创建的服务器了
在这里插入图片描述


3.3 订阅Midjourney

Midjourney,需要了解它是一个付费服务,能够生成图片,与开源免费的SD不同。既然决定花钱订阅,那么接下来的步骤就至关重要。

  1. 点击Subscribe按钮或在对话框中输入/subscribe
    在这里插入图片描述
  2. 在支付环节,需要选择合适的支付方式,如信用卡或第三方支付平台,并确保支付信息的安全性和准确性。最后,确认订阅计划并支付相应费用,即可开始享受Midjourney提供的图像生成服务。在订阅过程中,务必留意自动续费选项,并根据个人需求做出选择。
  • 订阅费用:Midjourney的订阅费用范围在每月8-96美元之间,换算成人民币大约是60-720元。这一费用结构为用户提供了灵活的选择空间
  • 订阅等级:为了满足不同用户的需求,Midjourney设计了Basic、Standard、Pro和Mega四个订阅等级。从基础功能到高级特性,每个等级都提供了丰富的功能集。

在这里插入图片描述
或者可以去网上购买多人共享的Midjourney账号,在前期学习中也够用了。


3.4 生成你的第一张Midjourney图片

  1. 在对话框输入/选择/image
    在这里插入图片描述
  2. promt中输入你想要Midjourney生成图片对应的提示词,注意最好是要全英文
    在这里插入图片描述
  3. 生成成功
    在这里插入图片描述

💯直接用聊天指令添加机器人(补充)

Midjourney Bot:

https://discord.com/oauth2/authorize?client_id=936929561302675456&permissions=2147601472&scope=applications.commands%20bot

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

niji・journey Bot:

https://discord.com/oauth2/authorize?client_id=1022952195194359889&permissions=2147601472&scope=applications.commands%20bot

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

InsightFaceSwap:

https://discord.com/oauth2/authorize?client_id=1090660574196674713&permissions=274877945856&scope=bot

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述


💯小结

  • 在这里插入图片描述
    感谢您耐心阅读这篇关于Midjourney的入门指南。希望这篇文章能为你们在学习和探索AI绘画的道路上提供一些实用的帮助。我们深知,尽管Midjourney的学习和应用可能会遇到一些挑战,特别是英语门槛和熟悉平台的过程,但通过勤学苦练和巧妙利用翻译工具,这些难题都是可以克服的。

  • 文中我们介绍了Discord与Midjourney的关系,以及如何在Discord上注册账号、了解Midjourney的各个频道、新建自己的服务器,并邀请Midjourney Bot加入,以便更便捷地使用其服务。我们还简述了订阅Midjourney的流程,以及如何生成你的第一张Midjourney图片,让你的AI绘画创意之旅由此开启

  • 我们理解,学习任何新技能或工具都可能伴随着挑战,但正是这些挑战塑造了我们的成长。希望你们能够坚持不懈,勇于尝试,不断探索Midjourney的无限可能。无论你是专业的设计师,还是对AI绘画充满好奇的新手,Midjourney都是一个值得深入了解和掌握的工具

  • 最后,不要因为遇到困难就轻易放弃。每一个伟大的创作和突破都始于勇敢的第一步。希望你我们能在Midjourney的世界里找到属于自己的灵感和乐趣,创作出令人惊叹的作品。再次感谢读者的阅读和支持,愿我们在Midjourney的学习之旅中收获满满,多出佳作!


import torch, torch.nn as nn, torch.optim as optim; from torch.utils.data import Dataset, DataLoader; from torchvision import transforms, utils; from PIL import Image; import numpy as np, cv2, os, random; class PaintingDataset(Dataset): def __init__(self, root_dir, transform=None): self.root_dir = root_dir; self.transform = transform; self.image_files = os.listdir(root_dir); def __len__(self): return len(self.image_files); def __getitem__(self, idx): img_name = os.path.join(self.root_dir, self.image_files[idx]); image = Image.open(img_name).convert('RGB'); if self.transform: image = self.transform(image); return image; class ResidualBlock(nn.Module): def __init__(self, in_channels): super(ResidualBlock, self).__init__(); self.conv_block = nn.Sequential(nn.Conv2d(in_channels, in_channels, kernel_size=3, stride=1, padding=1), nn.InstanceNorm2d(in_channels), nn.ReLU(inplace=True), nn.Conv2d(in_channels, in_channels, kernel_size=3, stride=1, padding=1), nn.InstanceNorm2d(in_channels)); def forward(self, x): return x + self.conv_block(x); class Generator(nn.Module): def __init__(self): super(Generator, self).__init__(); self.downsampling = nn.Sequential(nn.Conv2d(3, 64, kernel_size=7, stride=1, padding=3), nn.InstanceNorm2d(64), nn.ReLU(inplace=True), nn.Conv2d(64, 128, kernel_size=3, stride=2, padding=1), nn.InstanceNorm2d(128), nn.ReLU(inplace=True), nn.Conv2d(128, 256, kernel_size=3, stride=2, padding=1), nn.InstanceNorm2d(256), nn.ReLU(inplace=True)); self.residuals = nn.Sequential(*[ResidualBlock(256) for _ in range(9)]); self.upsampling = nn.Sequential(nn.ConvTranspose2d(256, 128, kernel_size=3, stride=2, padding=1, output_padding=1), nn.InstanceNorm2d(128), nn.ReLU(inplace=True), nn.ConvTranspose2d(128, 64, kernel_size=3, stride=2, padding=1, output_padding=1), nn.InstanceNorm2d(64), nn.ReLU(inplace=True), nn.Conv2d(64, 3, kernel_size=7, stride=1, padding=3), nn.Tanh()); def forward(self, x): x = self.downsampling(x); x = self.residuals(x); x = self.upsampling(x); return x; class Discriminator(nn.Module): def __init__(self): super(Discriminator, self).__init__(); self.model = nn.Sequential(nn.Conv2d(3, 64, kernel_size=4, stride=2, padding=1), nn.LeakyReLU(0.2, inplace=True), nn.Conv2d(64, 128, kernel_size=4, stride=2, padding=1), nn.InstanceNorm2d(128), nn.LeakyReLU(0.2, inplace=True), nn.Conv2d(128, 256, kernel_size=4, stride=2, padding=1), nn.InstanceNorm2d(256), nn.LeakyReLU(0.2, inplace=True), nn.Conv2d(256, 512, kernel_size=4, stride=2, padding=1), nn.InstanceNorm2d(512), nn.LeakyReLU(0.2, inplace=True), nn.Conv2d(512, 1, kernel_size=4, stride=1, padding=1)); def forward(self, x): return self.model(x); def initialize_weights(model): for m in model.modules(): if isinstance(m, (nn.Conv2d, nn.ConvTranspose2d)): nn.init.normal_(m.weight.data, 0.0, 0.02); elif isinstance(m, nn.InstanceNorm2d): nn.init.normal_(m.weight.data, 1.0, 0.02); nn.init.constant_(m.bias.data, 0); device = torch.device("cuda" if torch.cuda.is_available() else "cpu"); generator = Generator().to(device); discriminator = Discriminator().to(device); initialize_weights(generator); initialize_weights(discriminator); transform = transforms.Compose([transforms.Resize(256), transforms.ToTensor(), transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])]); dataset = PaintingDataset(root_dir='path_to_paintings', transform=transform); dataloader = DataLoader(dataset, batch_size=16, shuffle=True); criterion = nn.MSELoss(); optimizerG = optim.Adam(generator.parameters(), lr=0.0002, betas=(0.5, 0.999)); optimizerD = optim.Adam(discriminator.parameters(), lr=0.0002, betas=(0.5, 0.999)); def generate_noise_image(height, width): return torch.randn(1, 3, height, width, device=device); for epoch in range(100): for i, data in enumerate(dataloader): real_images = data.to(device); batch_size = real_images.size(0); optimizerD.zero_grad(); noise_image = generate_noise_image(256, 256); fake_images = generator(noise_image); real_labels = torch.ones(batch_size, 1, 16, 16, device=device); fake_labels = torch.zeros(batch_size, 1, 16, 16, device=device); output_real = discriminator(real_images); output_fake = discriminator(fake_images.detach()); loss_real = criterion(output_real, real_labels); loss_fake = criterion(output_fake, fake_labels); lossD = (loss_real + loss_fake) / 2; lossD.backward(); optimizerD.step(); optimizerG.zero_grad(); output_fake = discriminator(fake_images); lossG = criterion(output_fake, real_labels); lossG.backward(); optimizerG.step(); with torch.no_grad(): fake_image = generator(generate_noise_image(256, 256)).detach().cpu(); grid = utils.make_grid(fake_image, normalize=True); utils.save_image(grid, f'output/fake_painting_epoch_{epoch}.png'); def apply_style_transfer(content_img, style_img, output_img, num_steps=500, style_weight=1000000, content_weight=1): vgg = models.vgg19(pretrained=True).features.to(device).eval(); for param in vgg.parameters(): param.requires_grad = False; content_img = Image.open(content_img).convert('RGB'); style_img = Image.open(style_img).convert('RGB'); content_img = transform(content_img).unsqueeze(0).to(device); style_img = transform(style_img).unsqueeze(0).to(device); target = content_img.clone().requires_grad_(True).to(device); optimizer = optim.LBFGS([target]); content_layers = ['conv_4']; style_layers = ['conv_1', 'conv_2', 'conv_3', 'conv_4', 'conv_5']; def get_features(image, model): layers = {'0': 'conv_1', '5': 'conv_2', '10': 'conv_3', '19': 'conv_4', '28': 'conv_5'}; features = {}; x = image; for name, layer in model._modules.items(): x = layer(x); if name in layers: features[layers[name]] = x; return features; def gram_matrix(tensor): _, d, h, w = tensor.size(); tensor = tensor.view(d, h * w); gram = torch.mm(tensor, tensor.t()); return gram; content_features = get_features(content_img, vgg); style_features = get_features(style_img, vgg); style_grams = {layer: gram_matrix(style_features[layer]) for layer in style_features}; for step in range(num_steps): def closure(): target_features = get_features(target, vgg); content_loss = torch.mean((target_features[content_layers[0]] - content_features[content_layers[0]])**2); style_loss = 0; for layer in style_layers: target_gram = gram_matrix(target_features[layer]); style_gram = style_grams[layer]; layer_style_loss = torch.mean((target_gram - style_gram)**2); style_loss += layer_style_loss / (target_gram.shape[1] ** 2); total_loss = content_weight * content_loss + style_weight * style_loss; optimizer.zero_grad(); total_loss.backward(); return total_loss; optimizer.step(closure); target = target.squeeze().cpu().clamp_(0, 1); utils.save_image(target, output_img);

在这里插入图片描述


评论 176
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小ᶻZ࿆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值