YOLT论文精读

引言

很早之前,在本校老师的带领下接触到了目标检测领域。在卫星遥感图像方面有一篇经典的论文《You Only Look Twice: Rapid Multi-Scale Object Detection In
Satellite Imagery》。科研小白一开始反复看了几遍也没弄懂,决定写博客来加深自己的理解。

摘要

文章摘要写的很简洁:
先说明了当时研究大尺度卫星遥感图像的一些问题和挑战。

  1. 每一张图像拥有巨大的像素信息,且涵盖了广袤的地理尺度
  2. 实际上我们感兴趣的目标非常小,以致于英语中使用tiny形容

文章说在超过64km2的地理范围,超过2.5亿像素中识别大约10像素的物体。
举个现实🌰,在整个天安门广场(44km2)要找到一个足球,听起来确实有点抽象。

上述的挑战注定了使用传统的计算机视觉方案不能很好地应用其中。
然后,作者给出了自己的pipeline——YOLT(You Only Look Twice)。

pipeline,中文意为管线,意义等同于流水线。这里可以理解为综合解决方案。

YOLT可以输入随意大小的卫星图像并以超过0.5km2/h的速度进行检测。使用原始分辨率的巨大测试图像进行交通工具定位可以得到F1 > 0.8的结果,此外作者还研究了分辨率和物体大小对模型的影响。

1 简介

文章先列举了当时计算机视觉的发展成果。得益于卷积神经网络在imageNet上的大放异彩,目标检测领域以VOC和COCO数据集为基准,出现了Faster-RCNN、SSD和YOLO等模型。简单地介绍了三种模型的区别和特点,选择了速度和准度更加平衡、可迁移性更强的YOLO作为模型的baseline,当时使用的是YOLOv2。
然后作者强调了在传统的目标检测中深度学习已屡见不鲜,但是对于卫星图像有以下四个挑战:

  1. 小的空间尺度:
    主要是强调在巨大的卫星图中感兴趣的目标很小。

卫星中表示分辨率的单位是GSD(ground sample distance),利用相似成比例计算图像中一像素代表多少空间距离,一般值越大分辨率越高

  1. 旋转不变性
    在高空的图像可能会从不同的角度拍摄,e.g., 对于轮船存在0到360°的观察角度,而在imageNet数据集上树木几乎都是竖直的
  2. 训练数据少
    原因是大型的卫星图像不宜公开,尽管有想SpaceNet1这样的项目试图改善这个问题
  3. 超大分辨率
    超高分辨率输入图像是巨大的(甚至数亿像素),因此简单地降低采样到大多数算法所需的输入大小(几百像素)是不可能的。

YOLT的工作是分别解决了这些问题,同时利用从传感器到物体的相对恒定的距离(比如常见的400km)与面向最低点的传感器相结合,使物体的像素尺寸保持一致。
第2节进一步深入介绍了应用于卫星图像时标准算法所面临的挑战。这项工作的其余部分将被分解,以描述建议的贡献如下。为了解决小而密集的集群,第3.1节描述了一种新的、更细粒度的网络体系结构。第3.2节和3.3节详细介绍了我们在原生分辨率下拆分、评估和重组任意大小的大型测试图像的方法。关于旋转不变性和小标记训练数据集大小,第4节描述了数据增强和大小要求。最后,在第6节中详细讨论了算法的性能。

2 相关工作

这里提供一下译文,不做过多阐述

