首页 > 其他分享 >用强化学习构建个性化的二维码

用强化学习构建个性化的二维码

时间:2023-09-16 09:02:17浏览次数:51  
标签:ControlNet 生成 学习 二维码 构建 图像 强化 个性化

 

技术概述

AIGC 在图像生成领域如火如荼,StableDiffusion 加各种 LORA,ControlNet,大家玩得不亦乐乎。但是基于扩散模型的方式,仍然存在很多问题,比如抽卡成功率过低,生成图像的细节仍需优化。具体到二维码生成,目前 hugging face 上的几个 ControlNet 确实可以生成不错的二维码和语义融合的图像,但是往往需要大量尝试,并且加上后续的一些迭代修改,才能保证生成的图像能被正确地识别为想要地二维码。我们通过强化学习加课程学习的方式,在保证出图效果的基础上,将二维码识别率从 20%提高至 80%。

强化学习简介

强化学习是机器学习的一种,它是基于让机器不断进行尝试并在尝试中获得的反馈信息指导它如何更优地进行决策。基于马尔可夫决策过程(Markov Decision Process, MDP)是强化学习中一个非常重要的框架。

MDP 体系中包含五个主要部分:状态(State),动作(Action),策略(Policy),奖励(Reward)和折扣因子(discount factor)。状态表示学习系统当前的状态,动作则表示在某个状态下可以进行的操作,策略是指系统在每个状态下选择不同动作的规则,奖励是指在特定状态进行特定动作后获得的反馈,而折扣因子则是用于控制当前和未来奖励之间的权重比。具体流程如下图所示:

图片

在基于 MDP 的强化学习中,学习的目标是找到一个最佳策略使得从起始状态到终止状态累计奖励最大。强化学习算法,就是通过学习环境反馈的奖励,不断地调整策略,最终形成一个最佳的策略。具体过程中,会利用“探索-开发”策略,即在探索新的可能性和利用已知的最佳策略之间找到一种平衡。

这就是基于 MDP 的强化学习的基础概念,可以在很多问题上得到应用,比如自动驾驶、游戏 AI、机器人导航等地方都有广泛的应用。

Stable Diffusion

SD(Stable Diffusion)是最近非常火热的图像生成领域的算法,其核心思想仍然逃离不了下面的这个基本的数学定理:

/任何两个有相同的 support,并且绝对连续的分布 , ,可以找到对应的 transformation,将  转化成  的分布,也可以找到另外的 transformation,将  转化成  的分布/

在图像生成领域,我们可以将  对应成符合一定语义或者条件的图像集合对应的分布。 对应成相同 sample space 的高斯分布。

扩散过程()

对于扩散模型来说,从  到  这一步,使用了经典物理的扩散过程。简单来说,就是不断在图像信号  上一步一步地去叠加高斯噪声,并且同时降低  信号,经过大量步数的叠加,整个图像得信噪比降至无限接近 0 的水平,即获得一组了完全的高斯噪声分布 。

可以参考一篇非常不错的 Blog:https://lilianweng.github.io/posts/2021-07-11-diffusion-models/

去噪过程()

去噪过程,即生成过程是我们使用强化学习主要优化的阶段。既然如此我们就使用 MDP 的语言将整个去噪过程建模一个强化学习能够容易使用的场景。

图片

简单来说,我们从一个高斯噪声  开始,scheduler 采样获得一个 latent。

  1. scheduler 将 latent 发送给 Agent,这边 Agent 由 ControlNet 和 StableDiffusion 的模型构成。
  2. Agent 根据接收到的 latents,和其他的一些 context,例如(positive/negative prompts, conditions)等等预测出当前步数对应的 noise,并将预测的 noise 发送给 scheduler
  3. scheduler 将接受到的 noise,通过去噪的算法进行去噪,得到新的 latents

不断重复上面三个步骤,直至整个去噪过程完毕,最后生成一个图像,计算生成图像对应得 reward,可以是衡量图像质量得 reward,或者其他个性化的 reward。对于上述的这整个去噪过程,我们就可以用强化学习的各种算法去进行优化。

 

强化学习优化二维码生成

现状

