从多模态生物图数据中学习Gene的编码-MuSeGNN

news2024/11/19 20:44:42

由于数据的异质性,在不同的生物医学背景下发现具有相似功能的基因对基因表示学习提出了重大挑战。在本研究中,作者通过引入一种称为多模态相似性学习图神经网络的新模型来解决这个问题,该模型结合了多模态机器学习和深度图神经网络,从单细胞测序和空间转录组数据中学习基因表示。利用来自10个组织、3种测序技术和3个物种的82个训练数据集,作者创建了用于模型训练和基因表示生成的信息图结构,同时结合正则化与加权相似学习和对比学习来学习跨数据集的基因-基因关系。这种新颖的设计确保了我们可以在联合空间中提供包含不同上下文功能相似性的基因表示。全面的基准分析表明,模型能够有效地捕获多种模态下的基因功能相似性,在基因表示学习方面比最先进的方法高出97.5%。此外,作者将生物信息学工具与基因表征相结合,以揭示pathway富集、调控网络以及疾病相关或剂量敏感基因的功能。因此,该模型有效地为基因功能、组织功能、疾病和物种进化的分析提供了统一的基因表示。

来自:MuSe-GNN: Learning Unified Gene Representation From Multimodal Biological Graph Data
工程地址:https://github.com/HelloWorldLTY/MuSe-GNN

目录

  • 背景概述
  • 相关工作
    • 基因共表达网络分析
    • 基于网络的生物表示学习
    • 图Transformer
  • 方法
    • 前言
    • 图构建
    • Cross-Graph Transformer
    • 图重建损失
    • 相似性权重学习
    • 自监督图对比学习
  • Reference

背景概述

生物技术的进步扩大了生物数据的多样性。这种技术的一个主要例子是单细胞测序,它允许对单个细胞内的遗传信息进行全面表征。该技术提供了获取细胞转录组学、表观基因组学和蛋白质组学全部信息的途径,包括基因表达scRNA-seq、染色质可及性scATAC-seq、甲基化和抗体。通过对来自同一组织的不同时间点的细胞进行测序,我们还可以深入了解细胞活动随时间变化的模式。此外,细胞活动的空间信息代表了一个同样重要的额外维度。这样的数据被定义为空间数据。所有这些数据都被称为多组学数据,整合多组学数据是一个重大挑战。

然而,传统的以细胞为anchor的多组学数据整合思路不是完全适用的[56,87,39],因为存在以下挑战:

  • 不同组学数据本身具有挑战。例如,空间转录组数据的观察单位与其他单细胞数据不同,因为单个空间位置包含来自不同细胞的混合信息(见图1a左侧部分),因此不适合基于基因表达相似性生成空间簇。目前的研究也表明染色体可及性特征并不是细胞水平上基因表达的有力预测因子[86]。
  • atlas-level的研究中庞大的数据量对高性能计算提出了挑战,往往存在内存不足或超时错误的风险。由于人体有近37.2万亿个细胞,综合分析在计算上具有很大的难度。而且,严重的批次效应可能通过引入噪声对分析结果产生不利影响。

因此,迫切需要一种专注于多组学和多组织数据(称为多模态生物数据)分析的高效而强大的方法来应对这些挑战。

由于认识到细胞导向的观点所带来的困难,先前的工作开始将重点转移到基因视角。基于物种进化过程中的自然选择,使用基因集作为表达谱的总结,可能会提供更可靠的依据[8]。蛋白质编码相关的基因也被认为与药物具有相互作用[19],这与疾病和药物发现更相关。Gene2vec是受Word2vec启发的一种方法,它通过从共表达网络中生成skip-gram对来学习基因表示。最近,基于Node2vec和OhmNet的基于基因的数据整合与分析技术(gene -based data Integration and ANalysis Technique, GIANT)[16]被开发出来,用于学习单细胞和空间数据集中的基因表示。然而,如图1b所示,基于这两种模型的基因嵌入,没有观察到来自不同数据集但同一组织的基因的显著功能聚类,因为这些方法没有从不同的多模态数据推断相关基因的相似性。此外,他们没有提供定量评估基因嵌入性能的指标。