深度学习方法已被证明可用于地面物体检测,尽管当前的技术对于俯视图像应用来说通常仍不是最优的。例如,成群的小物体(如鸟群)就是一种挑战 [10],部分原因是上述三种卷积网络方法(YOLO、SDD、Faster-RCNN)的多个下采样层。此外,这些多个下采样层导致物体区分的特征相对粗糙;如果感兴趣的物体只有几个像素,这会带来问题。例如,考虑默认的 YOLO 网络架构,它将下采样倍数设为 32 并返回 13 × 13 的预测网格;这意味着如果物体质心相距小于 32 个像素,则物体区分会出现问题。因此,我们实现了一个具有更密集预测网格的独特网络架构。它通过产生更细粒度的特征来帮助区分类别,从而提高性能。它更精细的预测网格还允许对较小的物体和更密集的簇进行分类。
物体检测算法难以处理卫星图像的另一个原因是,它们难以概括具有新的或不寻常的长宽比或配置的物体 。由于物体可以有任意方向,这种有限的旋转不变性范围很麻烦。我们的方法通过旋转和数据增强来解决这一复杂问题。具体来说,我们围绕单位圆旋转训练图像,以确保分类器与物体方向无关,并且还随机缩放 HSV(色相-饱和度-值)中的图像,以提高分类器对不同传感器、大气条件和照明条件的鲁棒性。
在高级物体检测技术中,网络在训练和测试时可以看到整个图像。虽然这极大地提高了背景区分度,因为网络为每个物体编码了上下文(背景)信息,但典型硬件(具有 12GB RAM 的 NVIDIA Titan X GPU)上的内存占用对于 256 兆像素的图像来说是不可行的。
我们还注意到,大尺寸卫星图像阻碍了解决上述一些问题的简单方法。例如,对图像进行上采样以确保感兴趣的对象足够大且足够分散以适应标准架构是不可行的,因为这种方法也会使运行时间增加很多倍。同样,在图像上运行滑动窗口分类器来搜索感兴趣的对象很快就会变得难以计算,因为每个对象大小都需要多个窗口大小。
从透视角度来看,如果目标是 DigitalGlobe 图像中的 10 米长船,则必须评估超过一百万个滑动窗口剪切。我们的应对措施是利用快速物体检测算法来评估卫星图像,结合在合理大小的图像芯片(约 200 米)上进行局部图像插值和多尺度探测器集合。
为了展示卫星图像分析的挑战,我们训练了一个具有标准网络架构(13×13 网格)的 YOLO 模型,以识别 COWC 俯视图图像数据集 [8] 中 416×416 像素剪切块中的汽车(有关此数据集的更多详细信息,请参阅第 4 节)。由于对测试图像进​​行了 100 倍的下采样,因此使用此网络对大型测试图像(见图 2)进行简单评估会产生 ∼ 100% 的假阳性率。即使是适当大小的图像片段也存在问题(再次参见图 2),因为标准 YOLO 网络架构无法区分质心相距小于 32 像素的物体。因此,即使将注意力限制在小剪切块上,使用标准架构在高密度区域中的性能通常也很差

3 YOLT模型

针对上述提及的传统模型的局限性,YOLT主要的解决方案如下
在这里插入图片描述
第一个局限是由于物体可以有任意方向,难以识别具有新的或不寻常的长宽比,又或者是特定配置的物体。
解决方案是通过通过旋转和数据增强来解决这一复杂问题。具体来说,围绕单位圆旋转训练图像,以确保分类器与物体方向无关,并且还随机缩放 HSV(色相-饱和度-值)中的图像,以提高分类器对不同传感器、大气条件和照明条件的鲁棒性。
第二个局限是模型难以处理像鸟群这样的小而成群的目标。我们实现了一个具有更密集预测网格的独特网络架构。它通过产生更细粒度的特征来帮助区分类别,从而提高性能。它更精细的预测网格还允许对较小的物体和更密集的簇进行分类。此外,还可以通过上采样来丰富小目标的特征,以及使用多尺度的集成检测器进行检测。
第三个局限是因为网络具有多重的下采样,使用相对粗糙的特征去预测边界框会识别不到小目标。解决方案和第二个一样。
第四个局限是原始模型最大的输入尺寸大约是600像素,解决方案是数据预处理采用了智能分割和后处理的重新组合。

3.1 网络架构

arch

