A2-RL: Aesthetics Aware Reinforcement Learning for Image Cropping Debang

一 文章的主要任务

本文介绍的是如何用强化学习的方法对图片做美学剪裁
如下图,Input是一张风景图,初始化是整张图片,然后经过多个action后,我们得到了最后的裁剪方案作为输出。
在这里插入图片描述

二 相关的工作

对于图片的裁剪,主要有两个大方向:

  1. 基于Attention-based: 这个的目的是在原图中寻找关键区域。比如说在图片上寻找信息量最大的区域等等
  2. 基于Aethetics-based: 即基于美学,这一方面是想在原图中寻找最让人感觉舒服的区域,这也是本文的目的。
  3. 其他还有基于Change-based, 即比较原图和裁剪后的图,根据比较结果决定要去除哪些无关要紧的区域,保留一些质量较高的区域

对于前人的工作,主要有如下缺点:

  1. 首先,大部分弱监督的裁剪方法都是依赖于滑动窗口机制(Sliding window mechanism)
  2. 滑动窗口的机制有一些缺陷:即要求我们要固定长宽比
  3. 大部分滑动窗口的方法会产生上万个备选窗口,这使得程序很耗时

三 本文的主要想法

针对上述缺点,文章提出了基于Reinforcement Learning的解决方案:

  1. 首先,把我们的问题看作一个决策链问题,这个过程就需要我们定义好State space 和 action space
  2. 提出本文的算法框架(A2-RL)
  3. 设计出一个reward函数使之能有益于我们对图片进行美学裁剪

四: State and Action

  1. 对于当前状态,我们可以表示成:
    s_t = {o_0, o_1,…,o_{t-1},o_t}
    其中o_t表示agent当前所观察到环境,即当前裁剪的图片
  2. 对于{o_0,o_1,…,o_{t-1}} 表示过去的记忆,即前t-1次迭代过程的剪裁图片,本文用网络LSTM来处理这些记忆

这里需要注意,虽然我们的状态是当前所观察到的环境加上过去的回忆,但是训练的时候只需要输入但前所观察到的环境就可以的,我们的LSTM会提供我们之前的记忆信息

如上图所示,我们把Agent观察到的场景,即裁剪的结果,先进行卷积操作,最后输出一个向量(即Local Feature),而Global Feature 是原图进行卷积的结果,把Local Feature 和 Global Feature 合并起来就是我们是o_t了

Action
在这里插入图片描述Action 很简单,就只有14个动作

五 Reward Function

  1. reward的计算方法就是: 当前最新裁剪的图片的美学分数与上一次迭代结果的差值,再用信号函数把差值限制在[-1,1]内
    sign(s_{aes}(I_{t+1}) - s_{aes}(I_t))
  2. 此外,还要加一个附加的reward设定-0.001 * (t+1), 目的是想使我们的迭代步数尽可能的小
    r^\prime_t = sign(s_{aes}(I_{t+1}) - s_{aes}(I_t)) -0.001 * (t+1)
  3. 为了不让我们的Agent往极端的方向上一去不复返,我们还要设计另一个附加的reward。记ar表示裁剪窗口的长宽比,nr表示一个惩罚,最终,reward function 可以写成:
    \quad r_t(s_t,a_t)= \left{\begin{aligned} &r^\prime_t + nr, &\text{if } ar<0.2 \text{ or } ar>2 \ &r^\prime_t, &\text{ othewise} \end{aligned}\right.
  4. 最后,就是s_{aes}如何计算了。本文用一个预先训练好的网络VFN来获得一张图片的美学分数。这个网络的结果在这:https://arxiv.org/pdf/1702.00503.pdf

六: 算法框架

最后,总体框架如下:
在这里插入图片描述
如上图,我们先把剪裁的图片进行5层的卷积,然后经过一个全连接层输出一个向量作为Local Feature,并合并上对原图的卷积的结果最为RL算法的输入o_t。其中即时的回报通过把Local Feature 放入预先训练好的网络VFN来获得。因为本文的算法采用的是Actor-Critic框架,所以输出分为两个部分,一个是由Actor输出的action,另一个是由critic输出的对该action的评价。

七 算法细节

本文的算法是基于asynchronous advantage actor-critic(A3C),相比于原始的算法,本文针对实际问题做了一些改善。

  1. 去掉同步机制,即本文的实验并没有随机生成多个随机场景做训练。但是在训练的时候输入是用mini-batch的形式作为输入的,同样起到了同步训练的结果。
  2. 使用优势函数以及加入了熵, policy gradient 公式如下
    \nabla_\theta log \pi(a_t|s_t; \theta)(R_t - V(s_t;\theta_v)) + \beta \nabla_\theta H(\pi(s_t; \theta))
    相比于原始的policy gradient:
    \nabla_\theta log \pi_\theta(s,a)(Q^{\pi_\theta}(s,a) - V^{\pi_\theta}(s))
    我们发现,本文对算法的变动主要是用reward来表示你的Q function,不过这是很常规的操作,其次是加入了一个熵项,从下面的算法更能直接看出差别

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

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值