在这里,作者从基因的角度介绍了一种新的多模态相似学习图神经网络MuSe-GNN,用于多模态生物数据整合。MuSe-GNN的整体工作流程如图1a所示。图1b显示与GIANT和Gene2vec相比,MuSe-GNN通过合适的模型结构和新颖的损失函数,在跨数据集的基因之间学习功能相似性的能力更强。MuSe-GNN利用权值共享GNN将不同模态的基因编码到一个由相似学习策略和对比学习策略正则化的共享空间中。在单图层面,图神经网络的设计保证了MuSe-GNN能够学习到每个共表达网络中的邻居信息,从而保持基因功能的相似性。在跨数据层面,相似学习策略确保MuSe-GNN能够将功能相似的基因整合到一个共同的簇中,而对比学习策略则有助于区分功能不同的基因。

fig1

  • 图1:介绍了MuSe-GNN的工作流程、基因嵌入的可视化以及GIANT和Gene2vec两种现有方法存在的问题。
  • a:MuSe-GNN学习基因嵌入的过程。在这里,作者强调单细胞数据和空间数据的区别,以及基因嵌入的主要应用。单细胞数据中的每个点代表一个细胞,而空间数据中的每个点代表混合细胞。
  • b:MuSe-GNN、Gene2vec和GIANT基因嵌入的UMAPs。它们是按数据集着色的。基于UMAPs,可以得出结论,Gene2vec和GIANT都未能基于来自同一组织的数据集学习基因相似性,而MuSe-GNN产生了与数据集无关的有意义的嵌入。

这是第一篇将多模态机器学习MM-ML概念与GNNs设计相结合的基因表示学习论文。这两种方法在SOTA机器学习研究中都很普遍,这激发了作者将它们应用于大规模多模态生物数据集的联合分析。作为应用实例,作者首先使用MuSe-GNN生成的基因嵌入来研究人体基因调控的关键生物过程和网络。然后,还将该模型应用于分析COVID和癌症数据集,旨在揭示基于特定差异共表达基因的潜在抗病机制或并发症。最后,利用MuSe-GNN的基因嵌入来提高基因功能的预测精度。在这里,基因共表达意味着两个基因与同一边相连。

鉴于缺乏评估基因嵌入的明确指标,作者提出了六个指标,灵感来自单细胞数据分析中的批次整合问题。作者使用来自一种技术的真实生物数据集来评估模型,基准测试结果表明MuSe-GNN在综合评估中从20.1%显着提高到97.5%。为了总结模型的优势,MuSe-GNN解决了关于跨数据基因相似性学习的问题,并提供了四个主要贡献:

  • 为多结构生物数据提供了一种有效的表示学习方法。
  • 将来自不同组学和组织数据的基因整合到一个联合空间中,同时保留生物异质性。
  • 用相似性函数识别共表达基因。
  • 推断基因的特殊网络以及基因与生物通路或基因与疾病之间的关系。

相关工作

基因共表达网络分析

虽然跨模态的基因功能联合分析的直接尝试是有限的,目前在识别基于单个数据集的相关网络方面存在研究。WGCNA[52]是一种采用分层聚类识别具有共享功能基因模块的代表性方法。然而,作为一种早期工具,WGCNA的功能有限。总之,对共表达网络的推断需要更严格的方法,并且应该应用于多模态数据。

基于网络的生物表示学习

