【阅读笔记】《Learning to Segment Object Candidates》(DeepMask)

2023-12-12 18:08

本文主要是介绍【阅读笔记】《Learning to Segment Object Candidates》(DeepMask),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文记录了博主阅读论文《Learning to Segment Object Candidates》的笔记,代码,更新于2019.05.31。

文章目录

  • Abstract
  • Introduction
  • Related Work
  • DeepMask Proposals
    • Network Architecture
  • Joint Learning
    • Full Scene Inference
    • Implementation Details
  • Experimental Results
  • Conclusion

Abstract

目前的目标检测系统主要包括两步:(1)尽量高效地提出一组可能目标的候选;(2)将这些候选送入一个分类器。本文中提出了一种生成目标候选的新方法,包括基于判别卷积网络(discriminative convolutional network)的一个方法。网络的训练同时在两个共同的目的下进行:给定图块,系统的第一部分输出一个不区分类别的分割mask,第二部分则输出这个图块处于一个完整目标中间的概率。在测试过程中,模型可以高效地应用在整个测试图上,并且生成一系列分割mask,每个都分配了对应的目标可能性score。模型也可以范化到未见过的类别。与之前的生成目标mask的方法不同,本文的方法不需要依赖于边界、超像素或其他底层分割(low-level segmentation)。

Introduction

Related Work

DeepMask Proposals

给定一个输入图块,本文所提网络能够估计一个分割mask,并给每个图块分配一个其包含目标的可能性。

mask和score估计是同时用一个卷积网络实现的,只有网络的最后几层有不同。具体如下图所示:
在这里插入图片描述
在训练过程中,两个任务同时训练。相比较用两个模型完成两个任务的网络,这个结构能够减小网络规模并提升测试时的速度。

每个样本训练集中的 k k k都需要包含三样东西:(1)RGB图块 x k x_k xk;(2)对应输入图块的二进制mask m k m_k mk(其中 m k i j ∈ { ± 1 } m_k^{ij}\in\{\pm1\} mkij{±1} ( i , j ) (i,j) (i,j)对应于每个像素在输入图块中的位置);(3)标注 y ∈ { ± 1 } y\in\{\pm1\} y{±1},声明图块中是否包含目标。具体而言,一个图块 x k x_k xk在给定了标签 y k = 1 y_k=1 yk=1时,需要满足下面的限制:

  1. 图块包含一个目标且目标在图块中心附近;
  2. 目标在指定尺度范围内完全存在于图块中。

否则, y k = − 1 y_k=-1 yk=1,即使目标部分出现。实验中用的位置和尺度的容忍度稍后给出。假设 y k = 1 y_k=1 yk=1,真值mask m k m_k mk只有对存在于图块中间的单个物体给正值。如果该mask没有被使用,则 y k = − 1 y_k=-1 yk=1。Figure1的最下面给出了训练triplets的示例。

Figure1的上面显示了模型的概况,这里成为DeepMask。上面的分支对应于实现高精度的目标分割mask估计,下面的分支给出目标存在并满足上述两个约束的概率。接下来会介绍网络结构各部分的细节、训练过程和快速推理过程。

Network Architecture

网络初始化参数来源于在ImageNet数据集下预训练的分类网络。这个模型随后fine-tuned用于生成目标候选。选择了VGG-A结构,其中包括八个3x3的卷积层(带ReLU)和五个2x2的最大池化层,表现很好。

由于关注分割mask,因此卷积特征图中的空间信息就很重要。因此溢出了最后的全连接层,并且抛弃了最后的最大池化层。共享网络层的输出用采样率16进行下采样(由于剩下的4个2x2的最大池化层);给定一个输入图像尺寸为 3 × h × w 3\times h\times w 3×h×w,输出特征图的尺寸为 512 × h 16 × w 16 512\times\frac{h}{16}\times\frac{w}{16} 512×16h×16w

分割: 网络用一个1x1的卷积层结合ReLU,后面加一个分类层,实现分割。分类层包括 h × w h\times w h×w像素的分类器,每个都代表这个像素是否属于图块中心的目标。主义输出平面中的每个像素分类器都必须能够利用到整个特征图中的信息,因此对目标有一个完整的理解。这点很重要,因为与语义分割不同,这个网络必须能够输出一个对单个目标的mask,即使有多个目标都存在。(比如Fig1中的大象)

