主頁 > 軟體設計 > Shift-GCN網路論文筆記

Shift-GCN網路論文筆記

2020-11-09 22:56:44 軟體設計

Shift-GCN網路論文筆記
FesianXu 20201105 at UESTC

前言

近日筆者在閱讀Shift-GCN[2]的文獻,Shift-GCN是在傳統的GCN的基礎上,用Shift卷積算子[1]取代傳統卷積算子而誕生出來的,可以用更少的引數量和計算量達到更好的模型性能,筆者感覺蠻有意思的,特在此筆記,如有謬誤請聯系指出,轉載請聯系作者并注明出處,謝謝

? \nabla ? 聯系方式:

e-mail: FesianXu@gmail.com

QQ: 973926198

github: https://github.com/FesianXu

知乎專欄: 計算機視覺/計算機圖形理論與應用


Shift-GCN是用于骨骼點序列動作識別的網路,為了講明其提出的背景,有必要先對ST-GCN網路進行一定的了解,

ST-GCN網路

骨骼點序列資料是一種天然的時空圖結構資料,具體分析可見[5,6],針對于這型別的資料,可以用時空圖卷積進行建模,如ST-GCN[4]模型就是一個很好的代表,簡單來說,ST-GCN是在空間域上采用圖卷積的方式建模,時間域上用一維卷積進行建模,

骨骼點序列可以形式化表達為一個時空圖 G = ( V , E ) G = (V,E) G=(V,E),其中有著 N N N個關節點和 T T T幀,骨骼點序列的輸入可以表達為 X ∈ R N × T × d \mathbf{X} \in \mathbb{R}^{N \times T \times d} XRN×T×d,其中 d d d表示維度,為了表示人體關節點之間的連接,我們用鄰接矩陣表達,按照ST-GCN原論文的策略,將人體的鄰接矩陣劃分為三大部分:1)離心群;2)向心群;3)根節點,具體的細節請參考論文[4],每個部分都對應著其特定的鄰接矩陣 A p , p ∈ P \mathbf{A}_p, p\in\mathcal{P} Ap?,pP,其中 p p p表示劃分部分的索引,用符號 F ∈ R N × C \mathbf{F} \in \mathbb{R}^{N \times C} FRN×C F ′ ∈ R N × C ′ \mathbf{F}^{\prime} \in \mathbb{R}^{N \times C^{\prime}} FRN×C分別表示輸入和輸出的特征矩陣,其中 C C C C ′ C^{\prime} C是輸入輸出的通道維度,那么,根據我們之前在GCN系列博文[7,8,9]中介紹過的,我們有最終的人體三大劃分的特征融合為:
F ′ = ∑ p ∈ P A ˉ p F W p (1.1) \mathbf{F}^{\prime} = \sum_{p \in \mathcal{P}} \bar{\mathbf{A}}_p \mathbf{F} \mathbf{W}_p \tag{1.1} F=pP?Aˉp?FWp?(1.1)
其中 P = { 根 節 點 , 離 心 群 , 向 心 群 } \mathcal{P} = \{根節點,離心群,向心群\} P={} A ˉ p = Λ p ? 1 2 A p Λ p ? 1 2 ∈ R N × N \bar{\mathbf{A}}_p = \Lambda_p^{-\frac{1}{2}} \mathbf{A}_p \Lambda_p^{-\frac{1}{2}} \in \mathbb{R}^{N \times N} Aˉp?=Λp?21??Ap?Λp?21??RN×N是標準化后的鄰接矩陣,其中 Λ p i i = ∑ j ( A p i j ) + α \Lambda_p^{ii} = \sum_j(\mathbf{A}_p^{ij})+\alpha Λpii?=j?(Apij?)+α,具體這些公式的推導,見[7,8,9],其中的 W p ∈ R 1 × 1 × C × C ′ \mathbf{W}_p \in \mathbb{R}^{1 \times 1 \times C \times C^{\prime}} Wp?R1×1×C×C是每個人體劃分部分的1x1卷積核的引數,需要演算法學習得出,整個程序如Fig 1.1所示,

stgcn

Fig 1.1 STGCN的示意圖,通過不同的鄰接矩陣可以指定不同的身體劃分部分,通過1x1卷積可以融合通道間的資訊,最后融合不同劃分部分的資訊就形成了新的輸出向量,