除了直接生成基因共表达网络外,也可以在低维空间中学习定量的基因表示从而更好地描述基因关系并促进下游分析。Gene2vec基于给定数据库的共表达网络生成基因嵌入。然而,它忽略了表达谱信息,并基于2017年之前的旧基因表达Omnibus (GEO)。GIANT利用Node2vec和OhmNet,通过构造图进行训练,从单细胞和空间数据集中学习基因表示。然而,这种方法仍然通过去除表达谱来过度压缩多模态生物数据集。此外,由Pearson correlation建立的共表达网络具有较高的假阳性率。此外,GIANT使用的一些数据集质量很低。也有一些方法共享了从其他数据集学习嵌入的类似目标。GSS旨在使用主成分分析(PCA)和聚类分析从bulk-seq数据集中学习一组所有基因的通用表示。然而,它是用于bulk测序数据,不能直接应用于来自不同组织的单细胞数据集。Gemini[103]专注于整合不同的蛋白质功能网络,用图节点代表蛋白质而不是基因。

图Transformer

在深度学习领域,Transformer是最成功的模型之一,它利用了seq2seq结构设计、多头自注意力设计和位置编码设计。许多研究人员试图将Transformer的优点结合到图结构学习中。TransformConv[81]为监督分类任务的图版本引入了多头注意机制,并取得了显著的改进。MAGNA[98]考虑图数据中更高层次的跳关系来增强节点分类能力。Graphomer [110] 使用来自 Open Graph Benchmark Large-Scale Challenge 的数据展示了 Transformer 结构对各种任务的积极影响,GraphomerGD [111] 进一步扩展了该挑战。最近,GPS[75]通过考虑额外的编码类型,提出了一种通用的Graph Transformer。此外,Transformer架构也为一些生物学问题提供了解决方案[113]。scBERT使用预训练模型生成基因和细胞嵌入,以提高细胞类型注释的准确性。总之,这些努力的实质影响突出了Transformer结构对Graph数据学习的重要贡献。

方法

在介绍MuSe-GNN的以下部分中,作者详细说明利用多模态生物数据构建图的不同方法,然后解释所提出的权重共享网络架构和最终损失函数的元素。

前言

GNN,GNNs旨在学习具有图结构数据的节点(特征)的图表示。现代GNNs通过聚合其 k k k阶邻居( k ≥ 1 k≥1 k1)的表示并将其与当前表示结合来迭代更新节点的表示。考虑一个图 G = { V , E } G=\left\{V,E\right\} G={V,E},其节点为 V = { v 1 , . . . , v n } V=\left\{v_{1},...,v_{n}\right\} V={v1,...,vn},节点 v i v_{i} vi的聚合与更新为: a i ( l + 1 ) = A G G R E G A T E ( l + 1 ) ( { h j ( l ) : j ∈ N ( v i ) } ) h i ( l + 1 ) = C O M B I N E ( l + 1 ) ( h i ( l ) , a i ( l + 1 ) ) a_{i}^{(l+1)}=AGGREGATE^{(l+1)}(\left\{h_{j}^{(l)}:j\in N(v_{i})\right\})\\ h_{i}^{(l+1)}=COMBINE^{(l+1)}(h_{i}^{(l)},a_{i}^{(l+1)}) ai(l+1)=AGGREGATE(l+1)({hj(l):jN(vi)})hi(l+1)=COMBINE(l+1)(hi(l),ai(l+1))其中, h i ( l ) h_{i}^{(l)} hi(l) h i ( l + 1 ) h_{i}^{(l+1)} hi(l+1)分别是MPNN前后的节点特征。

问题定义,通过处理多模态生物数据集来解决基因嵌入生成任务,表示为 D = ( { V i , E i } i = 1 T ) D=(\left\{V_{i},E_{i}\right\}_{i=1}^{T}) D=({Vi,Ei}i=1T)。目标是构建模型 M ( ⋅ , θ ) M(\cdot,\theta) M(,θ),设计产生基因embedding集 ε = { e 1 , . . . , e T } = M ( D , θ ) \varepsilon=\left\{e_{1},...,e_{T}\right\}=M(D,\theta) ε={e1,...,eT}=M(D,θ)。本质上,目标是在统一的投影空间内协调来自不同模态的基因信息,从而产生统一的基因表示。

