基于轻量化深度学习网络的工业环境小目标缺陷检测

news2024/11/28 14:40:49

源自:控制与决策

作者:叶卓勋   刘妹琴  张森林

摘 要

工业环境下表面缺陷检测是质量管理的重要一环, 具有重要的研究价值.通用检测网络(如YOLOv4)已被证实在多种数据集检测方面是有效的, 但是在工业环境的缺陷检测仍需要解决两个问题: 一是缺陷实例在表面占比过小, 属于典型的小目标检测问题; 二是通用检测网络结构复杂, 很难部署在移动设备上.针对上述问题, 提出一种基于轻量化深度学习网络的工业环境小目标缺陷检测方法.应用GhostNet替代YOLOv4主干特征提取网络, 提高网络特征提取能力及降低算法复杂度, 并通过改进式PANet结构增加YOLO预测头中高维特征图比例以实现更好的性能.以发动机金属表面缺陷检测为例进行实验分析, 结果表明该模型在检测精度(mAP)提升5.83%的同时将网络模型参数量降低83.5%, 检测速度提升2倍, 同时满足缺陷检测的精度和实时性要求.

关键词

轻量化检测网络    小目标缺陷检测    主干特征提取网络    改进式PANet 

引言

表面缺陷检测是机器视觉领域中非常重要的一项研究内容, 利用机器视觉设备获取图像以判断采集图像中是否存在缺陷, 而工业产品外观品质检验是保障产品质量的关键环节. 工业产品的外观在消费者心理往往与产品质量等同, 外观缺陷检测成为质量控制的关键. 目前, 绝大多数企业的质检依赖于人工检验完成, 存在易主观错判、检测方式难标准化、检测准确性和效率严重依赖于检测员经验等问题. 近年来, 随着以卷积神经网络(convolutional neural network, CNN)为代表的深度学习模型在计算机视觉领域的应用, 基于机器视觉的缺陷检测技术取得重大突破. 然而, 实际工业场景下金属表面缺陷检测仍存在一些挑战性的问题:

1) 数据集问题. 与真实工业场景中的几十张或几百张图片相比, 传统的深度学习方法(如CNN)需要大量的标注数据进行训练, 很难适应表面轮廓、光照条件、成像角度等不同环境的复杂工业场景. 通常情况下, 深度神经网络容易产生过拟合现象, 需要网络被喂入尽可能多的数据[1]. 因此, 最常用的方法是扩充送入网络的训练集, 使网络获得更丰富的特征信息. 传统数据扩增方法通常是对原缺陷样本使用模糊、镜像、随机遮挡、随机裁剪、对比度调整等多种基本图像处理方式来获取更多训练样本, 但此方法生成的图片与原始图片有很强的关联性, 导致神经网络过拟合问题缓解程度有限. 相较于传统数据扩增方法, 一些更为新颖的数据生成方法也被提出. Tao等[2]提出了一种基于分割网络的图像生成方法, 先将缺陷实例从自然背景中分割出来, 后通过图像融合方法将其叠加到正常样本上. 近些年, 基于生成对抗网络(generative adversarial net, GAN[3])的图像生成技术也在研究之中. Posilović等[4]提出了一种新型的GAN结构, 用于生成高质量和高分辨率的B超图像. Zhang等[5]提出了一种基于Wassertein GAN[6-7]的图像生成办法解决焊接缺陷图像中缺陷实例不平衡的问题. 根据基于相对尺度的小目标定义, 同一类别实例面积与图像面积之比在0.08%∼0.5%之间.本文所使用发动机金属表面缺陷数据集, 金属表面尺寸为3548×3548 , 凹槽类缺陷实例尺寸均小于64×64 , 相对面积为0.051%, 划痕类缺陷实例形状不标准, 但像素值不多于177×58 , 相对面积为0.082%, 均属于小目标检测问题. 针对小目标检测可利用特征较少及样本不均衡等问题, Ye等[8]提出了一种双通道GANDual-Path GAN(DPGAN), 通过分别生成缺陷实例和背景图像再复制黏贴的方式, 在生成高分辨率缺陷数据集的同时生成数据集标注文件, 节省了大量时间与人力. Bosquet等[9]基于GAN提出了一种全新的结构, 通过由较大物体生成较小物体来扩充数据集.