为了降低模型粗糙度并准确检测密集物体(例如汽车或建筑物),我们实现了一个使用 22 层并按 16 倍下采样的网络架构。因此,416 × 416 像素的输入图像会产生 26 × 26 的预测网格。我们的架构受到 30 层 YOLO 网络的启发,尽管这种新架构针对小型、密集的物体进行了优化。密集网格对于机场等分散物体来说是不必要的,但对于停车场等高密度场景来说却至关重要(见图 2)。为了提高小物体的保真度,我们还包括一个Passthrough层(类似于 ResNet中的身份映射),它将最后的 52 × 52 层连接到最后一个卷积层,使检测器能够访问此扩展特征图的更细粒度特征。
除了最后一层之外的每个卷积层都进行批量归一化然后使用Leaky ReLU激活,最后一层使用线性激活。最后一层提供边界框和类别的预测,其大小为:Nf = Nboxes ×(Nclasses + 5),其中 Nboxes是每个网格的框数(默认为 5),Nclasses 是对象类别的数量。这里的公式和YOLOv1会有所区别,简单来说Nboxes就是划分的每个网格中不同形状的预测框数,Nclasses 是数据集中目标类别的数量,括号里面的5是置信度、目标的中心位置(x,y)以及检测框的长宽。

3.2 测试程序

在测试时,我们将任意大小的测试图像分割成可管理的剪切块,并通过训练过的模型输入每个剪切块。分割通过具有用户定义的箱体大小和重叠(默认为 15%)的滑动窗口进行,见图 4。
智能切片
其实,在图像切片方法上一般都是要设置overlap的,原因是为了避免有的物体因为切片切成了两半,导致识别不完整,如上图采用15%的重叠就可以比较好的保留边缘的小物体。与此同时,通过切片也起到了数据增强的作用,使得原来稀少的训练图片变多。

3.3 后处理

由于前期对图片进行了overlap的切片,就要对目标的位置进行一定的调整提供全局坐标,还要在最后的结果中对这些切片进行合并。其中,由于重叠区域可能会产生重复识别的情况,我们需要去除多余的预测框,这里作者用的是YOLO原生的NMS操作,即非极大值抑制。这个算法在目标检测领域非常有名,这里简单提一下。
算法伪代码:

# Input: 
# B = {b1, ..., bN}, list of initial detection boxes
# S = {s1, ..., sN}, corresponding detection scores
# Nt = NMS thresholdbeginD ← {}  # Initialize the output set D as emptywhile B is not empty dom ← argmax(S)  # Select the index of the highest score in SM ← bm  # Get the corresponding bounding boxD ← D ∪ {M}  # Add M to the output set DB ← B - {M}  # Remove M from the list Bfor bi in B doif iou(M, bi) ≥ Nt then  # If the IoU between M and bi is greater than or equal to NtB ← B - {bi}  # Remove bi from the list BS ← S - {si}  # Remove the score si from Send ifend forend whilereturn D  # Return the final list of selected bounding boxes
end

e.g.,
假设有6个矩形框,根据分类器类别分类概率做排序,从小到大分别属于车辆的概率分别为A<B<C<D<E<F。
(1) 从最大概率矩形框F开始,分别判断A、B、C、D、E与F的重叠度IOU是否大于某个设定的阈值;
(2) 假设B、D与F的重叠度超过阈值,那么就扔掉B、D;并标记第一个矩形框F,是我们保留下来的。
(3) 从剩下的矩形框A、C、E中,选择概率最大的E,然后判断A、C与E的重叠度,重叠度大于一定的阈值,那么就扔掉;并标记E是我们保留下来的第二个矩形框。
(4) 重复这个过程,找到所有被保留下来的矩形框。

4 训练数据

作者说明数据集的三个来源:DigitalGlobe 卫星、Planet 卫星和空中平台。标签由每个对象的边界框和类别标识符组成。我们最初关注五个类别:飞机、船只、建筑物足迹、汽车和机场。对于尺度非常不同的对象(例如飞机与机场),在第 6.2 节中展示了使用不同尺度的两个不同检测器非常有效。
飞机、机场和船舶的原始训练数据集按计算机视觉标准来说非常小,而更大的数据集可能会提高第 6 节中详述的推理性能。模型使用随机梯度下降进行训练,并保持的许多超参数:每个网格 5 个框、初始学习率为 10−3、权重衰减为 0.0005、动量为 0.9。在单个 NVIDIA Titan X GPU 上训练需要 2-3 天。

