SSD-Single Shot Detector

文章目录

  • SSD模型
    • 主要改进点
    • 模型说明
  • 训练
    • Choosing scales and aspect ratios for default boxes
    • Matching strategy
    • Training objective
    • Hard negative mining
    • Data augmentation
  • 实验结果
    • 基本网络参数
    • PASCAL VOC2007
    • 模型消融实验
    • PASCAL VOC2012
    • COCO
    • 推理速度比较

前面提到了两种经典的目标检测算法:one stage的yolo系列,还有就是two stage的RCNN系列。这里两种算法特点非常分明:

  • RCNN系列的模型复杂,运算量大,但是可以达到比较高的准确率。Faster RCNN的模型可以达到mAP=78.8。
  • YOLO系列去掉了候选框的过程,直接通过网络将目标的box和分类预测出来。速度较RCNN快了非常多,但是在准确率上会有所下降。

而SSD在2016年提出的时候,就是想综合YOLO的速度和RCNN的准确率。但是好像在YOLO2,也就是YOLO9000的时候就已经超过了SSD。当然SSD后面也有不少的改进版本,这里先说说这个SSD的原始版本。

作为平衡准确率和推理速度FPS的模型,SSD的性能是:For 300 × 300 input, SSD achieves 74.3% mAP on VOC2007 test at 59 FPS on a Nvidia Titan X。也就是对于一个300 * 300的输入图像,可以达到74.3的mAP准确率,而且还有59FPS。

SSD模型

SSD应该是可以看成是一个one stage的目标检测模型,没有分成候选框+预测的路子,而是通过一组卷积层来直接预测box和类别。但是综合了Faster RCNN中的anchor的概念,而且还融合了FPN或者是SPP这种金字塔的概念,使用多中分辨率的featrue map去做预测。这样就可以比较好的检测出小尺寸和大尺寸的物体。 Our approach, named SSD, discretizes the output space of bounding boxes into a set of default boxes over different aspect ratios and scales per feature map location. At prediction time, the network generates scores for the presence of each object category in each default box and produces adjustments to the box to better match the object shape. Additionally, the network combines predictions from multiple feature maps with different resolutions to naturally handle objects of various sizes.

主要改进点

在论文的第一章里,提到了几个关键的改进点:Our improvements include using a small convolutional filter to predict object categories and offsets in bounding box locations, using separate predictors (filters) for different aspect ratio detections, and applying these filters to multiple feature maps from the later stages of a network in order to perform detection at multiple scales.

这一段主要说的是三个改进点:

  • using a small convolutional filter to predict,也就是用一些卷积核作为卷积层去预测box的4个值,还有类别。在yolo和rcnn中,基本上都是通过一个全连接层去做预测的,在SSD中,增加了很多的卷积层来做预测。
  • using separate predictors (filters) for different aspect ratio detections。采用不同尺寸的detection,实际上就是和anchor类似,在featrue map的某个location点,使用不同的尺寸进行预测。
  • perform detection at multiple scales。不同的卷积层就是不同尺度和分辨率的特征图,就是SPP和FPN中的金字塔的概念。

在接下来的内容中详细说说这些改进点。

第一章的最后,论文提出了论文的贡献点,也就是改进后的效果:

  • We introduce SSD, a single-shot detector for multiple categories that is faster than the previous state-of-the-art for single shot detectors (YOLO), and significantly more accurate, in fact as accurate as slower techniques that perform explicit region proposals and pooling (including Faster R-CNN). 这就是提到了在速度和准确率中取得了比较好的平衡。
  • The core of SSD is predicting category scores and box offsets for a fixed set of default bounding boxes using small convolutional filters applied to feature maps. 采用小的卷积核,也就是3 * 3的卷积核进行预测。
  • To achieve high detection accuracy we produce predictions of different scales from feature maps of different scales, and explicitly separate predictions by aspect ratio. 多尺度预测。
  • These design features lead to simple end-to-end training and high accuracy, even on low resolution input images, further improving the speed vs accuracy trade-off.
  • Experiments include timing and accuracy analysis on models with varying input size evaluated on PASCAL VOC, COCO, and ILSVRC and are compared to a range of recent state-of-the-art approaches.

