目标检测算法之YOLOv2损失函数详解

2023-10-27

前言

前面的YOLOv2推文详细讲解了YOLOv2的算法原理,但官方论文没有像YOLOv1那样提供YOLOv2的损失函数,难怪Ng说YOLO是目标检测中最难懂的算法。今天我们尝试结合DarkNet的源码来分析YOLOv2的损失函数。

关键点回顾

直接位置预测

YOLOv2借鉴RPN网络使用Anchor boxes来预测边界框相对于先验框的offsets。边界框的实际中心位置 ( x , y ) (x,y) (x,y)需要利用预测的坐标偏移值 ( t x , t y ) (t_x,t_y) (tx,ty),先验框的尺度 ( w a , h a ) (w_a,h_a) (wa,ha)以及中心坐标 ( x a , y a ) (x_a,y_a) (xa,ya)来计算,这里的 x a x_a xa y a y_a ya也即是特征图每个位置的中心点:
在这里插入图片描述
上面的公式也是Faster-RCNN中预测边界框的方式。但上面的预测方式是没有约束的,预测的边界框容易向任何方向偏移,例如当 t x = 1 t_x=1 tx=1时边界框将向右偏移Anchor的一个宽度大小,导致每个位置预测的边界框可以落在图片的任意位置,这就导致模型训练的不稳定性,在训练的时候要花很长时间才可以得到正确的offsets。以,YOLOv2弃用了这种预测方式,而是沿用YOLOv1的方法,就是预测边界框中心点相对于对应cell左上角位置的相对偏移值,为了将边界框中心点约束在当前cell中,使用sigmoid函数处理偏移值,这样预测的偏移值在(0,1)范围内(每个cell的尺度看做1)。

综上,根据边界框预测的4个偏移值 t x , t y , t w , t h t_x,t_y,t_w,t_h tx,ty,tw,th,可以使用如下公式来计算边界框实际中心位置和长宽,公式在图中:
在这里插入图片描述
其中, ( c x , c y ) (c_x,c_y) (cx,cy)为cell的左上角坐标。在Fig3中,当前的cell的左上角坐标为 ( 1 , 1 ) (1,1) (1,1)。由于 s i g m o i d sigmoid sigmoid函数的处理,边界框的中心位置会被约束在当前cell的内部,防止偏移过多,然后 p w p_w pw p h p_h ph是先验框的宽度与高度,它们的值也是相对于特征图(这里是13*13,我们把特征图的长宽记作H,W)大小的,在特征图中的cell长宽均为1。这样我们就可以算出边界框相对于整个特征图的位置和大小了,公式如下:
b x = ( σ ( t x ) + c x ) / W b_x=(\sigma(t_x)+c_x)/W bx=(σ(tx)+cx)/W
b y = ( σ ( t y ) + c y ) / H b_y=(\sigma(t_y)+c_y)/H by=(σ(ty)+cy)/H
b w = p w e t w / W b_w=p_we^{t_w}/W bw=pwetw/W
b h = p h e t h / H b_h=p_he^{t_h}/H bh=pheth/H
我们如果将上面边界框的4个值乘以输入图像长宽,就可以得到边界框在原图中的位置和大小了。

细粒度特征

YOLOv2提取Darknet-19最后一个max pool层的输入,得到26x26x512的特征图。经过1x1x64的卷积以降低特征图的维度,得到26x26x64的特征图,然后经过pass through层的处理变成13x13x256的特征图(抽取原特征图每个2x2的局部区域组成新的channel,即原特征图大小降低4倍,channel增加4倍),再与13x13x1024大小的特征图连接,变成13x13x1280的特征图,最后在这些特征图上做预测。使用Fine-Grained Features,YOLOv2的性能提升了1%。这个过程可以在下面的YOLOv2的结构图中看得很清楚:
在这里插入图片描述
这个地方今天还要补充一点,那就是passthrough层到底是怎么操作的,在DarkNet中passthough层叫作reorg_layer,可以用下图来表示这个操作:
在这里插入图片描述

训练

