Objects as Points

文章: https://arxiv.org/abs/1904.07850
代码: centernet

原理请看扔掉anchor!真正的CenterNet——Objects as Points论文解读
尊重原创,请读原文

1. 网络结构

1.1 主干网络

1.2 输出部分

  1. net.reg,???
Sequential((0): Conv2d(64, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))(1): ReLU(inplace)(2): Conv2d(256, 2, kernel_size=(1, 1), stride=(1, 1))
)

输出为:batch×2×128×128
2. net.wh,目标检测中的偏移量

Sequential((0): Conv2d(64, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))(1): ReLU(inplace)(2): Conv2d(256, 2, kernel_size=(1, 1), stride=(1, 1))
)

输出为:batch×2×128×128
3. net.hm,热力图的输出,就是目标的中心位置

Sequential((0): Conv2d(64, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))(1): ReLU(inplace)(2): Conv2d(256, 1, kernel_size=(1, 1), stride=(1, 1))
)

输出为:batch×1×128×128

1.3 求loss

  1. 输入
loss, loss_stats = self.loss(outputs, batch)          # 输入
网络输出
outputs = {'hm', 'reg', 'wh'}
[batch,80,128,128]、[batch,2,128,128]、[batch,2,128,128],也就是每个坐标点产生C+4个数据,分别是类别以及、长宽、以及偏置。目标值:
batch = dict_keys(['input', 'hm', 'reg', 'ind', 'wh', 'reg_mask'])
hm:batch*1*128*128,热力图的目标值——热力图损失,只有一个类,本人有修改源数据
reg:batch*50*2
ind:batch*50,目标中心点在128×128特征图中的索引
wh:batch*50*2,目标矩形框的宽高——目标尺寸损失
reg_mask:batch*50,有目标的位置的mask

50:应该是一个限制数,最多一张图片中50个目标,少于50个则补0

  1. 热力图损失——目标中心定位
    主要是目标定位用,这是一个二分类问题,项目主要是用的focal loss
hm_loss += self.crit(output['hm'], batch['hm']) / opt.num_stacks
  1. WH损失——目标大小的回归
    主要是做目标大小的wh的回归,用L1loss
    流程:提取ind位置的wh,与目标wh做L1loss
wh_loss += self.crit_reg(output['wh'], batch['reg_mask'],batch['ind'], batch['wh']) / opt.num_stacks
  1. reg损失——目标中心的偏置
    参考自扔掉anchor!真正的CenterNet——Objects as Points论文解读
    尊重原创,请读原文
    目标中心的偏置损失
    因为上文中对图像进行了R=4R=4的下采样,这样的特征图重新映射到原始图像上的时候会带来精度误差,因此对于每一个中心点,额外采用了一个local offset去补偿它。所有类c的中心点共享同一个offset prediction,这个偏置值(offset)用L1 loss来训练:
    但是在推断过程中,我们首先读入图像[640,320],然后变形成[512,512],然后下采样4倍成[128,128]。最终预测使用的图像大小是[128,128],而每个预测出来的热点中心(headmap center),假设我们预测出与实际标记的中心点[98.97667,2.3566666]对应的点是[98,2],坐标是(x,y),对应的类别是c,等同于这个点上hm =1,有物体存在,但是我们标记出的点是[98,2],直接映射为[512,512]的形式肯定会有精度损失,为了解决这个就引入了Loff 偏置损失。
    和上面的wh一样采用同样的L1loss
off_loss += self.crit_reg(output['reg'], batch['reg_mask'],batch['ind'], batch['reg']) / opt.num_stacks

推理阶段

具体看
扔掉anchor!真正的CenterNet——Objects as Points论文解读

