cs231n---语义分割 物体定位 物体检测 物体分割

1 语义分割

语义分割是对图像中每个像素作分类,不区分物体,只关心像素。如下:

(1)完全的卷积网络架构

处理语义分割问题可以使用下面的模型:

其中我们经过多个卷积层处理,最终输出体的维度是C*H*W,C表示类别个数,表示每个像素在不同类别上的得分。最终取最大得分为预测类别。

训练这样一个模型,我们需要对每个像素都分好类的训练集(通常比较昂贵)。然后前向传播出一张图的得分体(C*H*W),与训练集的标签体求交叉熵,得到损失函数,然后反向传播学习参数。

然而,这样一个模型的中间层完全保留了图像的大小,非常占内存,因此有下面改进的框架。

(2)先欠采样再过采样的框架

经过欠采样后可以大量节省内存,提高效率,最后再经过过采样来恢复原始图片的大小。我们知道欠采样可以使用卷积层和池化,下面介绍过采样的几种方式。

去池化 Unpooling 

去池化有Nearest Neighbor,Bed of Nails等方法:

还有一种被称为Max Unpooling 的方法,该方法记录下之前使用max pooling前各个最大值在数组中的索引,去池化的时候把值放到索引处,其他位置补0:

 

转置卷积 Transpose Convolution

不同于去池化,转置卷积法是一种可学习的过采样方法。具体步骤是,将输入的每个值作为权重,对滤波器进行加权,然后各个加权的滤波器按照步长拼成输出,重叠部分相加。如下:

我们可以通过学习滤波器,来学习网络应该如何做过采样。

理解转置卷积的一个一维的例子是:

在一些论文里,转置卷积还有一些其他名字,看到的时候要知道:

另外,转置卷积之所以被称为转置卷积,是因为它的矩阵形式。传统的卷积写成矩阵形式如下(注意这里是一维的例子):

其中x是滤波器,a是输入。而转置卷积写成矩阵形式如下:

 

2 分类+定位

分类+定位的任务要求我们在给图片打标签之后,还要框出物体在什么地方(注意与物体检测的区别,在分类定位中,输出的框的个数是事先已知的,而物体检测中则是不确定的)。如下:

此类任务常用的处理框架如下:

 

首先我们还是用CNN得到描述图片的特征向量,然后我们接入两个全连接网络,一个网络负责生成最后的类别评分,另一个负责生成红框四个点的坐标值。因此对应两个损失,softmax损失和回归损失。我们将这两个损失加权相加得到总的损失(加权值是超参数),然后进行反向传播学习。

这里应用回归的思路同样可以应用于姿态估计,我们用十四个点来确定一个人的姿态情况:

应用同样的框架(CNN+回归全连接网络)可以训练这个任务:

 

3 物体检测 

与分类+定位任务不同的是,物体检测中需要检测的物体数量是不确定的,因此无法直接使用上面的回归框架。下面简单介绍几个框架。

(1)滑动窗口

滑动窗口的思想是随机选取若干个不同大小不同位置的窗口,对它们应用CNN进行分类。缺点是窗口数量很大,计算代价很高。

(2)RCNN

训练阶段:

a 使用IMAGENet的数据预训练一个CNN

b 构造训练集:首先应用Selective Search算法从每张带标定框的图像中选取2000~3000个候选框。对每个候选框来说,找到与它重叠面积最大的标定框,如果重叠比例大于阈值(0.5),则将该候选框标签设为该标定框的标签,若重叠比例小于阈值(0.5),则标签设为“背景”。同时对于重叠比例大于一定阈值(0.6)的候选框,还要计算出其与标定框的偏移距离。

c 每个候选区域经过预处理,送到CNN中提取出图像特征,然后把图像特征送到SVM分类器中,计算出标签分类的损失。同时图像特征还要送到回归器中,计算偏移距离的L2损失。

d 反向传播训练SVM,回归器,CNN

整体框架图如下:

(3)Fast RCNN

RCNN训练和预测速度很慢,主要是由于不同候选框之间的重叠部分特征重复用CNN提取导致的。因此可以采取先对整个图像进行CNN特征提取,然后在选定候选区域,并从总的featuremap中找到每个候选区域对应的特征。框架如下:

(4)Faster RCNN

Fast RCNN的性能瓶颈是SS算法选定候选区域,在Faster RCNN中,使用网络Region Proposal Network (RPN) 来预测候选区域,整体框架如下:

Faster RCNN是当前很先进的目标检测框架,要了解细节看这篇论文:

Ren, Shaoqing, et al. “Faster R-CNN: Towards real-time object detection with region proposal networks.” Advances in Neural Information Processing Systems. 2015.

(5)SSD