上篇推文讲了YOLOv2的训练分为三个阶段,具体就不再赘述了。这里主要重新关注一下训练后的维度变化,我们从上一小节可以看到最后YOLOv2的输出维度是 13 × 13 × 125 13\times 13\times 125 13×13×125。这个125使用下面的公式来计算的:
n u m a n c h o r s × ( 5 + n u m c l a s s e s ) num_{anchors}\times (5+num_{classes}) numanchors×(5+numclasses)

和训练采用的数据集有关系。由于anchors数为5,对于VOC数据集输出的channels数就是125,而对于COCO数据集则为425。这里以VOC数据集为例,最终的预测矩阵为 T T T,shape为 [ b a t c h s i z e , 13 , 13 , 125 ] [batch_{size},13,13,125] [batchsize,13,13,125],可以将其reshape成 [ b a t c h s i z e , 13 , 13 , 5 , 25 ] [batch_{size},13,13,5,25] [batchsize,13,13,5,25],这样 T [ : , : , : , : , 0 : 4 ] T[:,:,:,:,0:4] T[:,:,:,:,0:4]是边界框的位置和大小 ( t x , t y , t w , t h ) (t_x,t_y,t_w,t_h) (tx,ty,tw,th) T [ : , : , : , : , 4 ] T[:,:,:,:,4] T[:,:,:,:,4]表示边界框的置信度 t o t_o to,而 T [ : , : , : , : , 5 : ] T[:,:,:,:,5:] T[:,:,:,:,5:]表示类别预测值。

YOLOv2的模型结构

在这里插入图片描述在这里插入图片描述

损失函数

接下来就说一说今天的主题,损失函数。损失函数我看网上的众多讲解,发现有两种解释。

解释1

YOLOv2的损失函数和YOLOv1一样,对于训练集中的ground truth,中心落在哪个cell,那么该cell的5个Anchor box对应的边界框就负责预测它,具体由哪一个预测同样也是根据IOU计算后卡阈值来确定的,最后选IOU值最大的那个。这也是建立在每个Cell至多含有一个目标的情下,实际上也基本不会出现多余1个的情况。和ground truth匹配上的先验框负责计算坐标误差,置信度误差以及分类误差,而其它4个边界框只计算置信度误差。这个解释参考的YOLOv2实现是darkflow.源码地址为:https://github.com/thtrieu/darkflow

解释2

在官方提供的Darknet中,YOLOv2的损失函数可以不是和YOLOv1一样的,损失函数可以用下图来进行表示:
在这里插入图片描述
可以看到这个损失函数是相当复杂的,损失函数的定义在Darknet/src/region_layer.c中。对于上面这一堆公式,我们先简单看一下,然后我们在源码中去找到对应部分。这里的 W W W H H H代表的是特征图的高宽,都为 13 13 13,而A指的是Anchor个数,YOLOv2中是5,各个 λ \lambda λ值是各个loss部分的权重系数。我们将损失函数分成3大部分来解释:

  • 第一部分:在这里插入图片描述
    第一项需要好好解释一下,这个loss是计算background的置信度误差,这也是YOLO系列算法的特色,但是用哪些预测框来预测背景呢?这里需要计算各个预测框和所有的ground truth之间的IOU值,并且取最大值记作MaxIOU,如果该值小于一定的阈值,YOLOv2论文取了0.6,那么这个预测框就标记为background,需要计算 λ n o o b j \lambda_{noobj} λnoobj这么多倍的损失函数。为什么这个公式可以这样表达呢?因为我们有物体的话,那么 λ n o o b j = 0 \lambda_{noobj}=0 λnoobj=0,如果没有物体 λ n o o b j = 1 \lambda_{noobj}=1 λnoobj=1,我们把这个值带入到下面的公式就可以推出第一项啦!
    在这里插入图片描述
  • 第二部分:
    在这里插入图片描述
    这一部分是计算Anchor boxes和预测框的坐标误差,但是只在前12800个iter计算,这一项应该是促进网络学习到Anchor的形状。
  • 第三部分:
    在这里插入图片描述
    这一部分计算的是和ground truth匹配的预测框各部分的损失总和,包括坐标损失,置信度损失以及分类损失。
    3.1 坐标损失 这里的匹配原则是指对于某个特定的ground truth,首先要计算其中心点落在哪个cell上,然后计算这个cell的5个先验框和grond truth的IOU值,计算IOU值的时候不考虑坐标只考虑形状,所以先将Anchor boxes和ground truth的中心都偏移到同一位置,然后计算出对应的IOU值,IOU值最大的先验框和ground truth匹配,对应的预测框用来预测这个ground truth。
    3.2 置信度损失 在计算obj置信度时, 增加了一项 λ o b j \lambda_{obj} λobj权重系数,也被称为rescore参数,当其为1时,损失是预测框和ground truth的真实IOU值(darknet中采用了这种实现方式)。而对于没有和ground truth匹配的先验框,除去那些Max_IOU低于阈值的,其它就全部忽略。YOLOv2和SSD与RPN网络的处理方式有很大不同,因为它们可以将一个ground truth分配给多个先验框。
    3.3 分类损失 这个和YOLOv1一致,没什么好说的了。

