【Stable diffusion inpaiting】训练自己数据集

这篇具有很好参考价值的文章主要介绍了【Stable diffusion inpaiting】训练自己数据集。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

https://github.com/advimman/lama/tree/7dee0e4a3cf5f73f86a820674bf471454f52b74f

prepare your data:
1) Create masks named as `[images_name]_maskXXX[image_suffix]`, put images and masks in the same folder.
You can use the script for random masks generation.
Check the format of the files:
image1_mask001.png
image1.png
image2_mask001.png
image2.png
Specify image_suffix, e.g. .png or .jpg or _input.jpg in configs/prediction/default.yaml.

https://github.com/advimman/lama/blob/main/bin/gen_mask_dataset.py

如果图像不是正方形,使用crop或者transform变换

import os
import argparse
from PIL import Image

def crop_images(input_folder, output_folder, size):
    # 遍历输入文件夹中的所有文件
    for filename in os.listdir(input_folder):
        if filename.endswith(".png"):
            # 构建输入和输出文件的路径
            input_path = os.path.join(input_folder, filename)
            output_path = os.path.join(output_folder, filename)
            
            # 打开图像并裁剪为指定大小
            image = Image.open(input_path)
            cropped_image = image.crop((0, 0, size, size))
            
            # 保存裁剪后的图像
            cropped_image.save(output_path)

if __name__ == "__main__":
    # 创建解析器并添加参数
    parser = argparse.ArgumentParser(description="Crop PNG images in a folder to 512x512 size.")
    parser.add_argument("input_folder", default='./infrared_only', help="Path to the input folder.")
    parser.add_argument("output_folder", default='./square_infrared_only', help="Path to the output folder.")
    parser.add_argument("--size", type=int, default=512, help="Size of the cropped images. Default is 512.")
    
    # 解析命令行参数
    args = parser.parse_args()
    
    # 调用函数进行裁剪
    crop_images(args.input_folder, args.output_folder, args.size)

配置文件修改

generator_kind: random

mask_generator_kwargs:
  irregular_proba: 1
  irregular_kwargs:
    min_times: 4
    max_times: 5
    max_width: 50
    max_angle: 4
    max_len: 100

  box_proba: 0.3
  box_kwargs:
    margin: 0
    bbox_min_size: 10
    bbox_max_size: 50
    max_times: 5
    min_times: 1

  segm_proba: 0
  squares_proba: 0

  variants_n: 5

max_masks_per_image: 1

cropping:
  out_min_size: 256
  handle_small_mode: upscale
  out_square_crop: True
  crop_min_overlap: 1

max_tamper_area: 0.5

解释

generator_kind: 这个参数指定了生成器的类型,这里设置为"random",表示使用随机生成器[1]。

mask_generator_kwargs: 这个参数是一个字典,包含了生成掩码的相关参数设置。

irregular_proba: 这个参数指定了生成不规则掩码的概率,设置为1表示始终生成不规则掩码。

irregular_kwargs: 这个参数是一个字典,包含了生成不规则掩码时的具体参数设置。

min_times: 每个不规则掩码最小生成次数。
max_times: 每个不规则掩码最大生成次数。
max_width: 不规则掩码的最大宽度。
max_angle: 不规则掩码的最大角度。
max_len: 不规则掩码的最大长度。
box_proba: 这个参数指定了生成方框掩码的概率,设置为0.3表示以30%的概率生成方框掩码。

box_kwargs: 这个参数是一个字典,包含了生成方框掩码时的具体参数设置。

margin: 方框掩码的边距。
bbox_min_size: 方框掩码的最小尺寸。
bbox_max_size: 方框掩码的最大尺寸。
max_times: 每个方框掩码最大生成次数。
min_times: 每个方框掩码最小生成次数。
segm_proba: 这个参数指定了生成分割掩码的概率,设置为0表示不生成分割掩码。

squares_proba: 这个参数指定了生成方形掩码的概率,设置为0表示不生成方形掩码。

variants_n: 这个参数指定了生成器生成的变体数量,这里设置为5。

max_masks_per_image: 这个参数指定了每张图像生成的最大掩码数量,这里设置为1。

cropping: 这个参数是一个字典,包含了裁剪图像的相关参数设置。

out_min_size: 裁剪后的图像最小尺寸。
handle_small_mode: 处理小尺寸图像的模式,这里设置为"upscale"表示放大处理。
out_square_crop: 是否进行方形裁剪,这里设置为True表示进行方形裁剪。
crop_min_overlap: 裁剪时的最小重叠区域。
max_tamper_area: 这个参数指定了最大篡改区域的面积比例,这里设置为0.5。