ST-GCN的缺點體現在幾方面:

  1. 計算量大,對于一個樣本而言,ST-GCN的計算量在16.2GFLOPs,其中包括4.0GFLOPs的空間域圖卷積操作和12.2GFLOPs的時間一維卷積操作,
  2. ST-GCN的空間和時間感知野都是固定而且需要人為預先設定的,有些作業嘗試采用可以由網路學習的鄰接矩陣的圖神經網路去進行建模[10,11],即便如此,網路的表達能力還是受到了傳統的GCN的結構限制,

Shift-GCN針對這兩個缺點進行了改進,

Shift-GCN

這一章對Shift-GCN進行介紹,Shift-GCN對ST-GCN的改進體現在對于空間資訊(也就是單幀的資訊)的圖卷積改進,以及時序建模手段的改進(之前的作業是采用一維卷積進行建模的),

Spatial Shift-GCN

Shift-GCN是對ST-GCN的改進,其啟發自Shift卷積算子[1],主要想法是利用1x1卷積算子結合空間shift操作,使得1x1卷積同時可融合空間域和通道域的資訊,具體關于shift卷積算子的介紹見博文[12],此處不再贅述,采用shift卷積可以大幅度地減少引數量和計算量,如Fig 2.1所示,對于單幀而言,類似于傳統的Shift操作,可以分為Graph Shift1x1 conv兩個階段,然而,和傳統Shift操作不同的是,之前Shift應用在圖片資料上,這種資料是典型的歐幾里德結構資料[7],資料節點的鄰居節點可以很容易定義出來,因此卷積操作也很容易定義,而圖資料的特點決定了其某個資料節點的鄰居數量(也即是“度”)都可能不同,因此傳統的卷積在圖資料上并不管用,傳統的shift卷積操作也同樣并不能直接在骨骼點資料上應用,那么就需要重新在骨骼點資料上定義shift卷積操作,

作者在[2]中提出了兩種型別的骨骼點Shift卷積操作,分別是:

  1. 區域Shift圖卷積(Local Shift Graph Convolution)
  2. 全域Shift圖卷積(Global Shift Graph Convolution)

下文進行簡單介紹,

shift_gcn_network

Fig 2.1 采用了shift卷積算子的GCN,因為骨骼點序列屬于圖資料,因此需要用特別的手段去定義shift操作,

區域shift圖卷積

在區域shift圖卷積中,依然只是考慮了骨骼點的固有物理連接,這種連接關系與不同資料集的定義有關,具體示例可見博文[13],顯然這并不是最優的,因為很可能某些動作會存在節點之間的“超距”關系,舉個例子,“拍掌”和“看書”這兩個動作更多取決于雙手的距離之間的變化關系,而雙手在物理連接上并沒有直接相連,

盡管區域shift圖卷積只考慮骨骼點的固有連接,但是作為一個好的基線,也是一個很好的嘗試,我們開始討論如何定義區域shift圖卷積,如Fig 2.2所示,為了簡便,我們假設一個骨架的骨骼點只有7個,連接方式如圖所示,不同顏色代表不同的節點,對于其中某個節點 v , v ∈ [ 1 , 7 ] v,v\in[1,7] v,v[1,7]而言,用 B v = { B v 1 , B v 2 , ? ? , B v n } B_v = \{B_v^1,B_v^2,\cdots,B_v^n\} Bv?={Bv1?,Bv2?,?,Bvn?}表示節點 v v v的鄰居節點,其中 n n n v v v鄰居節點的數量,類似于傳統的Shift卷積中所做的,對于每一個節點的特征向量 F v ∈ R C \mathbf{F}_v \in \mathbb{R}^{C} Fv?RC,其中 C C C是通道的數量,我們將通道均勻劃分為 n + 1 n+1 n+1份片區,也即是每一份片區包含有 c = ? C n + 1 ? c = \lfloor \dfrac{C}{n+1} \rfloor c=?n+1C??個通道,我們讓第一份片區保留本節點(也即是 v v v節點本身)的特征,而剩下的 n n n個片區分別從鄰居 B v 1 , B v 2 , ? ? , B v n B_v^1,B_v^2,\cdots,B_v^n Bv1?,Bv2?,?,Bvn?中通過平移(shift)操作得到,如式子(2.1)所示,用 F ∈ R N × C \mathbf{F} \in \mathbb{R}^{N \times C} FRN×C表示單幀的特征,用 F ~ ∈ R N × C \widetilde{\mathbf{F}} \in \mathbb{R}^{N \times C} F RN×C表示圖資料shift操作之后的對應特征,其中 N N N表示節點的數量, C C C表示特征的維度,本例子中 N = 7 , C = 20 N = 7, C = 20 N=7,C=20