5 测试图像

为确保评估稳健性,所有测试图像均来自与训练示例不同的地理区域。对于汽车,我们保留犹他州最大的地理区域进行测试,共计 19,807 辆测试汽车。建筑物足迹按 75/25 的训练/测试比例分割,剩下 73,778 个测试足迹。我们标记了四张机场测试图像,总共 74 架飞机。标记了四张船舶图像,共计 771 艘测试船。
我们的机场数据集较小,使用十张 Planet 图像进行测试,测试结果见表2。
在这里插入图片描述

6 物体检测结果

6.1 通用分类器物体检测结果

最初,我们尝试训练单个分类器来识别上面列出的所有五个类别,包括车辆和基础设施。我们注意到此示例中存在许多虚假的机场检测(见图 6)。
image-20240813220129336

6.2 尺度混淆缓解

有多种方法可以解决图 6 中指出的假阳性问题。回想一下第 4 节,对于这项探索性工作,我们的训练集仅包含几十个机场,比深度学习模型通常的规模要小得多。增加这个训练集的大小可能会改善我们的模型,特别是当背景变化很大时。另一种选择是使用后处理来删除任何不正确尺度的检测(例如,一个大小约为 50 米的机场)。另一种选择是简单地构建双分类器,每个相关尺度一个。
我们选择利用卫星图像中的比例信息并运行两个不同的分类器:一个针对车辆 + 建筑物进行训练,另一个仅针对机场进行训练。在下采样图像上运行第二个机场分类器对运行时性能的影响很小,因为在给定图像中,200 米的目标数量大约是 2000 米的 100 倍。

6.3 双分类器结果

对于大型验证图像,我们在两个不同的尺度上运行分类器:200 米和 2500 米。第一个尺度是为车辆和建筑物设计的,更大的尺度是针对机场等大型基础设施进行优化的。我们将验证图像分成适当大小的图像芯片,并在适当的分类器上运行每个图像芯片。来自许多图像芯片和多个分类器的无数结果被组合成一个最终图像,重叠检测通过非最大抑制合并。我们发现,检测概率阈值在 0.3 到 0.4 之间时,我们的验证图像的 F1 分数最高。
我们将真阳性定义为交并比 (IOU) 大于给定阈值。 IOU 0.5 通常用作正确检测的阈值,但如 ImageNet 的公式 5 所示,由于我们处理的是非常小的物体,因此我们为车辆选择了较低的阈值。对于 SpaceNet 建筑物足迹和机场,我们使用 IOU 0.5。
表 3 显示了每个物体类别在所有测试图像上的物体检测性能和速度。尽管训练集规模较小,但 YOLT 在机场、飞机和船只上的表现相对较好。
在这里插入图片描述
YOLT 并未针对建筑物提取进行优化,但在 SpaceNet 数据集上的表现颇具竞争力;最近的 SpaceNet 挑战赛的最高分获得了 0.692 的 F1 分数,而 YOLT 得分为 0.61,位列前三。模型以 GPU 运行推理步骤的时间来报告推理速度,速度约为每秒 50 帧。目前,预处理(即将测试图像分割成更小的剪切图)和后处理(即将结果拼接回一个全局图像)尚未完全优化,并且在 CPU 上执行,这会使运行时间增加约 2 倍。推理速度转换为运行时间不到 6 分钟即可定位华盛顿特区大小区域内的所有车辆,并且运行时间不到 2 秒即可定位该地区的机场。DigitalGlobe 的 WorldView3 卫星3 每天最多覆盖 680,000 平方公里,因此以 YOLT 推理速度,16 GPU 集群将提供对卫星图像的实时推理。

6.4 详细性能分析

这里主要是对于YOLT在不同数据集上精度和速度的表现,感兴趣的小伙伴可以自行阅读原文,不再过多阐述。

