文章地址:https://arxiv.org/abs/1908.08718

代码地址:GitHub - seoungwugoh/opn-demo: Onion-Peel Networks for Deep Video Completion, ICCV 2019

总述

ICCV 2019的文章,提出OPN网络(Onion-Peel Network)去解决video inpainting的问题。使用OPN可以解决video completion的问题,也可以解决image competion的问题。在下文中,需要进行填充的图像成为target,用于引导的图像称为 reference。
对于video completion,输入是覆盖了mask的视频帧,采样一组帧作为reference,依据reference帧的内容或者合成一致的内容去填充target帧上mask覆盖造成的空洞。
对于image completion,输入是target image和额外的reference image。使用一组图片可以做到将target image中一些不需要的目标进行移除而不破坏原始内容。可被视为是只有几帧的特殊video completion。

为什么通过计算光流来进行vedio completion的方法不适用这个任务?因为在相隔很远的帧(一组image相当就是不连续的帧)进行光流计算很困难(因为光流就是瞬时速率,只有在时间间隔很小,比如视频的连续前后两帧之间才成立)
这个网络的名字起得很形象,onion-peel,即他对target中的空洞填充是像剥洋葱一样一层层得进行填充,参考reference image的有效区域,每次只填充target空洞的peel region(空洞的boundary),整个填充过程是在几次循环后完成的。这样做的话,在每一步缺失区域都能获得更丰富的语义信息(即上一步填充的层也能够为后续提供信息),只要循环足够多次,即使空洞区域很大也能被成功上色。

网络结构

首先target image和reference image通过Encoder获得key和value的feature map。
从名字就可以看出,key用来寻找target和reference中对应的像素

  1. target 中的key与reference中的key进行匹配】Asymmetric Attention Block中,对每次target image填充的层中的key feature 和 reference中的每个有效(非空洞区域内)key feature进行match。
  2. 得到spatio-temporal attention map】匹配的结果是一个spatio-temporal attention map,即给出哪个frame中的哪个像素对于填充peel region中的像素比较重要。
  3. 【检索】到reference image中的value feature】根据这个attention map,retrieve【检索】到reference image中的value feature,
  4. 将reference image中的value feature 和peel region中的value feature相加
  5. Decoder获得更新后的target value feature和peel region的mask,对target中的peel region进行填充

整个结构还是比较清晰简单的,主要有三个部分,Encoder, Asymmetric Attention Block和Decoder。

Encoder:输入RGB image(3 channels,空洞区域色彩为grey),空洞mask(1 channel),有效区域mask(1 channel)【no-hole 的 mask】。concat为5-channel image输入网络。下采样的步长为4。并行输出key feature和value feature。所有image共享Encoder网络。

Asymmetric Attention Block:这个应该是网络的关键部分,决定了本次循环中target的peel region如何利用reference中的有效区域进行填充。其输入为target和reference的key feature和value feature。这部分流程如下:

可以看到输入的target feature map尺寸为 h×w×128(h,w为原始输入尺寸的四分之一,128为feature维度),reference为n×h×w×128(n为reference的个数)。

  1. 将target此次需要填充的peel region中的像素提取出来,用P进行index,得到新的维度为c×128的key r* 和 value feature map q*(c为peel region中的像素总数)。
  2. 对reference采取同样的操作得到k和v,这样可以简化后续计算。
  3. 对 r* 和k的转置 k* 做点乘操作,得到维度为 c×m 的矩阵,这个矩阵(i,j)位置上的值其实就是第 i 个P中的 key feature和第 j 个 V 中的key feature的cosine相似度(两个128维向量的内积),该值表示说明第 j 个validity 像素对恢复第 i 个peel region像素的贡献度。
  4. 使用softmax函数对这个矩阵进行正则化得到matching score map s*。我感觉这样就让每个P中的像素都可以被V中的像素以加权平均的方式进行表示。
  5. s*(c×m)与v*(m×128)进行点乘操作得到c×128的矩阵 u*,就是一个retrieve的过程,利用对应的validity像素value feature的加权和推测peel region像素处的value feature 。
  6. 将推测得到的u* 与原始q相加得到最终的value feature,
  7. 并将值赋回最初的value feature map q的对应位置上。

Decoder:输入上一个block输出的h×w×128的value feature map,对peel region进行重建,就是一个decode的过程啦,所以设计上和encode基本对称。使用nearest neighbor upsampling来扩大feature map,然后把decode输出的原始图像的peel region部分抠出来和输入的target image的有效区域合并起来,就是这次循环得到的结果。

loss

设计loss function来限制逐像素重建的准确度和视觉相似度。所以在每次循环中分别在像素空间和深层特征空间最小化和GT的L1距离。

1、pixel loss:很简单,直接放一下图好了

问题:我突然觉得可以在pixel loss层面上对每次补全加一个权重,这样可能效果会好?

的确可以这样考虑,因为在预测缺失区域时中间部分相对于边缘部分会有更大的自由度,所以适当减小中间部分权重是合理的,Generative Image Inpainting with Contextual Attention中的Spatially discounted reconstruction loss就是基于这个考虑。不过考虑到OPN是层层补全,每层在进行补全时都相当于缺失区域的边缘部分,所以似乎也不用刻意调整权重,这个还需要做实验验证一下。

2、perceptual loss:内容相似度和风格相似度,感觉有点本科做style transfer时候的意思了。