2) 神经网络在获得更好的特征提取能力的同时规模越来越大, 结构也随之越来越复杂, 预测和训练所需的硬件资源也随之增多. 通常情况下, 移动装置及嵌入式设备很难运行复杂的深度学习网络模型, 因此在计算机视觉领域, 人们也在努力推动神经网络的小型化, 最大程度上减小模型复杂度, 减少模型存储所需要的空间. 使网络轻量化的常用方法是模型压缩, 如模型剪枝[10-11]、模型量化[12]等, 然而基于这些压缩方法得到的全连接层的矩阵结构是不规律的稀疏矩阵, 与现代硬件加速平台如图形处理单元(GPU)并不匹配, 导致即使网络参数减少了但运算时间仍相同, 没有满足网络轻量化的要求[13]. 基于上述两种原因, 轻量级网络开始被提出, 旨在保持网络精度的基础上进一步增加特征提取能力、运行速度和减少模型参数量. MobileNetv1[14]引入了深度可分离卷积替代传统卷积, 大大减少了运算量和参数数量. MobileNetv2[15]在此基础上进一步引入线性瓶颈和倒残差结构. MobileNetv3[16]对倒残差结构进行简单改造, 加入SE模块[17]并更新了激活函数. GhostNet[18]使用简单的线性运算方式生成相似特征图获得网络中的冗余信息. 基于以上轻量化网络, 研究者也开始使用此方法改造检测网络. Li等[19]使用GhostNet改造Transformer以实现COCO数据集的检测. Zhang等[20]运用MobileNetv3改造YOLOv3以实现无人机条件下的行人检测. Jiang等[21]使用MobileNetv2替代SSD网络中的主干特征提取网络VGG-16以实现蛋鸡的检测系统. 上述方法虽然均取得了很好的检测效果, 但由于金属表面缺陷相较于行人和蛋鸡等目标更加小, 样本数量更少, 背景更加复杂, 并不完全适用于工业环境下金属表面缺陷检测.

本文选择YOLOv4[22]模型作为基本框架, 针对工业环境下小目标缺陷检测、训练样本少、移动装置计算能力有限等问题进行一系列改造, 具体包括: 1) 使用轻量化网络GhostNet替代YOLOv4主干特征提取网络CSPDarkNet53, 降低网络参数量, 提升特征提取能力; 2) 针对小目标易被错检漏检的问题, 对YOLOv4加强特征提取网络进行改造, 加大高维信息在最终检测时的比重, 进一步提升检测精度, 减少网络计算量.

1 基于Ghost模块的轻量级金属表面缺陷检测方法

1.1   基线检测网络YOLOv4

目前, 在目标检测领域有双阶段网络和以YOLO为代表的单阶段网络, 其中单阶段网络因其检测精度高、速度快, 被广泛运用于工业产品的缺陷检测中. 针对工业环境下小目标缺陷检测, 本文使用YOLOv4作为基准模型. YOLOv4是高精度实时一阶段检测算法, 代表YOLOv1、YOLOv2、YOLOv3的持续改进, 在检测速度和检测精度方面达到了目前的最优水平. YOLOv4延续YOLOv3整体结构不变, 同时在以下方面进行了不同程度的优化:

1) 主干特征提取网络.

主干特征提取网络主要对输入图像的初步特征进行提取, 运用主干特征提取网络可以输出3个初步的有效特征层, 此部分也是本文后续主要改进之处. YOLOv4主干特征提取网络在YOLOv3的Darknet53主干特征提取网络的基础上融合跨阶段局部网络(cross stage partial networks, CSPNet[23])的优势, 解决了Darknet53等大型卷积神经网络主干特征提取网络中网络优化的梯度信息重复问题, 将梯度变化集成到特征图中, 在主干特征提取网络轻量化的同时增加了卷积神经网络的学习能力, 保持了网络的准确性. YOLOv4主干特征提取网络包含5个CSP模块, 每个CSP模块第1个卷积核的大小分均为3×3 , stride=2 , 当输入特征图尺寸为416× 416 × 3时, 输出的3个有效特征图分别为52×52 , 26× 26, 13× 13, 3种大小的特征图分别代表低中高维信息, 感受野分别为8×8 、16×16 和32×32 , 用于后续小中大目标的检测. 此类方法可以获得丰富的特征信息, 但网络结构较为复杂, 特征增强能力不足, 限制了模型对小目标检测精度的进一步提升.

主干特征提取网络另一个较明显的改进在于采用了Mish激活函数[24], 有

(1)    

