总结

1.这篇论文的思路基于一个简单的假设:专业摄影师拍出来的图片一般具备比较好的构图,而如果从他们的图片中随机抠出一块,那抠出的图片大概率就毁了。也就是说,原图在构图方面的分数应该高于抠出来的图片。而这种比较的方式,可以很方便地用 Siamese Network 和 hinge loss 实现,如下图所示。

2.另外,这篇论文另一个讨人喜欢的地方在于,它几乎不需要标注数据,只需要在网上爬取很多专业图片,再随机抠图就可以快速构造大量训练样本,因此成本近乎为零,即使精度不高也可以接受,其中作者将数据保存在了dataset.pkl里。

这篇论文的训练方式只能让网络知道哪种图片的构图好,而无法自动从原图中抠出构图好的图块,因此,在抠图方面,采用的是sliding window search strategy滑动窗口策略,并根据网络输出的分数决定哪个窗口最好。

细节

1.dataset.pkl是数据集信息,来自Flickr website,它是一个长度为294644的列表,包含了21046张原图的14个裁剪图,其中scale为0.5、0.6的border crops各4个,scale为0.7、0.8的square crops各3个,作者公开的代码里,目的就是从这14个裁剪图中,选出裁剪效果最好的一个,dataset.pkl数据结构如下面两个图所示;

2.VFN(View Finding Network)结构

VFN的网络结构如下图所示,VFN的卷积层采用了AlexNet,然后,将卷积层的输出送入两个全连接层,然后是一个排列层(ranking layer)。该排列层是无参数的,且仅用于评估图像对的hinge loss。在训练过程中,模型更新其参数,使得Φ(·)最小化式(2)中的总排名损失。一旦网络被训练,我们抛弃了排名层,简单地使用Φ(·)将给定的图像I映射到一个美学评分,这个评分将I与其他视觉上相似的视图区分开来。在最后一个卷积层的顶部,附加了一个空间金字塔池(SPP)层。并且该文在VFN中使用固定大小的输入图像(例如,输入图像/patch首先被调整为227)。简单地应用SPP技术来实现对卷积激活特性的数据聚合。

该文选择了3*3、5*5、7*7的池化尺寸池,且步幅stride要小于池化层尺寸。多分辨率池过滤器以不同的尺度保留组合信息。另外,该文通过实证发现,如果没有SPP,模型的特征空间越大,越容易出现过拟合。该文在实验中同时使用了最大池和平均池。

池化层特征是12,544维,然后送入第一个全连接层;fc1后面是ReLU,其输出维度为1,000。由于排序问题不像物体分类那么复杂,所以我们选择相对较小的特征维数;此外,卷积激活特征可以在压缩时不造成较大的信息丢失,而宽的全连接层往往会出现过拟合。fc2只有一个神经元,只输出最终的排名分数。

为了训练网络,使用了带动量momentum的随机梯度下降算法。从在ImageNet ILSVRC2012数据集上预先训练的AlexNet开始,随机初始化全连接层。动量设置为0.9,学习速率从0.01开始,经过10,000次迭代后降低到0.002,每个小批量包含100个图像对。总共运行15,000次迭代用于训练,每1,000次迭代评估验证集。选择验证误差最小的模型进行测试。为了对抗过拟合,训练数据通过随机水平翻转以及亮度和对比度的轻微随机扰动来增强。使用TensorFlow框架来实现和训练我们的模型。

3.评价标准

(1)average intersection-over-union (IoU)

  1. def overlap_ratio(x1, y1, w1, h1, x2, y2, w2, h2):
  2. intersection = max(0, min(x1 + w1, x2 + w2) - max(x1, x2)) * max(0, min(y1 + h1, y2 + h2) - max(y1, y2))
  3. union = (w1 * h1) + (w2 * h2) - intersection
  4. return float(intersection) / float(union)

(2)average boundary displacement

  1. boundary_displacement = (abs(best_x - x) + abs(best_x + best_w - x - w))/float(width) + (abs(best_y - y) + abs(best_y + best_h - y - h))/float(height)

4.损失函数Hinge Loss

参考博客:

让计算机审美,这可能吗?

“Learning to Compose with Professional Photographs on the Web" 论文解读(一)(附代码与详细注释)

“Learning to Compose with Professional Photographs on the Web”论文解读(二)(附代码与详细注释)