对于分类层,既可以用全局的也可以用全连接像素分类器。这两种方法都有缺陷:前者每个分类器只能看到目标的一部分,而后者则存在大量的冗余参数。相反,这里讲分类层分解成两个中间不带非线性的线性层。这样一来,能够降低网络的参数个数,却允许每个像素分类器都能够利用到整个特征图的信息。实验证明了这种方式的有效性。最后,为了进一步降低模型容量,这里将输出层设为 h o × w o h^o\times w^o ho×wo,其中 h o &lt; h h^o\lt h ho<h w o &lt; w w^o\lt w wo<w,再用上采样层将结果采样回原始尺寸。

scoring: 网络的第二个分支致力于估计一个图块的中心是否包含1和2:即目标是否在图块中新且尺度合适。这个由两个2x2的最大池化层,加上两层全连接层(带ReLU)组成。最后的输出是一个目标score,显示图块中新是否显示了目标(合适尺度下)。

Joint Learning

给定一个输入图块 x k ∈ I x_k\in \mathcal I xkI,模型联合训练像素级分割mask和目标score。损失函数是binary logistic regression losses之和,一个对应分割,一个对应目标score,整体训练triples ( x k , m k , y k ) (x_k,m_k,y_k) (xk,mk,yk)的损失函数如下:
在这里插入图片描述
在这里插入图片描述
注意,如果 y k = 1 y_k=1 yk=1,反向传播值传播分割分支的error。当然也可以用复数训练(在 y k = 0 y_k=0 yk=0时设定 m k i j = 0 m_k^{ij}=0 mkij=0),但是作者发现只用整数训练对于生成更高recall的结果更有利。这样做会使得网络尝试对每个图块都生成分割mask,即使中间没有目标。

Full Scene Inference

在整图推理时,这里应用了在多个位置和尺度下的稠密模型。这点是必要的,因为对于图像中的每个目标我们都至少测试了一个图块完整包含了这个目标(中心、尺度合适)。这个过程给出了图像每个位置的分割mask和目标score。下图展示了模型应用与一个尺度下的图片的分割输出。
在这里插入图片描述
注意,网络的scoring分支有一个比粉各分支大两倍的下采样率,因为额外的最大池化层。给定一个测试图像尺寸为 h t × w t h^t\times w^t ht×wt,分割和目标网络生成输出石村分别为 h t 16 × w t 16 \frac{h^t}{16}\times\frac{w^t}{16} 16ht×16wt h t 32 × w t 32 \frac{h^t}{32}\times\frac{w^t}{32} 32ht×32wt。为了在分割和score分支之间实现一对一的映射,作者在最后的最大池化层之前应用了interleaving trick(交叉存储技巧),从而使得scoring分支的分辨率翻倍。

Implementation Details

在训练过程中,如果目标在图块的正中间且最大维度精确等于128像素,则一个图块 x k x_k xk被认为包括一个canonical正样本。然而,容忍度非常重要。因此在训练过程中,给了一点片质量,范围为正负16个像素,尺度为 2 ± 1 / 4 2^{\pm1/4} 2±1/4,同时也考虑了水平翻转。在所有情况下,我们都应用相同的变换对图块 x k x_k xk和真值mask m k m_k mk,并给正样本分配标注 y k = 1 y_k=1 yk=1。负样本 y k = − 1 y_k=-1 yk=1是那些图块至少距离标准正样本 ± 32 \pm32 ±32个像素或尺度上 2 ± 1 2^{\pm 1} 2±1

在整图推理时,我们在多个位置(步长16个像素)和尺度(从 2 − 2 2^{-2} 22 2 1 2^1 21,步长 2 1 / 2 2^{1/2} 21/2)应用了稠密模型,这保证了至少一个测试图块包含图像中的整个目标(在训练中带容忍度的)。

如在原始VGG-A网络中,我们的模型输入也是RGB图块,维度为 3 × 224 × 224 3\times 224\times224 3×224×224。因为溢出了第五个池化层,共同分支输出的特征图维度为 512 × 14 × 14 512\times 14\times14 512×14×14。网络的score分支有一个 2 × 2 2\times 2 2×2最大池化层厚街两个全连接层(512和1024个hidden units)组成。这些曾都跟着ReLU和dropout(比率0.5)。最后一层生成目标score。