Mish激活函数具有无上界有下界的特点, 在训练时不会存在梯度消失的问题, 相较于之前使用的ReLU、LeakyReLU等激活函数在x=0 处更加光滑, 在实际求解和模型泛化性方面表现更加优良, 收敛速度更快.

2) 加强特征提取网络.

加强特征提取网络对主干特征提取网络输出的3个有效特征图进行进一步特征提取. YOLOv4使用了SPP和PANet的特征金字塔结构, SPP结构将主干特征提取网络最后一层CSP结构生成的特征图分别进行4个不同尺度的最大池化处理, 增加特征图感受野并分离出显著的语义信息; PANet结构对SPP结构及主干特征提取网络输出的3个有效特征图分别进行特征层串联实现特征融合, 并将融合得到的特征层传输到YOLO预测头Y1 、Y2 、Y3 中进行预测.

YOLOv4的金字塔结构对有效特征层进行反复特征提取, 在一定程度上提高了通用检测的精度, 但忽略了直接融合不同维度信息带来的语义冲突问题, 导致待检测小目标信息被冲突信息淹没. 在轻量化方面, PANet结构已普遍使用深度可分离卷积替代PANet中的普通卷积, 本文后续也将使用此类结构.

1.2    轻量化检测网络整体架构

图 1展示了所使用的基于YOLOv4的轻量化检测网络总体结构, 针对小目标检测问题, 对YOLOv4主干特征提取网络及加强特征提取网络中的PANet进行改进.

图 1 基于YOLOv4的轻量化检测网络结构

 1.2.1   轻量化主干特征提取网络GhostNet

为了实现网络的轻量化及特征提取能力的提升, 使用Ghost模块替代检测网络中的卷积操作, 简单表示为

 (2)    

其中: X∈Rc×w×h 为给定输入特征图, c 为输入特征图的通道数, h 和w 分别为输入特征图的高度和宽度; ∗ 为卷积操作; b 为偏置项. 为了产生输出为n 通道的输出特征图Y∈Rn×w′×h′ , 需要使用卷积核为k×k 的卷积块, 即f∈Rc×k×k×n , 生成效果如图 2(a)所示.然而, 卷积神经网络为了得到丰富的特征表达, 残差经常需要进行多次卷积操作, 这意味着输出特征图Y 的通道数n 也会变得很大, 运用此方法进行一次特征提取需要的运算量为

 (3)    

图 2 普通卷积与Ghost模块对比

   

实际上, 通过此操作获得的大部分特征图是相似的, 意味着很多特征图可以通过更为简单的操作如旋转、平移等操作从另一组基础特征图中获得. 因此, 残差块中一些卷积操作是多余的, 网络同时进行了不必要的计算, 一定程度上浪费了计算和存储资源.

为了解决该问题, Ghost模块提出了一种全新的卷积结构. 首先使用普通卷积块生成本征特征图Y′∈Rm×w′×h′ , 即

 (4)

   

其中: f∈Rc×k×k×m  m 为本征特征图Y′ 的通道数.然后为了生成与原输出特征图相同的通道数, Ghost模块通过简单的线性运算方式增强特征并增加通道数, 有

(5)

   

其中: s 为线性运算的次数, y′i 为第i 个本征特征图, Φj 为对本征特征图实施第j 个线性变换得到特征浓缩的相似特征图. 理论上可以得到m×s 个相似特征图, 为了生成与原输出特征图Y 相同数量的特征图, 只取前n 个作为最终的输出结果. 运用Ghost模块后, 实现一次操作需要的运算量为

(6)

   

将前后方法进行对比, 由于s≪c , 运算提升率为

 (7)   

比较可知: 使用Ghost模块替代传统卷积结构可以以更低的参数及更低的计算量获得相同甚至更优的特征提取效果.

图 2(b)为Ghost模块较为简单且常用的一种情形, 即s=2 , m=n/2 , 后续也将主要使用此模型作为实现方法.

更进一步, 可以使用Ghost模块搭建瓶颈结构, 即使用Ghost模块替代传统瓶颈结构中的普通卷积, 如图 3所示. 图 3(a)主要实现增加输出特征图通道数的功能, 图 3(b)主要实现改变特征图高和宽的功能.

图 3 使用Ghost模块搭建的瓶颈结构