我看了一篇讲解YOLOv2损失函数非常好的文章:https://www.cnblogs.com/YiXiaoZhou/p/7429481.html 。里面还有一个关键点:

在计算boxes的 w w w h h h误差时,YOLOv1中采用的是平方根以降低boxes的大小对误差的影响,而YOLOv2是直接计算,但是根据ground truth的大小对权重系数进行修正:l.coord_scale * (2 - truth.w*truth.h)(这里 w w w h h h都归一化到(0,1)),这样对于尺度较小的 b o x e s boxes boxes其权重系数会更大一些,可以放大误差,起到和YOLOv1计算平方根相似的效果。

代码实现

贴一下YOLOv2在Keras上的复现代码,地址为:https://github.com/yhcc/yolo2 。网络结构如下,可以结合上面可视化图来看:

def darknet(images, n_last_channels=425):
    """Darknet19 for YOLOv2"""
    net = conv2d(images, 32, 3, 1, name="conv1")
    net = maxpool(net, name="pool1")
    net = conv2d(net, 64, 3, 1, name="conv2")
    net = maxpool(net, name="pool2")
    net = conv2d(net, 128, 3, 1, name="conv3_1")
    net = conv2d(net, 64, 1, name="conv3_2")
    net = conv2d(net, 128, 3, 1, name="conv3_3")
    net = maxpool(net, name="pool3")
    net = conv2d(net, 256, 3, 1, name="conv4_1")
    net = conv2d(net, 128, 1, name="conv4_2")
    net = conv2d(net, 256, 3, 1, name="conv4_3")
    net = maxpool(net, name="pool4")
    net = conv2d(net, 512, 3, 1, name="conv5_1")
    net = conv2d(net, 256, 1, name="conv5_2")
    net = conv2d(net, 512, 3, 1, name="conv5_3")
    net = conv2d(net, 256, 1, name="conv5_4")
    net = conv2d(net, 512, 3, 1, name="conv5_5")
    shortcut = net
    net = maxpool(net, name="pool5")
    net = conv2d(net, 1024, 3, 1, name="conv6_1")
    net = conv2d(net, 512, 1, name="conv6_2")
    net = conv2d(net, 1024, 3, 1, name="conv6_3")
    net = conv2d(net, 512, 1, name="conv6_4")
    net = conv2d(net, 1024, 3, 1, name="conv6_5")
    # ---------
    net = conv2d(net, 1024, 3, 1, name="conv7_1")
    net = conv2d(net, 1024, 3, 1, name="conv7_2")
    # shortcut
    shortcut = conv2d(shortcut, 64, 1, name="conv_shortcut")
    shortcut = reorg(shortcut, 2)
    net = tf.concat([shortcut, net], axis=-1)
    net = conv2d(net, 1024, 3, 1, name="conv8")
    # detection layer
    net = conv2d(net, n_last_channels, 1, batch_normalize=0,
                 activation=None, use_bias=True, name="conv_dec")
    return net