当前 hugging face 上公布了大量的 ControlNet,可以用来生成个性化的二维码,例如:

  1. https://huggingface.co/monster-labs/control_v1p_sd15_qrcode_monster
  2. https://huggingface.co/Nacholmo/controlnet-qr-pattern-v2

一般的使用流程即上传自己目标的二维码,然后进行一些 prompts,最后生成具有给定 prompts 语义的二维码。但是目前这些 ControlNet 比较严重的问题,抽卡成功率极低,生成一些融合效果不错,并且能被成功识别的概率不会超过 20%。

对此我们使用强化学习课程学习两大技术手段进行 finetune 已有的 ControlNet,使得最终的模型生成的图像既可以很好地保证融合的效果和识别成功率。

算法介绍

训练框架

我们的强化学习优化二维码生成过程的训练框架图如下所示:

图片

首先整个算法的输入包括三个部分:

  1. 一张底图
  2. 底图对应的 caption
  3. 目标的二维码

这三个部分构成一个训练集 然后将三个部分输入给模型,包括 Diffusion Model 和用于控制的 ControlNet,其中用于 finetune 的 ControlNet 的需要保持在训练模式。在整个生成过程中将数据保存用于后续强化学习训练。

Reward 设置

在获得最终的生成图像之后,我们将用其计算二维码生成这个应用场景下对应的 reward。目前算法的 reward 由三个部分构成:

  • 二维码能否被正确识别
  • 生成图像和原图像的近似度(使用 CLIP 模型)
  • 生成图像和 prompt 的近似度(使用 CLIP 模型)

第一个 reward 是我们这个优化算法最直接的目的,即提高出图的成功率。但是可以想象只有第一个 reward 肯定是不行的,因为强化学习很容易学习到,直接输出输入的目标二维码,而忽略底图和 prompt 所给定的语义信息。这样即使算法能够很好地提高二维码识别成功率,仍然和我们的优化初心背离甚远。因此我们通过增加第二个 reward 来控制生成图像和底图,prompt 之间的语义相似度。这样可以在提高识别成功率的同时极大程度地去将用户给定的语义或者底图信息融合进入二维码。

课程学习

在架构图中,我们发现在 ControlNet 那一层多了一个 红色自循环,这代表我们在训练过程中加入了课程学习的 scheduler。

众所周知,在 ControlNet 和 Diffusion Model 结合的时候,增加 ControlNet 的控制权重,那么生成图像则会向 ControlNet 的所给定的条件靠拢。对于二维码生成这个应用来说也不例外,在原有的 ControlNet 下,你只需要疯狂提高 ControlNet 的权重,那么也是可以保证生成的图像的识别率,但是其融合效果就会越来越差。因此,之前我们只能通过大量的抽卡,抽中一个能够很好 balance 这两者的图像。

我们这边借鉴了课程学习的思想,对于 ControlNet 的控制强度设置了一个 scheduler,保证在整个训练过程中控制强度从高到低按某种方式递减。直觉上,这样很符合强化学习和课程学习结合的想法,先从简单的任务开始,慢慢增加任务的难度,后续的强化学习可以借鉴过去简单任务上的经验。

算法结果

这边展示几张在训练过程中保存的光子二维码。所列出二维码没有进行特别的 Prompt 调优,和后处理,均为随机采样出的 Prompt,直出的图像。

图片
图片
图片
图片

下面展示一下整个训练过程的曲线:

二维码识别成功率:

图片

从这张图上,可以看到随着课程学习的更新,任务难度增加,二维码识别会突然降低,但是随着一段时间的强化学习,二维码的识别会再次上升。

CLIP 提供的语义 Reward:

图片
未来工作

通过使用强化学习优化二维码生成这个工作,展现了强化学习在当下火热的 AIGC 领域的潜力。我们相信未来强化学习的技术会越来越多作为补充加入整个艺术制作流程当中,比如:

  1. 通过在人类标注的数据上学习一个 reward 模型来评判生成图像的质量,并将 RLHF 技术加入扩散模型的调优。
  2. 通过将生成视频的稳定性等等一些评判指标作为 reward,以此提高当下视频生成技术。
  3. 在使用多视角图重建 3D 模型的时候,一致性往往得不到保障,我们也可以在其中加入强化学习,提高多视角图的重建效果。

参考文献