如表 1所示, 使用Ghost瓶颈结构搭建GhostNet替代YOLOv4的主干特征提取网络CSPDarknet53. SE代表是否使用注意力模块, 0表示不使用注意力模块, 0.25表示SE模块对通道的压缩率. 根据MobileNetv3中的实验表明, 压缩率为0.25时既提高了精度, 又没有增加时间消耗.

表 1 主干特征提取网络GhostNet整体架构

GhostNet主干网络具体流程如下.

step 1: 输入为416×416×3 , 经过3×3 卷积将输入特征图的通道数调整为16的同时进行第1次高和宽的压缩.

step 2: 将一次步长为2和一次步长为1的Ghost瓶颈结构构成一组初步特征提取模块, 步长为2的Ghost瓶颈结构对特征图进行高和宽的压缩, 步长为1的瓶颈结构进行加深通道数量, 丰富特征表达. 通过堆叠两组初步特征提取模块, 将输入图片降采样为52×52 , 与YOLOv4主干特征提取网络第3个CSP输出的有效特征层尺寸相同.

step 3: 通过更多组Ghost瓶颈结构实现更深层次特征提取并生成26×26 及13×13 的特征图, 与YOLOv4主干特征提取网络第4、第5个CSP模块输出的有效特征层尺寸相同.

step 4: 将YOLOv4主干特征提取网络生成的有效特征层替换为step 2和step 3生成的有效特征层, 完成主干特征提取网络的轻量化.

1.2.2   针对小目标检测的改进式PANet结构

工业环境下金属表面缺陷实例在表面占比极小, 属于典型的小目标检测问题. 针对这一现象, 对YOLOv4的加强特征提取网络进行进一步改进. 现有的YOLOv4使用PANet金字塔结构通过对SPP结构及主干特征提取网络输出的3个有效特征层进行一系列上采样、下采样及特征层串联合并操作, 实现输出到YOLO预测头中各维度特征层信息保持为1:1:1 . 这种方法可以很好地获得各个维度的特征信息, 实现大中小目标的有效检测, 使YOLOv4作为通用检测网络能灵活高效地应用在多种公共数据集上.

在本文所使用金属表面缺陷数据集中, 如图 4缺陷实例细节所示, 凹槽与划痕之间有很多相似性特征, 划痕可分为连续线段和数个小凹槽并列两种类型. 此外, 划痕实例和金属表面的加工磨痕十分相似, 但划痕是缺陷, 而金属加工磨痕是在生产过程中不可避免的金属纹路, 常出现在孔洞周边及金属边缘, 属于正常现象. 如果网络感受野过小、过多关注边界信息则很难区分以上两种小目标易错检缺陷典型样例, 因此低维特征图所能提供的纹理特征作用在一定程度上低于中高维特征图所提供的语义信息. 基于此, 提出一种改进式PANet, 如图 1改进式PANet部分所示. 通过保留原网络上采样部分减少降采样部分的方法, 将最终输出到YOLO预测头的各维度特征层信息改变为1:2.5:5.5 , 提升网络对高维信息获取的同时减少网络中冗余的下采样结构. 网络在保留低维信息的同时增加高维信息的比例, 使高维信息更好地指导划痕实例和凹槽实例的检测, 增加感受野, 跳出局部信息, 减少网络的误检率.

图 4 真实金属数据集及缺陷实例细节

2 实验分析

2.1   数据集

本文使用发动机金属表面缺陷数据集评估方法的有效性. 该数据集并未公开且自行拍摄及标注, 共包括535张尺寸为5472×3648 的图片, 金属表面尺寸约为3548×3548 . 如图 4所示, 数据集可划分为两个粗粒度类别, 分别为划痕和凹槽, 划痕类包含2 014例, 凹槽类包含2 106例. 凹槽类缺陷实例尺寸均小于64×64 , 相对面积为0.051%;划痕类缺陷实例形状不标准, 但像素值不多于177×58 , 相对面积为0.082%, 根据相对尺寸的小目标定义方法, 数据集中待检测目标均属于小目标检测问题.