F ~ v = F ( v , 0 : c ) ∣ ∣ F ( B v 1 , : 2 c ) ∣ ∣ F ( B v 2 , 2 c : 3 c ) ∣ ∣ ? ∣ ∣ F ( B v n , n c : ) (2.1) \widetilde{\mathbf{F}}_v = \mathbf{F}_{(v,0:c)} || \mathbf{F}_{(B_{v}^{1},:2c)} || \mathbf{F}_{(B_{v}^{2},2c:3c)} || \cdots ||\mathbf{F}_{(B_{v}^{n},nc:)} \tag{2.1} F v?=F(v,0:c)?F(Bv1?,:2c)?F(Bv2?,2c:3c)??F(Bvn?,nc:)?(2.1)

整個例子的示意圖如Fig 2.2所示,其中不同顏色的節點和方塊代表了不同的節點和對應的特征,以節點1和節點2的shift操作為例子,節點1的鄰居只有節點2,因此把節點1的特征向量均勻劃分為2個片區,第一個片區保持其本身的特征,而片區2則是從其對應的鄰居,節點2中的特征中平移過去,如Fig 2.2的Shift for node 1所示,類似的,以節點2為例子,節點2的鄰居有節點4,節點1,節點3,因此把特征向量均勻劃分為4個片區,同樣第一個片區保持其本身的特征,其他鄰居節點按照序號升序排列,片區2則由排列后的第一個節點,也就是節點1的特征平移得到,類似的,片區3和片區4分別由節點3和節點4的對應片區特征平移得到,如Fig 2.2的Shift for node 2所示,最終對所有的節點都進行如下操作后,我們有 F ~ \widetilde{\mathbf{F}} F 如Fig 2.2的The feature after shift所示,

local_spatial_shift

Fig 2.2 區域shift圖卷積操作的示意圖,假設骨骼點資料只有7個骨骼點節點,

全域shift圖卷積

區域shift圖卷積操作有兩個缺點:

  1. 只考慮物理固有連接,難以挖掘潛在的“超距”作用的關系,
  2. 資料有可能不能被完全被利用,如Fig 2.2的節點3的特征為例子,如Fig 2.3所示,節點3的資訊在某些通道遺失了,這是因為不同節點的鄰居數量不同,

local_shift_shortcome1

Fig 2.3 紅色虛線框內的通道部分完全失去了節點3的特征資訊(也即是紫色方塊),

為了解決這些問題,作者提出了全域Shift圖卷積,如Fig 2.4所示,其改進很簡單,就是去除掉物理固有連接的限制,將單幀的骨骼圖變成完全圖,因此每個節點都會和其他任意節點之間存在直接關聯,給定特征圖 F ∈ R N × C \mathbf{F} \in \mathbb{R}^{N \times C} FRN×C,對于第 i i i個通道的平移距離 d = i ? m o d ? N d = i \bmod N d=imodN,這樣會形成類似于螺旋狀的特征結構,如Fig 2.4的The feature after shift所示,

non_local_spatial_shift

Fig 2.4 全域shift圖卷積操作的示意圖,假設骨骼點資料只有7個骨骼點節點,其中和區域shift圖卷積操作的區別在于,當前的圖是完全圖,也即是完全連接的圖了,

為了挖掘骨骼完全圖中的人體關鍵資訊,把重要的連接給提取出來,作者在全域shift圖卷積基礎上還使用了注意力機制,如式子(2.2)所示,
F ~ M = F ~ ° ( tanh ? ( M ) + 1 ) (2.2) \widetilde{F}_M = \widetilde{F} \circ (\tanh(\mathbf{M})+1) \tag{2.2} F M?=F °(tanh(M)+1)(2.2)


Temporal Shift-GCN

