cornerNet部分学习内容记录
cornerNet来源灵感是基于多人姿态估计的从下往上思想,预测角的热图,根据嵌入式向量对角进行分组,其主干网络也来自于姿态估计的环面网络。
cornerNet的总体框架结构图如下:

CornerNet 模型架构包含三部分:环面网络、右下角和左上角的热图、预测模块

环面网络同时包含多个从下往上(从高分辨率到低分辨率)和从上往下(从低分辨率到高分辨率)过程。这样设计的目的是在各个尺度下抓取信息。
嵌入式向量使相同目标的两个顶点(左上角和右下角)距离最短,偏移用于调整生成更加紧密的边界定位框。
corner net最大的亮点之处在于把原本预测目标采用anchor机制换为用两个关键点表示,这里采用的是左上角的点和右下角的点来确定一个目标的位置。
这样做的好处一是能够明显的减少参数量(anchor中所需的参数),减少计算的复杂度;二是不再采用原先目标检测中的anchor机制,可以很明显的减少计算量。
最关键的corner pooling模块:接在特征图后边 (corner pooling有效的主要原因在于下面两点:- 目标定位框的中心难以确定,和边界框的4条边相关,但是每个顶点只与边界框的两条边相关,所以角点更容易提取
- 顶点能更有效提供离散的边界空间,O(wh) 顶点可以表示 O(w2h2) anchor boxes
例如top-left的点预测,每个点在各自的两个方向进行 max pooling操作,结果相加,得到的是一个点的max pooling结果,

图6是具体计算步骤:
特征图的大小为(w,h); 左上角点坐标为(0,0), 例如对特征图中某一个点(i,j)计算pooling,首先计算从这个点到特征图右边范围内的最大值,再计算
这个点到特征图下边范围内的最大值,把这两个值相加即可得出corn pooling的结果。

图7是预测的基本模块,首先特征图提取出来,送入corner pooling module模块,分别进行top-left和bottom-right的pooling操作;
中间是改进的residual模块,含有skip connection;预测的两个关键点模块分别得出三个结果,即heatmaps、embeddings、offsets;
heatmaps即预测的角点结果;embeddings是嵌入操作,为了得到哪两个点是匹配的一个目标的左上角和右下角的点;offsets是计算误差量(在取整计算时丢失的精度信息)。
预测的部分步骤:
1、在得到预测角点后,会对这些角点做NMS操作,选择前100个左上角角点和100个右下角角点。
2、计算左上角和右下角角点的embedding vector的距离时采用L1范数,距离大于0.5或者两个点来自不同类别的目标的都不能构成一对。
3、测试图像采用0值填充方式得到指定大小作为网络的输入,而不是采用resize,另外同时测试图像的水平翻转图并融合二者的结果。
4、最后通过soft-nms操作去除冗余框,只保留前100个预测框。

heatmaps利用的是改进版本的focal loss,公式如下, 重点依然是加大关注对困难样本的识别。
差别主要体现再负样本上面,对于负样本加入了一个参数β,用来控制对不同的负样本点用不同权重(原因是,不同的负样本与gt的差距不同,
需要另外处理,有的框已经框住了大部分目标内容,所以是有用的框);
且负样本的ycij值是基于ground truth角点的高斯分布计算得到;

此loss函数实现的代码如下:
def _neg_loss(preds, gt):
pos_inds = gt.eq(1)
neg_inds = gt.lt(1) neg_weights = torch.pow(1 - gt[neg_inds], 4)
#对应负样本loss公式的第一部分()内容,负样本的ycij值是基于ground truth角点的高斯分布计算得到;
loss = 0
for pred in preds:
pos_pred = pred[pos_inds]
neg_pred = pred[neg_inds]
#focal loss
pos_loss = torch.log(pos_pred) * torch.pow(1 - pos_pred, 2)
neg_loss = torch.log(1 - neg_pred) * torch.pow(neg_pred, 2) * neg_weights num_pos = pos_inds.float().sum()
pos_loss = pos_loss.sum()
neg_loss = neg_loss.sum() if pos_pred.nelement() == 0:
loss = loss - neg_loss
else:
loss = loss - (pos_loss + neg_loss) / num_pos
return loss
embeddings部分:如果一个左上角角点和一个右下角角点属于同一个目标,那么二者的embedding vector之间的距离应该很小。用这种方式来判断一组角点。
感谢下面的参考文章
参考链接:https://blog.csdn.net/u014380165/article/details/83032273(作者:魏凯峰 主要研究领域:目标检测、图像识别、图像对抗、模型加速压缩 ,推荐看他的文章,详细且清楚。)
https://www.sohu.com/a/256416414_633698
cornerNet部分学习内容记录的更多相关文章
- sql学习内容记录
1.left函数 left(字段,长度):获取指定字段左侧的数据,类似substring函数 2.union / union all 将多个记录合并成一个完整的数据集 3.insert into se ...
- '"千"第一周学习情况记录
一周过去了,今天将我这一周的学习内容和主要感想记录与此和大家共同分享,一起进步.我将自己的学习计划命名为"千",因为我喜欢这个字,希望能用此来鼓舞自己不断前进.时间总是很快的,这一 ...
- Lucene.net(4.8.0) 学习问题记录五: JIEba分词和Lucene的结合,以及对分词器的思考
前言:目前自己在做使用Lucene.net和PanGu分词实现全文检索的工作,不过自己是把别人做好的项目进行迁移.因为项目整体要迁移到ASP.NET Core 2.0版本,而Lucene使用的版本是3 ...
- Cs231n课堂内容记录-Lecture 4-Part1 反向传播及神经网络
反向传播 课程内容记录:https://zhuanlan.zhihu.com/p/21407711?refer=intelligentunit 雅克比矩阵(Jacobian matrix) 参见ht ...
- Cs231n课堂内容记录-Lecture 3 最优化
Lecture 4 最优化 课程内容记录: (上)https://zhuanlan.zhihu.com/p/21360434?refer=intelligentunit (下)https://zhua ...
- Lucene.net(4.8.0) 学习问题记录六:Lucene 的索引系统和搜索过程分析
前言:目前自己在做使用Lucene.net和PanGu分词实现全文检索的工作,不过自己是把别人做好的项目进行迁移.因为项目整体要迁移到ASP.NET Core 2.0版本,而Lucene使用的版本是3 ...
- 20155328 2016-2017-2 《Java程序设计》 第十周学习内容总结
20155328 2016-2017-2 <Java程序设计>第十周学习总结 教材学习内容总结 JAVA和ANDROID开发学习指南 第22章 网络概览 两台计算机用于通信的语言叫做&qu ...
- web前端开发学习内容
应该 具备的 知识技能 :懂web标准,熟练手写 xhtml css3 并符合 符合w3c标准 代码能 兼容主流浏览器.ie6.7.8.9 ff 等. ...
- Activiti 学习笔记记录(2016-8-31)
上一篇:Activiti 学习笔记记录(二) 导读:上一篇学习了bpmn 画图的常用图形标记.那如何用它们组成一个可用文件呢? 我们知道 bpmn 其实是一个xml 文件
随机推荐
- [CSP-S模拟测试]:可爱的精灵宝贝(搜索)
题目描述 $Branimirko$是一个对可爱精灵宝贝十分痴迷的玩家.最近,他闲得没事组织了一场捉精灵的游戏.游戏在一条街道上举行,街道上一侧有一排房子,从左到右房子标号由$1$到$n$.刚开始玩家在 ...
- (转)使用windows server2008 创建 Hyper-V虚拟机
转:https://jingyan.baidu.com/article/7c6fb42833ad4980652c904f.html Hyper-v是微软提供的虚拟机,利用server 2008搭建hy ...
- Mac自带服务器的应用
Mac OS下自带了apache,方便部署一些静态数据(html,css,js,xml,图片等数据) 一.系统默认路径 系统默认是隐藏apache安装目录的,但我们可以通过“命令行”或者“文件夹前往” ...
- 【SpringBoot】 项目中运用的一些技巧,mybatis-plus 自动编译等(持续更新)
前言 本文将总结项目中用到的一些springboot 的技巧,持续更新. Mybatis-Plus 的运用 使用原因: 主要是节省了Mapper层的编写,通过继承BaseMapper可以直接调用通用的 ...
- 多个springboot项目部署到tomcat,Error deploying web application archive
每个springboot单独部署到tomcat下可以正常启动,多个一个就发生异常 Error deploying web application archive 解决:配置文件加上配置区分 sprin ...
- Using Tensorflow SavedModel Format to Save and Do Predictions
We are now trying to deploy our Deep Learning model onto Google Cloud. It is required to use Google ...
- Git004--版本回退
Git--版本回退 本文来自于:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/ ...
- libOpenThreads库链接冲突错误
最近在linux 上安装了3.7.0版本的OpenSceneGraph,而在安装之前没有完全卸载之前安装的3.6.3版本,导致在编译程序链接时出现库引用冲突,在便以后出现以下警告信息: /usr/bi ...
- centos 6.x 配置 mail 发送外部邮件详解和 sendmail 使用简介
一.mail基本配置 1.配置:vim /etc/mail.rc 在文件末尾追加以下内容: set from=@.com # 别名<123456789@163.com> set smtp= ...
- [Codeforces 865C]Gotta Go Fast(期望dp+二分答案)
[Codeforces 865C]Gotta Go Fast(期望dp+二分答案) 题面 一个游戏一共有n个关卡,对于第i关,用a[i]时间通过的概率为p[i],用b[i]通过的时间为1-p[i],每 ...