实验中使用DPGAN对数据集进行扩充, 缓解数据量少带来的模型过拟合问题, 提高模型的泛化能力, 通过调整缺陷实例与背景图像占比, 在一定程度上提升了小缺陷检测的准确率. DPGAN主要分为生成部分和复制粘贴部分: 生成部分使用两组生成器和判别器分别生成高分辨率的背景图像和缺陷图像; 复制粘贴部分首先将生成的缺陷实例图像与原始缺陷实例图像进行合并构成新缺陷实例数据集, 然后运用多种复制粘贴方法将新缺陷实例数据集均匀且正确地“生长”在背景图片上并同时生成含有缺陷位置的标注文件(.xml文件), 形成全新标注好的金属表面缺陷数据集. 通过此方法生成的数据集可以直接用于模型训练, 节省了重新标注的时间和精力. 数据增强前后的样本信息如表 2所示, 其中训练集与测试集基于全图按照9:1 的比例进行随机分配, 分配结果分别为1 183张和132张.

表 2 数据扩充前后总样本数

   

2.2   实验平台和参数设置

实验平台处理器为Intel(R) Xeon(R) E5-2660 v4CPU, 用于深度学习CNN计算的图像处理器为NVIDIA TITAN X(Pascal), 计算环境为1.1.0版本的PyTorch环境.

参数设置如下: 轻量化检测网络方面, 主干特征提取网络GhostNet参数设置如表 1所示; 模型训练方面, 设置神经网络批量参数为16, 初始训练迭代步数为20, 冻结训练迭代步数为280, 冻结训练不仅可以加快模型训练速度, 也可以在训练初期防止权值被破坏. 初始训练时学习率设置为0.001并采用余弦退火衰减; 初始训练结束后, 解冻后280迭代步数, 学习率为0.000 1, 学习率的变化仍然采用余弦退火衰减.

在图像检测部分, 数据集本身尺寸为5472×3648 , 首先通过边缘提取及裁剪方式得到金属表面3548×3548 区域, 如果直接使用3548×3548 图片检测, YOLOv4默认输入图片需要缩放为416×416 , 则Y1 输入52×52 尺寸特征图的1个像素在原图中为

, 很难学习到原图中68×68 像素以下的特征信息网络, 而凹槽实例通常低于64×64 . 因此, 在输入图像时运用图像重叠裁剪、检测后拼接的方法, 将一张图片裁剪为9张1774×1774 大小的图像, 此时Y1 得到的52×52 尺寸特征图的1个像素在原图中为, 可以对数据集中缺陷进行有效检测, 但低维信息较易陷入局部信息, 进一步从侧面辅证了1.2.2节改进式PANet的有效性.

2.3   实验结果和分析

为了验证所提出轻量化检测网络模型算法的优越性, 在相同的实验条件下, 将该模型算法与基线算法进行比较. 为验证模型算法性能, 在识别精度方面使用全类平均精度(mean average precision, mAP)作为评价指标, 本实验中即为凹槽和划痕两类检测平均精度(AP)的平均值; 在检测速度方面使用网络参数量和每秒检测帧数(fps)作为性能指标, 具体效果如表 3所示.

表 3 基于YOLOv4的消融实验性能对比

从表 3可以看出: 相比于基线网络YOLOv4进行金属表面缺陷检测, 表中数据增强方法及网络的轻量化改造在识别精度与检测速度上均有较大提升. 当使用DPGAN作为数据增强方式时, 在生成高分辨率缺陷图片的同时提高缺陷实例与背景的比例以带给网络更多的信息, 因此mAP有4.4%的提高. 当使用GhostNet替代YOLOv4主干特征提取网络时, 与YOLOv4网络相比, mAP从84.97% 提升至86.18%, 提高了1.2%;同时YOLOv4大幅金属图像(5 472 ×× 3 648)的检测速度为8.9fps, 轻量化YOLOv4检测速度提升为25fps, 提高了180%, 运算所需参数从64, 040, 001降低至11, 428, 525, 降低为原有的17.8%. 可以看出, 与原YOLOv4相比获得了巨大提升. 当继续使用改进式PANet结构时, 模型精度进一步提升0.18%, 检测速度提升1.1fps, 参数量减少1.5%. 值得一提的是, 改进式PANet结构并不需要重新训练, 表中所展示数据的增长无随机性, 且可即插即用至其余YOLO系列网络中, 最终实现在精度提升5.83%的同时将参数量降低83.5%, 检测速度提升2倍.