图构建

在构建基因图之前,作者的第一个贡献涉及每个数据集的高可变基因hvg的选择。这些hvg构成了一组具有高度变异的基因,可以代表给定表达谱的生物学功能。此外,作者认为共表达网络对基因表征学习很重要,因为它使我们能够表征基因与基因之间的关系。由于测序深度(测序深度越高,我们对于每个单细胞的RNA表达数据就越准确和全面),或每个细胞的总计数,经常成为共表达网络推断的一个混淆因素[11],作者采用了两种独特的方法,scTransform和CS-CORE,来处理scRNA-seq和scATAC-seq数据,从而创建不受测序深度影响的基因表达谱和共表达网络(基于多模态单细胞数据构建共表达网络-MuSeGNN)。对于空间转录组学数据,重点是显示具有空间表达模式的基因。作者使用SPARK-X识别这些基因,然后应用scTransform和CS-CORE。在生成的所有图中,节点代表基因,边代表基因的共表达关系。

Cross-Graph Transformer

为了在训练过程中利用Transformer模型的优势,作者集成了一个具有多头自注意设计的图神经网络,称为TransformerConv,以合并共表达信息并生成基因嵌入。结合多模态信息可以估计出更准确的基因嵌入。cross-graph transformer可以在不同的图中高效地学习包含基因功能的基因嵌入。

TransformerConv
c c c作为注意力头的index,从节点 j j j到节点 i i i的GNN多头注意力表示为: q c , i ( l ) = W c , q ( l ) h i ( l ) + b c , q ( l ) k c , j ( l ) = W c , k ( l ) h j ( l ) + b c , k ( l ) e c , i j = W c , e e i j + b c , e α c , i j ( l ) = < q c , i ( l ) , k c , j ( l ) , e c , i j > ∑ u ∈ N ( i ) < q c , i ( l ) , k c , u ( l ) , e c , i u > q_{c,i}^{(l)}=W_{c,q}^{(l)}h_{i}^{(l)}+b_{c,q}^{(l)}\\ k_{c,j}^{(l)}=W_{c,k}^{(l)}h_{j}^{(l)}+b_{c,k}^{(l)}\\ e_{c,ij}=W_{c,e}e_{ij}+b_{c,e}\\ \alpha_{c,ij}^{(l)}=\frac{<q_{c,i}^{(l)},k_{c,j}^{(l)},e_{c,ij}>}{\sum_{u\in N(i)}<q_{c,i}^{(l)},k_{c,u}^{(l)},e_{c,iu}>} qc,i(l)=Wc,q(l)hi(l)+bc,q(l)kc,j(l)=Wc,k(l)hj(l)+bc,k(l)ec,ij=Wc,eeij+bc,eαc,ij(l)=uN(i)<qc,i(l),kc,u(l),ec,iu><qc,i(l),kc,j(l),ec,ij>其中, < q , k , e > = e q T k d <q,k,e>=e^{\frac{q^{T}k}{\sqrt{d}}} <q,k,e>=ed qTk d \sqrt{d} d 是用于减少梯度消失的标量。不同的 q q q k k k代表不同的query vector和key vector, e e e代表边的特征。注意力 α c , i j ( l ) \alpha_{c,ij}^{(l)} αc,ij(l)代表第 c c c个注意力头(第 l l l层)输出的从节点 j j j i i i的注意力值。 h h h代表节点embedding。

定义节点embedding h i ( l + 1 ) h_{i}^{(l+1)} hi(l+1)的更新为: v c , j ( l ) = W c , v ( l ) h j ( l ) + b c , v ( l ) h i ( l + 1 ) = ∣ ∣ c = 1 C [ ∑ j ∈ N ( i ) α c , i j ( l ) ( v c , j ( l ) + e c , i j ) ] v_{c,j}^{(l)}=W_{c,v}^{(l)}h_{j}^{(l)}+b_{c,v}^{(l)}\\ h_{i}^{(l+1)}=||_{c=1}^{C}[\sum_{j\in N(i)}\alpha_{c,ij}^{(l)}(v_{c,j}^{(l)}+e_{c,ij})] vc,j(l)=Wc,v(l)hj(l)+bc,v(l)hi(l+1)=c=1C[jN(i)αc,ij(l)(vc,j(l)+ec,ij)]其中, ∣ ∣ c = 1 C ||_{c=1}^{C} c=1C表示 C C C个注意力头的concat。