然后,网络经过我们介绍的损失函数优化训练以后,对网络输出结果进行解码得到最终的检测结果,这部分代码如下:

def decode(detection_feat, feat_sizes=(13, 13), num_classes=80,
           anchors=None):
    """decode from the detection feature"""
    H, W = feat_sizes
    num_anchors = len(anchors)
    detetion_results = tf.reshape(detection_feat, [-1, H * W, num_anchors,
                                        num_classes + 5])

    bbox_xy = tf.nn.sigmoid(detetion_results[:, :, :, 0:2])
    bbox_wh = tf.exp(detetion_results[:, :, :, 2:4])
    obj_probs = tf.nn.sigmoid(detetion_results[:, :, :, 4])
    class_probs = tf.nn.softmax(detetion_results[:, :, :, 5:])

    anchors = tf.constant(anchors, dtype=tf.float32)

    height_ind = tf.range(H, dtype=tf.float32)
    width_ind = tf.range(W, dtype=tf.float32)
    x_offset, y_offset = tf.meshgrid(height_ind, width_ind)
    x_offset = tf.reshape(x_offset, [1, -1, 1])
    y_offset = tf.reshape(y_offset, [1, -1, 1])

    # decode
    bbox_x = (bbox_xy[:, :, :, 0] + x_offset) / W
    bbox_y = (bbox_xy[:, :, :, 1] + y_offset) / H
    bbox_w = bbox_wh[:, :, :, 0] * anchors[:, 0] / W * 0.5
    bbox_h = bbox_wh[:, :, :, 1] * anchors[:, 1] / H * 0.5

    bboxes = tf.stack([bbox_x - bbox_w, bbox_y - bbox_h,
                       bbox_x + bbox_w, bbox_y + bbox_h], axis=3)

    return bboxes, obj_probs, class_probs

补充

这个损失函数最难的地方应该是YOLOv2利用sigmoid函数计算默认框坐标之后怎么梯度回传,这部分可以看下面的代码(来自Darknet源码):

// box误差函数,计算梯度
float delta_region_box(box truth, float *x, float *biases, int n, int index, int i, int j, int w, int h, float *delta, float scale, int stride)
{
    box pred = get_region_box(x, biases, n, index, i, j, w, h, stride);
    float iou = box_iou(pred, truth);
   
    // 计算ground truth的offsets值
    float tx = (truth.x*w - i);  
    float ty = (truth.y*h - j);
    float tw = log(truth.w*w / biases[2*n]);
    float th = log(truth.h*h / biases[2*n + 1]);

    delta[index + 0*stride] = scale * (tx - x[index + 0*stride]);
    delta[index + 1*stride] = scale * (ty - x[index + 1*stride]);
    delta[index + 2*stride] = scale * (tw - x[index + 2*stride]);
    delta[index + 3*stride] = scale * (th - x[index + 3*stride]);
    return iou;
}

结合一下我们前面介绍的公式,这就是一个逆过程,现在是不是清晰一些了?有任何问题欢迎在留言区和我讨论哦。

后记

今天就介绍到这里了,YOLOv2的损失函数实现都在region_layer.c里面了,同时推荐一下我的一个Darknet源码解析项目,我会在里面努力解析YOLO目标检测算法的细节,地址为:https://github.com/BBuf/Darknet 。明天开始讲解YOLOv3,后面安排一下YOLOv3的实战,就用NCNN和YOLOv3为例子吧。

参考

https://zhuanlan.zhihu.com/p/35325884
https://www.cnblogs.com/YiXiaoZhou/p/7429481.html
https://github.com/yhcc/yolo2


欢迎关注我的微信公众号GiantPandaCV,期待和你一起交流机器学习,深度学习,图像算法,优化技术,比赛及日常生活等。
图片.png

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

