DTcode7 2024-03-27 11:43 采纳率: 0%
浏览 3

AI绘画Stable diffusion 提示词问题

AI绘画Stable diffusion 在生成Q版表情包的时候,设置了full body,也增加了权重,但是怎么都没法抽出完整身体
stable diffusion
增加权重、设置视角、增大尺寸
生成的Q版人物能有完整的身体,而不是大头照
  • 写回答

1条回答 默认 最新

  • 码农阿豪@新空间代码工作室 Java领域优质创作者 2024-03-27 11:44
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    这种情况可能是因为稳定扩散算法在生成Q版表情包时无法保证完整身体的图案连贯性。增加权重、设置视角、增大尺寸等尝试已经用了,但是效果不佳。 解决方案可以考虑采用其他生成算法来生成完整身体的图案,例如PixelGAN、StyleGAN等,这些算法在图像生成中效果较好,并且具有更好的图案连贯性和真实性。同时,还可以考虑对生成器和判别器的网络结构进行优化,以提高生成效果。 代码示例如下(使用PixelGAN算法生成完整身体的Q版表情包):
    # 导入需要的库和模块
    import torch
    import torch.nn as nn
    from torchvision import transforms
    from models.pixel_gan import PixelGAN
    # 定义像素化GAN算法
    class PixelGAN(nn.Module):
        def __init__(self, input_dim=3, output_dim=3, num_filters=64):
            super(PixelGAN, self).__init__()
            self.generator = nn.Sequential(
                nn.ConvTranspose2d(input_dim, num_filters * 8, kernel_size=4, stride=1),
                nn.BatchNorm2d(num_filters * 8),
                nn.ReLU(True),
                nn.ConvTranspose2d(num_filters * 8, num_filters * 4, kernel_size=4, stride=2, padding=1),
                nn.BatchNorm2d(num_filters * 4),
                nn.ReLU(True),
                nn.ConvTranspose2d(num_filters * 4, num_filters * 2, kernel_size=4, stride=2, padding=1),
                nn.BatchNorm2d(num_filters * 2),
                nn.ReLU(True),
                nn.ConvTranspose2d(num_filters * 2, num_filters, kernel_size=4, stride=2, padding=1),
                nn.BatchNorm2d(num_filters),
                nn.ReLU(True),
                nn.ConvTranspose2d(num_filters, output_dim, kernel_size=4, stride=2, padding=1),
                nn.Tanh()
            )
            self.discriminator = nn.Sequential(
                nn.Conv2d(input_dim, num_filters, kernel_size=4, stride=2, padding=1),
                nn.LeakyReLU(0.2, inplace=True),
                nn.Conv2d(num_filters, num_filters * 2, kernel_size=4, stride=2, padding=1),
                nn.BatchNorm2d(num_filters * 2),
                nn.LeakyReLU(0.2, inplace=True),
                nn.Conv2d(num_filters * 2, num_filters * 4, kernel_size=4, stride=2, padding=1),
                nn.BatchNorm2d(num_filters * 4),
                nn.LeakyReLU(0.2, inplace=True),
                nn.Conv2d(num_filters * 4, num_filters * 8, kernel_size=4, stride=2, padding=1),
                nn.BatchNorm2d(num_filters * 8),
                nn.LeakyReLU(0.2, inplace=True),
                nn.Conv2d(num_filters * 8, 1, kernel_size=4, stride=1),
                nn.Sigmoid()
            )
        def forward(self, x):
            out = self.discriminator(x)
            out = out.view(out.size(0), -1)
            return out
    # 定义训练函数
    def train(data_loader, model, loss_fn, optimizer, num_epochs=10):
        for epoch in range(num_epochs):
            for batch_idx, data in enumerate(data_loader):
                inputs, _ = data
                real_labels = torch.ones(inputs.size(0))
                fake_labels = torch.zeros(inputs.size(0))
                # 训练判别器
                optimizer.zero_grad()
                outputs = model(inputs)
                real_loss = loss_fn(outputs, real_labels)
                real_loss.backward()
                # 生成Fake图像
                noise = torch.randn(inputs.size(0), 3, 64, 64)
                fake = model.generator(noise)
                outputs = model(fake.detach())
                fake_loss = loss_fn(outputs, fake_labels)
                fake_loss.backward()
                optimizer.step()
                # 训练生成器
                optimizer.zero_grad()
                outputs = model(fake)
                loss = loss_fn(outputs, real_labels)
                loss.backward()
                optimizer.step()
                if batch_idx % 100 == 0:
                    print("Epoch [%d/%d], Batch [%d/%d], Loss: %.4f"
                          % (epoch + 1, num_epochs, batch_idx, len(data_loader), loss.item()))
    # 加载数据
    transform = transforms.Compose([transforms.Resize(64),
                                    transforms.CenterCrop(64),
                                    transforms.ToTensor(),
                                    transforms.Normalize(mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5])])
    data_loader = torch.utils.data.DataLoader(dataset, batch_size=64, shuffle=True)
    # 初始化模型、损失函数和优化器
    gan = PixelGAN()
    criterion = nn.BCELoss()
    optimizer = torch.optim.Adam(gan.parameters(), lr=0.0002, betas=(0.5, 0.999))
    # 训练模型
    train(data_loader, gan, criterion, optimizer, num_epochs=10)
    # 生成图像
    noise = torch.randn(1, 3, 64, 64)
    fake = gan.generator(noise).detach().numpy()
    
    评论

报告相同问题?

问题事件

  • 创建了问题 3月27日

悬赏问题

  • ¥15 部分客户订单定位有误的问题
  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
  • ¥15 Linux权限管理相关操作(求解答)
  • ¥15 Bug traq 数据包 大概什么价
  • ¥15 在anaconda上pytorch和paddle paddle下载报错
  • ¥25 自动填写QQ腾讯文档收集表
  • ¥15 DbVisualizer Pro 12.0.7 sql commander光标错位 显示位置与实际不符
  • ¥15 android 打包报错
  • ¥15 关于stm32的问题
  • ¥15 ncode振动疲劳分析中,noisefloor如何影响PSD函数?