论文阅读:PET/CT Cross-modal medical image fusion of lung tumors based on DCIF-GAN
摘要
背景:
基于GAN的融合方法存在训练不稳定,提取图像的局部和全局上下文语义信息能力不足,交互融合程度不够等问题
贡献:
提出双耦合交互式融合GAN(Dual-Coupled Interactive Fusion GAN,DCIF-GAN):
- 设计了双生成器双鉴别器GAN,通过权值共享机制实现生成器之间和鉴别器之间的耦合,通过全局自注意力机制实现交互式融合;
- 设计耦合CNN-Transformer的特征提取模块(Coupled CNN-T ransformer Feature Extraction Module, CC-TFEM)和特征重构模块(CNN-T ransformer F eature Reconstruction Module, C-TFRM),提升了对同一模态图像内部的局部和全局特征信息提取能力;
- 设计跨模态交互式融合模块(Cross Model Intermodal Fusion Module, CMIFM),通过跨模态自注意力机制,进一步整合不同模态间的全局交互信息。
结果:
在肺部肿瘤PET/CT医学图像数据集上进行实验,模型能够突出病变区域信息,融合图像结构清晰且纹理细节丰富。
1. 引言
-
CT——结构信息,分辨率高
-
PET——功能信息
-
传统:Fusion GAN、FLGC-Fusion GAN
-
双判别器:D2WGAN、DDcGAN、DFPGAN
-
多生成器多判别器:MGMDcGAN、RCGAN
贡献:
- 提出跨模态耦合生成器,处理PET图像中的病灶目标和CT图像中丰富的纹理特征,学习跨模态图像之间的联合分布;提出跨模态耦合鉴别器分别用于计算预融合图像与CT和PET图像间的结构差异,并使训练过程更加稳定。
- 设计耦合CNN-Transformer特征提取模块和CNN-Transformer特征重构模块,结合了Transformer和CNN的优势,在挖掘源图像中局部信息的同时也能学习特征之间的全局交互信息,实现更好的跨模态互补语义信息集成。
- 提出基于SwinTransformer的跨模态交互式融合模块,通过跨模态自注意力机制,可以进一步整合不同模态图像之间的全局交互信息。
2. 双耦合交互式融合DCIF-GAN
2.1 整体网络结构
网络结构:
生成器由基于耦合CNN-Transformer的特征提取模块、跨模态与融合模块和基于联合CNN-Transformer的特征重构模块构成。
鉴别器由四个卷积块和一个Linear层构成,鉴别器的“耦合”通过网络最后几层共享权值,此操作可以有效降低网络的参数量。
关键:权值共享
第一生成器G1的目的是生成具有CT图像纹理信息的预融合图像FCT,
第一鉴别器D1的目的是计算FCT与源PET图像的相对偏移量并反馈,以增强FCT中的功能信息;
第二生成器G2用于生成具有PET图像功能信息的预融合图像FPET,
第二鉴别器D2计算FPET与源CT图像的相对偏移量并反馈,以增强FPET中的纹理信息。
随着迭代次数的增加,两个生成器都可以生成足以欺骗鉴别器的预融合图像,生成的图像分别会相对偏向于其中一幅源图像,故将生成的两幅预融合图像进行加权融合,得到最终的融合图像IF。
网络的极大极小博弈可以表示为:
min G 1 , G 2 max D 1 , D 2 L ( G 1 , G 2 , D 1 , D 2 ) = E I P E T [ log D 1 ( I P E T ) ] + E I C T [ log ( 1 − D 1 ( G 1 ( I C T ) ) ) ] + E I C T [ log D 2 ( I C T ) ] + E I P E T [ log ( 1 − D 2 ( G 2 ( I P E T ) ) ) ] \begin{aligned} \min_{G_1, G_2} \max_{D_1, D_2} L(G_1, G_2, D_1, D_2) = \mathbb{E}_{I_{PET}} \left[ \log D_1(I_{PET}) \right] + \mathbb{E}_{I_{CT}} \left[ \log (1 - D_1(G_1(I_{CT}))) \right] + \mathbb{E}_{I_{CT}} \left[ \log D_2(I_{CT}) \right] + \mathbb{E}_{I_{PET}} \left[ \log (1 - D_2(G_2(I_{PET}))) \right] \end{aligned} G1,G2minD1,D2maxL(G1,G2,D1,D2)=EIPET[logD1(IPET)]+EICT[log(1−D1(G1(ICT)))]+EICT[logD2(ICT)]+EIPET[log(1−D2(G2(IPET)))]
2.2 耦合生成器结构
生成器网络结构:
CNN能简单有效提取信息,但感受野有限,捕捉全局背景信息能力弱;
Transformer将整个图像转换为一维向量组输入(解决感受野有限),使用自注意力捕获全局信息(解决只提取局部信息),但全局信息的秩低,降低了前景和背景的可辨别性,融合不明显。
2.2.1 耦合CNN-Transformer特征提取模块(CC-TFEM)
基于CNN的浅层特征提取,局部特征;
基于Swin-Transformer的深层特征提取,全局特征。
2个卷积块+4个STB块
卷积块:一个卷积层(size=3, stride=1)+一个Leaky ReLU层
两个生成器权值共享:
- 有助于学习多模态图像的联合分布;
- 减少参数量。
通过浅层特征提取模块HSE(.)提取源图像 I C T I_{CT} ICT和 I P E T I_{PET} IPET的浅层特征 F S F C T F^{CT}_{SF} FSFCT和 F S F P E T F^{PET}_{SF} FSFPET;
通过深度特征提取模块HDE(.)从 F S F C T F^{CT}_{SF} FSFCT和 F S F P E T F^{PET}_{SF} FSFPET中提取深度特征;
将 F D F C T F^{CT}_{DF} FDFCT和 F D F P E T F^{PET}_{DF} FDFPET输人到跨模态预融合模块(CMIFM)中进行融合。
表述为:
[ F S F C T , F S F P E T ] = [ H S E ( I C T ) , H S E ( I P E T ) ] \begin{bmatrix} F^{CT}_{SF} , F^{PET}_{SF} \end{bmatrix} = \begin{bmatrix} H_{SE}(I_{CT}) , H_{SE}(I_{PET}) \end{bmatrix} [FSFCT,FSFPET]=[HSE(ICT),HSE(IPET)]
[ F D F C T , F D F P E T ] = [ H D E ( F S F C T ) , H D E ( F S F P E T ) ] \begin{bmatrix} F^{CT}_{DF} , F^{PET}_{DF} \end{bmatrix} = \begin{bmatrix} H_{DE}(F^{CT}_{SF}) , H_{DE}(F^{PET}_{SF}) \end{bmatrix} [FDFCT,FDFPET]=[HDE(FSFCT),HDE(FSFPET)]
特征提取模块:
Swin Transformer的局部注意力和窗口机制有效地降低了计算量。
W-MSA(Weighted Multi-Head Self-Attention)将输入特征 F H × W × C F^{H×W×C} FH×W×C划分为不重叠的 M × M M×M M×M的局部窗口,重构为 H W M 2 × M 2 × C \frac{HW}{M^2} \times M^2 \times C M2HW×M2×C;每个窗口执行自注意力操作,局部窗口特征 X ∈ R M 2 × C X \in \mathbb{R}^{M^2 \times C} X∈RM2×C,经过三个线性变换矩阵 W Q ∈ R M 2 × C W^Q \in \mathbb{R}^{M^2 \times C} WQ∈RM2×C, W K ∈ R M 2 × C W^K \in \mathbb{R}^{M^2 \times C} WK∈RM2×C, W V ∈ R M 2 × C W^V \in \mathbb{R}^{M^2 \times C} WV∈RM2×C投影到Q,K,V:
[ Q , K , V ] = [ X W Q , X W K , X W V ] [Q, K, V] = [XW^Q, XW^K, XW^V] [Q,K,V]=[XWQ,XWK,XWV]
注意力权重为:
Attention ( Q , K , V ) = softmax ( Q K T d k + B ) V \text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}} + B\right)V Attention(Q,K,V)=softmax(dkQKT+B)V
d k d_k dk是建的维数,B是相对位置编码。
多头自注意力并行执行h次注意函数,并将每个注意力头的结果连接起来。
通过由两个多层感知器(MLP)层组成的前馈网络(Feed Forward Network, FFN)来细化W-MSA产生的特征向量,表述为:
Z ~ l = MSA ( LN ( Z l − 1 ) ) + Z l − 1 \tilde{Z}^l = \text{MSA}(\text{LN}(Z^{l-1})) + Z^{l-1} Z~l=MSA(LN(Zl−1))+Zl−1
Z l = FFN ( LN ( Z ~ l ) ) + Z ~ l \quad Z^l = \text{FFN}(\text{LN}(\tilde{Z}^l)) + \tilde{Z}^l Zl=FFN(LN(Z~l))+Z~l
前馈网络FNN(∙),表述为:
F F N ( X ) = G E L U ( W 1 + b 1 ) W 2 + b 2 FFN ( X ) = GELU (W_1 + b_1 ) W_2 + b_2 FFN(X)=GELU(W1+b1)W2+b2
GELU为高斯误差线性单元。
Swin Transformer 层计算注意力的滑动窗口机制,W-MSA的弊端在于窗口之间的相互作用较弱,引人SW-MSA模块,向左上方向循环移动,产生新的批窗口。
2.2.2 跨模态交互式融合模块(CMIFM)
4个融合块(FB)
通过自注意力将特征图映射到Q、K、V,通过跨模态自注意力交换K、V,实现全局特征融合。
其余小块类似2.2.1。
跨模态融合单元的过程定义为:
[ Q 1 , K 1 , V 1 ] = [ X 1 W 1 Q , X 1 W 1 K , X 1 W 1 V ] [ Q 2 , K 2 , V 2 ] = [ X 2 W 2 Q , X 2 W 2 K , X 2 W 2 V ] Attention 1 ( Q 1 , K 2 , V 2 ) = softmax ( Q 1 K 2 T d k + B ) V 2 Attention 2 ( Q 2 , K 1 , V 1 ) = softmax ( Q 2 K 1 T d k + B ) V 1 Z ~ 1 l = W − MSA ( LN ( Z 1 l − 1 ) ) + Z 1 l − 1 Z ~ 2 l = W − MSA ( LN ( Z 2 l − 1 ) ) + Z 2 l − 1 Z 1 l = FFN ( LN ( Z ~ 1 l ) ) + Z ~ 1 l Z 2 l = FFN ( LN ( Z ~ 2 l ) ) + Z ~ 2 l \begin{align*} [Q_1, K_1, V_1] &= [X_1 W_{1}^{Q}, X_1 W_{1}^{K}, X_1 W_{1}^{V}] \\ [Q_2, K_2, V_2] &= [X_2 W_{2}^{Q}, X_2 W_{2}^{K}, X_2 W_{2}^{V}] \\ \text{Attention}_1(Q_1, K_2, V_2) &= \text{softmax}\left(\frac{Q_1 K_2^T}{\sqrt{d_k}} + B\right)V_2 \\ \text{Attention}_2(Q_2, K_1, V_1) &= \text{softmax}\left(\frac{Q_2 K_1^T}{\sqrt{d_k}} + B\right)V_1 \\ \tilde{Z}^l_1 &= W - \text{MSA}(\text{LN}(Z^{l-1}_1)) + Z^{l-1}_1 \\ \tilde{Z}^l_2 &= W - \text{MSA}(\text{LN}(Z^{l-1}_2)) + Z^{l-1}_2 \\ Z^l_1 &= \text{FFN}(\text{LN}(\tilde{Z}^l_1)) + \tilde{Z}^l_1 \\ Z^l_2 &= \text{FFN}(\text{LN}(\tilde{Z}^l_2)) + \tilde{Z}^l_2 \end{align*} [Q1,K1,V1][Q2,K2,V2]Attention1(Q1,K2,V2)Attention2(Q2,K1,V1)Z~1lZ~2lZ1lZ2l=[X1W1Q,X1W1K,X1W1V]=[X2W2Q,X2W2K,X2W2V]=softmax(dkQ1K2T+B)V2=softmax(dkQ2K1T+B)V1=W−MSA(LN(Z1l−1))+Z1l−1=W−MSA(LN(Z2l−1))+Z2l−1=FFN(LN(Z~1l))+Z~1l=FFN(LN(Z~2l))+Z~2l
对于 CT 域中的 Q1,它通过对 PET 域中的 K2和 V2进行注意力加权来整合跨模态信息,同时通过残差连接保留 CT 域中的信息,PET 域中同理。
F DF CT = H conv1 ( F A F C T ) F^{\text{CT}}_{\text{DF}} = H_{\text{conv1}}(F^{CT}_{AF}) FDFCT=Hconv1(FAFCT)
F DF PET = H conv2 ( F A F PET ) F^{\text{PET}}_{\text{DF}} = H_{\text{conv2}}(F^{\text{PET}}_{AF}) FDFPET=Hconv2(FAFPET)
F A F C T F^{CT}_{AF} FAFCT和 F A F PET F^{\text{PET}}_{AF} FAFPET表示CMIFM以 F D F C T F^{CT}_{DF} FDFCT和 F D F PET F^{\text{PET}}_{DF} FDFPET为输入而融合输出的特征;
H conv H_{\text{conv}} Hconv表示具有空间不变滤波器的卷积层;
F A F C T F^{CT}_{AF} FAFCT和 F A F PET F^{\text{PET}}_{AF} FAFPET表示融合的 CT 图像和 PET 图像的深度特征。
2.2.3 CNN-Transformer 特征重构模块(CTFRM)
2个STB块+2个卷积块(size=3, stride=1)+Leaky ReLU
生成预融合的图像
表述为:
F F S F C T = H D R ( F F D F C T + F S F C T ) F^{CT}_{FSF} = H_{DR}(F^{CT}_{FDF} + F^{CT}_{SF}) FFSFCT=HDR(FFDFCT+FSFCT)
F F S F P E T = H D R ( F F D F P E T + F S F P E T ) F^{PET}_{FSF} = H_{DR}(F^{PET}_{FDF} + F^{PET}_{SF}) FFSFPET=HDR(FFDFPET+FSFPET)
F C T = H S R ( F F S F C T ) F^{CT} = H_{SR}(F^{CT}_{FSF}) FCT=HSR(FFSFCT)
F P E T = H S R ( F F S F P E T ) F^{PET} = H_{SR}(F^{PET}_{FSF}) FPET=HSR(FFSFPET)
H D R H_{DR} HDR是STB块的深度特征重构单元; H S R H_{SR} HSR是基于CNN的浅层重构单元。
2.2.4 损失函数
以第一生成器为例:
G1总损失:
L G 1 = Φ ( G 1 ) + α L content 1 L_{G1} = \Phi(G_1) + \alpha L_{\text{content}1} LG1=Φ(G1)+αLcontent1
Φ ( G 1 ) \Phi(G_1) Φ(G1)表示对抗损失, L c o n t e n t 1 L_{content1} Lcontent1表示G1从源图像到预融合图像的损失, α \alpha α表示控制源PET图像信息含量比例。
Φ ( G 1 ) \Phi(G_1) Φ(G1)对抗损失:
Φ ( G 1 ) = 1 N ∑ n = 1 N ( D 1 ( F C T n , I P E T n ) − I P E T n ) 2 \Phi(G_1) = \frac{1}{N} \sum_{n=1}^{N} \left( D_1(F^n_{CT}, I^n_{PET}) - I^n_{PET} \right)^2 Φ(G1)=N1n=1∑N(D1(FCTn,IPETn)−IPETn)2
L c o n t e n t 1 L_{content1} Lcontent1内容损失:
L content 1 = L int ( C T ) + μ L ssim ( C T ) L_{\text{content}1} = L_{\text{int}(CT)} + \mu L_{\text{ssim}(CT)} Lcontent1=Lint(CT)+μLssim(CT)
L i n t L_{int} Lint 和 L s s i m L_{ssim} Lssim 表示强度损失函数和结构相似度损失函数,μ 表示正则化参数。
第二生成器同理。
2.3 耦合鉴别器结构
不仅要考虑生成器和鉴别器之间的对抗关系,还要考虑两个鉴别器之间的平衡。
4个卷积块+1个线性层
卷积块:1个卷积层(size=3, stride=2, channel=32, 64, 128, 256)+1个BN层+1个Leaky ReLU层。
线性层:将特征图转化为输出,表示融合图像与相应源图像之间的相对距离。
鉴别器中第三、第四卷积块和线性层的共享权值。
以第一鉴别器为例:
D1的目的是通过损失函数使第一个预融合图像 F C T F_{CT} FCT逼近源PET图像:
D1的损失函数表示为:
L 1 = D 1 ( I P E T , F C T ) L_1 = D_1(I_{PET}, F_{CT}) L1=D1(IPET,FCT)
D1的函数表示为:
D 1 ( I P E T , F C T ) = C 1 ( I P E T ) − E F C T ( C 1 ( F C T ) ) D_1(I_{PET}, F_{CT}) = C_1(I_{PET}) - E_{F_{CT}}(C_1(F_{CT})) D1(IPET,FCT)=C1(IPET)−EFCT(C1(FCT))
E是期望输出值,C1表示第一鉴别器的非线性变换。
跨模态耦合鉴别器允许单个生成的图像具有相反图像的信息。但所得到的图像仍有一定程度的偏置,因此将生成的两幅图像进行平均,得到最终的融合结果F为:
F = 0.5 × ( F C T + F P E T ) F = 0.5 \times (F_{CT} + F_{PET}) F=0.5×(FCT+FPET)
3. 实验结果与分析
3.1 实验设置
数据集:1000 组已配准的肺部肿瘤PET和CT影像。
图像大小:356 pixel×356 pixel
将原始 RGB 三通道图像转换为灰度图像。
按照 6∶2∶2 比例划分为训练集、验证集和测试集。
lr=0.0001, epoch=1000, batch=4
评价指标:AG、SF、SSIM、SD、MI、PSNR、IE、 Q A B / F Q^{AB/F} QAB/F
3.2 对比试验
3.2.1 实验一:PET/CT肺窗
实验一图像融合结果:
实验一图像融合结果评价:
3.2.2 实验二:PET/CT纵膈窗
实验一图像融合结果:
实验一图像融合结果评价:
3.3 消融实验
Network1:单生成器单鉴别器GAN
Network2:跨模态耦合生成器和跨模态耦合鉴别器
Network3:耦合 CNN-Transformer 特征提取模块
Network4:跨模态特征融合模块
消融实验结果:
消融实验结果评价:
4. 结论
本文模型得到的融合图像符合人类视觉感知,能够较好地融合 PET 图像中的病灶信息和 CT 图像中的纹理信息,有助于医生更快速、更精准地定位肺部肿瘤在解剖结构中的位置。
相关文章:
论文阅读:PET/CT Cross-modal medical image fusion of lung tumors based on DCIF-GAN
摘要 背景: 基于GAN的融合方法存在训练不稳定,提取图像的局部和全局上下文语义信息能力不足,交互融合程度不够等问题 贡献: 提出双耦合交互式融合GAN(Dual-Coupled Interactive Fusion GAN,DCIF-GAN&…...
java基础 day1
学习视频链接 人机交互的小故事 微软和乔布斯借鉴了施乐实现了如今的图形化界面 图形化界面对于用户来说,操作更加容易上手,但是也存在一些问题。使用图形化界面需要加载许多图片,所以消耗内存;此外运行的速度没有命令行快 Wi…...
cpp,git,unity学习
c#中的? 1. 空值类型(Nullable Types) ? 可以用于值类型(例如 int、bool 等),使它们可以接受 null。通常,值类型不能为 null,但是通过 ? 可以表示它们是可空的。 int? number null; // …...
HTML增加文本复制模块(使用户快速复制内容到剪贴板)
增加复制模块主要是为了方便用户快速复制内容到剪贴板,通常在需要提供文本信息可以便捷复制的网页设计或应用程序中常见。以下是为文本内容添加复制按钮的一个简单实现步骤: HTML结构: 在文本旁边添加一个复制按钮,例如 <butto…...
Spring Cloud面试题收集
Spring Cloud Spring cloud 是一系列框架的有序集合。它利用 spring boot 的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用 spring boot 的开发风格做到一键启动和部署。…...
观测云对接 SkyWalking 最佳实践
简介 SkyWalking 是一个开源的 APM(应用性能监控)和可观测性分析平台,专为微服务、云原生架构和基于容器的架构设计。它提供了分布式追踪、服务网格遥测分析、度量聚合和可视化一体化的解决方案。如果您的应用中正在使用SkyWalking …...
AI少女/HS2甜心选择2 仿天刀人物卡全合集打包
内含AI少女/甜心选择2 仿天刀角色卡全合集打包共21张 下载地址:https://www.51888w.com/408.html 部分演示图:...
MISC - 第11天(练习)
前言 各位师傅大家好,我是qmx_07,今天继续讲解MISC的相关知识 john-in-the-middle 导出http数据文件里面logo.png 是旗帜图案,放到stegsolve查看 通过转换颜色,发现flag信息 flag{J0hn_th3_Sn1ff3r} [UTCTF2020]docx 附件信息…...
[3.4]【机器人运动学MATLAB实战分析】PUMA560机器人逆运动学MATLAB计算
PUMA560是六自由度关节型机器人,其6个关节都是转动副,属于6R型操作臂。各连杆坐标系如图1,连杆参数如表1所示。 图1 PUMA560机器人的各连杆坐标系 表1 PUMA560机器人的连杆参数 用代数法对其进行运动学反解。具体步骤如下: 1、求θ1 PMUMA56...
centos常用知识和命令
linux目录及结构 /etc #存配置文件 /var #存日志文件 /home #用户家目录 /root #root用户家目录 /bin #命令文件目录 /sbin #超级管理员命令目录 /dev #设备文件目录 /boot #系统启动核心目录 /lib #库文件目录 /mnt #挂载目录 /tmp #临时文件目录 /usr #用户程序存…...
基于yolov8调用本地摄像头并将读取的信息传入jsonl中
最近在做水面垃圾识别的智能船 用到了yolov8进行目标检测 修改并添加了SEAttention注意力机制 详情见其他大神 【保姆级教程|YOLOv8添加注意力机制】【1】添加SEAttention注意力机制步骤详解、训练及推理使用_yolov8添加se-CSDN博客 并且修改传统的iou方法改为添加了wise-io…...
Linux中的进程间通信之管道
管道 管道是Unix中最古老的进程间通信的形式。 我们把从一个进程连接到另一个进程的一个数据流称为一个“管道” 匿名管道 #include <unistd.h> 功能:创建一无名管道 原型 int pipe(int fd[2]); 参数 fd:文件描述符数组,其中fd[0]表示读端, fd[1]表示写端 …...
【Vue】vue2项目打包后部署刷新404,配置publicPath ./ 不生效问题
Vue Router mode,为 history 无效,建议使用默认值 hash;...
【PyTorch】生成对抗网络
生成对抗网络是什么 概念 Generative Adversarial Nets,简称GAN GAN:生成对抗网络 —— 一种可以生成特定分布数据的模型 《Generative Adversarial Nets》 Ian J Goodfellow-2014 GAN网络结构 Recent Progress on Generative Adversarial Networks …...
Vue3轻松实现前端打印功能
文章目录 1.前言2.安装配置2.1 下载安装2.2 main.js 全局配置3.综合案例3.1 设置打印区域3.2 绑定打印事件3.3 完整代码4.避坑4.1 打印表格无边框4.2 单选框复选框打印不选中4.3 去除页脚页眉4.4 打印內容不自动换行1.前言 vue3 前端打印功能主要通过插件来实现。 市面上常用的…...
SHA-1 是一种不可逆的、固定长度的哈希函数,在 Git 等场景用于生成唯一的标识符来管理对象和数据完整性
SHA-1 (Secure Hash Algorithm 1) 是一种加密哈希函数,它能将任意大小的数据(如文件、消息)转换为一个固定长度的 160 位(20 字节)哈希值。这种哈希值通常以 40 个十六进制字符的形式表示,是数据的“指纹”…...
Activiti7 工作流引擎学习
目录 一. 什么是 Activiti 工作流引擎 二. Activiti 流程创建步骤 三. Activiti 数据库表含义 四. BPMN 建模语言 五. Activiti 使用步骤 六. 流程定义与流程实例 一. 什么是 Activiti 工作流引擎 Activiti 是一个开源的工作流引擎,用于业务流程管理…...
pytorch使用LSTM模型进行股票预测
文章目录 tushare获取股票数据数据预处理构建模型训练模型测试模型tushare获取股票数据 提取上证指数代码为603912的股票:佳力图,时间跨度为2014-01-01到今天十年的数据。 import tushare as ts pro = ts.pro_api()#准备训练集数据df = ts.pro_bar(ts_code=603912.SH, star…...
掌握 C# 异常处理机制
在任何编程语言中,处理错误和异常都是不可避免的。C# 提供了强大的异常处理机制,可以帮助开发者优雅地捕获和处理程序中的异常,确保程序的健壮性和可靠性。本文将带你了解 C# 中的异常类、try-catch 语句、自定义异常以及 finally 块的使用。…...
【Redis】Redis Cluster 简单介绍
Redis Cluster 是 Redis 3.0 提供的一种分布式解决方案, 允许数据在多个节点之间分散存储, 从而实现高可用性和可扩展性。 特点: 分片: Redis Cluster 将数据分散到多个节点, 通过哈希槽 (hash slots) 机制将键映射到不同的节点上。总共有 16384 个哈希槽, 每个节点负责一部分…...
【EXCEL数据处理】000010 案列 EXCEL文本型和常规型转换。使用的软件是微软的Excel操作的。处理数据的目的是让数据更直观的显示出来,方便查看。
前言:哈喽,大家好,今天给大家分享一篇文章!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 【EXCEL数据处理】000010 案列 EXCEL单元格格式。EXCEL文本型和常规型转…...
golang grpc进阶
protobuf 官方文档 基本数据类型 .proto TypeNotesGo Typedoublefloat64floatfloat32int32使用变长编码,对于负值的效率很低,如果你的域有可能有负值,请使用sint64替代int32uint32使用变长编码uint32uint64使用变长编码uint64sint32使用变长…...
Java JUC(三) AQS与同步工具详解
Java JUC(三) AQS与同步工具详解 一. ReentrantLock 概述 ReentrantLock 是 java.util.concurrent.locks 包下的一个同步工具类,它实现了 Lock 接口,提供了一种相比synchronized关键字更灵活的锁机制。ReentrantLock 是一种独占…...
使用rust写一个Web服务器——async-std版本
文章目录 实现异步代码并发地处理连接使用多线程提升性能 使用rust实现一个异步运行时是async-std的单线程Web服务器。 仓库地址: 1037827920/web-server: 使用rust编写的简单web服务器 (github.com) 在之前的单线程版本的Web服务器代码上进行修改,具体…...
C语言复习概要(一)
本文 C语言入门详解:从基础概念到分支与循环1. C语言常见概念1.1 程序的基本结构1.2 变量作用域和存储类1.3 输入输出1.4 编译与运行 2. C语言中的数据类型和变量2.1 基本数据类型2.2 变量的声明与初始化2.3 常量与枚举 3. C语言的分支结构3.1 if语句3.2 if-else语句…...
二、kafka生产与消费全流程
一、使用java代码生产、消费消息 1、生产者 package com.allwe.client.simple;import lombok.extern.slf4j.Slf4j; import org.apache.kafka.clients.producer.KafkaProducer; import org.apache.kafka.clients.producer.ProducerConfig; import org.apache.kafka.clients.pr…...
本地搭建OnlyOffice在线文档编辑器结合内网穿透实现远程协作
文章目录 前言1. 安装Docker2. 本地安装部署ONLYOFFICE3. 安装cpolar内网穿透4. 固定OnlyOffice公网地址 前言 本篇文章讲解如何使用Docker在本地Linux服务器上安装ONLYOFFICE,并结合cpolar内网穿透实现公网访问本地部署的文档编辑器与远程协作。 Community Editi…...
ScrapeGraphAI 大模型增强的网络爬虫
在数据驱动的动态领域,从在线资源中提取有价值的见解至关重要。从市场分析到学术研究,对特定数据的需求推动了对强大的网络抓取工具的需求。 NSDT工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线…...
PDF转换为TIF,JPG的一个简易工具(含下载链接)
目录 0.前言: 1.工具目录 2.工具功能(效果),如何运行 效果 PDF转换为JPG(带颜色) PDF转换为TIF(LZW形式压缩,可以显示子的深浅) PDF转换为TIF(CCITT形…...
Wireshark 解析QQ、微信的通信协议|TCP|UDP
写在前面 QQ,微信这样的聊天软件。我们一般称为im,Instant Messaging,即时通讯系统。那大家会不会有疑问,自己聊天内容会不会被黑客或者不法分子知道?这种体量的im是基于tcp还是udp呢?这篇文章我们就来探索…...
合肥 电子商务 网站建设/江苏seo网络
关于人脑与电脑区别的英语作文导语:关于人脑与电脑之间的区别你怎么看?其实机器最终是不能战胜人脑的这一选项很在之前科学家就已经争辩过。以下是小编为大家收集的一篇关于人脑与电脑区别的英语作文。供大家参考阅读。希望喜欢。关于人脑与电脑区别的英语作文The …...
衡阳网站制作公司/bt鹦鹉磁力
考试安排 7:30~7:40 先看了一遍题,发现有做过的原题 7:40~8:00 T2直接莫反一下就可以做到O(nn)O(n\sqrt n)O(nn),于是赶紧写,写完感觉没问题 8:00~8:20 T3没什么思路,先写了一个暴力的状压 8:30~9:00 突然想到可以容斥&…...
怎么做自己地网站/百度seo培训要多少钱
数组字面量中使用展开运算符 我们可以这样合并数组: var arr1[a,b,c]; var arr2[...arr1,d,e]; //[a,b,c,d,e] 展开运算符也可以用在push函数中,可以不用再用apply()函数来合并两个数组: var arr1[a,b,c]; var arr2[d,e]; arr1.push(...arr2…...
景宁县建设局网站/无锡seo优化
网上找了很多关于springbootdruidmybatis-Plus的配置,遇见的很多问题 也没找到好的解决方案。折腾了好几天终于自己配置通过了。springboot的pom文件1 2 org.springframework.boot3 spring-boot-starter-parent4 2.0.4.RELEASE5 6 78 9 UTF-810 UTF-811 1.812 2.2.0…...
网站设计官网/百度网盘搜索免费资源
Ubuntu 12.10忘记登录密码 ,如何找回/修改?1、在开机的时候,迅速按shift键,此时出现grub界面,2、进入recovery mode 模式,按下 e 进行编辑,3、进入如下:4,修改 ro recove…...
杭州网站制作武汉/百度网盟推广官方网站
构造可靠数据传输 rdt(reliable data transfer protocol,可靠数据传输协议) 什么是可靠? 不错、不丢、不乱 1.rdt1.0:可靠信道上的可靠数据传输 最简单的情况即为底层信道是完全可靠的,则该协议非常简…...