目标检测算法之YOLOv2损失函数详解 的相关文章

  • 【计算机视觉

    文章目录 一 检测相关 1篇 1 1 SegmentAnything helps microscopy images based automatic and quantitative organoid detection and analy
  • 目标检测从零开始的学习之路--原理篇

    安装相关 Anaconda官网下载安装下一步进行到底 相关环境那儿记得打勾 不然就自己添加下环境变量就好 另 一般进官网就找Download 再找相关想下载的版本 适配系统之类的 这里下载的是Python 3 7 version for W
  • 【计算机视觉

    文章目录 一 问题 二 个人的理解 2 1 线性层的理解 2 2 pseudo words的理解 2 2 1 详细一点 2 2 2 为什么可以使用文本嵌入空间中的技术 2 2 3 pseudo word的本质是什么 2 2 4 好处 2 2
  • p2b网络

    把p2b的工作推广到p2rb 目的 学习目标检测 熟悉目标检测 为自己写论文打基础 我的碎碎念 真的是fuck了 自己这个东西整了这么久 还是没有整出来 从5月分我就开始了把 因为考试 因为自己喜欢玩游戏 因为我tm真的浪费了好多时间 像个
  • 目标检测算法之YOLOV3

    本博客中YOLO系列均为个人理解笔记 欢迎评论指出理解有误或者要讨论的地方 YOLOV3模型相比于v2来说 实质性的改进并不大 更多的是一些技术的堆叠 其并不像yolov2对于v1一样 由巨大的改变和提升 其相对于yolov2 改变在于 1
  • 【毕业设计】深度学习卫星遥感图像检测与识别系统(目标检测)

    文章目录 0 前言 1 课题背景 2 实现效果 3 Yolov5算法 4 数据处理和训练 5 最后 0 前言 Hi 大家好 这里是丹成学长的毕设系列文章 对毕设有任何疑问都可以问学长哦 这两年开始 各个学校对毕设的要求越来越高 难度也越来越
  • 【目标检测】【语义分割】—Mask-R-CNN详解

    一 mask rcnn简介 论文链接 论文链接 论文代码 Facebook代码链接 Tensorflow版本代码链接 Keras and TensorFlow版本代码链接 MxNet版本代码链接 mask rcnn是基于faster rcn
  • 特定场景小众领域数据集之——焊缝质量检测数据集

    写这篇文章最大的初衷就是最近频繁的有很多人私信问我相关的数据集的问题 基本上都是从我前面的目标检测专栏里面的这篇文章过来的 感兴趣的话可以看下 轻量级模型YOLOv5 Lite基于自己的数据集 焊接质量检测 从零构建模型超详细教程 保姆级的
  • 睿智的目标检测24——Keras搭建Mobilenet-SSD目标检测平台

    睿智的目标检测24 Keras搭建Mobilenet SSD目标检测平台 更新说明 学习前言 什么是SSD目标检测算法 源码下载 SSD实现思路 一 预测部分 1 主干网络介绍 2 从特征获取预测结果 3 预测结果的解码 4 在原图上进行绘
  • [YOLO专题-26]:YOLO V5 - ultralytics代码解析-detect.py程序的流程图与对应的plantUML源码

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 https blog csdn net HiWangWenBing article details 122443972 目录 第1章 det
  • 【计算机视觉

    文章目录 一 检测相关 11篇 1 1 Follow Anything Open set detection tracking and following in real time 1 2 YOLO MS Rethinking Multi
  • Anchor-Free目标检测模型

    FCOS Fully Convolutional One Stage Object Detection 已开源 FoveaBox Beyond Anchor based Object Detector 未开源 FCOS 摘要 我们提出了一种
  • 使用Stable Diffusion图像修复来生成自己的目标检测数据集

    点击上方 AI公园 关注公众号 选择加 星标 或 置顶 作者 R dig par Gabriel Guerin 编译 ronghuaiyang 导读 有些情况下 收集各种场景下的数据很困难 本文给出了一种方法 深度学习模型需要大量的数据才能
  • 【目标检测】34、FSAF: Feature Selective Anchor-Free Module for Single-Shot Object Detection

    文章目录 一 背景 二 方法 2 1 Ground truth and loss 2 2 Online Feature Selection 2 3 将 RetinaNet 和 FSAF 联合后如何训练和测试 三 效果 论文 Feature
  • yolo v3 fatal : Memory allocation failure

    torch版的 yolov3报错 fatal Memory allocation failure parser add argument n cpu type int default 8 help number of cpu threads
  • 快速椭圆检测代码调试记录

    代码环境 Windows11 vs2019 opencv3 3 1 Debugx64 一 代码注释 1 realpath PATH MAX basename 这几句是为了在Ubuntu中运行时 寻找路径用的 Ubuntu需要比较严格的路径
  • 机器学习课程总结3--基本卷积神经网络+评价指标+目标检测与Yolo网络

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 目录 一 基本卷积神经网络 1 AlexNet 2 VGG 16 3 残差网络 二 常用数据集与评价指标 1 数据集 2 评价指标 三 目标检测 YOLO 1 1 目标检测问
  • 【pytorch目标检测】创新之作:Fast R-CNN算法解读

    背景 2015年 提出了Fast RCNN算法 训练步骤实现端到端 CNN 基于VGG6 Fast R CNN是基于R CNN和SPPnets进行的改进 成果 训练速度比RCNN块9倍 测试速度快乐23倍 准确率68 4 SPPnets网络
  • 仅使用卷积!BEVENet:面向自动驾驶BEV空间的高效3D目标检测

    点击下方 卡片 关注 自动驾驶之心 公众号 ADAS巨卷干货 即可获取 gt gt 点击进入 自动驾驶之心 BEV感知 技术交流群 论文作者 Yuxin Li 编辑 自动驾驶之心 写在前面 个人理解 BEV空间中的3D检测已成为自动驾驶领域
  • 深入探讨人工智能目标检测:算法、应用与未来趋势

    导言 人工智能目标检测是计算机视觉领域的重要任务之一 旨在使计算机系统能够自动识别并定位图像或视频中的特定目标 本文将深入研究人工智能目标检测的算法原理 广泛应用以及未来发展趋势 1 目标检测算法 传统算法 基于手工设计特征和分类器的方法

