一种用于从视网膜图像中识别疾病的 BERT 式自监督学习 CNN
大家读完觉得有帮助记得关注和点赞!!!
抽象
在医学成像领域,深度学习的出现,尤其是卷积神经网络 (CNN) 的应用,彻底改变了医学影像的分析和解释。然而,深度学习方法通常依赖于大量的标记数据。在医学成像研究中,获得高质量的标签既昂贵又困难。Vision Transformers (ViT) 和自我监督学习的引入提供了一种利用大量未标记数据的预训练策略,有效缓解了标签采集挑战,同时拓宽了数据利用的广度。然而,ViT 的高计算密度和对计算能力的巨大需求,再加上其对图像补丁的作缺乏本地化特性,限制了它在许多应用场景中的效率和适用性。在这项研究中,我们采用轻量级 CNN 框架 nn-MobileNet 来实现 BERT 风格的自我监督学习方法。我们在来自英国生物样本库的未标记视网膜眼底图像上对网络进行预训练,以提高下游应用程序的性能。我们验证了阿尔茨海默病 (AD)、帕金森病 (PD) 和各种视网膜疾病识别的预训练模型的结果。结果表明,我们的方法可以显著提高下游任务的性能。总之,本研究将 CNN 的优势与高级自我监督学习的能力相结合,在处理大规模未标记数据方面,展示了 CNN 在标签稀缺情况下的潜力。
关键字:
自我监督学习 预训练 卷积神经网络 英国生物样本库1介绍
在过去的几十年里,卷积神经网络 (CNN) 在各种任务中取得了出色的成果,彻底改变了医学成像领域[17,30,29]. CNN 在视网膜疾病检测等任务中取得了优异的成果[24,6,19],这在很大程度上要归功于它们的核心属性,即空间层次结构、定位和平移不变性。这些功能使 CNN 能够捕获局部视觉特征,例如边缘和纹理,并将它们转换为更高级别的抽象特征[24].这种能力至关重要,因为它可以识别对疾病诊断至关重要的细微差异。
深度学习在医学图像分析中显示出巨大的潜力。然而,获得标签的难度和他们要求的成本仍然是该领域一个臭名昭著的问题[26].近年来,自然语言处理 (NLP) 领域在自我监督预训练模型方面取得了重大进展[14],例如来自 transformers 的双向编码器表示的自监督学习模型 (BERT)[2]和生成式预训练转换器 (GPT)[1].从 NLP 的成就中汲取灵感,视觉转换器 (ViT) 的集成催化了许多采用掩蔽策略的自我监督视觉模型的发展。这一转变标志着视觉领域在自我监督模型中从对比学习到生成学习方法的重大转变。
尽管 ViT 带来了解决医学成像领域问题的新方法[23,26],他们的自我注意机制的计算强度高和对大规模数据集的依赖揭示了他们的局限性[23,9].自注意力作的时间和内存复杂度随输入大小呈二次方增长,这使得 ViT 在处理大量数据时特别耗费资源。此外,与传统的 CNN 相比,ViT 在图像处理中表现出较少的定位能力,因为它们的机制主要针对图像的块级,而不是直接关注单个像素。[9].我们在 CNN 中观察到的优势,以及预训练对自我监督学习的显着好处,以及 ViT 的潜在缺点,都激发了进一步的思考:是否有可能将性能良好的 CNN 与 BERT 风格的生成式自我监督学习相结合进行预训练,以结合两者的优势?
图 1:左侧面板上的 ViT 可以处理非掩码补丁而无需任何更改,因为它可以处理可变长度的序列,而右侧面板上的 CNN 无法跳过卷积的掩码。在 CNN 中简单地采用掩码可能会导致性能下降。这项工作采用了一种新的解决方案来解决这个问题。
我们的研究表明,最初的努力[13,25]使用掩码策略训练 CNN 进行自我监督学习并没有取得有竞争力的结果。 CNN 和 ViT 之间固有的架构差异阻碍了在图像处理任务中用 CNN 直接替代 ViT(图 D)。与 ViT 不同,ViT 擅长处理可变长度的补丁序列,而无需调整遮罩区域,而 CNN 在卷积作期间无法绕过遮罩区域。与 ViT 相比,这种限制导致 CNN 的结果不一致和性能下降。 最近,一些研究人员通过引入稀疏卷积解决了这个掩码问题[10],例如 SparK 的提议[21]和 ConvNextV2[22].通过稀疏卷积,本研究利用 nn-MobileNet 为 CNN 引入了一种 BERT 风格的自我监督学习框架[28]作为 CNN 主干,一种源自 MobileNetV2 的轻量级架构[16].利用来自英国生物样本库的 178,803 张未标记的视网膜图像[20],我们进行自我监督的预培训。然后,在下游任务上评估此预训练模型以评估其性能。我们的研究结果强调了 CNN 的巨大潜力,尤其是在缺乏标记数据的情况下。
本文的主要贡献包括:1). 通过采用稀疏卷积,我们提出了一种新颖的 BERT 式自监督学习 CNN 来丰富自监督方法。它普遍适用于广泛的医学成像研究。2). 我们的方法与 CNN 模型和谐地集成[28],利用其精确定位和较低的数据要求等优势。3). 我们广泛的实验证实了它优于几个领先的监督[24,6]和自我监督[7,27]模型跨一系列基准,包括一个[27]使用超过 1.6M 的眼底图像进行预训练。
2方法
2.1nn-移动网络
我们的骨干是最近开发的 CNN 模型 nn-MobileNet[28](图 .2). 基于 MobileNetV2[16],它进行了以下架构创新。
通道配置。nn-MobileNet 修改了网络中倒置线性残差瓶颈 (ILRB) 的通道配置顺序。此策略旨在通过利用通道配置的重大影响来提高网络性能[11].
图 2:nn-MobileNet 的详细架构及其 ILRB 设计。nn-MobileNet 在视网膜成像研究中取得了卓越的成果[28].当前的自我监督学习方案进一步增强了其性能。
数据增强。与传统视网膜成像方法相比[24],nn-MobileNet 采用大量数据增强策略,包括图像裁剪、翻转、对比度调整、亮度调整和锐化。实验表明,这种繁重的数据增强对提高系统性能具有显著的好处[28].
辍学。为了解决过拟合问题,nn-MobileNet 尝试在网络内的不同位置添加 Dropout 模块,以确定它们的最佳放置位置,如图 1 所示。2.
激活函数。根据以前的研究,ReLU 激活函数的平滑变体可以提高性能。因此,通过实验比较,ReLU6 因其卓越的性能增强而被选为框架中每个 ILRB 的激活函数。
优化。通过试验和比较当前常见的优化器(包括 Adam、AdamW、AdamP 和 SGD),AdamP[8]是根据经验选择的。
2.2训练前策略
无花果。图 3 说明了预训练策略的工作流程,该策略借鉴了 BERT 架构的基本原则。我们采用图像掩蔽技术(步骤 1)并匹配分层特征图以掩蔽区域(步骤 2)来构建损失函数。我们使用稀疏卷积[10]集成 CNN 架构(步骤 3)。最后,学习到的特征图用于下游应用程序。这种预训练方法的详细信息详细说明如下。
图 3:我们的训练前工作流程图示。我们首先随机屏蔽所有图像(步骤 1)。接下来,我们屏蔽适应 CNN 编码器和解码器不同分辨率的特征图(第 2 步)。最后,我们对被遮罩的图像进行稀疏卷积,并通过解码器恢复图像(第 3 步)。
BERT 风格。在计算机视觉领域,掩码自动编码器 (MAE)[7],类似于 BERT[2]模型,已成为最先进的自我监督学习的预训练策略之一。然而,基于 MAE 方法的研究主要基于 ViTs。如上一节所述,由于 ViT 的固有差异,ViT 的编码器-解码器结构不能直接被 CNN 替代。直到最近,随着 SparK 的连续提议[21]和 ConvNextV2[22],出现了采用 CNN 进行 BERT 式自我监督学习方法的训练前研究的新想法。
层次结构。Hierarchy 被广泛认为是视觉表示系统的黄金标准。在各种 CNN 中实现的分层设计[16,22]显著提高了他们的性能。但是,ViTs 中没有使用这一原理。 在我们的方法中,我们采用 SparK[21]维护 CNN 中固有的层次结构,并确保神经网络可以利用层次结构来改进表示学习。
编码器:在进行卷积作之前,我们根据 CNN 的下采样过程生成不同分辨率的特征图。对于我们的神经网络模型 nn-MobileNet,总共对大小为H∗W,其中 H,W 分别是输入图像的高度和宽度,从而生成特征图集 S 的大小,如下所示:
译码器:在解码阶段,我们采用轻量级的 UNet 解码器[15],其特征是包含四个连续的块 {B1,B2,B3,B4} 替换为上采样层。解码器接收S我′从不同分辨率的特征图S我及其掩码嵌入。此外,通过应用投影层φ我,则保证编码器和解码器之间的尺寸一致性。对于最小的特征图,我们定义:D5=φ5(S5′).由此,我们得出其余的特征图D我:
损失功能:我们的损失函数利用一种方法来比较重建图像的掩蔽部分和原始图像中相应的掩蔽区域之间的均方误差 (MSE)。
图 4:当我们从英国生物样本库数据集中过滤 AD 患者、PD 患者和正常对照受试者的眼底图像数据时,质量控制管道的图示。
稀疏卷积。卷积广泛用于 2D 计算机视觉研究,其中滑动窗口作通常在像素网格上执行。但是,它在 MAE 研究中是不合适的,因为掩码像素可能会参与卷积并导致结果不一致。稀疏卷积[10]通过省略所有空体素并将卷积运算集中在非零元素上,提高了计算一致性。这项工作通过确保卷积作仅在非掩码像素上进行,将稀疏卷积扩展到自我监督研究。
3实验结果
在英国生物样本库数据集上进行预训练。我们的研究使用了来自英国生物样本库的 178,803 张未标记的彩色视网膜眼底图像[20],涉及 87,245 名参与者,进行自我监督的预培训。在预训练期间,我们首先随机遮罩60%中,其中每个蒙版的大小等于:(HD,WD),其中 D 是网络的下采样率。然后,我们只处理输入图像的未遮罩可见区域。在我们的网络中,输出图像的大小为(224,224),下采样率为32,使我们的蒙版大小为(7,7).我们进一步使用从预训练模块中学到的特征图进行分类研究。
基准。对于实验,我们以 8:2 的比例将数据随机分为训练集和验证集。我们在数据集上采用了 5 倍分层交叉验证。用于评估预训练后网络性能改善情况的评估指标包括二次加权 Kappa (Kappa) 、AUC (接受者作特征下的面积)、F1 评分和准确性。我们的比较方法包括 CANet[24]、VGG11[19]、Rexnet[6]和基于 ViT 的方法,包括 MAE[7]、RETFound[27]和基于英国生物样本库的预训练 MAE 模型。
阿尔茨海默病 (AD) 和帕金森病 (PD) 鉴定。我们的质量控制从英国生物样本库中选择了 362 张 AD 患者的眼底图像,其中包括 230 名患者中的 169 张左眼图像和 193 张右眼图像。此外,我们匹配了 389 张来自无 AD 参与者的图像,包括 282 名参与者的 170 张左眼图像和 219 张右眼图像,作为参考组。同样,我们从英国生物库中选择了 415 张 PD 患者的眼底图像,其中包括 264 名患者中的 197 张左眼图像和 218 张右眼图像。无花果。4 说明了我们的质量控制程序。我们过滤显示任何情况的图像:模糊、低对比度、不良照明和伪像。尽管我们使用了来自英国生物样本库的 AD 和 PD 诊断患者的眼底图像,但我们认为我们的预训练 1) 不使用图像标签,并且 2) 主要侧重于学习掩码区域以构建特征图。我们的实践与常见的自我监督方法一致[27].
MICCAI 近视性黄斑病分析挑战赛 (MMAC) 2023 - 近视性黄斑病的分类[12].该挑战包含 1143 张眼底图像,分为四个近视黄斑病变等级。0 级有 404 张图像,1 级有 412 张图像,2 级有 224 张图像,3 级有 60 张图像,43 级有 43 张图像。nn-MobileNet 在 MICCAI MMAC 中排名第三[12],我们利用它来展示我们的预培训策略的优势。
表 1:所提出的预训练模型与其他监督和自监督网络在 AD/PD 识别研究上的实验结果比较。我们的结果与这些最先进的方法相当或优于这些最先进的方法。
广告 | 帕金森 | |||||
---|---|---|---|---|---|---|
方法 | ACC | AUC | 卡帕 | ACC | AUC | 卡帕 |
CANet[24] | 0.7 | 0.7391 | 0.3981 | 0.6273 | 0.6758 | 0.2557 |
VGG11的[19] | 0.7467 | 0.8114 | 0.4898 | 0.6211 | 0.589 | 0.2447 |
雷克斯内特[6] | 0.9933 | 1.0 | 0.9866 | 0.7640 | 0.8974 | 0.534 |
梅[7] | 0.9933 | 1.0 | 0.9866 | 0.8385 | 0.9132 | 0.677 |
MAE+UK 生物样本库* | 0.9933 | 1.0 | 0.9866 | 0.8696 | 0.9411 | 0.7392 |
RETFound[27] | 0.9933 | 1.0 | 0.9866 | 0.9193 | 0.9768 | 0.8387 |
nn-移动网络[28] | 0.9933 | 1.0 | 0.9866 | 0.9876 | 0.9993 | 0.9752 |
我们 | 0.9933 | 1.0 | 0.9866 | 0.9938 | 0.9993 | 0.9876 |
*我们根据 MAE 结果继续与英国生物样本库进行预培训。[7].
结果:我们的研究方法在 AD 和 PD 任务上表现出强大的表现(表 1)。在 AD 数据集上,我们取得了良好的结果,正确率为 99.33%,kappa 评分为 0.9866,AUC 为 0.9997。在 PD 数据集上,我们的方法也取得了优异的结果,正确率为 99.38%,kappa 评分为 0.9876,AUC 为 0.9993。我们的结果与其他最先进的方法相当或优于其他最先进的方法[27,7].值得注意的是 RETFound 模型[27]使用超过 1.6M 的视网膜图像进行预训练,而我们的图像使用 176K 眼底图像进行训练。这并不奇怪,因为对于相同的准确率,CNN 通常需要比 ViT 少得多的训练数据[3].
为了分析潜在的生物标志物,我们使用 UNet 进行血管分割,以更好地可视化血管特征[15,31].有了它们,我们使用 Grad-CAM 生成注意力热图[18,5](图 .5). 我们的结果与之前的 AD 研究一致[4],表明具有迂曲变化的视网膜血管分支是 AD 的潜在标识符。
通过在 MMAC 数据集(表.2),我们深入研究了预训练对 nn-MobileNet 性能的影响。实验结果表明,通过对 5 倍交叉验证的结果进行平均,观察到显着改善:Kappa 值提高了 0.232,AUC 提高了 0.0039,Accuracy 提高了 0.0238,加权 F1 分数提高了 0.0412。特别值得注意的是加权 F1 分数的大幅提高,这表明预训练显着提高了模型在多类别分类任务中的性能。
表 2:nn-MobileNet 的结果比较[28]以及在 MMAC 数据集上预训练的 nn-MobileNet。拟议的 pro-training 显著提高了其性能。
时代 | 卡帕 | AUC | ACC | F1 系列 | |
---|---|---|---|---|---|
nn-移动网络[28] | 300 | 0.8519 | 0.9621 | 0.8105 | 0.7776 |
预训练的 nn-MobileNet | 300 | 0.8751 | 0.966 | 0.8313 | 0.8188 |
起色 | +0.0232 | +0.0039 | +0.0208 | +0.0412 |
图 5:AD (第一行) 和 PD (第二行) 的热图表明,我们的工作获得了与先前研究一致的有价值的生物标志物[4].
4结论和未来工作
在 NLP 进步的推动下,我们成功地将自监督学习与 CNN 相结合,通过 BERT 风格的自监督训练突破了 ViT 的计算和数据限制,并显著提高了实验性能。在我们未来的工作中,我们的目标是进一步研究 CNN 在自我监督学习领域的优势,将其应用扩展到更广泛的医学成像分析,包括光学相干断层扫描 (OCT) 和磁共振成像 (MRI)。
相关文章:
一种用于从视网膜图像中识别疾病的 BERT 式自监督学习 CNN
大家读完觉得有帮助记得关注和点赞!!! 抽象 在医学成像领域,深度学习的出现,尤其是卷积神经网络 (CNN) 的应用,彻底改变了医学影像的分析和解释。然而,深度学习方法通常依…...
OpenCV 图形API(68)图像与通道拼接函数------垂直拼接两个图像/矩阵的函数concatVert()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 对给定的矩阵执行垂直拼接。该函数将两个 GMat 矩阵(列数相同)垂直连接: GMat A { 1, 7,2, 8,3, 9 }; GMat…...
重测序关系矩阵构建方式汇总
样本间亲缘关系矩阵(kinship matrix)和同源性矩阵(IBS matrix)构建的方式 1. 可以使用plink的–make-rel计算个体之间的亲缘关系(强调个体之间的遗传相似性) /opt/software/plink --bfile vcf_bfile--mak…...
OpenCV 图形API(70)图像与通道拼接函数-----创建一个图像或矩阵(GMat)的副本的操作函数copy()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 制作输入图像的一个副本。请注意,这个副本可能不是实际存在的(没有实际复制数据)。使用此函数来维护图的契约…...
30天通过软考高项-第六天
30天通过软考高项-第六天 任务:项目质量管理 思维导图阅读 知识点集锦阅读 知识点记忆 章节习题练习 知识点练习 手写回忆ITTO 听一遍喜马拉雅关于范围的内容 质量管理 -背 1. 过程定义 龟管控 要求标准规划定,计划转化看过程…...
JUC中各种锁机制的应用和原理及死锁问题定位
JUC中各种锁机制的应用和原理及死锁问题定位 在互联网大厂Java求职者的面试中,经常会被问到关于JUC(Java Util Concurrency)中的各种锁机制及其应用和原理的问题。本文通过一个故事场景来展示这些问题的实际解决方案。 第一轮提问 面试官&…...
区块链vs实体经济:一场金融、医疗、政务与物流的“效率革命”
区块链技术作为一种去中心化、不可篡改的分布式账本技术,正在重塑多个行业的运行模式。从金融交易的透明化到医疗数据的安全共享,从政务服务的效率提升到物流供应链的全程可追溯,区块链的跨行业应用展现出巨大的潜力与价值。以下是其在金融、…...
FTP-网络文件服务器
部署思路 单纯上传下载ftp系统集成间的共享 samba网络存储服务器 NFS 网络文件服务器:通过网络共享文件或文件夹,实现数据共享 NAS ( network append storage):共享的是文件夹 FTP:文件服务器samba:不同系统间的文件…...
嵌入式RTOS实战:uC/OS-III最新版移植指南(附项目源码)
文章目录 前言一、uC/OS简介二、工程移植2.1 下载ucos源码2.2 创建空白工程2.3 拷贝ucosiii源码文件2.3.1 UC-CONFIG2.3.2 UC-CPU2.3.3 UC-LIB2.3.4 UC-OS3 2.3 添加工程文件分组及路径2.4 代码首次编译2.5 源码修改2.5.1 cpu_cfg.h2.5.2 os_cpu_c.c2.5.3 lib_cfg.h2.5.4 sys.h…...
10.Excel:快速定位目标值
一 批量删除 1.如何使用 快捷键 CTRLG 补充:直接选择定位条件。 2.作用 1.批量删除工作表中的图片 补充:无法通过框选的方式选中这些图片进行删除。 这样只框选了表格,无法框选图片。因为图片在excel中被认为是一个对象,对象无法通…...
状态模式 (State Pattern)
状态模式(State Pattern)是一种行为型设计模式,它允许对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。该模式将状态封装成独立的类,并将请求委托给当前的状态对象,当对象的内部状态发生变化时,其行为也会随之改变。 一、基础部分 1. 意图 允许一个…...
【Java面试题04】MySQL 篇
文章目录 一、前言🚀🚀🚀二、MySQL 篇:☀️☀️☀️1、MySQL 是如何实现事务的? 后序还在更新中~~~三、总结:🍓🍓🍓 一、前言🚀🚀🚀 ☀️ 你每一…...
同时安装多个版本的golang
https://golang.google.cn/dl/ go install golang.org/dl/go1.20latest 这样就会将 go1.20.exe 下载到 GOPATH/bin,但是此时并没有 go1.20 的源码包,也就不能正常执行 build/run 等指令。 然后执行 go1.20 download下载源码包 > go1.20 download …...
【Web应用服务器_Tomcat】三、Tomcat 性能优化与监控诊断
在企业级 Java Web 应用的运行过程中,Apache Tomcat 作为广泛使用的 Servlet 容器和 Web 服务器,其性能表现直接影响用户体验和业务稳定性。本篇文章将深入探讨 Tomcat 性能优化的实用技巧,以及如何通过有效的监控诊断手段,及时发…...
stm32week13
stm32学习 九.stm32与HAL库 4.时钟树 stm32f103所拥有的时钟源: 外部时钟的稳定性比内部的高,但是成本高,需要在外部额外接 关于上述时钟树的简图: 右下四个是HAL库中的初始化函数 F4的时钟树简图: F7的时钟树简图…...
深入探究C++ 中的stack、queue和deque
目录 一、stack(栈) 二、queue(队列) 三、deque(双向队列) 四、容器适配器总结 在C 的标准模板库(STL)中,stack、queue和priority_queue是非常实用的容器适配器&…...
第十二节:性能优化高频题-shallowRef/shallowReactive使用场景
适用场景:大型对象/列表仅需第一层响应式变化(如JSON配置数据) Vue3 浅层响应式 API(shallowRef/shallowReactive)使用场景深度解析 一、核心使用场景与性能优化原理 大型 JSON 配置数据管理 • 场景特征:…...
openGauss DB4AI与scikit-learn模块对比探究
openGauss当前版本支持了原生DB4AI能力,引入原生AI算子,简化操作流程,充分利用数据库优化器、执行器的优化与执行能力,获得高性能的数据库内模型训练能力。 本文介绍了笔者采用鸢尾花数据集,对openGauss DB4AI功能进行…...
基于大模型的公安预审办案笔录分析的挑战与应对策略-3
引言 :在基于大模型的公安预审办案笔录分析应用过程中,虽然取得了一定的成果,但也面临着诸多挑战。本文将分析这些挑战,并提出相应的应对策略,以推动该技术在公安领域的更好地发展和应用。 引文:https://c…...
ubantu18.04(Hadoop3.1.3)之Flink安装与编程实践(Flink1.9.1)
说明:本文图片较多,耐心等待加载。(建议用电脑) 注意所有打开的文件都要记得保存。 第一步:准备工作 本文是在之前Hadoop搭建完集群环境后继续进行的,因此需要读者完成我之前教程的所有操作。 注意本次实…...
AI辅助编程-cursor开发煤矿持证上岗管理程序需求与设计篇
Cursor 是一款由人工智能驱动的智能代码编辑器,深度融合AI技术以提升开发效率。其核心功能基于GPT-4等先进模型,支持代码生成、错误修复、智能补全及自然语言编程。开发者可通过对话交互直接描述需求,AI即时生成对应代码片段,显…...
如何使用极狐GitLab 议题看板?
极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有: 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 议题看板 (BASIC ALL) 议题看板是一个软件项目管理工具,用于计划、组织和可视化功能或产品发布的工作流程。它可…...
计网分层体系结构(包括OSI,IP,两者对比和相关概念)
1. 应用层: 用户与网络的界面,FTP,SMTP, HTTP 2. 表示层(Presentation Layer): 解决用户信息的语法表示问题 数据压缩,加密解密 表示变换 3. 对话层(Session Layer): 功能:允许不同主机的各个进…...
爬虫过程中如何确保数据准确性
在爬虫过程中,确保数据的准确性是非常重要的。数据不准确可能会导致分析结果的偏差,甚至影响决策。以下是一些确保爬虫数据准确性的方法和技巧: 一、验证数据来源 确保数据来源的可靠性是确保数据准确性的第一步。选择信誉良好的网站作为数…...
Maven多模块工程版本管理:flatten-maven-plugin扁平化POM
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编…...
数据库基础与核心操作:从概念到实战的全面解析
目录 1 基本概念2 基本操作2.1 DCL2.2 DDL2.3 DML2.4 DQL(高级查询) 3 高级功能3.1 视图(无参函数)3.2 存储过程(有参函数)3.3 触发器 4 约束4.1 主键约束4.2 UNIQUE KEY(唯一键约束)4.3 FOREIGN KEY(外键约束…...
网络原理 - 10(HTTP/HTTPS - 1)
前面的网络原理 1 - 9,按照 TCP/IP 五层协议栈,介绍了各个层次的核心协议。 应用层:自定义协议(xml,json....) 传输层:UDP/TCP 网络层:IP 数据链路层:以太网 我们这…...
UDP协议详解+代码演示
1、UDP协议基础 1. UDP是什么? UDP(User Datagram Protocol,用户数据报协议)是传输层的核心协议之一,与TCP并列。它的主要特点是: 无连接:通信前不需要建立连接(知道对端的…...
QT事件Trick
拖动 void DWidget::mousePressEvent(QMouseEvent *event) {if(event->button()Qt::LeftButton){QListWidgetItem *selItem currentItem();if(selItem! nullptr){m_startPosevent->pos(); //记录鼠标按下时的起始位置}}QListWidget::mousePressEvent(event); }void DW…...
解答UnityShader学习过程中的一些疑惑(持续更新中)
一、坐标系相关 shader中会有几种空间: 模型空间:以物体自己为中心原点 世界空间:就是unity的世界坐标 观察空间(视图空间):以相机为中心的坐标系 裁剪空间:是一个4d空间,有x,y,z,w…...
【图论 拓扑排序 bfs】P6037 Ryoku 的探索|普及+
本文涉及知识点 C图论 CBFS算法 P6037 Ryoku 的探索 题目背景 Ryoku 对自己所处的世界充满了好奇,她希望能够在她「死」之前尽可能能多地探索世界。 这一天,Ryoku 得到了一张这个世界的地图,她十分高兴。然而,Ryoku 并不知道…...
Spring Boot定时任务
在 Spring Boot 中实现定时任务主要依赖于Scheduled注解和 Spring 调度器。 基本概念 定时任务,简单来说就是在特定的时间点或按照一定的时间间隔自动执行的任务。在 Spring Boot 中,实现定时任务主要依赖于 Spring 框架提供的 Scheduled 注解和 TaskSc…...
如何使用electron-forge开发上位机ui
Electron Forge是一个用于快速构建、打包和发布Electron应用程序的工具。它提供了一种简单的方式来设置Electron项目,并使用现代工具和最佳实践来管理应用程序的开发和部署过程。使用Electron Forge,开发人员可以轻松地创建跨平台的桌面应用程序…...
idea启动springboot方式及web调用
使用以下方式启动springboot. 我这里是微服务, 本地调试需要启动程序使用 1. 通过maven检测到Profile配置 2. web调用 我这里直接用 apifox接口调用, 带着token和一些必要参数。有这几点: 请求头要加的token需要是网页上F12获取到的 如果是微服务本地调用。url需要…...
利用EMQX实现单片机和PyQt的数据MQTT互联
https://www.dong-blog.fun/post/2050 基于MQTT的设备监控与控制系统设计 引言 物联网(IoT)设备的远程监控与控制是现代智能系统的基础需求。本文将介绍一个基于MQTT协议的设备监控与控制系统,该系统由两部分组成:模拟单片机设备和PyQt客户端。我们将…...
C#/.NET/.NET Core技术前沿周刊 | 第 36 期(2025年4.21-4.27)
前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录、追踪C#/.NET/.NET Core领域、生态的每周最新、最实用、最有价值的技术文章、社区动态、优质项目和学习资源等。让你时刻站在技术前沿,助力技术成长与视野拓宽。 欢迎投稿、推荐…...
Context7 MCP:提供实时、版本特定的文档以解决AI幻觉问题
在实际开发中,使用AI辅助编码常常出现令人沮丧的问题:AI提供的API调用建议往往已经过时,或者根本不存在。 特别是当您使用最新版库时,这个问题尤为明显。 Upstash团队开发的Context7开源工具正是为解决这一痛点而生。 版本不匹配导致的API错误 现代开发库迭代速度快,常…...
电路研究9.3.2——合宙Air780EP中的AT开发指南:HTTP(S)-PDP的研究
按照推荐的GPRS模块的学习顺序,现在需要研究的是HTTP(S)了,所以我们就继续学习吧。 9.5.2 HTTP(S)应用指南 应用概述 4G 模块支持 HTTP 和 HTTPS 协议(这个确实也考虑过了,但是不知道合不合适呢,而且我们计划的通讯是只…...
K8S ConfigMap 快速开始
一、什么是 ConfigMap? ConfigMap 是 Kubernetes 中用于存储非敏感配置数据的 API 对象,支持以键值对(Key-Value)或文件的形式存储配置,允许将配置与镜像解耦,实现配置的集中管理和动态更新。 二、主要用…...
【星海出品】K8S调度器leader
发现K8S的技术资料越写越多,独立阐述一下K8S-Scheduler-leader 调度器通过Watch机制来发现集群中【新创建】且尚未被调度【unscheduled】到节点上的pod。 由于 Pod 中的容器和 Pod 本身可能有不同的要求,调度程序会过滤掉任何不满足 Pod 特定调度需求的…...
第十二届蓝桥杯 2021 C/C++组 空间
目录 题目: 题目描述: 题目链接: 思路: 思路详解: 代码: 代码详解: 题目: 题目描述: 题目链接: 空间 - 蓝桥云课 思路: 思路详解&#…...
通过深度学习推进增材制造:当前进展与未来挑战综述
通过深度学习推进增材制造:当前进展与未来挑战综述 原文信息: 标题:Advancing Additive Manufacturing through Deep Learning: A Comprehensive Review of Current Progress and Future Challenges 作者:Amirul Islam Saimon, Emmanuel Yangue, Xiaowei Yue, Zhenyu (…...
深入蜂窝物联网 第三章 LTE-M(Cat-M1)详解:省电机制与移动特性
1. 前言与应用场景 在蜂窝物联网阵营中,LTE-M(Cat-M1) 兼具低功耗和中速率,且支持移动场景下的无缝切换,因而成为物流追踪、可穿戴设备、智能路灯、共享单车等场景的首选。 本章将系统剖析: 核心特性:PSM、eDRX 与移动性保障; 协议流程:简化的 RRC/NAS 步骤; 时序图…...
软件设计师速通其一:计算机内部数据表示
考试资料推荐 ,这也是大部分图片的出处。本文章主要将视频原本讲的不详细、不便于理解的东西摆开揉碎了给到读者。相信本文能帮您更好更快的学习知识。本文也是您考前快速复习的不二之选。本文会用星星来表示每个考点的重要性,其中一颗★表示课外拓展&am…...
Kubernetes》》k8s》》Taint 污点、Toleration容忍度
污点 》》 节点上 容忍度 》》 Pod上 在K8S中,如果Pod能容忍某个节点上的污点,那么Pod就可以调度到该节点。如果不能容忍,那就无法调度到该节点。 污点和容忍度的概念 》》污点等级——>node 》》容忍度 —>pod Equal——>一种是等…...
【爬虫】一文掌握 adb 的各种指令(adb备忘清单)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 入门设备基础Logcat文件管理远程 Shell包安装Paths手机信息包信息设备相关命令权限Logs常见的 ADB 命令将文件推送到 Android 设备的下载文件夹列出所有已安装的包并获取完整路径从安卓设备中提取文件从主机安装 APK 到…...
1.7无穷级数
引言 无穷级数是考研数学一的核心内容,涵盖数项级数、幂级数、傅里叶级数等核心概念。本文系统梳理4大考点,结合公式速查与实战示例,助你高效突破级数难点! 考点一:数项级数敛散性判定 1️⃣ 正项级数 (1) 比较审敛…...
vitest | 测试框架vitest | 总结笔记
测试框架 vitest 介绍 网址:Vitest | Next Generation testing framework 特点:①支持vite的生态系统,②兼容jest语法 ③HMR测试(速度快) ④ ESM(js的原生支持) 安装 Vitest: npm …...
使用 ELK 实现全链路追踪:从零到一的实践指南
前言 在现代分布式系统中,随着服务数量的增加,系统的复杂性也呈指数级增长。为了快速定位问题、分析性能瓶颈,全链路追踪成为一项必不可少的能力。本文将详细介绍如何利用 ELK(Elasticsearch Logstash Kibana) 实现…...
AI智能体开发实战:从概念到落地的全流程解析
一、AI智能体:重新定义人机协作 什么是AI智能体? AI智能体是具备感知-思考-行动闭环能力的程序实体,能够通过传感器(如文本输入、图像识别)获取信息,基于大模型推理决策,并通过API、机器人等执…...