为验证所提出算法的性能, 在相同的实验条件下, 将该模型算法与工业场景经常使用的通用检测网络进行比较, 具体效果如表 4所示. YOLOv4-tiny是YOLOv4的官方轻量化版本, 使用简易的CSPDarknet53和PANet结构; YOLOv5-s和YOLOv5-x是YOLOv5两个不同版本, 前者为轻量化版本, 检测速度快但精度较低, 甚至不如YOLOv4原始版本, 后者网络深度很高, 参数量极大. 通过对比可知, YOLOv4-tiny和YOLOv5-s均通过牺牲精度换取了超高的检测速度, 然而工业场景下精度是第一要素, 且工业相机并没有如此高的帧率. 此外, 本文所使用的网络在精度和检测速度上均优于YOLOv5-x, 可以证实所提出方法在工业环境下小目标检测及模型轻量化方面效果显著, 在保持精度的前提下提高了检测速度.

表 4 各类方法性能对比

检测可视化结果如图 5所示, 展示了金属表面两种缺陷的检测结果, 从图 5可以看出两类缺陷检测效果均很好, 极少有漏检情况.

图 5 金属数据集检测结果

3 结论

当前工业环境下金属表面缺陷检测大多基于通用检测网络实验, 识别精确度不高, 运算量过于巨大, 很难应用在真实工业场景中. 为了提高工业环境下金属表面缺陷检测性能, 本文提出了一种针对工业环境小目标缺陷的轻量化检测网络, 该模型以YOLOv4为基线网络, 使用GhostNet替代YOLOv4主干特征提取网络; 并利用针对小目标检测的改进式PANet结构替换加强特征提取网络, 在样本量有限的情况下, 通过DPGAN等数据增强方式缓解过拟合现象, 提升模型的泛化能力. 通过在真实金属数据集上的实验验证了所提出模型的优越性. 因为真实金属表面数据集较为缺乏, 未来希望构建更丰富数据集, 包括但不限于更复杂场景及更多种类缺陷. 同时, 所提出的针对小目标检测的轻量化网络不仅限于YOLOv4, 理论上可以扩展到YOLO系列其他网络中, 未来可以进行更丰富的实验. 另外, 所提出算法能够在减少网络参数量的同时提高特征提取能力, 加强小目标检测精度, 有效提升金属表面缺陷检测识别精度, 未来希望将其扩展到航拍、小型生物、芯片检测等其他具有挑战性的目标识别领域.

本文仅用于学习交流,如有侵权,请联系删除 !!

加V “人工智能技术与咨询” 了解更多资讯!!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【接口测试】

【接口测试】 1、分层测试理论: UI测试(测试成本最高,发现BUG时间最晚) 接口测试 单元测试 2、协议分析工具 1)网络监听 TcpDump Wireshark 2)协议客户端工具 curl、postman 3)代理Pr…

phpstorm+phpstusy配置xdebug

真心觉得配置好麻烦呀 phpstorm版本: php版本用的7.3.4nts phpstudy版本:8.1.3 先下载xdebug,我用的是php_xdebug-3.1.6-7.3-vc15-nts-x86_64,phpstudy自带的那个xdebug我配置完不起作用 把下完的xdebug放到php下etc目录里,并改名为php_x…

C语言小项目之三子棋

💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:C语言学习分享⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学习更多C语言知识   🔝🔝 三子棋 1. 前言📕2. 思…

【英】考虑多能负荷不确定性的区域综合能源系统鲁棒规划(MatlabPython代码)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

寅家科技完成近亿元B1轮融资,加速高阶智能驾驶布局

近日,寅家科技宣布完成近亿元人民币B1轮融资,本轮融资由东方富海、深创投、深圳高新投联合投资,所募资金主要用于公司高阶智能驾驶技术产品的研发迭代,以及智能驾驶产品量产、海外市场开拓,从而进一步提升核心产品的市…

Solow模型推导模拟