centernet代码阅读笔记相关推荐

  1. [置顶] Linux协议栈代码阅读笔记(一)

    Linux协议栈代码阅读笔记(一) (基于linux-2.6.21.7) (一)用户态通过诸如下面的C库函数访问协议栈服务 int socket(int domain, int type, int p ...

  2. linux 协议栈 位置,[置顶] Linux协议栈代码阅读笔记(一)

    Linux协议栈代码阅读笔记(一) (基于linux-2.6.21.7) (一)用户态通过诸如下面的C库函数访问协议栈服务 int socket(int domain, int type, int p ...

  3. BNN Pytorch代码阅读笔记

    BNN Pytorch代码阅读笔记 这篇博客来写一下我对BNN(二值化神经网络)pytorch代码的理解,我是第一次阅读项目代码,所以想仔细的自己写一遍,把细节理解透彻,希望也能帮到大家! 论文链接: ...

  4. 菜鸟笔记-DuReader阅读理解基线模型代码阅读笔记(八)—— 模型训练-训练

    系列目录: 菜鸟笔记-DuReader阅读理解基线模型代码阅读笔记(一)--数据 菜鸟笔记-DuReader阅读理解基线模型代码阅读笔记(二)-- 介绍及分词 菜鸟笔记-DuReader阅读理解基线模 ...

  5. leveldb代码阅读笔记(一)

    leveldb代码阅读笔记 above all leveldb是一个单机的键值存储的内存数据库,其内部使用了 LSM tree 作为底层存储结构,支持多版本数据控制,代码设计巧妙且简洁高效,十分值得作 ...

  6. C++ Primer Plus 6th代码阅读笔记

    C++ Primer Plus 6th代码阅读笔记 第一章没什么代码 第二章代码 carrots.cpp : cout 可以拼接输出,cin.get()接受输入 convert.cpp 函数原型放在主 ...

  7. [原创]fetchmail代码阅读笔记---ESMTP的认证方式

    fetchmail代码阅读笔记---ESMTP的认证方式 作者: 默难 ( monnand@gmail.com ) 0    引言 fetchmail是Eric S. Raymond组织编写的一款全功 ...

  8. CNN去马赛克代码阅读笔记

    有的博客链接是之前几周写好的草稿,最近整理的时候才发布的 CNN去马赛克论文及代码下载地址 有torch,minimal torch和caffe三种版本 关于minimal torch版所做的努力,以 ...

  9. ORB-SLAM2代码阅读笔记(五):Tracking线程3——Track函数中单目相机初始化

    Table of Contents 1.特征点匹配相关理论简介 2.ORB-SLAM2中特征匹配代码分析 (1)Tracking线程中的状态机 (2)单目相机初始化函数MonocularInitial ...

最新文章

  1. 如何更改linux文件目录拥有者及用户组
  2. 长沙黑梨路枪击抢劫案
  3. “奔三”了,程序员,你该怎么选择未来的路?
  4. mysql 短信发送情况检查
  5. 【Express】—路由配置
  6. 机器学习基石(1)--The Learning Problem
  7. 安装 Dubbo 管理控制台
  8. 在Windows上安装FFmpeg程序
  9. 4份简约实用自我介绍PPT模板,总有一份适合你
  10. 圣思园Spring精髓-Spring的底层设计思想
  11. ARP断网攻击与监听
  12. 微信企业号开发源码Java编写,懒人开发一键式部署项目,WeChatEnterprise框架你值得拥有
  13. python语言求球的体积,改进蒙特卡罗程序求高维球体体积。(Python)
  14. 数三退一问题||拉手成圈出圈问题
  15. sklearn机器学习:泰坦尼克号幸存者的预测
  16. MKS Robin nano V3.0 主板使用Klipper固件教程
  17. BAT批处理脚本实例学习(五)局域网共享批处理安装软件
  18. 著名EMORY大学logo翻新案例—跟高手学设计
  19. matlab 数组索引必须为正整数或逻辑值
  20. 笔记本外接显示器卡顿解决方案

热门文章

  1. java : 实现微信网页授权,超详细!
  2. win7计算机名怎么是感叹号,Win7系统wifi信号后出现感叹号怎么办 Win7连接wifi后出现感叹号三种原因和解决方法...
  3. html论坛发帖案例
  4. 数据库事务Transaction)那点事
  5. OpenTracing 详解
  6. 自己的第一份保险(均来自太平):“福禄康瑞2018重疾险” + “医无忧” + “爱无忧”(状态:已退,20190530)...
  7. Centos8安装Tomcat8.5.55
  8. Unsupported class file major version 55
  9. 『 云原生·Docker』Docker镜像分层与Docker镜像操作(二)
  10. 第七章 Java基础类库