权重共享
考虑到多模态生物数据集之间的差异性,作者采用了权重共享机制来确保模型在不同的图中学习共享信息,这代表了一种学习交叉图关系的新方法。

数据集和多模态Graph Transformer
对于来自相同模态 m m m的每个graph ( G 1 , G 2 , … , G n ) (G_1, G_2,…, G_n) (G1,G2,,Gn),作者不仅采用了数据集特定的GT layers L 1 , L 2 , … , L n L_1, L_2,…, L_n L1,L2,,Ln,而且还将所有这些数据集特定的layers连接到一组共享的GT层,记为 D m D_m Dm。该设计展示了作者将权重共享纳入GT框架的新方法。给定网络参数为 θ ∗ θ∗ θ的数据集 i i i,MuSe-GNN的计算过程定义如下: X i ′ = D m ( L i ( G i ; θ L i ) ; θ D m ) X_{i}'=D_{m}(L_{i}(G_{i};\theta_{L_{i}});\theta_{D_{m}}) Xi=Dm(Li(Gi;θLi);θDm)

Datasets Decoder
作者提出了一种基于MLP的数据集专用解码器结构。该解码器模型对于重建不同基因之间的共表达关系至关重要。给定图 G i G_i Gi及其对应的基因嵌入 e i e_i ei,则网络参数为 θ d e c , i θ_{dec,i} θdec,i的MuSe-GNN解码过程定义如下: E r e c = M L P ( e i e i T ; θ d e c , i ) E_{rec}=MLP(e_{i}e_{i}^{T};\theta_{dec,i}) Erec=MLP(eieiT;θdec,i)其中 E r e c E_{rec} Erec代表重建的共表达网络。

图重建损失

在单个Graph中,作者实现了一个受图自编码器(GAE)启发的损失函数。这个函数的目的是保持两个关键方面:1具有共同功能的基因之间的相似性,2具有不同功能的基因之间的区别。这种对GAE的损失函数使用构成了对方法设计的贡献。对于图 G i = { V i , E i } G_{i}=\left\{V_{i}, E_{i}\right\} Gi={Vi,Ei},定义edge重建的损失函数为: e i = D m ( L i ( G i ; θ L i ) ; θ D m ) E r e c = M L P ( e i e i T ; θ d e c , i ) e_{i}=D_{m}(L_{i}(G_{i};\theta_{L_{i}});\theta_{D_{m}})\\ E_{rec}=MLP(e_{i}e_{i}^{T};\theta_{dec,i}) ei=Dm(Li(Gi;θLi);θDm)Erec=MLP(eieiT;θdec,i)然后计算 E r e c E_{rec} Erec E i E_{i} Ei之间的BCE L B C E L_{BCE} LBCE(因为重建的是edge)。

相似性权重学习

为了整合来自不同数据集的共享生物信息,作者将输入图结构的重建损失与余弦相似学习损失融合在一起。在这个过程中,作者将每对数据集之间的共同HVG作为anchors。目标是最大化跨数据集的公共HVG的embedding相似度 c o s ( a , b ) cos(a,b) cos(a,b)(图2中的黄色blocks)。然而,在实践中,不同的公共HVG在两个数据集中可能具有不同程度的功能相似度,这很难直接量化。因此,作者采用共享社区得分作为间接度量,将其作为最终损失函数中不同公共HVG pairs余弦相似度的权重。