Solow模型推导模拟 文章目录 Solow模型推导模拟[toc]1 Solow模型推导2 Solow模型模拟 1 Solow模型推导 在存在资本折旧、技术进步和人口增长条件下,有效劳动人均资本为 k ˙ ( t ) K ˙ ( t ) A ( t ) L ( t ) − K ( t ) [ A ( t ) L ( t ) ] 2 [ A ( t ) L ˙ …

腾讯云网站备案流程步骤、备案审核通过时间详细说明

腾讯云网站备案流程先填写基础信息、主体信息和网站信息,然后提交备案后等待腾讯云初审,初审通过后进行短信核验,最后等待各省管局审核,前面腾讯云初审时间1到2天左右,最长时间是等待管局审核时间,网站备案…

css新手引导实现方式总结

新手引导功能一般都是用一个半透明的黑色进行遮罩,蒙层上方对界面进行高亮,旁边配以弹窗进行讲解,样式如下 但是由于交互不同,实现方案也不一样,下面就针对不用的交互,总结了不同的实现方法(下文…

路由和寻址的区别

如果说传输层协议,除了 TCP/UDP,我们还可以有其他选择,比如 Google 开发的 QUIC 协议,帮助在传输层支持 HTTP 3.0 传输。但是在网络层,IP 协议几乎一统天下。IP 协议目前主要有两个版本 IPv4 和 IPv6。 根据 Google 统…

开发者一定要知道的 API 管理五大趋势

API First 大势所趋,APIaaS(API 作为服务)也将受到越来越多企业和组织的选择,研发团队对 API 研发管理工具的要求也水涨船高。 API 在今天的数字化世界中扮演着至关重要的角色,随着云计算、物联网、微服务尤其是 AI 等…

Uniapp 引入uView-ui 插件

前言 最近在写uniapp,用了一下原生的ui框架感觉不是很好看,打算去插件市场上面找一下好看的UI插件。学习不是闭门造车,自己重复造轮子。能自己解决和会不会用别人的方法是两回事。我自己也能写UI界面逻辑,但是这样太费时间了。最…

线宽变大,损耗变小;线宽无限大,损耗无限小?

一博高速先生成员:黄刚 作为高速信号传输的重要的指标之一,损耗,无论是对硬件工程师,设计工程师还是我们SI工程师来说,都会是非常的关注。而对于像背板传输这种长距离的走线系统或是像芯片测试板要求损耗极小的情况&a…

港联证券|港交所内地路演人气爆棚 新一轮上市改革加速推进

5月10日,香港交易所在深圳举行未来科技峰会,拉开了港股特专科技上市新规内地路演推广的序幕。 今年3月底,港交所正式推出特专科技公司上市新规,《主板上市规则》新增18C章,并于3月31日起接收特专科技公司上市申请&…

JavaWeb《后端内容:2. MVC-ServletContext-IOC-事务管理-过滤器Filter》

目录 1. 准备和回顾 2. MVC-reflect 3. MVC-dispatcherServlet 3.1 思路部分 3.2 Debug部分 3.3 基于controller进行优化 4. Servlet-api 4.1 回顾 4.2 Init方法 1. 获取ServletConfig config getServletConfig(); 2. 获取初始化参数值:config.getInitP…

静态库(lib),动态库(dll)

我之前有一篇文章讲过静态链接库和动态链接库,大家可以点击链接去看一下:静态链接库,动态链接库【滴水逆向三期48笔记】,由于不是系统学习Windows编程,感觉那时候就是囫囵吞枣,今天又学习了一遍&#xff0c…

基于Keil生成外部Nor Flash下载算法,并使用J-Flash直接烧录(以W25Q64为例)

需要的软件: Keil STM32CubeMX J-Flash 参考文档: 方法1:在Keil中点击Help→uVision Help,然后再搜索框中输入FLM,点击列出主题,可以看到生成下载算法的大致步骤: 方法2:在ARM Ke…

带你玩转三子棋—【C语言】

目录 前言: 1. 菜单的打印 2. game函数的实现 2.1 初始化棋盘 2.2 显示棋盘 2.3 玩家下棋 2.4 电脑下棋 2.5 判断输赢 2.6 判断棋盘是否满了 3. 全部代码 3.1 game.h 3.2 game.c 3.3 test.c 前言: 为了实现三子棋,首先我们应该…

frp将配置写在代码中重新打包

frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。在有些情况下我们需要隐藏配置信息,尤其是客户端(比如我们要在第三方电脑…

第五章 总结及作业(123)【编译原理】

第五章 作业【编译原理】 前言推荐第五章 总结5.1自下而上分析基本问题 5.1.1归约5.1.2规范归约简述5.1.3 符号栈的使用与语法树的表示 5.2 算符优先分析5.2.1算符优先文法及优先表构造算法:构造FIRSTVT集算法:构造LASTVT集算法:构造优先表5.…

Google I/O 2023 - 一文快速总结 Flutter Dart 的现状和未来

随着 Google I/O 2023 的发布, Flutter 3.10 和 Dart 3.0 也都正式发,不得不说如今 Dart 的版本号终于快追上 Flutter 得版本号了,特别随着 Dart 3 的发布, Flutter 在 records 和 patterns 的加持下,开发体验终于开始…