SSD的思想是将图像划分为很多个格子,以每个格子的中心可以衍生出若干个base boxes。使用神经网络一次性的对这些格子进行分类,对这些baseboxes进行回归。

上图中,一个图像划分为7*7个grid,每个grid有3个base boxes。我们需要用回归为每个base boxes预测五个值,为每个格子进行分类打分。直接使用一个的CNN神经网络输出7*7*(5*B+C)的大小即可。

更多细节参看论文:Liu et al, “SSD: Single-Shot MultiBox Detector”, ECCV 2016 

 

(6)各种物体检测框架的对比

有很多变量可控:

这篇论文对比了各种框架:

Huang et al, “Speed/accuracy trade-offs for modern convolutional object detectors”, CVPR 2017 

FasterCNN比SSD具有更高的精度,但是没有SSD快。

 

(7)Dense Captioning 

 Dense Captioning 是对图片中的每个事物做检测,并用语言进行描述:

Dense Captioning其实就是Object Detection + Captioning ,其框架可以使用faster RCNN结合LSTM来做。具体参考文献:

Johnson, Karpathy, and Fei-Fei, “DenseCap: Fully Convolutional Localization Networks for Dense Captioning”, CVPR 2016 

 

4 物体分割 

物体分割要做的是在物体检测上更进一步,从像素层面把各个物体分割出来。

Mask RCNN是当前很前沿的一种方法,其将faster RCNN和语义分割结合成一个框架,具有非常好的效果!框架为:

如上图,首先将图像使用CNN处理为特征,然后经过一个RPN网络生成候选区域,投射到之前的feature map。到这里与faster RCNN一样。之后有两个分支,一个分支与faster RCNN相同,预测候选框的分类和边界值,另一个分支则与语义分割相似,为每个像素做分类。

mask RCNN具有超级好的效果,有机会一定要拜读一下。

He et al, “Mask R-CNN”, arXiv 2017

 

 5 总结

这些成功的计算机视觉框架和模型给我们的启示是,将具有基本功能的模块整合成一个可训练的端到端系统,可以完成更加复杂的功能。通过向网络中引入多个损失函数的分支,可以让其完成多目标的联合优化。

 

转载于:https://www.cnblogs.com/coldyan/p/8391559.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/390279.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

array_combine()

转载于:https://www.cnblogs.com/xiaobiaomei/p/8392728.html

composer windows安装

一.前期准备: 1.下载安装包,https://getcomposer.org/download/ 2.在php.ini文档中打开extensionphp_openssl.dll 3.下载php_ssh2.dll、php_ssh2.pdb,http://windows.php.net/downloads/pecl/releases/ssh2/0.12/ 4.把php_ssh2.dll、php_ssh2.pdb文件放php的ext文件夹 5.重启ap…

spring整合mybatis采坑

本来这个错误是整合spring和mybatis遇到的错误,但是一直没有解决,但是在做SpringMVC时也了出现了这样的错误org.springframework.beans.factory.BeanCreationException: Error creating bean with name sqlSessionFactory defined in class path resourc…

处理测试环境硬盘爆满

测试环境经常会收到这类告警 第一步 登陆机器查看硬盘使用 执行df 好吧,使用情况真不妙,根目录占用过大 第二步 确定哪个文件太大或者文件过多 进入爆满的目录,如这里是根目录 cd / 然后找下面哪个文件夹或者文件太大,有几种方式: 1.dusudo du -h --max-depth1 | sort -hr 越前…

LeetCode-46. Permutations