Black, Kevin, et al. "Training diffusion models with reinforcement learning." arXiv preprint arXiv:2305.13301 (2023).

 

 

作者:腾讯游戏光子工作室群 Alex

标签:ControlNet,生成,学习,二维码,构建,图像,强化,个性化
From: https://www.cnblogs.com/88223100/p/Constructing-personalized-QR-codes-using-reinforcement-

相关文章

  • 构建工具Premake
    构建工具Premake经常用VisualStudio写一些小程序来验证OpenCASCADE的功能,每次创建项目后都配置头文件,库路径,程序运行时还要配置Debug的环境变量,比较麻烦。也尝试过CMake和QMake,都不太理想。CMake学习曲线陡峭一点,还会生成一堆文件。QMake简单些,但是有的选项不支持。直到看到一个......
  • 使用NGINX或者Openresty构建正向和方向代理服务器
    本文提供正向代理和反向代理服务器构建方法,但仅仅提供windows下的具体实例。1、编译这一步对操作者要求非常高,建议跳到第2步。(1)下载OpenResty最新源码包https://openresty.org/download/openresty-1.19.3.1.tar.gz(2)下载正向代理源码包,注意如果openresty是最新版本,则正向代理也下......
  • 前端生成二维码,qrcode使用说明,canvas查看大图
    生成二维码用于vue项目通过字符串转换生成二维码的三方插件安装插件npminstall--saveqrcode引入使用importQRCodefrom"qrcode"页面<!--放置二维码的容器--><canvas:id="'qrCode_id'+stringxxxxx"class="qrCode_style"></canvas><!--可......
  • go包依赖管理-构建完整的依赖项目:目录结构及包的调用
    目录结构:<home>/|--greetings/|--hello/1.分别进入对应目录创建以上目录结构//bash切换到用户主目录 cd$HOMEPAHT$ //bash新建greetings目录并进入该目录mkdirgreetingscdgreetings//bash创建模组example.com/greetings$gomodinitexample.com/greetingsgo:......
  • idea使用设置grade构建项目遇到的坑
    坑1:构建提示无法通过配置文件构建 解决办法:经过查明是系统自动更新将gradle的配置默认为gradle,现在改为idea。问题解决 坑二:设置程序参数,给配置avtive设置初始值  ......
  • 构建工具gulp浅谈
    gulp.js-基于流(stream)的自动化构建工具引言:​ js作为一门脚本语言,在较早时候,只能通过<script>标签插进html去运行,单个的js文件离开了html就没有了意义。​ 如果一个网站功能很多,要按照功能划分写十几个js文件,那么就要插入十几个<scriptsrc="">去引那些js文件,还需要注意顺......
  • 可视化应用构建之推单
    一, 引言要说明什么是推单之前,需要先说明什么单据。生活中常见到的,在购物APP中可以看到订单,收到的物品有包装清单;还有发票,收据等都可以理解为单据。那么推单是什么含义呢? 看字面意思好像是从一张单据生成另一张单据,这么理解不全对,实际上应用构建中的推单是推数据。比如有两张单据;......
  • 可视化应用构建之推单
    一, 引言要说明什么是推单之前,需要先说明什么单据。生活中常见到的,在购物APP中可以看到订单,收到的物品有包装清单;还有发票,收据等都可以理解为单据。那么推单是什么含义呢? 看字面意思好像是从一张单据生成另一张单据,这么理解不全对,实际上应用构建中的推单是推数据。比如有两张......
  • Vue二维码组件
    1.前言该组件依赖qrcode.js与element-ui支持二维码大小配置,点击大图预览该组件以vue文件形式进行封装,需要配置httpVueLoader插件进行引入,其他格式请自行更改源码2.使用方法引入依赖<linkhref="https://cdn.bootcdn.net/ajax/libs/element-ui/2.15.13/theme-chalk/index......
  • 微信二维码生成,token失效,填坑
    失效原因:生产环境token失效,被测试环境覆盖官方说明:目前access_token的有效期通过返回的expires_in来传达,目前是7200秒之内的值。中控服务器需要根据这个有效时间提前去刷新新access_token。在刷新过程中,中控服务器可对外继续输出的老access_token,此时公众平台后台会保证在5分钟内,......