content相似度是用VGG-16提取feature map计算,Gram matrix就是Gatys当时做风格迁移(Image style transfer using convolutional neural networks)时提出的。

计算pixel loss的时候用的是decoder的原始输出,perceptual loss用的是和target merge之后的输出。

3、total loss:

最后一项是参数正则项,防止过拟合(我自己瞎想的)

对于需要一帧一帧处理的video来说,输出会有虚影,增加了一个额外的时序一致性网络(temporal consistency network)进行后处理。(an encoder-decoder network equipped with a convolutional GRU at the core is trained to balance between the temporal stability with the previous frame and the perceptual similarity with the current frame. We modified the original method to match our need which is to stabilize the inpainted contents.)
关于total loss为什么把peel region和valid region的loss分开计算?是为了之后通过设置权重将训练的重点更多地放在恢复peel area上。

Onion-Peel Networks for Deep Video Completion_qq_34186974的博客-CSDN博客

(OPN)Onion Peel Networks for Deep Video Completion相关推荐

  1. Onion-Peel Networks for Deep Video Completion

    论文地址 github地址 文章目录 总述 网络结构 训练 推理阶段 实验 总述 ICCV 2019的文章,提出OPN网络(Onion-Peel Network)去解决video inpainting ...

  2. 深度学习论文阅读图像分类篇(三):VGGNet《Very Deep Convolutional Networks for Large-Scale Image Recognition》

    深度学习论文阅读图像分类篇(三):VGGNet<Very Deep Convolutional Networks for Large-Scale Image Recognition> Ab ...

  3. 异常点检测算法(三)Replicator Neural Networks

    异常点检测算法(三)Replicator Neural Networks 异常值检测算法在数据挖掘的诸多领域有着应用场景,例如金融领域,信息传输领域,图像领域等.在研究过程中,有学者给出了异常点的一个 ...

  4. 论文学习:(TSN)Temporal segment networks: Towards good practices for deep action recognition

    论文:<Temporal Segment Networks:Towards Good Practices for Deep Action Recognition> 目录 0.导论 1.TS ...

  5. 【超分辨率】(RCAN)Image Super-Resolution Using Very Deep Residual Channel Attention Networks

    论文名称:Image Super-Resolution Using Very Deep Residual Channel Attention Networks 论文下载地址:https://arxiv ...

  6. DRN(CVPR2020)Dual Regression Networks

    DRN: [ Closed-loop Matters: Dual Regression Networks for Single Image Super-Resolution ]DRN文论链接 SISR ...

  7. 深度(穿透)选择器 >>> /deep/ ::v-deep

    深度(穿透)选择器 ::v-deep /deep/ 及 >>> 在 vue 项目的开发过程,使用了 ElementUI 组件且样式 style 使用了 scoped 属性,当想要修改 ...

  8. 国外物联网平台初探(四):Ayla Networks

    定位 Ayla企业软件解决方案为全球部署互联产品提供强大的工具 功能 Ayla的IoT平台包含3个主要组成部分: (1) Ayla嵌入式代理Ayla Embedded Agents (2) Ayla云 ...

  9. FCN全连接卷积网络(3)--Fully Convolutional Networks for Semantic Segmentation阅读(摘要部分)

    1.摘要 1.1逐句理解一下: Convolutional networks are powerful visual models that yield hierarchies of features ...

最新文章

  1. 级联人脸检测--Detecting Faces Using Inside Cascaded Contextual CNN
  2. NetDevOps — netmiko
  3. 计算机无法安装win10,win10系统电脑提示“windows安装无法继续”的还原步骤
  4. python详细安装教程3.7.4-python 3.7.4下载与安装的问题
  5. 对话尹成杰三农谋定压舱石-农业大健康·万祥军:稳农保供
  6. poj1330Nearest Common Ancestors(LCA小结)
  7. rhel Linux 网络配置
  8. java线程池之一:创建线程池的方法
  9. asp.net将内容导出到Excel,Table表格数据(html)导出EXCEL
  10. TreeView控件 1202
  11. 32驱动_轻松掌握pinctrl子系统驱动开发——一个虚拟pinctrl dev驱动开发
  12. await原理 js_深入浅出node.js异步编程 及async await原理
  13. Alibaba微服务组件Nacos单机+集群配置 prometheus+grafana监控配置及注册中心实战【收获满满】
  14. 新浪微博错误提示代码
  15. Markdown生成左侧目录
  16. gns3使用简要教程(gns3-wireshark捕获教程)
  17. Python之条件竞争
  18. python语句print(type(1j))的输出结果_Python 语句print(type(1J))的输出结果是:_学小易找答案...
  19. 查词app android教程,英语查单词app哪个好_查单词app推荐_专门查单词的app
  20. 计算机试题幻灯片盒状展开,2017年职称计算机考试《PowerPoint》精选练习11

热门文章

  1. Matlab面向对象编程
  2. linux常用指令总结一~~
  3. 简单async/wait使用样例
  4. java.lang.ClassNotFoundException: org.springframework.web.util.IntrospectorCleanupListener错误解决方案...
  5. “相当一部分”HPE公司OpenStack工作人员被转移至SUSE
  6. HeadFirst设计模式篇四:工厂模式
  7. php中函数前加符号的作用分解
  8. 手把手教你用.NET Core写爬虫
  9. log4j.properties配置
  10. 2012年下半年我国信息化和信息安全走势分析与预测