在空間域上的shift圖卷積定義已經討論過了,接下來討論在時間域上的shift圖卷積定義,如Fig 2.5所示,考慮到了時序之后的特征圖層疊結果,用符號 F ∈ R T × N × C \mathbf{F} \in \mathbb{R}^{T \times N \times C} FRT×N×C表示時空特征圖,其中有 F = { F 1 , F 2 , ? ? , F T } \mathbf{F} = \{\mathbf{F}^1,\mathbf{F}^2,\cdots,\mathbf{F}^{T}\} F={F1,F2,?,FT},這種特征圖可以天然地使用傳統的Shift卷積算子,具體程序見[12],我們稱之為naive temporal shift graph convolution,在這種策略中,我們需要將通道均勻劃分為 2 u + 1 2u+1 2u+1個片區,每個片區有著偏移量為 ? u , ? u + 1 , ? ? , 0 , ? ? , u ? 1 , u -u,-u+1,\cdots,0,\cdots,u-1,u ?u,?u+1,?,0,?,u?1,u,與[12]策略一樣,移出去的通道就被舍棄了,用0去填充空白的通道,這種策略需要指定 u u u的大小,涉及到了人工的設計,因此作者提出了adaptive temporal shift graph convolution,是一種自適應的時序shift圖卷積,其對于每個通道,都需要學習出一個可學習的時間偏移引數 S i , i = 1 , 2 , ? ? , C S_i,i=1,2,\cdots,C Si?,i=1,2,?,C,如果該引數是整數,那么無法傳遞梯度,因此需要放松整數限制,將其放寬到實數,利用線性插值的方式進行插值計算,如式子(2.3)所示,
F ~ ( v , t , i ) = ( 1 ? λ ) ? F ( v , ? t + S i ? , i ) + λ ? F ( v , ? t + S i ? + 1 , i ) (2.3) \widetilde{F}_{(v,t,i)} = (1-\lambda)\cdot \mathbf{F}_{(v, \lfloor t+S_i \rfloor, i)}+\lambda\cdot\mathbf{F}_{(v, \lfloor t+S_i\rfloor+1,i)} \tag{2.3} F (v,t,i)?=(1?λ)?F(v,?t+Si??,i)?+λ?F(v,?t+Si??+1,i)?(2.3)
其中 λ = S i ? ? S i ? \lambda = S_i - \lfloor S_i\rfloor λ=Si???Si??是由于將整數實數化之后產生的余量,需要用插值的手段進行彌補,由于實數化后,錨點落在了 [ ? t + S i ? , ? t + S i ? + 1 ] [\lfloor t+S_i\rfloor, \lfloor t+S_i\rfloor+1] [?t+Si??,?t+Si??+1]之間,因此在這個區間之間進行插值,

stack_time_feats

Fig 2.5 考慮到時序后的特征圖層疊結果,

網路

結合spatial shift-gcntemporal shift-gcn操作后,其網路基本單元類似于ST-GCN的設計,如Fig 2.6所示,

block

Fig 2.6 Shift-Conv模塊和Shift-Conv-Shift模塊的設計都是參考了ST-GCN和傳統Shift卷積網路設計的,

Reference

[1]. Wu, B., Wan, A., Yue, X., Jin, P., Zhao, S., Golmant, N., … & Keutzer, K. (2018). Shift: A zero flop, zero parameter alternative to spatial convolutions. In Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition (pp. 9127-9135).

[2]. Cheng, K., Zhang, Y., He, X., Chen, W., Cheng, J., & Lu, H. (2020). Skeleton-Based Action Recognition With Shift Graph Convolutional Network. In Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (pp. 183-192).

[3]. https://fesian.blog.csdn.net/article/details/109474701

[4]. Sijie Yan, Yuanjun Xiong, and Dahua Lin. Spatial temporal graph convolutional networks for skeleton-based action
recognition. In Thirty-Second AAAI Conference on Artificial
Intelligence, 2018.

[5]. https://fesian.blog.csdn.net/article/details/105545703

[6]. https://blog.csdn.net/LoseInVain/article/details/87901764

[7]. https://blog.csdn.net/LoseInVain/article/details/88373506

[8]. https://fesian.blog.csdn.net/article/details/90171863

[9]. https://fesian.blog.csdn.net/article/details/90348807

[10]. Lei Shi, Yifan Zhang, Jian Cheng, and Hanqing Lu. Skeleton-based action recognition with directed graph neural networks. In Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition, pages 7912–7921, 2019

[11]. Lei Shi, Yifan Zhang, Jian Cheng, and Hanqing Lu. Two stream adaptive graph convolutional networks for skeleton based action recognition. In The IEEE Conference on Computer Vision and Pattern Recognition (CVPR), June 2019.

[12]. https://fesian.blog.csdn.net/article/details/109474701

[13]. https://fesian.blog.csdn.net/article/details/108242717

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/208483.html

標籤:其他

上一篇:《劍指offer》的編程思想

下一篇:資料結構學習與應用

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more