7 分辨率性能研究

COWC数据集中物体大小的一致性使得进行详细的分辨率研究成为可能。为了研究分辨率对物体检测的影响,将原始 15 厘米图像与高斯核进行卷积,并降低图像尺寸以在 [0.30、0.45、0.60、0.75、0.90、1.05、1.20、1.50、1.80、2.10、2.40、3.00] 米处创建额外的训练和测试语料库。
首先,我们在单个模型(在 0.30 米处训练)上测试多分辨率测试数据,并在图 11 中证明该模型推断到多种分辨率的能力较差。
随后,我们为每种分辨率训练一个单独的模型,总共十三个模型。仅因为我们从已标记的高分辨率 15 厘米数据中进行下采样,所以才有可能在低分辨率(例如 2.4m GSD)下创建高质量的标记数据集;通常,低分辨率数据很难以高精度进行标记。
对于大小约为 3 米的物体,我们从图 13 中观察到,物体检测性能从大小为 20 像素的物体的 F 1 = 0.92 下降到大小为 1 像素的物体的 F1 = 0.27,平均误差为 0.09。有趣的是,当物体从 20 像素缩小到 5 像素(0.15m 到 0.60m GSD)时,F1 分数仅下降约 5%。至少对于从上方看到的汽车,可以得出结论,物体大小≥5 像素的物体产生的物体检测分数为 F1 > 0.85。
图 11 的曲线比图 13 和 14 的曲线下降得快得多,说明高分辨率的单个模型不如在各个分辨率下训练的一系列模型。
图11
图 11:应用于各种分辨率的 0:3m 模型的性能。23 条细线显示每个单独测试场景的性能;这些线中的大多数都紧密聚集在平均值附近,用实心红色表示。红色带显示 ±1 STD。模型在 F1 = 0.9 处达到峰值,用于训练分辨率 0.3m,并且在使用较低分辨率数据进行评估时迅速下降;对于较高分辨率 0.15m 数据,它也会有所下降。
在这里插入图片描述
图13
图13:地面样本距离为 0.15 − 3.0 米(底部轴)的物体检测 F1 分数,对应汽车尺寸为 20 - 1 像素(顶部轴)
图14
图14::预测汽车数量与真实数量的比例,每个分辨率(底部轴)和物体像素大小(顶部轴)都有一个独特的模型。

8 结论

物体检测算法最近在 ImageNet 风格数据集中定位物体方面取得了巨大进展。然而,它们很少适合卫星图像中存在的物体大小或方向,也不是为处理数百兆像素的图像而设计的。
为了解决这些限制,我们实施了一个完全卷积神经网络管道 (YOLT),以快速定位卫星图像中的车辆、建筑物和机场。我们注意到,由于高速公路和跑道等小特征和大特征之间的混淆,组合分类器的结果很差。以不同的尺度训练双分类器(一个用于建筑物/车辆,一个用于基础设施),产生了更好的结果。
此管道产生的物体检测 F1 得分 ≈ 0.6−0.9,具体取决于类别。虽然 F1 分数可能达不到许多读者在 ImageNet 竞赛中习惯的水平,但卫星图像中的物体检测仍然是一个相对新兴的领域,并且具有独特的挑战。此外,对于监督学习方法而言,我们针对大多数类别的训练数据集相对较小,并且通过对检测进行进一步的后处理,F1 分数可能会得到改善。
我们还展示了在一个传感器(例如 DigitalGlobe)上进行训练并将我们的模型应用于不同传感器(例如 Planet)的能力。
我们表明,至少对于从上方看到的汽车,物体大小≥ 5 个像素的物体检测得分为 F1 > 0.85。检测模型能够以原始分辨率评估任意输入大小的卫星和航拍图像,并以每分钟约 30 平方公里的速度处理车辆和建筑物,以每分钟约 6000 平方公里的速度处理机场。在这种推理速度下,16 GPU 集群可以在 DigitalGlobe WorldView3 卫星馈送上提供实时推理。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小米5c解除BL锁刷机root