对于两个Graph G i G_{i} Gi G j G_{j} Gj,其中有一个共享基因 g g g,作者在两个图中得到了给定基因 g g g的共表达基因,记为 N i g N_{ig} Nig N j g N_{jg} Njg。因此,基因 g g g的权值 λ i j g λ_{ijg} λijg可表示为: λ i j g = ∣ N i g ∩ N j g ∣ ∣ N i g ∪ N j g ∣ λ_{ijg}=\frac{|N_{ig}\cap N_{jg}|}{|N_{ig}\cup N_{jg}|} λijg=NigNjgNigNjg我们可以在这两个图之间从1到 n n n遍历所有共享基因,最终得到一个向量 λ i j = [ λ i j 1 , . . . , λ i j n ] \lambda_{ij}=[\lambda_{ij1},...,\lambda_{ijn}] λij=[λij1,...,λijn]。该向量封装了所有公共HVG中两个图之间的相似性。然后,我们可以修改各种基因pair的余弦相似度,首先将这个向量与余弦相似度相乘,然后将所有基因的结果值相加。最终结果取负得到相似度损失 L s i m L_{sim} Lsim

自监督图对比学习

具体而言,在整合多模态生物数据时,作者采用了对比学习策略,以确保功能相似的基因尽可能紧密地聚集在一起,而功能不同的基因则相互分离。作者利用信噪比估计(InfoNCE)作为损失函数的一部分来最大化anchor基因和具有相同功能的基因之间的相互信息。这种损失适用于训练过程中任意两个Graph中的不同基因。一般来说,如果我们表示 N N N个基因的embedding为 G e n e N = { e 1 , . . . , e N } Gene_{N}=\left\{e_{1},...,e_{N}\right\} GeneN={e1,...,eN},InfoNCE被设计为最小化: L i n f o N C E = − E [ l o g e x p ( e ⋅ k + / τ ) ∑ i = 0 K e x p ( e ⋅ k i / τ ) ] L_{infoNCE}=-\mathbb{E}[log\frac{exp(e\cdot k_{+}/\tau)}{\sum_{i=0}^{K}exp(e\cdot k_{i}/\tau)}] LinfoNCE=E[logi=0Kexp(eki/τ)exp(ek+/τ)]其中,样本 { k 0 , k 1 , k 2 … } \left\{k_0, k_1, k_2…\right\} {k0,k1,k2}组成一组基因嵌入,称为一个字典, e e e是一个query基因嵌入。 k + k_{+} k+ k i k_{i} ki分别是 e e e的正样本和负样本。

fig2

  • MuSe-GNN的整体模型架构和损失函数设计。

Reference

[8]Computational principles and challenges in single-cell data integration
[11]Depth normalization for single-cell genomics count data
[16]A unified analysis of atlas single cell data
[19]Dgidb 3.0: a redesign and expansion of the drug–gene interaction database
[39]Integrated analysis of multimodal single-cell data
[52]Wgcna: an r package for weighted correlation network analysis
[56]Clustering of single-cell multi-omics data with a multimodal deep learning method
[75]Recipe for a general, powerful, scalable graph transformer
[81]Masked Label Prediction: Unified Message Passing Model for Semi-Supervised Classification
[86]Dynamic genetic regulation of gene expression during cellular differentiation
[87]Comprehensive Integration of Single-Cell Data
[98]Multi-hop attention graph neural networks
[103]Gemini: memory-efficient integration of hundreds of gene networks with high-order pooling
[110]Do transformers really perform badly for graph representation?
[111]Rethinking the expressive power of GNNs via graph biconnectivity
[113]Applications of transformer-based language models in bioinformatics: A survey

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

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

相关文章

2012年认证杯SPSSPRO杯数学建模C题(第二阶段)碎片化趋势下的奥运会商业模式全过程文档及程序

