使用stable diffusion创作2.5D建筑场景模型效果图

调参、调数据集、调整模型搭配,实验了N多遍,能够有一些理想效果的图了,简记一下使用stable diffusion实现2.5D建筑场景模型效果图。

使用sd1.5的基础模型,配合2.5D风格lora、中国古代建筑物lora、卡通风格lora和canny边缘检测的controlnet即可实现逼真2.5D建筑场景模型效果。

参考图与效果图

使用倾斜俯视图生成的场景效果更佳。

部分Lora风格的训练数据集为stable diffusion生成、midjourney生成和自收集进行训练的。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用Stable Diffusion模型进行图片融合的Python代码示例: ```python import torch from torch import nn import torchvision.transforms as transforms from torchvision.utils import save_image from PIL import Image # 定义Stable Diffusion模型类 class StableDiffusion(nn.Module): def __init__(self, image_size=256, channels=3, num_steps=1000, noise_level=0.05): super().__init__() self.image_size = image_size self.channels = channels self.num_steps = num_steps self.noise_level = noise_level self.diffusion_steps = torch.linspace(0, 1, num_steps + 1)[1:].to(device) self.beta = 0.5 self.alpha = self.beta * (1 - self.diffusion_steps) / self.noise_level ** 2 self.conv1 = nn.Conv2d(in_channels=self.channels, out_channels=64, kernel_size=3, stride=1, padding=1) self.conv2 = nn.Conv2d(in_channels=64, out_channels=128, kernel_size=3, stride=1, padding=1) self.conv3 = nn.Conv2d(in_channels=128, out_channels=256, kernel_size=3, stride=1, padding=1) self.conv4 = nn.Conv2d(in_channels=256, out_channels=512, kernel_size=3, stride=1, padding=1) self.conv5 = nn.Conv2d(in_channels=512, out_channels=1024, kernel_size=3, stride=1, padding=1) self.norm1 = nn.BatchNorm2d(64) self.norm2 = nn.BatchNorm2d(128) self.norm3 = nn.BatchNorm2d(256) self.norm4 = nn.BatchNorm2d(512) self.norm5 = nn.BatchNorm2d(1024) self.up1 = nn.Upsample(scale_factor=2, mode='nearest') self.up2 = nn.Upsample(scale_factor=2, mode='nearest') self.up3 = nn.Upsample(scale_factor=2, mode='nearest') self.up4 = nn.Upsample(scale_factor=2, mode='nearest') self.down1 = nn.Conv2d(in_channels=1024, out_channels=512, kernel_size=3, stride=1, padding=1) self.down2 = nn.Conv2d(in_channels=512, out_channels=256, kernel_size=3, stride=1, padding=1) self.down3 = nn.Conv2d(in_channels=256, out_channels=128, kernel_size=3, stride=1, padding=1) self.down4 = nn.Conv2d(in_channels=128, out_channels=64, kernel_size=3, stride=1, padding=1) self.down5 = nn.Conv2d(in_channels=64, out_channels=self.channels, kernel_size=3, stride=1, padding=1) def forward(self, x): # 计算噪声 noise = torch.randn(x.shape).to(device) * self.noise_level # 添加噪声 y = x + noise # 通过一系列卷积层和上采样进行特征提取和上采样 y = self.up1(nn.functional.leaky_relu(self.norm1(self.conv1(y)))) y = self.up2(nn.functional.leaky_relu(self.norm2(self.conv2(y)))) y = self.up3(nn.functional.leaky_relu(self.norm3(self.conv3(y)))) y = self.up4(nn.functional.leaky_relu(self.norm4(self.conv4(y)))) y = nn.functional.leaky_relu(self.norm5(self.conv5(y))) # 通过一系列卷积层进行下采样和重构 y = self.down1(y) y = self.down2(nn.functional.leaky_relu(y)) y = self.down3(nn.functional.leaky_relu(y)) y = self.down4(nn.functional.leaky_relu(y)) y = self.down5(nn.functional.leaky_relu(y)) # 通过扩展alpha和beta来匹配y的形状 alpha = self.alpha.view(1, -1, 1, 1) beta = self.beta.view(1, -1, 1, 1) # 通过循环进行扩散过程 for i in range(self.num_steps): y = (1 - alpha[:, i:i + 1]) * y + alpha[:, i:i + 1] * torch.randn(x.shape).to(device) y = y / (1 + beta[:, i:i + 1] * self.diffusion_steps[i]) return y # 加载图片 image1 = Image.open('image1.jpg').convert('RGB') image2 = Image.open('image2.jpg').convert('RGB') # 调整图像大小 transform = transforms.Compose([ transforms.Resize((256, 256)), transforms.ToTensor(), ]) # 转换图像 image1 = transform(image1).unsqueeze(0).to(device) image2 = transform(image2).unsqueeze(0).to(device) # 创建Stable Diffusion模型 model = StableDiffusion().to(device) # 进行图片融合 diffused_image = (model(image1) + model(image2)) / 2 # 保存融合后的图片 save_image(diffused_image.cpu(), 'diffused_image.jpg') ``` 需要注意的是,此处的`image1`和`image2`应该是相同大小的RGB图像,否则需要进行调整大小才能进行融合。此外,`num_steps`和`noise_level`参数需要根据具体情况进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值