论文学习——《Learning to Compose with Professional Photographs on the Web》 (ACM MM 2017)的更多相关文章

  1. 排序学习(learning to rank)中的ranknet pytorch简单实现

    一.理论部分 理论部分网上有许多,自己也简单的整理了一份,这几天会贴在这里,先把代码贴出,后续会优化一些写法,这里将训练数据写成dataset,dataloader样式. 排序学习所需的训练样本格式如 ...

  2. Faster RCNN论文学习

    Faster R-CNN在Fast R-CNN的基础上的改进就是不再使用选择性搜索方法来提取框,效率慢,而是使用RPN网络来取代选择性搜索方法,不仅提高了速度,精确度也更高了 Faster R-CNN ...

  3. 《Explaining and harnessing adversarial examples》 论文学习报告

    <Explaining and harnessing adversarial examples> 论文学习报告 组员:裴建新   赖妍菱    周子玉 2020-03-27 1 背景 Sz ...

  4. 论文学习笔记 - 高光谱 和 LiDAR 融合分类合集

    A³CLNN: Spatial, Spectral and Multiscale Attention ConvLSTM Neural Network for Multisource Remote Se ...

  5. Apache Calcite 论文学习笔记

    特别声明:本文来源于掘金,"预留"发表的[Apache Calcite 论文学习笔记](https://juejin.im/post/5d2ed6a96fb9a07eea32a6f ...

  6. Docker技术入门与实战 第二版-学习笔记-9-Docker Compose 项目-3-Django项目实例

    使用 Django 我们现在将使用 Compose 配置并运行一个 Django/PostgreSQL 应用.在此之前,先确保 Compose 已经安装. 1.通过编辑 Dockerfile文件来指定 ...

  7. Node学习笔记(三):基于socket.io web版你画我猜(一)

    经过惨淡的面试,也是知道了自己的不足,刚好最近在学习node,心中便有了做一个web版的你画我猜的想法 首先说下思路,在做准备工作的时候,有两个大概的思路: 1.规定一块div,捕捉鼠标事件,动态生成 ...

  8. Spring MVC 学习笔记2 - 利用Spring Tool Suite创建一个web 项目

    Spring MVC 学习笔记2 - 利用Spring Tool Suite创建一个web 项目 Spring Tool Suite 是一个带有全套的Spring相关支持功能的Eclipse插件包. ...

  9. Java EE 学习(9):IDEA + maven + spring 搭建 web(5)- 博客文章管理

    转载:Gaussic(一个致力于AI研究却不得不兼顾项目的研究生) . 注:在阅读本文前,请先阅读: Java EE 学习(5):IDEA + maven + spring 搭建 web(1) Jav ...

随机推荐

  1. DecimalFormat数字格式化

    DecimalFormat可以按照需要格式化数字,下面简单介绍一下几种使用.其中自己也踏踏实实踩了坑,谨此记录. 保留位数设置 public class DecimalUtils { //保留2位,不 ...

  2. 【串线篇】概述SpringMvc和spring整合

    SpringMVC和Spring整合的目的:分工明确: SpringMVC的配置文件就来配置和网站转发逻辑以及网站功能有关的(视图解析器,文件上传解析器,支持ajax,xxx):springmvc.x ...

  3. Win10桌面图标显示不正常变成了白色

    开机不知道什么原因,windows 10 桌面图标全部变成了白色,软件是可以点击正常打开使用,但是看着特别不爽.今天就告诉大家一种办法,解决这种问题. 解决步骤 1.在桌面右键新建 "文本文 ...

  4. static 关键字详解(用途、误区、面试题)

    static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键字的用法和平常容易误解的地方,最后列 ...

  5. go(一)基础知识

    一.第一个程序 基本程序结构 package main // 包 import "fmt" // 引入依赖代码 // 功能实现 func main() { fmt.Println( ...

  6. youlexuan父类配置

    <!-- 集中定义依赖版本号 -->    <properties>        <junit.version>4.12</junit.version> ...

  7. Database基础(三):SQL数据导入/导出、 操作表记录、查询及匹配条件

    一.SQL数据导入/导出 目标: 使用SQL语句完成下列导出.导入操作: 将/etc/passwd文件导入userdb库userlist表并给每条记录加编号 将userdb库userlist表中UID ...

  8. mysql性能查看 命中率 慢查询

    网上有很多的文章教怎么配置MySQL服务器,但考虑到服务器硬件配置的不同,具体应用的差别,那些文章的做法只能作为初步设置参考,我们需要根据自己的情况进行配置优化,好的做法是MySQL服务器稳定运行了一 ...

  9. nginx防止SQL注入规则

    $request_uriThis variable is equal to the *original* request URI as received from the client includi ...

  10. ListView 分页显示(转载+修改)上

    实习工作中,分配到了一个给已经上线的android成品增加需求的任务,其中一项是给每个信息显示增加分页显示的功能(ListView的显示),于是上网查资料,看到了: 原地址:http://www.cn ...