【已解决】matrix contains invalid numeric entries,记录bug修改

2023-07-10 21:15:00

摘要

在使用DeepSort做跟踪的时候,遇到了下面这个问题

matrix contains invalid numeric entries

出问题的代码如下:

def min_cost_matching(
        distance_metric, max_distance, tracks, detections, track_indices=None,
        detection_indices=None):
    if track_indices is None:
        track_indices = np.arange(len(tracks))
    if detection_indices is None:
        detection_indices = np.arange(len(detections))

    if len(detection_indices) == 0 or len(track_indices) == 0:
        return [], track_indices, detection_indices  # Nothing to match.
    for det in detections:
        print(det.tlwh,det.confidence)
    cost_matrix = distance_metric(
        tracks, detections, track_indices, detection_indices)
    print("distance_metric",cost_matrix)
    cost_matrix[cost_matrix > max_distance] = max_distance + 1e-5
    cost_matrix=np.nan_to_num(cost_matrix)
    row_indices, col_indices = linear_assignment(cost_matrix)

    matches, unmatched_tracks, unmatched_detections = [], [], []
    for col, detection_idx in enumerate(detection_indices):
        if col not in col_indices:
            unmatched_detections.append(detection_idx)
    for row, track_idx in enumerate(track_indices):
        if row not in row_indices:
            unmatched_tracks.append(track_idx)
    for row, col in zip(row_indices, col_indices):
        track_idx = track_indices[row]
        detection_idx = detection_indices[col]
        if cost_matrix[row, col] > max_distance:
            unmatched_tracks.append(track_idx)
            unmatched_detections.append(detection_idx)
        else:
            matches.append((track_idx, detection_idx))
    return matches, unmatched_tracks, unmatched_detections

由于代码来源开源代码,没有太多的注释,所以只能一步步的分析。
通过分析发现cost_matrix里包含nan
在这里插入图片描述

原因

经过初步分心是cost_matrix包含nan造成的,于是,将nan转为0,所以在代码上面加上,如下代码:

cost_matrix=np.nan_to_num(cost_matrix)

然而,为啥为nan呢?我们进一步查找,继续打印log分析,打印出detections

    for det in detections:
        print(det.tlwh,det.confidence)

发现,凡是出现nan的时候,两个检测框几乎重叠。所以,我们就锁定了bug的位置。在distance_metric中

cost_matrix = distance_metric(
        tracks, detections, track_indices, detection_indices)

这个函数是上层传入的,在tracker.py可以找到,如下图:
在这里插入图片描述
然后,我们就可以锁定iou_matching.iou_cost,继续打印log,发现iou(bbox, candidates)为nan。
所以就锁定iou函数有问题。
然后,进入iou继续找bug。发现area_intersection = wh.prod(axis=1),当出现nan的时候,area_intersection 为inf。
同时,打印wh,发现是整数数组,猜想应该溢出了。

解决办法

将数组转为float类型。代码如下:

    wh =np.maximum(0., br - tl).astype(float)
    area_intersection = wh.prod(axis=1)
    area_bbox = bbox[2:].astype(float).prod()
    area_candidates = candidates[:, 2:].astype(float).prod(axis=1)
    return area_intersection / (area_bbox + area_candidates - area_intersection)

图像分类网络

在这里插入图片描述

AlexNet

【第61篇】AlexNet:CNN开山之作

VGGNet

【第1篇】VGG

GooLeNet系列

【第2篇】GooLeNet

【第3篇】Inception V2

【第4篇】Inception V3

【第62篇】Inception-v4

ResNet

【第5篇】ResNet

DenseNet

【第10篇】DenseNet

Swin Transformer

【第16篇】Swin Transformer

【第49篇】Swin Transformer V2:扩展容量和分辨率

MAE

【第21篇】MAE(屏蔽自编码器是可扩展的视觉学习器)

CoAtNet

【第22篇】CoAtNet:将卷积和注意力结合到所有数据大小上

ConvNeXtV1、V2

【第25篇】力压Tramsformer,ConvNeXt成了CNN的希望

【第64篇】ConvNeXt V2论文翻译:ConvNeXt V2与MAE激情碰撞

MobileNet系列

【第26篇】MobileNets:用于移动视觉应用的高效卷积神经网络

【第27篇】MobileNetV2:倒置残差和线性瓶颈

【第28篇】搜索 MobileNetV3

MPViT

