文章目录

  • 前言
  • 一、centerNet代码实现
  • 总结

前言

本文简述基于chainer实现centerNet目标检测算法


一、centerNet代码实现

from collections import defaultdict
import chainer
import numpy as np
from chainer import Chain, Variable, reporter
from typing import Callable, Dict
import chainer.functions as F
from core.loss import center_detection_loss
from utils.bbox import resize_bbox
from utils.image import resizedef find_peak(map, x, y):dx = np.array([-1,  0,  1, 0, -1,  1, -1, 0, 1])dy = np.array([-1, -1, -1, 0,  0,  0,  1, 1, 1])while True:nx = np.minimum(np.maximum(x + dx, 0), map.shape[1] - 1)ny = np.minimum(np.maximum(y + dy, 0), map.shape[0] - 1)max_idx = np.argmax(map[ny, nx])if x == nx[max_idx] and y == ny[max_idx]:breakx = nx[max_idx]y = ny[max_idx]return x, yclass CenterDetector(Chain):def __init__(self, base_network_factory: Callable[[Dict[str, int]], Chain], insize, num_classes, downratio=4, dtype=np.float32):super().__init__()self.num_classes = num_classesself.insize = insizeself.downratio = downratioself.dtype = dtypewith self.init_scope():self.base_network = base_network_factory({'hm': num_classes,'wh': 2,'offset': 2,})def forward(self, x):y = self.base_network(x)return ydef predict(self, imgs, k=100, detail=False, output_index=-1):x = []sizes = []for img in imgs:_, H, W = img.shapeimg = self._prepare(img)x.append(self.xp.array(img))sizes.append((H, W))with chainer.using_config('train', False), chainer.function.no_backprop_mode():x = Variable(self.xp.stack(x))output = self.forward(x)[output_index]bboxes = []labels = []scores = []output['hm'] = F.sigmoid(output['hm'])output['hm'].to_cpu()for i in range(len(imgs)):bbox, label, score = self._decode_output(output, i, k)bbox = resize_bbox(bbox, (self.insize, self.insize), sizes[i])bboxes.append(bbox)labels.append(label)scores.append(score)if detail:return bboxes, labels, scores, outputelse:return bboxes, labels, scoresdef _decode_output(self, output, index, k):bboxes = []labels = []scores = []for j in range(self.num_classes):hm = output['hm'].array[index, j]pos_indices = np.argsort(hm.flatten())[::-1][:k]already_visit_peak = defaultdict(lambda: False)for pos_index in pos_indices:x = pos_index % hm.shape[1]y = pos_index // hm.shape[1]peak_x, peak_y = find_peak(hm, x, y)if not already_visit_peak[peak_y, peak_x]:already_visit_peak[peak_y, peak_x] = Trueadjusted_x, adjusted_y, w, h = self._decode_bbox(output, peak_x, peak_y, index)bboxes.append([adjusted_y - h / 2, adjusted_x - w / 2, adjusted_y + h / 2, adjusted_x + w / 2])labels.append(j)scores.append(hm[y, x])scores = np.array(scores)sorted_idx = scores.argsort()[::-1]return np.array(bboxes)[sorted_idx], np.array(labels)[sorted_idx], scores[sorted_idx]def _decode_bbox(self, output, x, y, index):wh = output['wh']wh.to_cpu()offset = output['offset']offset.to_cpu()wh = wh.arrayoffset = offset.arrayreturn (x * self.downratio + offset[index, 0, y, x], y * self.downratio + offset[index, 1, y, x],wh[index, 0, y, x] * self.downratio, wh[index, 1, y, x] * self.downratio)def _prepare(self, img):img = img.astype(self.dtype)img = resize(img, (self.insize, self.insize))return imgclass CenterDetectorTrain(Chain):def __init__(self,center_detector,hm_weight,wh_weight,offest_weight,focial_loss_alpha=2,focial_loss_beta=4,comm=None):super().__init__()self.hm_weight = hm_weightself.wh_weight = wh_weightself.offset_weight = offest_weightself.comm = commwith self.init_scope():self.center_detector = center_detectordef forward(self, **indata):imgs = indata['image']y = self.center_detector(imgs)loss, hm_loss, wh_loss, offset_loss, detail_losses = center_detection_loss(y, indata,self.hm_weight, self.wh_weight, self.offset_weight, comm=self.comm)hm = y[-1]["hm"]hm_mae = F.mean_absolute_error(hm, indata["hm"])reporter.report({'loss': loss,'hm_loss': hm_loss,'hm_pos_loss': detail_losses['hm_pos_loss'],'hm_neg_loss': detail_losses['hm_neg_loss'],'hm_mae': hm_mae,'wh_loss': wh_loss,'offset_loss': offset_loss}, self)return loss