运行配置文件

https://github.com/lorenzo-stacchio/Stable-Diffusion-Inpaint/blob/main/scripts/generate_llama_mask/README.md

python scripts/generate_llama_mask/gen_mask_dataset.py --config ./scripts/generate_llama_mask/data_gen_configs/random_medium_256.yaml --indir data/infrared/mask --outdir data/infrared/mask_gen --ext png

检查输入图像是不是8bit,不是的话需要转换。

image = Image.open(infile).convert('RGB')

变成

if not bit16:
    image = Image.open(infile).convert('RGB')
else:
    #读取16位深度图(像素范围0~65535),并将其转化为8位(像素范围0~255)
    uint16_img = cv2.imread(infile, -1)    #在cv2.imread参数中加入-1,表示不改变读取图像的类型直接读取,否则默认的读取类型为8位。
    uint16_img -= uint16_img.min()
    uint16_img = uint16_img / (uint16_img.max() - uint16_img.min())
    uint16_img *= 255
    #使得越近的地方深度值越大,越远的地方深度值越小,以达到伪彩色图近蓝远红的目的。
    # uint16_img = 255 - uint16_img

    # cv2 中的色度图有十几种,其中最常用的是 cv2.COLORMAP_JET,蓝色表示较高的深度值,红色表示较低的深度值。
    # cv.convertScaleAbs() 函数中的 alpha 的大小与深度图中的有效距离有关,如果像我一样默认深度图中的所有深度值都在有效距离内,并已经手动将16位深度转化为了8位深度,则 alpha 可以设为1。
    # im_color=cv2.applyColorMap(cv2.convertScaleAbs(uint16_img,alpha=1),cv2.COLORMAP_JET)
    uint8_img = cv2.convertScaleAbs(uint16_img,alpha=1)
    if len(uint8_img.shape) == 2:
        uint8_img_rgb = np.repeat(uint8_img[:, :, np.newaxis], 3, axis=2)
    elif len(uint8_img.shape) == 3:
        if uint8_img.shape[2] == 1:
            uint8_img_rgb = np.repeat(uint8_img, 3, axis=2)
    else:
        raise TypeError
    #convert to mat png
    image=Image.fromarray(uint8_img_rgb).convert('RGB')

csv

image_path,mask_path,partition
desk_pc_mouse2.png,desk_pc_mouse2_mask.png,train
desk_pc_mouse2.png,desk_pc_mouse2_mask.png,validation

python scripts\generate_llama_mask\generate_csv.py --llama_masked_outdir output_generated_folder/ --csv_out_path out_path.csv

data/infrared/mask_gen文章来源地址https://www.toymoban.com/news/detail-785701.html

model:

type: 检测器的名称,这里是MaskRCNN [1]
backbone: 主干网络的配置
type: 主干网络的类别,这里是ResNet [1]
depth: 主干网络的深度,这里是50 [1]
num_stages: 主干网络状态的数目,这些状态产生的特征图作为后续的head的输入 [1]
out_indices: 每个状态产生的特征图输出的索引 [1]
frozen_stages: 第一个状态的权重是否被冻结 [1]
norm_cfg: 归一化层的配置项 [1]
norm_eval: 是否冻结BN里的统计项 [1]
style: 主干网络的风格 [1]
init_cfg: 加载通过ImageNet预训练的模型 [1]
neck: 检测器的neck配置
type: neck的类型,这里是FPN [1]
in_channels: 输入通道数 [1]
out_channels: 金字塔特征图每一层的输出通道 [1]
num_outs: 输出的范围 [1]
rpn_head: RPN head的配置
type: RPN head的类型,这里是RPNHead [1]
in_channels: 每个输入特征图的输入通道 [1]
feat_channels: head卷积层的特征通道 [1]
anchor_generator: 锚点生成器的配置 [1]
bbox_coder: 在训练和测试期间对框进行编码和解码 [1]
loss_cls: 分类分支的损失函数配置 [1]
loss_bbox: 回归分支的损失函数配置 [1]
roi_head: RoIHead的配置
type: RoI head的类型 [1]
bbox_roi_extractor: 用于bbox回归的RoI特征提取器 [1]
python scripts/generate_llama_mask/generate_csv.py --llama_masked_outdir data/infrared/mask_gen/ --csv_out_path data/infrared/out_path.csv

训练

python3 main_inpainting.py --train --name  custom_training --base  configs/latent-diffusion/inpainting_catsv2.yaml  --gpus 0,1   --seed  42