【第29篇】MPViT:用于密集预测的多路径视觉转换器

VIT

【第30篇】Vision Transformer

SWA

【第32篇】SWA:平均权重导致更广泛的最优和更好的泛化

EfficientNet系列

【第34篇】 EfficientNetV2:更快、更小、更强——论文翻译

MOBILEVIT

【第35篇】MOBILEVIT:轻量、通用和适用移动设备的Vision Transformer

EdgeViTs

【第37篇】EdgeViTs: 在移动设备上使用Vision Transformers 的轻量级 CNN

MixConv

【第38篇】MixConv:混合深度卷积核

RepLKNet

【第39篇】RepLKNet将内核扩展到 31x31:重新审视 CNN 中的大型内核设计

TransFG

【第40篇】TransFG:用于细粒度识别的 Transformer 架构

ConvMAE

【第41篇】ConvMAE:Masked Convolution 遇到 Masked Autoencoders

MicroNet

【第42篇】MicroNet:以极低的 FLOP 实现图像识别

RepVGG

【第46篇】RepVGG :让卷积再次伟大

MaxViT

【第48篇】MaxViT:多轴视觉转换器

MAFormer

【第53篇】MAFormer: 基于多尺度注意融合的变压器网络视觉识别

GhostNet系列

【第56篇】GhostNet:廉价操作得到更多的特征

【第57篇】RepGhost:一个通过重新参数化实现硬件高效的Ghost模块

DEiT系列

【第58篇】DEiT:通过注意力训练数据高效的图像transformer &蒸馏

MetaFormer

【第59篇】MetaFormer实际上是你所需要的视觉

RegNet

【第60篇】RegNet:设计网络设计空间

InternImage

【第73篇】InternImage:探索具有可变形卷积的大规模视觉基础模型

FasterNet

【第74篇】 FasterNet:CVPR2023年最新的网络,基于部分卷积PConv,性能远超MobileNet,MobileVit

注意力机制

【第23篇】NAM:基于标准化的注意力模块

物体检测

【第6篇】SSD论文翻译和代码汇总

【第7篇】CenterNet

【第8篇】M2Det

【第9篇】YOLOX

【第11篇】微软发布的Dynamic Head,创造COCO新记录:60.6AP

【第12篇】Sparse R-CNN: End-to-End Object Detection with Learnable Proposals

【第13篇】CenterNet2论文解析,COCO成绩最高56.4mAP

【第14篇】UMOP

【第15篇】CBNetV2

【第19篇 】SE-SSD论文翻译

【第24篇】YOLOR:多任务的统一网络

【第31篇】探索普通视觉Transformer Backbones用于物体检测

【第36篇】CenterNet++ 用于对象检测

【第45篇】YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object detectors

行人属性识别

【第66篇】行人属性识别研究综述(一)

【第66篇】行人属性识别研究综述(二)

行人跟踪

【第47篇】BoT-SORT:强大的关联多行人跟踪

【第65篇】SMILEtrack:基于相似度学习的多目标跟踪

【第70篇】DeepSort:论文翻译

【第72篇】深度学习在视频多目标跟踪中的应用综述

OCR

【第20篇】像人类一样阅读:自主、双向和迭代语言 场景文本识别建模

【第44篇】DBNet:具有可微分二值化的实时场景文本检测

超分辨采样

【第33篇】SwinIR

弱光增强

RetinexNet

【第52篇】RetinexNet: Deep Retinex Decomposition for Low-Light Enhancement

【第50篇】迈向快速、灵活、稳健的微光图像增强

NLP

【第17篇】TextCNN

【第18篇】Bert论文翻译

多模态

【第43篇】CLIP:从自然语言监督中学习可迁移的视觉模型

知识蒸馏

【第54篇】知识蒸馏:Distilling the Knowledge in a Neural Network

剪枝

【第55篇】剪枝算法:通过网络瘦身学习高效卷积网络

【第71篇】DepGraph:适用任何结构的剪枝

智慧城市

【第51篇】用于交通预测的时空交互动态图卷积网络

更多推荐

多线程设计模式【线程安全、 Future 设计模式、Master-Worker 设计模式 】(一)-全面详解(学习总结---从入门到深化)

目录SingleThreadExecution设计模式线程安全Future设计模式Master-Worker设计模式生产者消费者设计模式定义不可变对象的策略SingleThreadExecution设计模式机场过安检SingleThreadExecution模式是指在同一时刻只能有一个线程去访问共享资源,就像独木桥一样