总结

源码:chainer-centerNet

chainer-目标检测-centerNet相关推荐

  1. [目标检测]CenterNet

    文章目录 背景 性能 模型结构与输出 解析目标框(后处理) 损失函数 heatmap reg wh loss 模型四元素: 背景 模型结构与输出 后处理 损失函数 背景 目标检测就是识别出图中物体的位 ...

  2. CV Code | 本周新出计算机视觉开源代码汇总(含图像修复、目标检测、医学图像分割、度量学习等)...

    点击我爱计算机视觉标星,更快获取CVML新技术 CV君汇总了过去一周计算机视觉领域新出的开源代码,涉及到图像质量评价.图像去雾.图像修复.医学图像分割.目标检测.人脸对齐.度量学习等,其中有多篇来自C ...

  3. ICCV2021 | 单目3D目标检测框架GUPNet解析

    作者 | Kwong  编辑 | 汽车人 原文链接:https://zhuanlan.zhihu.com/p/545796074 点击下方卡片,关注"自动驾驶之心"公众号 ADAS ...

  4. 目标检测系列(八)——CenterNet:Objects as points

    文章目录 摘要 1. 引言 2. 相关工作 3. 准备阶段 4. objects as points 目标即点 4.1 3D检测 5. 实施细节 7. 总结 8. 代码 8.1 训练 8.2 测试 摘 ...

  5. 重读 CenterNet,一个在Github有5.2K星标的目标检测算法

    本文带领大家重温 Objects as Points 一文,其于2019年4月发布于arXiv,谷歌学术显示目前已有403次引用,Github代码仓库已有5.2K星标,无论在工业界和学术界均有巨大影响 ...

  6. ​​​​​​​【目标检测】CenterNet

    论文地址:https://arxiv.org/pdf/1904.07850.pdf 代码地址:CenterNet: Object detection, 3D detection, and pose e ...

  7. 目标检测: 一文读懂 CenterNet (CVPR 2019)

    论文:Objects as Points 论文链接:https://arxiv.org/pdf/1904.07850.pdf 论文代码:https://github.com/xingyizhou/Ce ...

  8. CenterNet代码解析-ctdet目标检测

    CenterNet(Objects as points)开源代码: https://github.com/xingyizhou/CenterNethttps://github.com/xingyizh ...

  9. 基于anchor-free的目标检测算法CenterNet研究

    2020.04.18 小记 近期一直在MOT算法研究,目前SOTA算法核心还是基于CenterTrack网络,而CenterTrack又是基于anchor-free式的CenterNet网络,Cent ...

  10. CenterNet做2D和3D目标检测

    论文Objects as Points 源码GitHub地址 CenterNet是全卷积的神经网络,不需要额外的NMS的后处理,属于one-stage的检测方法. 1.2D目标检测 通过预测目标的中心 ...

最新文章

  1. JavaScript Document
  2. 在VMware Workstation上安装Kali Linux
  3. webstorm怎么跑项目_快讯!明年厦门中考体育项目定了!初三家长抽的!其他地市抽到啥?...
  4. 26 JSX深度剖析与使用技巧
  5. hashmap put过程_面试官:HashMap 为什么线程不安全?
  6. Spring Cloud 服务治理
  7. 综合后端各种类型文件
  8. aux 参数 linux,Linux下ps aux解释
  9. 1.Kubernetes 简介
  10. 【机械制造基础部分(京玉海第二版)部分思考题】
  11. 个税计算器python代码_用python写一个北京市的个税计算器
  12. 招商银行笔试题之X游戏
  13. C语言程序设计 题目抽签系统
  14. JavaScript 每日一题 #6
  15. 几种css炫酷背景欣赏
  16. 【微服务集成阿里SMS短信服务发送短信】
  17. web网站的注销功能实现
  18. 张量网络系列(一 从张量到张量网络)
  19. 变速积分PID控制算法
  20. 线上内存溢出原因排除

热门文章

  1. 搭建skywalking对Java应用进行监控
  2. 机器学习的数学基础(一、高等数学)(阅读笔记)
  3. 计算机网络笔记8 点对点PPP协议
  4. deque与queue区别
  5. 深度解析销售线索:定义、收集、管理、验证、评分、转化
  6. 织梦sql php标签,织梦标签:sql SQL查询标签
  7. cookies和缓存的区别_Cookies和缓存之间的区别
  8. 谷歌提前开源AlphaFold 2!Nature、Science同时公开两大蛋白质结构预测工具
  9. 第3章 软件测试方法-- 软件度量
  10. $children:父访子 $parent:子访父 $root:访根