到了这里,关于【Stable diffusion inpaiting】训练自己数据集的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用您自己的计算机训练 Stable Diffusion 和 Bloom (175B) 等模型

    在我们最近的几篇文章中,我们一直在提到围绕大型语言和生成 AI 模型的炒作,以及如何减少推理和训练时间。随着我们的用户开始使用这些模型并对其进行微调,他们自然希望微调和部署包含数千亿参数的模型,以提高其特定用例的性能。 通常,这是一项要求非常高的任

    2024年01月16日
    浏览(32)
  • 由浅入深理解Latent Diffusion/Stable Diffusion(5):利用预训练模型快速开始自己的科研任务

    本系列博客导航 由浅入深理解latent diffusion/stable diffusion(1):写给初学者的图像生成入门课 由浅入深理解latent diffusion/stable diffusion(2):扩散生成模型的工作原理 由浅入深理解latent diffusion/stable diffusion(3):一步一步搭建自己的stable diffusion models

    2024年02月12日
    浏览(45)
  • stable diffusion模型训练时数据量

    文生图模型之Stable Diffusion - 知乎 通向AGI之路码字真心不易,求点赞! https://zhuanlan.zhihu.com/p/6424968622022年可谓是 AIGC(AI Generated Content)元年,上半年有文生图大模型DALL-E2和Stable Diffusion,下半年有OpenAI的文本对话大模型Ch… https://zhuanlan.zhihu.com/p/617134893 【stable-diffusion企业级教

    2024年02月04日
    浏览(52)
  • huggingface的diffusers训练stable diffusion记录

    目录 1.原理                 扩散模型的目的是什么?                         扩散模型是怎么做的?                         前向过程在干啥?                 反向过程在干啥? 2.安装环境 3.lora 训练 4.推理 5.源代码​         

    2024年04月26日
    浏览(32)
  • Stable Diffusion训练Lora模型

    以下内容参考:https://www.bilibili.com/video/BV1Qk4y1E7nv/?spm_id_from=333.337.search-card.all.clickvd_source=3969f30b089463e19db0cc5e8fe4583a 第一步,准备训练要使用的图片,即优质的图片 第二部,为这些图片打标,即精准的tag 数量建议20-50张,最多100张图片 不好的图片:模糊的,动作扭曲的,脸部被

    2024年02月12日
    浏览(66)
  • stable diffusion(Lora的训练)

    以坤坤为例,上网随便找了几个坤坤的人脸图像,作为训练的数据集  建议看一遍教程,虽然这个up主好像不是很专业的样子,不过流程差不多是这样的,重点关注一下虚拟环境搭建完之后,在终端选择配置的操作,就是一堆yes no,的选项,跟着视频来就行了。 本地找个训练

    2023年04月12日
    浏览(99)
  • Stable diffusion LoRA 训练过程

    1、使用diffusers-0.14.0, stabel-diffusion 模型 v-1.5版本 下载diffusers-0.14.0 并解压,新建文件test.py, 写入以下: import torch from diffusers import StableDiffusionPipeline pipe = StableDiffusionPipeline.from_pretrained(\\\"./stable-diffusion-v1-5\\\") pipe = pipe.to(\\\"cuda\\\") prompt = \\\"a photo of an astronaut riding a horse on mars\\\" image = pi

    2024年02月16日
    浏览(52)
  • 〔024〕Stable Diffusion 之 模型训练 篇

    声明: 该文中所涉及到的女神图片均来自于网络,仅用作技术教程演示,图片已码 一般同一个训练集需要准备 20~40 张不同角度的照片,当然可以更多,只是训练的时间会变长而已 比如如果训练的是人物,就准备同一个人物的不同角度的照片,并且各种表情都有是最好的,图

    2024年02月08日
    浏览(37)
  • Stable Diffusion XL训练LoRA

    主要包括SDXL模型结构,从0到1训练SDXL以及LoRA教程,从0到1搭建SDXL推理流程。  【一】SDXL训练初识 Stable Diffusion系列模型的训练主要分成一下几个步骤,Stable Diffusion XL也不例外: 训练集制作:数据质量评估,标签梳理,数据清洗,数据标注,标签清洗,数据增强等。 训练文

    2024年02月07日
    浏览(41)
  • Stable diffusion 训练lora出现报错

    今天使用kohya_ss训练lora时出现三个报错,下面是解决办法。 一: 报错 UnboundLocalError: local variable \\\'pipe\\\' referenced before assignment 这个应该是项目的BUG,现在的版本还没修复,但是可以绕过它。方法如下:去 huggingface 下载预训练的基础模型到本地,复制模型的地址到红色框内并把

    2024年02月13日
    浏览(70)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包