阅读《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
- 对于当前状态,我们可以表示成:
st={o0,o1,...,ot−1,ot} s t = { o 0 , o 1 , . . . , o t − 1 , o t }
其中 ot o t 表示agent当前所观察到环境,即当前裁剪的图片 - 对于
{o0,o1,...,ot−1}
{
o
0
,
o
1
,
.
.
.
,
o
t
−
1
}
表示过去的记忆,即前t-1次迭代过程的剪裁图片,本文用网络LSTM来处理这些记忆
这里需要注意,虽然我们的状态是当前所观察到的环境加上过去的回忆,但是训练的时候只需要输入但前所观察到的环境就可以的,我们的LSTM会提供我们之前的记忆信息
如上图所示,我们把Agent观察到的场景,即裁剪的结果,先进行卷积操作,最后输出一个向量(即Local Feature),而Global Feature 是原图进行卷积的结果,把Local Feature 和 Global Feature 合并起来就是我们是 ot o t 了
Action
Action 很简单,就只有14个动作
五: Reward Function
- reward的计算方法就是: 当前最新裁剪的图片的美学分数与上一次迭代结果的差值,再用信号函数把差值限制在[-1,1]内
sign(saes(It+1)−saes(It)) s i g n ( s a e s ( I t + 1 ) − s a e s ( I t ) ) - 此外,还要加一个附加的reward设定
−0.001∗(t+1)
−
0.001
∗
(
t
+
1
)
, 目的是想使我们的迭代步数尽可能的小
r′t=sign(saes(It+1)−saes(It))−0.001∗(t+1) r t ′ = s i g n ( s a e s ( I t + 1 ) − s a e s ( I t ) ) − 0.001 ∗ ( t + 1 ) - 为了不让我们的Agent往极端的方向上一去不复返,我们还要设计另一个附加的reward。记
ar
a
r
表示裁剪窗口的长宽比,
nr
n
r
表示一个惩罚,最终,reward function 可以写成:
rt(st,at)={r′t+nr,r′t,if ar<0.2 or ar>2 othewise r t ( s t , a t ) = { r t ′ + n r , if a r < 0.2 or a r > 2 r t ′ , othewise - 最后,就是 saes s a e s 如何计算了。本文用一个预先训练好的网络VFN来获得一张图片的美学分数。这个网络的结果在这:https://arxiv.org/pdf/1702.00503.pdf
六: 算法框架
最后,总体框架如下:
如上图,我们先把剪裁的图片进行5层的卷积,然后经过一个全连接层输出一个向量作为Local Feature,并合并上对原图的卷积的结果最为RL算法的输入 ot o t 。其中即时的回报通过把Local Feature 放入预先训练好的网络VFN来获得。因为本文的算法采用的是Actor-Critic框架,所以输出分为两个部分,一个是由Actor输出的action,另一个是由critic输出的对该action的评价。
七: 算法细节
本文的算法是基于asynchronous advantage actor-critic(A3C),相比于原始的算法,本文针对实际问题做了一些改善。
1. 去掉同步机制,即本文的实验并没有随机生成多个随机场景做训练。但是在训练的时候输入是用mini-batch的形式作为输入的,同样起到了同步训练的结果。
2. 使用优势函数以及加入了熵, policy gradient 公式如下
相比于原始的policy gradient:
我们发现,本文对算法的变动主要是用reward来表示你的Q function,不过这是很常规的操作,其次是加入了一个熵项,从下面的算法更能直接看出差别

]( https://upload-images.jianshu.io/upload_images/13326502-05e771edd3b0efc2.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)