runc和docker

在Docker中,runc是一个轻量级的运行时工具,用于创建和运行容器。它是OpenContainerInitiative(OCI)的一部分,负责管理和执行容器中的进程。runc负责创建和管理Linux命名空间、控制组(cgroups)和文件系统挂载等功能,以便隔离容器中的进程、资源和文件系统。它还提供了容器的生命周期

在项目中,关于前端实现数据可视化的技术选择

前言在项目中,数据可视化以图表、报表类型为主。需求背景技术框架是Vue2.x版本,组件库是AntDesignofVue能够支撑足够多的图表类型开发图表大小/位置能够随意变动图表样式需要支持丰富多样的用户配置强大、开放的图表语法支持复杂的数据可视化场景兼顾电脑端和手机端、同时兼顾开发周期和后期维护版本稳定、社区活跃,方便

【数据结构】二叉树

树的概念及结构树的概念树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。有一个特殊的结点,称为根结点,根节点没有前驱结点(上图中的A结点就是根节点)除根节点外,其余结点被分成M(M>0)个互不相交的集合T1、T2、

SpringCLoud——RabbitMQ的消息模型

WorkQueue工作队列他的主要作用就是增加消费者的个数,可以提高消息处理速度,避免队列消息堆积。案例实现一个队列绑定多个消费者首先修改一下之前的发送消息的代码,让他循环发送50次,但是不要一次性发完:@TestvoidLoopSend()throwsInterruptedException{StringqueueN

计算机网络知识补充(1)

计算机网络:是一个将分散的,具有独立功能的计算机系统,通过通信设备和线路进行连接起来,由功能完善的软件实现资源共享和信息共享的系统,计算机网络是互连的,自治的计算机集合互连:通过通信链路来进行互联互通自治:没有主从关系1)电路交换:电路交换是一种通信方式,它是通过建立点对点的电路连接来传输数据的,在电路交换中,如果两个

同为科技(TOWE)工业用插头插座及配电箱产品选型推荐

工业用插头插座及配电箱产品是专用于工业环境中的电源连接和电气设备控制,与普通家用插头插座相比,通常具有更高的功率和电流容量,并且设计上考虑了耐用性、安全性和适应各种环境条件的能力。工业用插头插座产品类型多样,包括插头插座、工业连接器、防水配电箱等,满足户内外工业用电的各种需求,适用于工业、建筑、船舶、交通、能源、通信等

【linux基础(八)】计算机体系结构--冯诺依曼系统&操作系统的再理解

💓博主CSDN主页:杭电码农-NEO💓⏩专栏分类:Linux从入门到精通⏪🚚代码仓库:NEO的学习日记🚚🌹关注我🫵带你学更多操作系统知识🔝🔝计算机体系结构1.前言2.冯诺依曼系统介绍3.为什么冯诺依曼系统如此流行?4.对硬件系统的再理解5.校长对学生的管理6.操作系统对硬件的管理7.总结1.前言为了更好

小米发布会:雷军成长故事与创新壮举,AI大模型技术引领未来,雷军探索之路之从创业波折到小米AI领航,成就高端化传奇!

🌷🍁博主猫头虎带您GotoNewWorld.✨🍁🦄博客首页——猫头虎的博客🎐🐳《面试题大全专栏》文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺🌊《IDEA开发秘籍专栏》学会IDEA常用操作,工作效率翻倍~💐🌊《100天精通Golang(基础入门篇)》学会Golang语言,畅玩云原生,走遍大

JS学习笔记

1.CSS1.1文档流-所有的元素默认情况下都是在文档流中存在的-文档流是网页的最底层-元素在文档流中的特点:-块元素1.默认宽度是父元素的全部2.默认高度被内容(子元素)撑开3.在页面中自上而下垂直排列-内联元素1.默认高度和宽度都被内容撑开2.在页面中自左向右水平排列,如果一行不足以容下所有的元素则换到下一行继续从

Scala编程语言

Scala编程语言一、Scala引入1、学习Scala的目的2、Scala的基本概念二、Scala环境搭建1、安装步骤2、配置环境变量3、测试Scala4、Scala与idea的集成5、关联源码6、class和object说明三、常用语法、变量和数据类型1、注释2、变量和常量3、标识符的命名规范4、字符串输出5、键盘输

热文推荐