随机推荐

  • redis docker安装、进入命令行后启动服务

    下载redis镜像 首先查看一下redis是否正确 docker search redis 显示 NAME DESCRIPTION STARS OFFICIAL AUTOMATED redis Redis is an open source
  • 一文读懂工厂MES系统的详细功能介绍

    一 工单管理 MES通过工单来管理生产执行 工单状态有 创建 下达 执行 完成 取消 计划员创建工单 审核通过后释放到设备或产线 仓库可收到工单下达的通知 及时备料 产线只能看到已下达的工单 执行工单 完成后登记报工 将相关信息反馈回ERP
  • 网络编程——实现HTTP服务器端

    参考 TCP IP网络编程 尹圣雨 Web服务器端 概述 Web服务器端是 基于HTTP Hypertext Transfer Protocol 协议 将网页对应文件传输给客户端的服务器端 Hypertext 超文本 是可以根据客户端请求而
  • redis-----08-----redigo管道以及事务-管道

    1 Redis 管道 正常的情况下 redis是请求响应模式 一条请求后那么正常就会返回一个响应 例如上图 但是只存在这种情况是无法满足我们开发的需求的 所以redis给我们提供了管道 redis的管道 pipeline 相关特点 1 re
  • 概念数据模型(E-R模型)

    概念数据模型 E R模型 概念数据模型是现实世界第一层次的抽象 是数据库设计人员和用户交流的工具 因此要求概念数据模型一方面应该具有较强的语义表达能力 能够方便 直接地表达应用中的各种语义知识 另一方面应该简单 直观和清晰 能为不具备专业知
  • python前端学习-----Flask进阶

    Flask进阶 Flask请求 Request请求对象 request args get 获取表单提交的信息 请求钩子 Flask响应 json 数据格式 Cookie 和 Session Cookie 对象 Session对象 设置密钥的
  • VMware centos7 Destination Host Unreachable

    现象 不管是ping网关还是外网都出现了 root rocketmqOS ping 192 168 23 2 PING 192 168 23 2 192 168 23 2 56 84 bytes of data From 192 168 2
  • jsp文件上传图片到服务器

    jsp文件上传图片到服务器 首先利用onchange去调用uploadBookImg函数 将图片上传到服务器 返回一个地址 将地址写入到一个隐藏域里面 提交表单的时候就可以将服务器返回的地址存入到数据库里面
  • 解决Django和Flask的跨域问题

    目录 2 1 概念 什么是同源 2 2 概念 什么是跨域请求 2 3 概念 浏览器的 同源策略 2 3 1 发生了跨域请求 浏览器在遵循 同源策略 下 处理流程如下 2 3 2 没有发生跨域请求的情况下浏览器会直接发送请求 如下图 3 解决
  • 使用obsidian的模板插件templater来自动化分类笔记记录

    在记笔记的过程中 不难发现为了笔记不那么凌乱 不得不去分类笔记以及为笔记打上元数据 这些步骤基本都是机械重复的 往往有时候只是想快速将内容记录下来 但是等到分类完 元数据写完 已经快要遗忘原本需要记录的内容 即使将这些步骤挪至最后完成 也显
  • TDengine安装使用

    引言 近期 听说了时序数据库TDengine 本人的好奇心又出来了 同是时序数据库的InfluxDB不也挺好的嘛 通过一些网上的资料以及些简单的实际操作 本人得出的结论是 数据量少时 InfluxDB的性能好些 当数据量越来越大之后 TDe
  • matlab 贝叶斯网络

    第一次搭建 参考教程https blog csdn net moodytong article details 8122327 我的matlab是2014a 系统win7旗舰 下面就开始一步一步来 一 matlab中添加FULLBNT FU
  • java 导出Excel设置宽度自适应

    private static void setAutoColumnWidth XSSFSheet sheet int maxColumnNum try 获取当前列的宽度 然后对比本列的长度 取最大值 for int columnNum 0
  • 卷积神经网络的实际应用,卷积神经网络毕业论文

    旷视首席科学家 知名AI学者孙剑博士去世 他在该领域有哪些贡献 旷视首席科学家 知名AI学者孙剑博士去世 他在该领域有哪些贡献 在学术层面 孙老师是计算机视觉领域全世界最知名 最顶级的一批科学家 他的工作ResNet 12w citatio
  • 西安华为OD面试经验(德科)

    背景 本科某双非邮电软件专业 二战冲985失败 随便写的简历挂boss上 hr电话联系帮我约的机考 华为od网络风评很差 这一点还是hr告诉我这个初入社会的学生党的 态度挺诚恳 我也只是本着随便试试的态度去的 机考是5 7号 技术一面是5
  • SSC 扩频时钟技术(1)

    SSC 全称Spread Spectrum Clocking 即扩频时钟 由于信号的辐射主要是由于信号的能量过于集中在其载波频率位置 导致信号的能量在某一频点位置处的产生过大的辐射发射 因此为了进一步有效的降低EMI辐射 芯片厂家在设计芯片
  • 通过 window.opener.document 获取弹窗弹窗或打开页面中的数据并回显

    通过 window opener document 获取弹窗弹窗或打开页面中的数据并回显 1 html 示例 写法 td td
  • tcp客户/服务器回射程序之五-----用shutdown函数解决在批量方式下所引起的问题

    tcp客户 服务器回射程序之五 用shutdown函数解决在批量方式下所引起的问题 当我们把标准输出和标准输入重定向到文件来运行新的客户程序时 却发现输出文件总是小于输入文件 而对于回射服务器而言 它们应该相等 问题的起因在于我们对于EOF
  • python十个实战项目

    python项目练习一 即时标记 python项目练习二 画幅好画 python项目练习三 万能的XML python项目练习四 新闻聚合 python项目练习五 虚拟茶话会 python项目练习六 使用CGI进行远程编辑 python项目
  • 目标检测算法之YOLOv2损失函数详解

    前言 前面的YOLOv2推文详细讲解了YOLOv2的算法原理 但官方论文没有像YOLOv1那样提供YOLOv2的损失函数 难怪Ng说YOLO是目标检测中最难懂的算法 今天我们尝试结合DarkNet的源码来分析YOLOv2的损失函数 关键点回