版权归作者所有&#xff0c;如有转发&#xff0c;请注明文章出处&#xff1a;https://cyrus-studio.github.io/blog/ 解锁BL锁 1. 下载安装 miflash_unlock&#xff1a;https://miuiver.com/miunlock/&#xff0c;登录小米账号&#xff08;需要和解锁设备绑定的账号一致&#…

进程第二部分

1.任务&#xff1a;子进程做的事情和父进程差不多&#xff08;子承父业&#xff09; 父进程创建出子进程之后&#xff0c;子进程做的事情与父进程完全不同&#xff08;自力更生&#xff09; 2.exec: int exec l(const char *path, const char *arg, ...); int exec v(const c…

指向派生类的基类指针、强转为 void* 再转为基类指针、此时调用虚函数会发生什么?

指向派生类的基类指针、强转为 void* 再转为基类指针、此时调用虚函数会发生什么&#xff1f; 1、无论指针类型怎么转&#xff0c;类对象内存没有发生任何变化&#xff0c;还是vfptr指向虚函数表&#xff0c;下面是成员变量&#xff0c;这在编译阶段就已经确定好了&#xff1b…

详解国内CRM产品

0. 结论先行 0.1 企业应该建设中台型CRM 0.1.1 CRM产品架构 CRM整个产品架构比较庞大&#xff0c;为了更好地支持所有的业务线&#xff0c;节省开发资源&#xff0c;应该建设一套中台型的CRM系统。 CRM业界常被分为5大模块去支持业务&#xff1a;营销、销售、服务、商务、合…

2024新型数字政府综合解决方案(六)

新型数字政府综合解决方案通过融合人工智能、大数据、区块链和云计算技术&#xff0c;构建了一个全方位智能化的政务平台&#xff0c;旨在提升政府服务的效率、透明度和公众参与度。该方案实现了跨部门的数据互联互通与实时更新&#xff0c;利用先进的数据分析和自动化处理技术…

使用python基于fastapi发布接口(一)

FastAPI官网地址 FastAPI基于Python 3.6+和Starlette框架,天生就带着高性能和异步的基因。 FastAPI的文档生成功能简直是开发者的福音! 你不再需要手动编写API文档,FastAPI能自动帮你搞定。 FastAPI还超级灵活,支持各种数据库和认证方式,无论是SQLite、PostgreSQL还是M…

keepalived讲解及练习

目录 1、keepalived介绍 1.1 keepalived简介 2、高可用集群 2.1 集群类型 2.2 系统可用性 2.3 系统故障 2.4 实现高可用 3、VRRP 3.1 VRRP&#xff1a;Virtual Router Redundancy Protocol 3.2 VRRP 相关术语 3.3 VRRP相关技术 4、 keepalived实验 4.1 全局配置 4…

计算机的错误计算(六十一)

摘要 解释计算机的错误计算&#xff08;六十&#xff09;中的错误计算原因。 计算机的错误计算&#xff08;六十&#xff09;中的计算可以归纳为 因此&#xff0c;我们只需要分析该算式。 例1. 已知 分析如何计算 首先&#xff0c;一个数乘以一个2&#xff0c;一般不会…

替代 SMR 算法!两步孟德尔随机化方法 TWMR 与 revTWMR 整合xQTL+GWAS数据分析基因表达与疾病的关联

全基因组关联研究&#xff08;GWAS&#xff09;是研究大型队列中基因型与表型关系的重要工具。GWAS的已知局限性主要在于从与致病变异相关的连锁不平衡区域中识别生物学机制&#xff0c;而无法直接获得基因层面的表型关联。为了解决这个问题&#xff0c;基于转录组关联研究&…

Python爬虫入门教程(非常详细)适合零基础小白

一、什么是爬虫&#xff1f; 1.简单介绍爬虫 爬虫的全称为网络爬虫&#xff0c;简称爬虫&#xff0c;别名有网络机器人&#xff0c;网络蜘蛛等等。 网络爬虫是一种自动获取网页内容的程序&#xff0c;为搜索引擎提供了重要的数据支撑。搜索引擎通过网络爬虫技术&#xff0c;将…