模型说明

论文给出了SSD模型与YOLO v1模型的对比图:

论文对网络的基本描述为:
The SSD approach is based on a feed-forward convolutional network that produces a fixed-size collection of bounding boxes and scores for the presence of object class instances in those boxes, followed by a non-maximum suppression step to produce the final detections. The early network layers are based on a standard architecture used for high quality image classification (truncated before any classification layers), which we will call the base network。

  • 我理解SSD模型可以分成三个部分:

    • 第一部分是卷积特征提取部分,这部分采取的是VGG-16的backbone。但是没有用VGG-16的最后三个全连接层。也就是图中标识的Conv5_3,对应了VGG-16中的第五组卷积层的最后一个卷积层。
    • 第二部分就是6个卷积层,每个卷积层之间都是通过3 * 3卷积核,再配合1 * 1的卷积核进行降维。还有就是配合max_pooling进行尺度的下采样。这部分就是上文提到的通过3 * 3卷积核进行预测,还有就是SPP和FPN的金字塔过程。
    • 最后就是一个NMS的非极大值抑制,去除大量无用的bounding box。
  • Convolutional predictors for detection。在上图中与YOLO的模型结构对比图中,YOLO最后是采用一个全连接层,生成了一个7 * 7 * 30的output,这个output中,每个1 * 1 * 30的表示了两个bounding box的内容,所以总共是预测了98个框。而在SSD中,论文中提到,不是使用全连接层来进行预测,而是通过一个小的卷积核来进行预测,生成相对应的预测结果。在上图中,每个横着的线就是一个3 * 3的卷积核。直接通过卷积核来生成最终的预测结果。

  • Multi-scale feature maps for detection。论文中的这个部分描述的就是第二部分,6个卷积层,用于提取不同分辨率的特征图,用于检测。SSD使用6个不同特征图检测不同尺度的目标。低层预测小目标,高层预测大目标。因为高层的感受野要大得多,最后的那个卷积层就是1 * 1,感受野就就是整个图像了,拿来预测整个图像的类别了。

    • 其中第一个featrue layer是利用了VGG中的第4组最后一个卷积层的输出,也就是Conv4_3。这个featrue map的尺寸是38 * 38 * 512。这个featrue map直接通过一个3 * 3 * (4*(classes+4))的卷积层进行卷积计算。那么输出的featrue map的channel数就是4*(classes+4),比如是PASCAL VOC的数据,classes=20,那么输出的通道数就是24 * 4 = 96个通道。而输出的尺寸大小为38 * 38,也就是说在第一个featrue layer的预测(predictor)的输出尺寸为38 * 38 * 96。其中每一个1 * 1 * 96的值可以理解为3 * 3的卷积层在这个location的预测结果。总共有 38 * 38 = 1444个location,每个location有 k k k个预测结果,最上面的这个classifier的 k = 4 k=4 k=4,总共5776个预测结果(1),每个预测结果包含了24个值(20classes + [x, y, w, h]),这个bounding box的四元组[x, y, w, h]是一个相对值,相对default box的位置,这个default box也称作priorbox,也就是先验框,在后面会提到。For a feature layer of size m × n with p channels, the basic element for predicting parameters of a potential detection is a 3 × 3 × p small kernel that produces either a score for a category, or a shape offset relative to the default box coordinates. At each of the m × n locations where the kernel is applied, it produces an output value. The bounding box offset output values are measured relative to a default box position relative to each feature map location。
    • 在上图中,从上往下数,总共有6根横线,每根横线就表示一个尺度的3 * 3预测classifier。每个尺度的classifier是不相同的,从上往下的k的取值是 [ 4 , 4 , 6 , 6 , 6 , 4 ] [4,4,6,6,6,4] [4,4,6,6,6,4],没写的就是和上面的一根横线相同,所以总共的预测结果是 38 ∗ 38 ∗ 4 + 19 ∗ 19 ∗ 6 + 10 ∗ 10 ∗ 6 + 5 ∗ 5 ∗ 6 + 3 ∗ 3 ∗ 4 + 1 ∗ 1 ∗ 4 = 8732 38 * 38 * 4 + 19 * 19 * 6 +10 * 10 * 6 + 5 * 5 * 6 + 3 * 3 * 4 + 1 * 1 * 4 = 8732 38384+19196+10106+556+334+114=8732个预测结果。再对这个8732个预测结果进行NMS,去除一些不必要的预测框。
  • Default boxes and aspect ratios。在上一条已经说到了,每个featrue map的每个元素(cell)都会做一个预测结果。其实我理解就是一个3 * 3 * (classes + 4)的卷积核对一个38 * 38的特征图进行卷积计算,就会得到一个38 * 38 * (classes + 4)的特征输出图。用四个这样的卷积图,那就是上一条说的有4个不同的卷积结果了。At each feature map cell, we predict the offsets relative to the default box shapes in the cell, as well as the per-class scores that indicate the presence of a class instance in each of those boxes. Specifically, for each box out of k at a given location, we compute c class scores and the 4 offsets relative to the original default box shape. This results in a total of (c + 4)k filters that are applied around each location in the feature map, yielding (c + 4)kmn outputs for a m × n feature map.

    右图中的虚线框,指的就是4个不同的卷积核对于某个特征图中的location,或者说是cell的bounding box的预测结果: [ Δ x , Δ y , Δ w , Δ h ] [\Delta x, \Delta y, \Delta w, \Delta h] [Δx,Δy,Δw,Δh],都是相对于defalut box的偏移量预测。
    而且,Ground Truth中尺寸比较大的物体,比如dog,就需要在更高层,也就是featrue map更小,语义信息更强的层来预测,也就是红色预测框,而且这个featrue map的尺寸只有4 * 4(eg.)。