2012年认证杯SPSSPRO杯数学建模 C题 碎片化趋势下的奥运会商业模式 原题再现&#xff1a; 从 1984 年的美国洛杉矶奥运会开始&#xff0c;奥运会就不在成为一个“非卖品”&#xff0c;它在向观众诠释更高更快更强的体育精神的同时&#xff0c;也在攫取着巨大的商业价值&#…

(React组件基础)前端八股文修炼Day6

一 类组件与函数组件有什么异同 在React中&#xff0c;类组件和函数组件是创建组件的两种主要方式。随着React的发展&#xff0c;尤其是自Hooks在React 16.8中引入以来&#xff0c;函数组件的功能变得更加强大&#xff0c;使得它们能够更加方便地与类组件相竞争。下面是类组件…

打造专业运营团队,武汉星起航引领全球跨境电商未来趋势

近年来&#xff0c;随着全球经济的不断发展&#xff0c;跨境电商作为国际贸易的一种新模式&#xff0c;已然成为推动全球经济增长的新引擎。在这个浩荡的潮流中&#xff0c;武汉星起航以亚马逊自营店铺为依托&#xff0c;凭借丰富的实战运营经验和专业的团队&#xff0c;正积极…

蓝桥杯-dfs搜索模板题(一)

蓝桥杯-dfs搜索模板题&#xff08;一&#xff09; P2089 烤鸡P1088 火星人P1149 火柴棒等式P2036 PERKETP1135 奇怪的电梯结语 P2089 烤鸡 对于每个位置枚举数字 #include<bits/stdc.h>using namespace std;const int N1010;int n;int arr[N];//临时方案 int res0;//方案…

雪球acw_sc__v2 加密参数构造解析

打开雪球网站:https://xueqiu.com/today 首先打开Edge浏览器,清除应用程序里面的cookie 接着,跳转到源代码,刷新网页,进行调试,首先进入debugger模式,需要反debug调试。 输入相关代码,解除subug模式 点击保留日志,这里显示有两次请求,分别分析下。 第一个today返…

回归(maskrcnn)

一、写在前面 虽然粉丝量很少 但是这是一个很好的平台 记录自己的历程 我看了一个很好的讲解视频 我记录一下操作过程4-maskrcnn源码修改方法哔哩哔哩bilibili 作者已经注销帐号了 但内容很好 二、maskrcnn介绍 Mask R-CNN&#xff08;Mask Region-based Convolutional Neur…

经济学 博弈论 行为经济学

四种市场结构&#xff1a; 划分依据&#xff1a;生产者的数量&#xff0c;对价格的控制力&#xff0c;进入市场的难度&#xff08;新的商家进入市场的困难难度&#xff09; 1.完全竞争市场&#xff08;大多数农业产品&#xff1a;草莓&#xff09; 个体商家对价格没有控制力&a…

短视频素材在哪里找?八大平台解决你的创作需求

大家好&#xff01;在短视频创作的过程中&#xff0c;寻找优质的素材网站是非常重要的。那么&#xff0c;短视频素材在哪里找呢&#xff1f;推荐八个主流的视频素材分享网站&#xff0c;话不多说直接上干货。 蛙学网&#xff08;waxue.com&#xff09;——中国 首先要推荐的是…

Mybatis——鉴别器映射

