《Indices Matter(IndexNet):Learning to Index for Deep Image Matting》论文笔记

本文介绍了IndexNet论文,该论文提出了一种学习索引函数进行深度图像 matting的方法。通过将上采样与索引函数统一,IndexNet能够学习数据驱动的上下采样过程,特别是在边缘细节处理上优于传统的双线性插值。文章展示了不同采样方法的比较,包括整体索引网络(HINs)和深度索引网络(DINs),并提供了实验结果证明其优势。
摘要由CSDN通过智能技术生成

参考代码:IndexNet

1. 概述

导读:这篇文章是从采样的角度去思考其对matting(segmentation)的影响,文章发现使用indices-guided的pooling/unpooling操作能在生成结果的边缘上比双线性插值类方法获取细节更加精细的结果,并且现有的上采样操作理论上都可以与index function思想统一(图像差值可以看作是一种特殊的index function,从而转换到mask,矩阵运算的形式表示)。在此基础上文章将indices作为特征图对应的功能,从而在训练的过程中使用数据(数据驱动与自适应)去学习index过程(上采样与下采样),得到一种index-guided的编解码网络结构。由于文章的改进主要是在index采样部分,这就使得文章的方法具有较好的可移植性。文章的方法在使用MobileNetv2作为其backbone基础上比相同条件下使用VGG-16作为backbone做matting得到的性能高16.1%。

一般在分割网络中对于上采样是使用bilinear的插值方式得到的,其原理也是很简单的:一个区域附近的类别是近似的,而使用unpooling操作是一种稀疏的表达,但是unpooling操作却可以产生更加清晰的边缘,这是bilinear方法不能比拟的。文章指出导致这样问题的原就是出在indices这个过程上的。下图展示的就是使用bilinear的方法与文章的方法在边缘细节上的对比:
在这里插入图片描述
那么基于bilinear和unpooling的方法它们都有各自的优点和不足,那么可不可以将两者的优点进行结合?这也是这篇文章解决的事情,文章将indices function使用CNN网络进行建模从而实现上采样的过程,从而使得upsampling的过程可以依据数据的不同而进行动态变化(数据驱动与自适应),学习边界与纹理信息。

2. 上采样与index function的统一

在窗口大小为 k ∗ k k*k kk X ∈ R k ∗ k X\in R^{k*k} XRkk数据中上采样可以描述为:
I m a x ( x ) = f ( x = m a x ( x ) ) , x ∈ X I_{max}(x)=f(x=max(x)),x\in X Imax(x)=

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
## A C++11 implementation of the B-Tree part of "The Case for Learned Index Structures" A research **proof of concept** that implements the B-Tree section of [The Case for Learned Index Structures](https://arxiv.org/pdf/1712.01208.pdf) paper in C++. The general design is to have a single lookup structure that you can parameterize with a KeyType and a ValueType, and an overflow list that keeps new inserts until you retrain. There is a value in the constructor of the RMI that triggers a retrain when the overflow array reaches a certain size. The basic API: ```c++ // [first/second]StageParams are network parameters int maxAllowedError = 256; int maxBufferBeforeRetrain = 10001; auto modelIndex = RecursiveModelIndex recursiveModelIndex(firstStageParams, secondStageParams, maxAllowedError, maxBufferBeforeRetrain); for (int ii = 0; ii < 10000; ++ii) { modelIndex.insert(ii, ii * 2); } // Since we still have one more insert before retraining, retrain before searching... modelIndex.train(); auto result = modelIndex.find(5); if (result) { std::cout << "Yay! We got: " << result.get().first << ", " << result.get().second << std::endl; } else { std::cout << "Value not found." << std::endl; // This shouldn't happen in the above usage... } ``` See [src/main.cpp](src/main.cpp) for a usage example where it stores scaled log normal data. ### Dependencies - [nn_cpp](https://github.com/bcaine/nn_cpp) - Eigen based minimalistic C++ Neural Network library - [cpp-btree](https://code.google.com/archive/p/cpp-btree/) - A fast C++ implementation of a B+ Tree ### TODO: - Lots of code cleanup - Profiling of where the slowdowns are. On small tests, the cpp_btree lib beats it by 10-100x - Eigen::TensorFixed in nn_cpp would definitel
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值