服务器数据恢复—IBM服务器raid5阵列硬盘出现坏道的数据恢复案例

服务器数据恢复环境&故障&#xff1a; 一台ibm x3850服务器&#xff0c;有一组由5块硬盘组建的raid5磁盘阵列&#xff0c;上层是Redhat Linux操作系统&#xff0c;部署了一个oracle数据库。 raid5阵列中2块硬盘离线&#xff0c;阵列崩溃。经过检测发现该raid中的热备盘未激…

NC 调整数组顺序使奇数位于偶数前面(一)

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 描述 输入一个长度…

Codeforces Round 966 (Div. 3)(A,B,C,D,E,F)

A. Primary Task 签到 void solve() {string s;cin>>s;bool bltrue;if(s.size()<2)blfalse;else{if(s.substr(0,2)"10"){if(s[2]0)blfalse;else if(s[2]1&&s.size()<3)blfalse; }else blfalse;}if(bl)cout<<"YES\n";else cout…

一套完整的NVR网络硬盘录像机解决方案和NVR程序源码介绍

随着网络技术的发展&#xff0c;视频数据存储的需求激增&#xff0c;促使硬盘录像机&#xff08;DVR&#xff09;逐渐演变为具备网络功能的网络视频录像机&#xff08;NVR&#xff09;。NVR&#xff0c;即网络视频录像机&#xff0c;负责网络视音频信号的接入、存储、转发、解码…

答题情况和每题得分

文章目录 1.提交答题情况1.PracticeDetailController.java2.PracticeDetailService.java3.PracticeDetailServiceImpl.java4.PracticeDetailDao.java5.PracticeDetailDao.xml6.reqSubmitSubjectDetailReq.java 7.dto1.SubjectDetailDTO.java2.SubjectDTO.java3.SubjectOptionDT…

<C语言>指针的深度学习

目录 一、字符指针 二、指针数组 三、数组指针 1.数组指针的定义 2.&数组名与数组名 3.数组指针的使用 四、数组参数、指针参数 1.一维数组传参 2.二维数组传参 3.一级指针传参 4.二级指针传参 五、函数指针 六、函数指针数组 七、指向函数指针数组的指针 八、回调函数 1…

HCIP-HarmonyOS Application Developer 习题(三)

1、在JS(JavaScript)Ul框架中&#xff0c;完成对平台层进行抽象&#xff0c;提供抽象接口&#xff0c;对接到系统平台的是哪一层? A. 应用层 B. 前端框架层 C. 引擎层 D. 平台适配层 答案&#xff1a;D 分析&#xff1a;适配层主要完成对平台层进行抽象&#xff0c;提供抽象接…

iOS更新后在IPhone上恢复丢失的文本消息的4种方法

您是否在更新 iPhone 软件后丢失了重要的短信&#xff1f;丢失数据可能会令人沮丧&#xff0c;尤其是当它包含有价值的信息或感性信息时。幸运的是&#xff0c;有一些方法可以在iOS更新后恢复iPhone上丢失的短信。 在这篇博文中&#xff0c;我们将讨论可用于恢复丢失的短信的不…

Edge浏览器 (文本选择)I型光标消失不见问题

Edge浏览器 I型&#xff08;文本选择&#xff09;光标消失不见的问题。 在白色背景中 光标也变成了纯白色&#xff0c;所有都是纯白 也就看不到光标在哪里了&#xff0c;会影响正常使用。 解决方案&#xff1a;把默认的I型光标替换掉 选择一个 beam*.cur , 可以在预览框中查看…

C语言家教记录(六)

导语 本次授课的内容如下&#xff1a;指针&#xff0c;指针和数组 辅助教材为 《C语言程序设计现代方法&#xff08;第2版&#xff09;》 指针 指针变量 计算机按字节划分地址&#xff0c;每个地址访问一个字节 指针变量指向变量的地址&#xff0c;指的是变量第一个字节的…