鉴别器映射 有时一个单独的数据库查询会返回很多种不同数据类型的结果集。 discriminator鉴别器元素可以用来处理这种情况 数据库表结构 创建实体类、映射接口和映射文件 实体类employee package org.example.demo2;import lombok.Data;Data public class Employee {priv…

好菜每回味道不同--建造者模式

1.1 炒菜没放盐 中餐&#xff0c;老板需要每次炒菜&#xff0c;每次炒出来的味道都有可能不同。麦当劳、肯德基这些不过百年的洋快餐却能在有千年饮食文化的中国发展的那么好呢&#xff1f;是因为你不管何时何地在哪里吃味道都一样&#xff0c;而鱼香肉丝在我们中餐却可以吃出上…

C语言数据结构专题--顺序表(1基础)

前言 我们在对C语言有一定的了解之后&#xff0c;我们就可以开始数据结构的学习了&#xff0c;数据结构多用指针、结构体、动态内存开辟等知识&#xff0c;若对这些知识还不太了解的朋友&#xff0c;就需要加深其理解了&#xff0c;那么废话不多说&#xff0c;我们正式开始本节…

【C++学习】哈希的应用—位图与布隆过滤器

目录 1.位图1.1位图的概念1.2位图的实现3.位图的应用 2.布隆过滤器2.1 布隆过滤器提出2.2布隆过滤器概念2.3如何选择哈希函数个数和布隆过滤器长度2.4布隆过滤器的实现2.4.1布隆过滤器插入操作2.4.2布隆过滤器查找操作2.4.3 布隆过滤器删除 2.5 布隆过滤器优点2.6布隆过滤器缺陷…

小程序实现微信 【我的】界面

小程序实现仿微信 【我的】界面 一、简介 小程序实现仿微信 【我的】界面 采用 uni-app 实现&#xff0c;可以适用微信小程序、其他各种小程序以及 APP、Web等多个平台 具体实现步骤如下&#xff1a; 下载开发者工具 HbuilderX进入 【Dcloud 插件市场】 搜索 【小程序实现…

HTML基础知识详解(上)(如何想知道html的全部基础知识点,那么只看这一篇就足够了!)

前言&#xff1a;在学习前端基础时&#xff0c;必不可少的就是三大件&#xff08;html、css、javascript &#xff09;&#xff0c;而HTML&#xff08;超文本标记语言——HyperText Markup Language&#xff09;是构成 Web 世界的一砖一瓦&#xff0c;它定义了网页内容的含义和…

SwiftUI 中无法对添加模糊(blur)效果视图截图的初步解决

概览 在 万物皆可截图:SwiftUI 中任意视图(包括List和ScrollView)截图的通用实现 这篇博文里,我们讨论了在 SwiftUI 中对任意视图截图的一般方法。 不过,经码友反应这些方法对添加模糊(blur)效果的视图好像不太灵了。这里,就让我们看看一些可能的应变(Workaround)之…

Vue3:组件间通信-各种通信方式的用法总结

Vue3组件通信和Vue2的区别&#xff1a; 移出事件总线&#xff0c;使用mitt代替。vuex换成了pinia。把.sync优化到了v-model里面了。把$listeners所有的东西&#xff0c;合并到$attrs中了。$children被砍掉了。

用顺序表实现通讯录

前言 这次的通讯录是基于上一篇的动态顺序表的基础上实现的&#xff0c;如果对动态顺序表不熟悉&#xff0c;可以打开这个链接阅读http://t.csdnimg.cn/9zJ5g&#xff0c;这里我们会调用动态顺序表的函数。 如果想看静态顺序表实现通讯录&#xff0c;可以打开这个链接阅读http:…

【Canvas与艺术】绘制蓝色波纹铜质Best Product Guaranteed徽章

【关键点】 使用贝塞尔二次曲线生成环状波纹轮廓。 【成果图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>蓝色波纹铜质…

离线数仓(十)【ADS 层开发】

前言 剩下的 ADS 层主要就是写 SQL 了&#xff0c;就像我们之前练习的 HQL 题一样&#xff0c;不同的是这里的数据从哪张表读取&#xff08;DWD 还是 ADS 甚至个别表需要从 DIM 层读取&#xff09;需要我们自己来分析。 ADS 的建表语句和 MySQL 是对应的&#xff0c;我们到时候…

创意绘图小程序:绘画与实用功能的完美融合

创意绘图小程序&#xff1a;绘画与实用功能的完美融合 在数字化时代&#xff0c;创意绘图小程序以其便捷性、互动性和创新性&#xff0c;成为了人们表达自我、释放创意的新平台。本文将介绍一款集白板画、黑板画功能于一身&#xff0c;同时融合画笔调整、画布清空、橡皮擦清除…