训练

上面说的是网络结构,接下来就是论文提出的训练方法。简单来说,就是怎么使用Ground Truth的标签来训练模型。

Choosing scales and aspect ratios for default boxes

在上面说模型结构的章节中提到了,通过模型预测得到的结果都是偏移量,既然是偏移量,肯定是针对某个框的偏移量,那么这个框就是论文中提到的default box,或者叫做prior box,先验框。

论文在这个小节,就描述了怎么来在图像中确认先验框的大小,纵横比和中心位置。

  • 首先是大小,或者是尺寸。这个是通过下面的公式来计算的:
    s k = s m i n + s m a x − s m i n m − 1 ( k − 1 ) , k ∈ [ 1 , m ] s_k=s_{min}+\frac{s_{max}-s_{min}}{m-1}(k-1), k\in [1,m] sk=smin+m1smaxsmin(k1),k[1,m]
    其中, m m m为总共新增的卷积层(featrue layer),在论文中 m = 6 m=6 m=6 k k k表示第几个layer, s k s_k sk就为这个layer的尺寸,论文中的 s m a x = 0.9 s_{max}=0.9 smax=0.9 s m i n = 0.2 s_{min}=0.2 smin=0.2。这个 s k s_k sk计算出来表示的是输入尺寸的比例。而且根据 k k k的增加,这个default box的尺寸就越大。因为越高层的感受野越大,所以这个default box也必须要大一些,才能有好的预测结果。

    • 论文中在实验的章节提到,We set default box with scale 0.1 on conv4_3。也就是六个featrue map中,在VGG中的那个的scale设置为0.1。那么,如果输入尺寸是300 * 300的图像(SSD300)的话,这个featrue map的default box的尺寸就是 s 1 = 30 s_1 = 30 s1=30.
    • 从第二个featrue layer开始,也就是图中的FC6。这个featrue layer,设置成 k = 1 k=1 k=1,那么 s 1 = 0.2 s_1=0.2 s1=0.2,default box的尺寸就为60。因为第一层已经去掉了,所以 m = 5 m = 5 m=5。整个 s = [ 30 , 60 , 112 , 165 , 217 , 270 ] s = [30, 60, 112, 165, 217, 270] s=[30,60,112,165,217,270]
  • 大小定好了,然后就是纵横比。We impose different aspect ratios for the default boxes, and denote them as a r a_r ar。论文中,这个 a r ∈ { 1 , 2 , 3 , 1 2 , 1 3 } a_r \in \{1,2,3,\frac{1}{2}, \frac{1}{3}\} ar{1,2,3,21,31},然后根据不同的纵横比和上面的 s k s_k sk,可以将default box的尺寸固定下来了,width是 w k = s k a r w_k = s_k\sqrt{a_r} wk=skar h k = s k / a r h_k = s_k/\sqrt{a_r} hk=sk/ar 。然后对于纵横比为1的框,增加了一个尺寸 s k ′ = s k s k + 1 s_k^{'}=\sqrt{s_ks{k+1}} sk=sksk+1 ,也就是说,每个featrue layer的default box都有6种不同尺寸。

  • 尺寸好了之后,然后就是位置。在论文中,一个矩形框的位置是通过定义其中心位置来确定的。论文中给出的中心位置坐标为: ( i + 0.5 ∣ f k ∣ , j + 0.5 ∣ f k ∣ ) (\frac{i+0.5}{|f_k|}, \frac{j+0.5}{|f_k|}) (fki+0.5,fkj+0.5)。i和j都是指的某个特征层,featrue layer中的索引,也就是第i行第j列。 ∣ f k ∣ |f_k| fk为featrue layer的尺寸,也就是[38,19, 10, 5, 3, 1]。也就是每个格子的中心点坐标。

  • 这样,每个格子有了6种不同的尺寸+纵横比组合,总共也是8732个default box。配置3 * 3的卷积核做的预测的 Δ x \Delta x Δx等,就可以得到8732个预测值。再通过NMS进行过滤。

Matching strategy

在目标检测算法的训练过程中,最重要的就是计算损失值,那么计算损失值的话,对于某个预测值,对应的会有一个default box(default box + 预测的偏移量才是最终的值)。这个default box和谁去计算损失呢?也就是和哪个Ground Truth进行损失计算的问题。也被称作是Matching strategy。论文中关于这个的描述为:We begin by matching each ground truth box to the default box with the best jaccard overlap (as in MultiBox [7]). Unlike MultiBox, we then match default boxes to any ground truth with jaccard overlap higher than a threshold (0.5). This simplifies the learning problem, allowing the network to predict high scores for multiple overlapping default boxes rather than requiring it to pick only the one with maximum overlap.

也就是说,首先是只把与Ground Truth的交并比最高的default box拿出来当做为预测值,也就是哪里计算损失值。但是,论文针对这个策略做了一下改进,也就是说把与Ground Truth的交并比高于某个阈值的default box全部拿出来,来进行损失计算。这样效果更好。

Training objective

既然把所有的高于某个交并比阈值的default box全部拿出来做损失计算,那么势必要改进一下损失计算函数,损失函数为:

  • 首先设 x i j p = { 1 , 0 } x_{ij}^p=\{1,0\} xijp={1,0}来表示在第p个类别中,第i个default box和第j个ground truth的匹配程度,非0即1。根据上面的匹配策略,一个ground truth可能会有多个default box匹配到,所以 ∑ i x i j p ≥ 1 \sum_i{x_{ij}^p} \ge 1 ixijp1
  • 整体的损失函数就为检测损失和分类损失之和,并通过权重参数 α \alpha α来平衡。The overall objective loss function is a weighted sum of the localization loss (loc) and the confidence loss (conf):
    L ( x , c , l , g ) = 1 N ( L c o n f ( x , c ) + α L l o c ( x , l , g ) ) L(x,c,l,g)=\frac{1}{N}(L_{conf}(x,c) + \alpha L_{loc}(x,l,g)) L(x,c,l,g)=N1(Lconf(x,c)+αLloc(x,l,g))
    • N就是与某个类的Ground Truth匹配到的default box的总数,如果为0,则损失L=0。表示这个default box对应的区域为背景区域。
    • x为上面提到的是否匹配因子。
    • L c o n f ( x , c ) L_{conf}(x,c) Lconf(x,c)为分类损失
    • L l o c ( x , l , g ) L_{loc}(x,l,g) Lloc(x,l,g)为检测损失
    • α \alpha α为权重参数
  • 检测损失的计算方法为:
    • 使用Smooth L1 loss计算损失。
    • l为预测框,g为Ground Truth
    • cx和cy为bounding box的中心点
    • w和h分别代表width和height
  • 分类损失的计算方法为,这个就不细说了:

Hard negative mining

After the matching step, most of the default boxes are negatives, especially when the number of possible default boxes is large. 论文中提到,和其他的这种先验框的目标检测算法类似,大量的先验框是无法达到与某个Ground Truth的交并比超过阈值的,所以大量的先验框是作为negative存在的。也就是会用到Hard negative mining,用negative来训练模型。而且如果positive和negative不平衡的话,模型无法学习的很好。Instead of using all the negative examples, we sort them using the highest confidence loss for each default box and pick the top ones so that the ratio between the negatives and positives is at most 3:1. We found that this leads to faster optimization and a more stable training.

也不是使用所有的negative,而是在这些negative中,根据置信度来进行排序,选出最高的一些negative default box,使得negative:positive=3:1。

Data augmentation

简单来说就是做了一个随机裁剪,直接贴原文,不细说。
To make the model more robust to various input object sizes and
shapes, each training image is randomly sampled by one of the following options:

  • Use the entire original input image.
  • Sample a patch so that the minimum jaccard overlap with the objects is 0.1, 0.3, 0.5, 0.7, or 0.9.
  • Randomly sample a patch.

The size of each sampled patch is [0.1, 1] of the original image size, and the aspect ratiois between 1/2 and 2. We keep the overlapped part of the ground truth box if the center of it is in the sampled patch. After the aforementioned sampling step, each sampled patch is resized to fixed size and is horizontally flipped with probability of 0.5, in addition to applying some photo-metric distortions similar to those described in [14].

实验结果

基本网络参数

这里直接贴原文,不细说。

Our experiments are all based on VGG16 [15], which is pre-trained on the ILSVRC CLS-LOC dataset [16]. Similar to DeepLab-LargeFOV [17], we convert fc6 and fc7 to convolutional layers, subsample parameters from fc6 and fc7, change pool5 from 2 × 2 − s2 to 3 × 3 − s1, and use the a trous algorithm [18] to fill the ”holes”. We remove all the dropout layers and the fc8 layer. We fine-tune the resulting model using SGD with initial learning rate 10−3, 0.9 momentum, 0.0005 weight decay, and batch size 32.

PASCAL VOC2007

这里提到了第一个featrue layer的尺寸为输入的0.1之外,还提到了3个featrue map只使用了三种尺寸(就是上面的k=4的情况),没有用到纵横比为1:3和3:1的: For conv4_3, conv10_2 and conv11_2, we only associate 4 default boxes at each feature map location – omitting aspect ratios of 1/3 and 3.

其他的内容: Since, as pointed out in [12], conv4 3 has a different feature scale compared to the other layers, we use the L2 normalization technique introduced in [12] to scale the feature norm at each location in the feature map to 20 and learn the scale during back propagation. We use the 1 0 − 3 10^{−3} 103 learning rate for 40k iterations, then continue training for 10k iterations with 1 0 − 4 10^{−4} 104 and 1 0 − 5 10^{−5} 105

结果如下:

错误情况分析:

模型消融实验

  • Effects of various design choices and components on SSD performance

    • 数据增强很重要
    • 不同的default box尺寸是有效的,增加了1/2, 2, 1/3, 3之后对提升准确率有帮助。
    • Atrous,扩张卷积可以提升速度。
  • Effects of using multiple output layers

    • 从多尺度的featrue map中做预测是比较有帮助的
    • 但是需要比较好的处理图像边缘。

PASCAL VOC2012

COCO

推理速度比较

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/206889.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Netfilter中的NAT

目录 前瞻 SNAT和DNAT SNAT DNAT 实验 前瞻 NAT: (network address translation),支持PREROUTING,INPUT,OUTPUT,POSTROUTING四个链 NAT分为SNAT和DNAT SNAT:支持POSTROUTING, INPUT&…

Element UI 实战:跨页保存表格选中状态与判断状态可选性的高效方案

引言 在前文中,我们曾深入探讨了在修改数据后跨页时提醒用户可能丢失数据的问题。虽然这种方式对于一些场景是足够的,但当涉及选择框时,我们需要更为智能和高效的解决方案。在本文中,我们将分享一种基于 Element UI 的实际案例&am…

Java封装讯飞星火大模型历险记

问题描述与分析 现状描述与目标 在使用讯飞星火大模型API的过程中,API的返回结果在可以在其他线程中进行分次打印,但是在main方法中直接打印返回结果,显示为空。这种情况下不利于二次封装,希望在main方法中获取完整的API返回结果…

【开源视频联动物联网平台】帧率、码率和分辨率

帧率、码率和分辨率是视频和图像处理中的重要概念,它们直接影响到视频的带宽占用和显示效果。在进行视频项目时,根据应用需求对视频参数进行调整是必要的,因此了解这些参数的具体含义和指标是非常重要的。 在进行视频项目时,需要…

实战Flask+BootstrapTable后端传javascript脚本给前端实现多行编辑(ajax方式)

相信看到此文的朋友们一定会感到庆幸,总之我是用了两天死磕,才得到如下结果,且行且珍惜,祝好各位! 话不多说,有图有源码 1.看图 2.前端实现页面 <!DOCTYPE html> {% from "common/_macro.html" import static %} <html> <meta charset"utf-8&…

Python开发运维:PyMongo 连接操作 MongoDB

目录 一、理论 1.PyMongo模块 2.Mongo Shell 二、实验 1. Windows11安装MongoDB 7.0.4 2.Windows11安装MongoDB Shell 2.1.0 3.PyMongo 连接 MongoDB&#xff08;无密码方式&#xff09; 4.PyMongo 连接 MongoDB&#xff08;有密码方式&#xff09; 5.PyMongo 操作 Mo…

rabbitmq消息队列实验

实验目的&#xff1a;实现异步通信 实验条件&#xff1a; 主机名 IP地址 组件 test1 20.0.0.10 rabbitmq服务 test2 20.0.0.20 rabbitmq服务 test3 20.0.0.30 rabbitmq服务 实验步骤&#xff1a; 1、安装rabbitmq服务 2、erlang进入命令行&#xff0c;查看版本 …

zookeeper集群和kafka集群

&#xff08;一&#xff09;kafka 1、kafka3.0之前依赖于zookeeper 2、kafka3.0之后不依赖zookeeper&#xff0c;元数据由kafka节点自己管理 &#xff08;二&#xff09;zookeeper 1、zookeeper是一个开源的、分布式的架构&#xff0c;提供协调服务&#xff08;Apache项目&…

91基于matlab的以GUI实现指纹的识别和匹配百分比

基于matlab的以GUI实现指纹的识别和匹配百分比,中间有对指纹的二值化&#xff0c;M连接&#xff0c;特征提取等处理功能。数据可更换自己的&#xff0c;程序已调通&#xff0c;可直接运行。 91M连接 特征提取 (xiaohongshu.com)

国产linux单用户模式破解无密码登陆 (麒麟系统用户登录密码遗忘解决办法)

笔者手里有一批国产linu系统&#xff0c;目前开始用在日常的工作生产环境中&#xff0c;我这个老程序猿勉为其难的充当运维的或网管的角色。 国产linux系统常见的为麒麟Linux&#xff0c;统信UOS等&#xff0c;基本都是基于debian再开发的linux。 问题描述&#xff1a; 因为…

Windows系列:windows server 2016 下域环境的搭建(完整版)

windows server 2016 下域环境的搭建&#xff08;完整版&#xff09; windows server 2016 下域环境的搭建在搭建之前简单介绍一下基础知识&#xff1a;一、环境介绍 &#xff1a;1.这里用拓扑图进行展示&#xff1a;2.所有环境配置如下 二、搭建主域&#xff1a;一. 创建主域1…

天眼销:精准的企业名录

企业名录的重要性&#xff0c;对于销售而言都是极其重要的。本期为家人们分享如何正确挑选出优质的企业名录渠道&#xff0c;避免走一些弯弯坑坑。 为了有效利用企业名录进行客户开发&#xff0c;您需要关注信息的准确性、可提供的资源数量以及信息的时效性。能否根据您的需求…

统信UOS和vue.js的一个兼容问题

作者&#xff1a;朱金灿 来源&#xff1a;clever101的专栏 为什么大多数人学不会人工智能编程&#xff1f;>>> 这事到现在说起还很奇怪&#xff0c;在UOS20&#xff08;硬件为华为鲲鹏服务器&#xff0c;arm架构&#xff0c;g8.3&#xff09;上部署uve.js&#xff0…

Windows10中在Visual Studio2017中VC++项目安装使用GoogleTest库

Windows10中在Visual Studio2017中VC项目安装使用GoogleTest库 在Windows10中VC程序中可以不用自己手动下载GoogleTest源代码&#xff0c;可以直接通过【项目】-> 【管理 NuGet 程序包】-> 【浏览】-> 搜索 googletest&#xff0c; 找到Microsoft.googletest.v140.wi…

LabVIEW开发自适应降噪ANC

LabVIEW开发自适应降噪ANC 在许多情况下&#xff0c;信号很嘈杂&#xff0c;必须消除噪声。自适应降噪&#xff08;ANC&#xff09;是可用于消除信号噪声的主要实时方法之一。可以使用LabVIEW自适应滤滤器工具包来设计ANC应用程序。本文介绍使用自适应筛选器工具包的ANC的一些…

GAN:WGAN前作

WGAN前作&#xff1a;有原则的方法来训练GANs 论文&#xff1a;https://arxiv.org/abs/1701.04862 发表&#xff1a;ICLR 2017 本文是wgan三部曲的第一部。文中并没有引入新的算法&#xff0c;而是标是朝着完全理解生成对抗网络的训练动态过程迈进理论性的一步。 文中基本是…

Neo4j 程序开发 JavaAPI 嵌入式开发模式(头歌)

文章目录 第1关&#xff1a;JavaAPI 嵌入式开发模式任务描述相关知识创建 Neo4j 数据库启动 Neo4j 数据事务创建节点创建节点关系将创建的数据库设置为默认数据库 编程要求测试说明答案代码修改配置文件&#xff0c;更改默认 Neo4j 数据库代码文件 第1关&#xff1a;JavaAPI 嵌…

C#开发的OpenRA游戏之属性SelectionDecorations(14)

C#开发的OpenRA游戏之属性SelectionDecorations(14) 前面分析选择类时,还有一个功能,就是把选中物品的状态和生命值显示出来。 它是通过下面的函数来实现: protected override IEnumerable<IRenderable> RenderSelectionBars(Actor self, WorldRenderer wr, bool …

网络安全应急响应-Server2228(环境+解析)

网络安全应急响应 任务环境说明: 服务器场景:Server2228(开放链接)用户名:root,密码:p@ssw0rd123

【稳定检索|投稿优惠】2024年生物神经工程与健康大数据国际会议(ICBNHBD 2024)

2024年生物神经工程与健康大数据国际会议(ICBNHBD 2024) 2024 International Conference on Biological Neuroengineering and Health Big Data(ICBNHBD) 一、【会议简介】 2024年生物神经工程与健康大数据国际会议(ICBNHBD 2024)&#xff0c;这场科学盛宴&#xff0c;会议在中…