分割网络有一个1x1的卷积层(512个单元)组成。特征图随后全连接到低维(512),再进一步全连接到每个像素的分类器以生成输出维度 56 × 56 56\times56 56×56。如前文讨论的,在这两层之间没有非线性。总体而言,我们的模型包括大约75M的参数。

最后的一个双线性上采样层加载56x56的输出后面用来生成完整的224x224分辨率的估计(如果直接估计原始分辨率会非常慢)。我们用了一个不学习的层,因为发现即使学习,其也是简单地学了一个双线性上采样。替代的是用下采样真值而非上采样网络输出,但是这种做法稍微影响了精度。

在MS COCO数据及下选择的超参数,学习率0.01,batch size 32,动量0.9,weight decay 0.00005.除了预训练的VGG特征,权重随机初始化(平均分布)模型训练大概需要5天,设备为Nvidia Tesla K40m。

Experimental Results

Conclusion

更多内容,欢迎加入星球讨论。
在这里插入图片描述

这篇关于【阅读笔记】《Learning to Segment Object Candidates》(DeepMask)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/485496

相关文章

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

论文阅读笔记: Segment Anything

文章目录 Segment Anything摘要引言任务模型数据引擎数据集负责任的人工智能 Segment Anything Model图像编码器提示编码器mask解码器解决歧义损失和训练 Segment Anything 论文地址: https://arxiv.org/abs/2304.02643 代码地址:https://github.com/facebookresear

数学建模笔记—— 非线性规划

数学建模笔记—— 非线性规划 非线性规划1. 模型原理1.1 非线性规划的标准型1.2 非线性规划求解的Matlab函数 2. 典型例题3. matlab代码求解3.1 例1 一个简单示例3.2 例2 选址问题1. 第一问 线性规划2. 第二问 非线性规划 非线性规划 非线性规划是一种求解目标函数或约束条件中有一个或几个非线性函数的最优化问题的方法。运筹学的一个重要分支。2

【C++学习笔记 20】C++中的智能指针

智能指针的功能 在上一篇笔记提到了在栈和堆上创建变量的区别,使用new关键字创建变量时,需要搭配delete关键字销毁变量。而智能指针的作用就是调用new分配内存时,不必自己去调用delete,甚至不用调用new。 智能指针实际上就是对原始指针的包装。 unique_ptr 最简单的智能指针,是一种作用域指针,意思是当指针超出该作用域时,会自动调用delete。它名为unique的原因是这个

查看提交历史 —— Git 学习笔记 11

查看提交历史 查看提交历史 不带任何选项的git log-p选项--stat 选项--pretty=oneline选项--pretty=format选项git log常用选项列表参考资料 在提交了若干更新,又或者克隆了某个项目之后,你也许想回顾下提交历史。 完成这个任务最简单而又有效的 工具是 git log 命令。 接下来的例子会用一个用于演示的 simplegit

记录每次更新到仓库 —— Git 学习笔记 10

记录每次更新到仓库 文章目录 文件的状态三个区域检查当前文件状态跟踪新文件取消跟踪(un-tracking)文件重新跟踪(re-tracking)文件暂存已修改文件忽略某些文件查看已暂存和未暂存的修改提交更新跳过暂存区删除文件移动文件参考资料 咱们接着很多天以前的 取得Git仓库 这篇文章继续说。 文件的状态 不管是通过哪种方法,现在我们已经有了一个仓库,并从这个仓

忽略某些文件 —— Git 学习笔记 05

忽略某些文件 忽略某些文件 通过.gitignore文件其他规则源如何选择规则源参考资料 对于某些文件,我们不希望把它们纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。通常它们都是些自动生成的文件,比如日志文件、编译过程中创建的临时文件等。 通过.gitignore文件 假设我们要忽略 lib.a 文件,那我们可以在 lib.a 所在目录下创建一个名为 .gi

取得 Git 仓库 —— Git 学习笔记 04

取得 Git 仓库 —— Git 学习笔记 04 我认为, Git 的学习分为两大块:一是工作区、索引、本地版本库之间的交互;二是本地版本库和远程版本库之间的交互。第一块是基础,第二块是难点。 下面,我们就围绕着第一部分内容来学习,先不考虑远程仓库,只考虑本地仓库。 怎样取得项目的 Git 仓库? 有两种取得 Git 项目仓库的方法。第一种是在本地创建一个新的仓库,第二种是把其他地方的某个