一、问题描述 就是全排列问题。 二、问题解决 应该哪一本数据结构的书上都有讲了。 void get_permute(vector<int>& nums, int pos, vector<vector<int>>& result) {if (nums.size() pos) {result.push_back(nums);return;}for (int i pos; i <…

789. 逃脱阻碍者

789. 逃脱阻碍者 你在进行一个简化版的吃豆人游戏。你从 [0, 0] 点开始出发&#xff0c;你的目的地是 target [xtarget, ytarget] 。地图上有一些阻碍者&#xff0c;以数组 ghosts 给出&#xff0c;第 i 个阻碍者从 ghosts[i] [xi, yi] 出发。所有输入均为 整数坐标 。 每一…

计算机视觉-自定义对象检测器

1、模板匹配 运行指令&#xff1a;python template_matching.py --source 3.jpg --template 2.jpg import argparse import cv2ap argparse.ArgumentParser() ap.add_argument("-s", "--source", requiredTrue, help"Path to the source image"…

297. 二叉树的序列化与反序列化

297. 二叉树的序列化与反序列化 序列化是将一个数据结构或者对象转换为连续的比特位的操作&#xff0c;进而可以将转换后的数据存储在一个文件或者内存中&#xff0c;同时也可以通过网络传输到另一个计算机环境&#xff0c;采取相反方式重构得到原数据。 请设计一个算法来实现…

Python 08 面向对象

Python 面向对象 1、编程范式 2、面向对象特性 3、属性、方法 4、三大特性 5、高级方法 6、类的特殊成员方法 7、反射 8、异常处理 9、单例模式 一、编程范式 编程&#xff1a;程序员用特定的语法数据结构算法组成的代码来告诉计算机如何执行任务的过程 &#xff0c; 实现一个…

eclipse手动添加SVN插件

https://www.cnblogs.com/hcl1991/p/5888461.html 1.手动下载svn插件&#xff08;百度SVNsite-1.8.18&#xff09; 2.将下载好的SVNsite-1.8.18.zip 解压 3.在eclipse安装目录的plugins新建SVN文件夹 4.将SVNsite-1.8.18解压包下的features和plugins拷贝到新建的SVN文件夹下 5.…

440. 字典序的第K小数字

440. 字典序的第K小数字 给定整数 n 和 k&#xff0c;找到 1 到 n 中字典序第 k 小的数字。 注意&#xff1a;1 ≤ k ≤ n ≤ 109。 示例 : 输入: n: 13 k: 2 输出: 10 解释: 字典序的排列是 [1, 10, 11, 12, 13, 2, 3, 4, 5, 6, 7, 8, 9]&#xff0c;所以第二小的数字是…

JDK 11 还有一个处于计划阶段的 JEP:让其支持 TLS 1.3

开发四年只会写业务代码&#xff0c;分布式高并发都不会还做程序员&#xff1f; >>> JDK 11 最近有什么消息&#xff1f;我们不妨来看一下它的进展情况&#xff0c;包括最新的 JEP 提案。Java 的新版本发布计划意味着总会有一款新的 JDK 即将推出。根据他们的计划&a…

498. 对角线遍历

498. 对角线遍历 给定一个含有 M x N 个元素的矩阵&#xff08;M 行&#xff0c;N 列&#xff09;&#xff0c;请以对角线遍历的顺序返回这个矩阵中的所有元素&#xff0c;对角线遍历如下图所示。 示例: 输入: [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ] 输出: [1,2,4,7,5…

Squid 访问控制配置

Squid 访问控制配置 主配置文件内加入限制参数 vim /etc/squid/squid.conf # 访问控制 acl http proto HTTP # 限制访问 good_domain添加两个域名“.”表示半解析(相当于*) acl good_domain dstdomain .kevin.net .baidu.com # 允许good_domain内的域名访问 http_access allow …

创建react应用程序_通过构建电影搜索应用程序在1小时内了解React

创建react应用程序If youve been meaning to learn React but are unsure of where to start, Scrimbas brand new Build a Movie Search App course is perfect for you! 如果您一直想学习React&#xff0c;但是不确定从哪里开始&#xff0c;那么Scrimba全新的Build a Movie S…

GeoServer自动发布地图服务

1 NetCDF气象文件自动发布案例 GeoServer是一个地理服务器&#xff0c;提供了管理页面进行服务发布&#xff0c;样式&#xff0c;切片&#xff0c;图层预览等一系列操作&#xff0c;但是手动进行页面配置有时并不满足业务需求&#xff0c;所以GeoServer同时提供了丰富的rest接口…

11. 盛最多水的容器

11. 盛最多水的容器 给你 n 个非负整数 a1&#xff0c;a2&#xff0c;…&#xff0c;an&#xff0c;每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线&#xff0c;垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线&#xff0c;使得它们与 x 轴共同构…

MyBatis之输入与输出(resultType、resultMap)映射

2019独角兽企业重金招聘Python工程师标准>>> 在MyBatis中&#xff0c;我们通过parameterType完成输入映射(指将值映射到sql语句的占位符中&#xff0c;值的类型与dao层响应方法的参数类型一致)&#xff0c;通过resultType完成输出映射(从数据库中输出&#xff0c;通…

PowerDesigner常用设置

2019独角兽企业重金招聘Python工程师标准>>> 使用powerdesigner进行数据库设计确实方便&#xff0c;以下是一些常用的设置 附加&#xff1a;工具栏不见了 调色板(Palette)快捷工具栏不见了 PowerDesigner 快捷工具栏 palette 不见了&#xff0c;怎么重新打开&#x…

批处理命令无法连续执行

如题&#xff0c;博主一开始的批处理命令是这样的&#xff1a; cd node_modules cd heapdump node-gyp rebuild cd .. cd v8-profiler-node8 node-pre-gyp rebuild cd .. cd utf-8-validate node-gyp rebuild cd .. cd bufferutil node-gyp rebuild pause执行结果&#xff1…