主頁 > 軟體設計 > 【論文泛讀】 Faster R-CNN:利用RPN實作實時目標檢測

【論文泛讀】 Faster R-CNN:利用RPN實作實時目標檢測

2021-08-02 08:18:25 軟體設計

【論文泛讀】 Faster R-CNN:利用RPN實作實時目標檢測

文章目錄

  • 【論文泛讀】 Faster R-CNN:利用RPN實作實時目標檢測
    • 前言
    • 摘要 Abstract
    • 介紹 Introduction
    • 相關作業 Related Work
    • Faster R-CNN
      • Region Proposal Networks 區域推薦網路
      • 錨點 Anchor
      • 平移不變性錨點
      • 損失函式 Loss Function
      • 訓練RPNs
      • Faster R-CNN的訓練
      • 實驗細節
    • 總結

論文鏈接: Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks (arxiv.org)

現在開始讀目標檢測的論文,我先總結了一下關于目標檢測的相關論文和一些代碼資源,都在我們的鏈接

紅色的是目標檢測必讀的一些論文,今天我讀的論文就是2015的何愷明大神的又一巨作Faster R-CNN

img

前言

R-CNN是目標檢測領域中十分經典的方法,相比于傳統的手工特征,R-CNN將卷積神經網路引入,用于提取深度特征,后接一個分類器判決搜索區域是否包含目標及其置信度,取得了較為準確的檢測結果,Fast R-CNN和Faster R-CNN是R-CNN的升級版本,在準確率和實時性方面都得到了較大提升,

在Fast R-CNN中,首先需要使用Selective Search的方法提取影像的候選目標區域(Proposal),而新提出的Faster R-CNN模型則引入了RPN網路(Region Proposal Network),將Proposal的提取部分嵌入到內部網路,實作了卷積層特征共享,Fast R-CNN則基于RPN提取的Proposal做進一步的分類判決和回歸預測,因此,整個網路模型可以完成端到端的檢測任務,而不需要先執行特定的候選框搜索演算法,顯著提升了演算法模型的實時性,

Faster R-CNN是截止目前,RCNN系列演算法的最杰出產物,two-stage中最為經典的物體檢測演算法,推理第一階段先找出圖片中待檢測物體的anchor矩形框(對背景、待檢測物體進行二分類),第二階段對anchor框內待檢測物體進行分類,

講Faster R-CNN,就不得不講講R-CNN和Fast R-CNN的原理,這里只是粗略的講一下,具體可以看論文

R-CNN(Region with CNN feature)可以分為4個步驟

  1. region proposal(Selective Search方法,具體可以去看他的論文,主要講的就是生成1K ~ 2 K個候選框,用顏色等特征進行融合)
  2. feature extraction(Deep Net):用卷積神經網路對每個region提取特征(Alex-net),去掉了全連接層
  3. Classification(SVM):對proposal提取到的特征進行分類,用的方法是SVM,每一類都有一個SVM分類器
  4. rect refine(regression):使用回歸器對propoposal進行修正,

同樣的R-CNN有一些缺點

  1. 測驗速度慢,每張圖片需要 2 s
  2. 訓練速度慢,程序極其繁瑣
  3. 訓練所需空間大,要數百GB的空間

Fast R-CNN用VGG-16作為backbone,比R-CNN訓練時間快9倍,測驗推理快213倍,

大概也是分為4個步驟

  1. region proposal(SS):與R-CNN相同
  2. feature extraction(Deep net):將影像輸入網路得到相應的特征圖,然后將SS演算法生成的候選框投影到特征圖上獲得相應的特征矩陣,
  3. classification(Deep net):將每個特征矩陣通過ROI pooling層縮放到7x7大小的特征圖,接著將特征圖展評通過一系列全連接層得到預測結果,
  4. refine(Deep net)

注意:R-CNN存在著重復計算的問題(proposal的region有幾千個,多數都是互相重疊,重疊部分會多次重復提取特征,浪費時間),作者借助SPP-net搞出了Fast-RCNN,跟R-CNN最大區別就是Fast-RCNN將proposal的region映射到CNN的最后一層feature map,這樣一張圖片只需要提取一次特征,而且把分類也在卷積神經網路一起解決了

摘要 Abstract

最新的檢測網路都依賴區域推薦演算法來推測物體位置,像SPPnet[和Fast R-CNN已經大幅削減了檢測網路的時間開銷,但區域推薦的計算卻變成了瓶頸,本論文將引入一個區域推薦網路(RPN)和檢測網路共享全影像卷積特征,使得區域推薦的開銷幾近為0,一個RPN是一個全卷積網路技能預測物體的邊框,同時也能對該位置進行物體打分,RPN通過端到端的訓練可以產生高質量的推薦區域,然后再用Fast R-CNN進行檢測,通過共享卷積特征,我們進一步整合RPN和Fast R-CNN到一個網路,用近期流行的“術語”說,就是一種“注意力”機制,RPN組件會告訴整合網路去看哪個部分,對于非常深的VGG-16模型[3],我們的檢測系統在GPU上達到了5fps的檢測幀率(包括所有步驟),同時也在PASCAL VOC2007,2012和MS COCO資料集上達到了最好的物體檢測精度,而對每張圖片只推薦了300個區域,在ILSVRC和COCO 2015競賽中,Faster R-CNN和RPN是多個賽道都贏得冠軍的基礎,

介紹 Introduction

區域推薦方法和基于區域的卷積神經網路(RCNNs)的成功推動了物體檢測水平的進步,但是推薦顯然是最先進檢測系統的瓶頸,區域推薦仍然是目標檢測的主要耗時階段,

在這篇論文中,展示一個演算法上的改變——使用深度卷積神經網路計算推薦區域——將引出一個優雅而高效的解決方案,在給定檢測網路完成的計算的基礎上,讓區域的計算近乎為0,提出了一個新型的區域推薦網路(Region Proposal Networks,RPNs),它和當今世界最棒的檢測網路(當時是VGG16和ZFnet)共享卷積層,通過在測驗階段共享卷積,讓計算推薦區域的邊際成本變得很低,(大約每張圖片10ms)

RPNs被設計用來高效地預測各種尺度和寬高比的區域推薦,這里提出了一個“Anchor(錨點)”,使用“錨點”盒(“anchor” boxes)作為不同尺度和寬高比的參照物,我們的模式可以看做是一個回歸參照物的金字塔,這避免了窮舉各種尺度和寬高比的影像或過濾器,這個模型在單一尺度影像的訓練和測驗時表現優異,因而運行速度大為受益,

為了統一RPNs和Fast R-CNN物體檢測網路,我們提出一種介于區域推薦任務調優和之后的物體檢測調優之間的訓練方法,同時還能保證固定的推薦,這個方法可以很快收斂,并產生一個統一的網路,該網路在兩個任務上共享卷積特征,

在ILSVRC和COCO 2015競賽中,Faster R-CNN和RPN是多項分賽長的第一名,包括ImageNet 檢測,ImageNet定位,COCO檢測和COCO分割,RPNs從資料中完全學會了推薦區域,而且使用更深或更有表達力的特征(比如101層的Resnet)效果會更好,Faster R-CNN和RPN也用于多個其他領先名詞的團隊所使用,這些結果都說明我們的方法不僅實用省時,而且有效精準,

相關作業 Related Work

這里略微提一下

首先是物體推薦,物體推薦演算法大部分有幾種,廣泛使用的有基于grouping super-pixels(如Selective Search, CPMC等演算法),還有就是基于滑動視窗的,比如EdgeBox,

其次就是深度神經網路在目標檢測上的影響,R-CNN是一個端到端的模型,它利用CNNs進行分類物體類別和背景,還有一些模型比如OverFeat、MultiBox 方法,這些可能得去看相關的論文,

總結起來,這種卷積計算的共享,越來越受關注,OverFeat中針對分類、定位、檢測時會只從一個影像金字塔計算卷積特征,尺寸自適應的SPP也是建立在共享卷積特征圖智商的,在基于區域的物體檢測[1][30]和語意分割上很有效,Fast R-CNN使得端到端的檢測器訓練全部建立在共享卷積特征之上,表現出了有引人注目的精度和速度,

Faster R-CNN

Faster R-CNN有兩個模塊組成,整個網路是一個單一、通以的目標檢測網路,

  • 第一個模塊是深度卷積網路用于生成推薦區域
  • 第二個模塊是Fast R-CNN用來推薦的區域的檢測器

其實又可以細分為四個部分,Conv Layer,Region Proposal Network(RPN),RoI Pooling,Classification and Regression,就如下面論文中的圖一樣

Image Name

  • Conv layers:卷積層包括一系列卷積(Conv + Relu)和池化(Pooling)操作,用于提取影像的特征(feature maps),一般直接使用現有的經典網路模型ZF或者VGG16,而且卷積層的權值引數為RPN和Fast RCNN所共享,這也是能夠加快訓練程序、提升模型實時性的關鍵所在,

  • Region Proposal Networks:RPN層是faster-rcnn最大的亮點,RPN網路用于生成region proposcals.基于網路模型引入的多尺度Anchor,通過Softmax對anchors屬于目標(foreground)還是背景(background)進行分類判決,并使用Bounding Box Regression對anchors進行回歸預測,獲取Proposal的精確位置,并用于后續的目標識別與檢測,

  • Roi Pooling:綜合卷積層特征feature maps和候選框proposal的資訊,將propopal在輸入影像中的坐標映射到最后一層feature map(conv5-3)中,對feature map中的對應區域進行池化操作,得到固定大小(7×77×7)輸出的池化結果,并與后面的全連接層相連,

  • Classification and Regression: 全連接層后接兩個子連接層——分類層(cls)和回歸層(reg),分類層用于判斷Proposal的類別,回歸層則通過bounding box regression預測Proposal的準確位置,

Region Proposal Networks 區域推薦網路

RPN網路用于生成區域候選框Proposal,基于網路模型引入的多尺度Anchor,通過Softmax對anchors屬于目標(foreground)還是背景(background)進行分類判決,并使用Bounding Box Regression對anchors進行回歸預測,獲取Proposal的精確位置,并用于后續的目標識別與檢測,

經典的檢測方法生成檢測框都非常耗時,如OpenCV adaboost使用滑動視窗+影像金字塔生成檢測框;或如RCNN使用SS(Selective Search)方法生成檢測框,
而Faster RCNN則拋棄了傳統的滑動視窗和SS方法,直接使用RPN生成檢測框,這也是Faster RCNN的巨大優勢,能極大提升檢測框的生成速度,

在這里插入圖片描述

上圖中展示了RPN網路的具體結構,可以看到,feature map 經過一個3×3卷積核卷積后分成了兩條線,上面一條通過softmax對anchors分類獲得foreground和background(檢測目標是foregrounnd),因為是2分類,所以它的維度是2k scores,
下面那條線是用于計算anchors的bounding box regression的偏移量,以獲得精確的proposal,它的維度是4k coordinates,
而最后的proposcal層則負責綜合foreground anchors和bounding box regression偏移量獲取proposal,同時剔除太小和超出邊界的propocals,其實網路到這個Proposal Layer這里,就完成了目標定位的功能

錨點 Anchor

Anchor是RPN網路中一個較為重要的概念,傳統的檢測方法中為了能夠得到多尺度的檢測框,需要通過建立影像金字塔的方式,對影像或者濾波器(滑動視窗)進行多尺度采樣,RPN網路則是使用一個3×3的卷積核,在最后一個特征圖(conv5-3)上滑動,將卷積核中心對應位置映射回輸入影像,生成3種尺度(scale){ 12 8 2 , 25 6 2 , 51 2 2 128^2,256^2,512^2 1282,2562,5122?}和3種長寬比(aspect ratio){1:1,1:2,2:1}共9種Anchor,

anchors.jpg

平移不變性錨點

在我們的目標檢測中,我們有一個平移不變性,如果我們用K-means生成800個錨點,是不滿足平移不變的,就算是用MultiBox也不能保證,但是作者的方法用卷積輸出層有平移不變性,并且可以降低模型的引數,大約有降低了兩個數量級,并且在小資料集中也有更低的過擬合的風險,

損失函式 Loss Function

在訓練RPN時,我們對每個錨點設定兩個標簽(物體 or 背景),并且我們將錨點設為正樣本如果它是兩種情況之一,

  • 具有與實際邊界框的重疊最高交并比(IoU)的錨點
  • 具有與實際邊界框的重疊超過0.7 IoU的錨點

通常是用第二個條件來確定正樣本,但是還是會用第一個條件,因為在極少數的情況下,第二個條件找不到正樣本,如果一個錨點的IoU比率低于0.3,我們給非正面的錨點分配一個負標簽,既不正面也不負面的錨點不會有助于訓練目標函式,

根據Fast R-CNN中的損失函式,Faster R-CNN的損失函式類似定義為
L ( { p i } , { t i } ) = 1 N c l s ∑ i L c l s ( p i , p i ? ) + λ 1 N r e g ∑ i p i ? L r e g ( t i , t i ? ) \begin{aligned} L\left(\left\{p_{i}\right\},\left\{t_{i}\right\}\right) &=\frac{1}{N_{c l s}} \sum_{i} L_{c l s}\left(p_{i}, p_{i}^{*}\right) \\+\lambda & \frac{1}{N_{r e g}} \sum_{i} p_{i}^{*} L_{r e g}\left(t_{i}, t_{i}^{*}\right) \end{aligned} L({pi?},{ti?})+λ?=Ncls?1?i?Lcls?(pi?,pi??)Nreg?1?i?pi??Lreg?(ti?,ti??)?
上述公式中,i表示anchors index,pi表示foreground softmax predict概率,
p i ? p_i? pi???代表對應的GT predict概率(即當第i個anchors與GT間IoU>0.7,認為該anchor是foreground, p i ? p_i? pi???=1,反之IOU<0.3時,認為該anchors是background, p i ? p_i? pi????=0);
至于那些0.3小于IOU<0.7的anchors則不參與訓練,一般一張圖片取256個anchors,一般bg和fg=1;1
t代表predict bounding box, t ? t? t?代表對應的foreground anchors對應的GT box,

在損失函式中,回歸損失是利用Smooth L1函式
S m o o t h L 1 ( x ) = { 0.5 x 2 , ∣ x ∣ ≤ 1 ∣ x ∣ ? 0.5 , o t h e r w i s e Smooth_{L1}(x)=\begin{cases} 0.5x^2,|x| \leq 1 \\\ |x|-0.5,otherwise\end{cases} SmoothL1?(x)={0.5x2,x1 x?0.5,otherwise?

L r e g = S m o o t h L 1 ( t ? t ? ) L_{reg}=Smooth_{L1}(t-t^{\ast}) Lreg?=SmoothL1?(t?t?)

相比于L2損失函式,L1對離群點或例外值不敏感,可控制梯度的量級使訓練更易收斂,

對于bounding box regression,我們有以下公式
t x = ( x ? x a ) / w a , t y = ( y ? y a ) / h a , t w = log ? ( w / w a ) , t h = log ? ( h / h a ) t x ? = ( ? x a ) / w a , t y ? = ( y ? ? y a ) / h a , t w ? = log ? ( w ? / w a ) , t h ? = log ? ( h ? / h a ) \begin{aligned} t_{\mathrm{x}}=\left(x-x_{\mathrm{a}}\right) / w_{\mathrm{a}}, & t_{\mathrm{y}}=\left(y-y_{\mathrm{a}}\right) / h_{\mathrm{a}}, \quad t_{\mathrm{w}}=\log \left(w / w_{\mathrm{a}}\right), \quad t_{\mathrm{h}}=\log \left(h / h_{\mathrm{a}}\right) \\ t_{\mathrm{x}}^{*}=\left(-x_{\mathrm{a}}\right) / w_{\mathrm{a}}, & t_{\mathrm{y}}^{*}=\left(y^{*}-y_{\mathrm{a}}\right) / h_{\mathrm{a}}, \quad t_{\mathrm{w}}^{*}=\log \left(w^{*} / w_{\mathrm{a}}\right), \quad t_{\mathrm{h}}^{*}=\log \left(h^{*} / h_{\mathrm{a}}\right) \end{aligned} tx?=(x?xa?)/wa?,tx??=(?xa?)/wa?,?ty?=(y?ya?)/ha?,tw?=log(w/wa?),th?=log(h/ha?)ty??=(y??ya?)/ha?,tw??=log(w?/wa?),th??=log(h?/ha?)?
其中x, y, w, h 對應兩組框的中心點的坐標和它的寬和高,變數x, x a , x ? x_a,x? xa?,x??分別對應predicted box , anchor box 和 ground-truth box的中心點橫坐標(同理x,y , w , h)我們可以這么認為bounding box regression就是把anchor box 擬合到ground-truth box,在我們的公式中,用于回歸的特征是相同空間大小的在feature maps,

訓練RPNs

論文中是利用SGD演算法,并且以圖片為中心,如果利用所有的錨點去計算損失函式,可能會計算冗余,所以一般來說會隨機選擇256個錨點,正樣本和負樣本的比例大約是1:1,也就是各為128個,如果不夠,會填補,然后初始化是利用均值為0.01的高斯分布,

Faster R-CNN的訓練

Faster R-CNN的訓練方式有三種

  • 使用交替優化演算法訓練
  • 近似聯合訓練
  • 聯合訓練

對于提取proposals的RPN,以及分類回歸的Fast R-CNN,如何將這兩個網路嵌入到同一個網路結構中,訓練一個共享卷積層引數的多任務(Multi-task)網路模型,

這里先介紹交替訓練的方法,

  • 訓練RPN網路,用ImageNet模型M0初始化,訓練得到模型M1
  • 利用第一步訓練的RPN網路模型M1,生成Proposal P1
  • 使用上一步生成的Proposal,訓練Fast R-CNN網路,同樣用ImageNet模型初始化,訓練得到模型M2
  • 訓練RPN網路,用Fast R-CNN網路M2初始化,且固定卷積層引數,只微調RPN網路獨有的層,訓練得到模型M3
  • 利用上一步訓練的RPN網路模型M3,生成Proposal P2
  • 訓練Fast R-CNN網路,用RPN網路模型M3初始化,且卷積層引數和RPN引數不變,只微調Fast R-CNN獨有的網路層,得到最終模型M4

由訓練流程可知,第4步訓練RPN網路和第6步訓練Fast R-CNN網路實作了卷積層引數共享,總體上看,訓練程序只回圈了2次,但每一步訓練(M1,M2,M3,M4)都迭代了多次,對于固定卷積層引數,只需將學習率(learning rate)設定為0即可,并且本論文也是用這種交替優化演算法進行訓練的,

實驗細節

  • 首先過濾掉超出影像邊界的anchors
  • 對每個標定的ground truth,與其重疊比例IoU最大的anchor記為正樣本,這樣可以保證每個ground truth至少對應一個正樣本anchor
  • 對每個anchors,如果其與某個ground truth的重疊比例IoU大于0.7,則記為正樣本(目標);如果小于0.3,則記為負樣本(背景)
  • 再從已經得到的正負樣本中隨機選取256個anchors組成一個minibatch用于訓練,而且正負樣本的比例為1:1,;如果正樣本不夠,則補充一些負樣本以滿足256個anchors用于訓練

總結

該論文提出了RPN來生成高效,準確的區域推薦,通過與下游檢測網路共享卷積特征,區域推薦步驟幾乎是零成本的,我們的方法使統一的,基于深度學習的目標檢測系統能夠以接近實時的幀率運行,學習到的RPN也提高了區域提議的質量,從而提高了整體的目標檢測精度,

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

標籤:其他

上一篇:個人博客管理系統

下一篇:CentOS7 原始碼包安裝Git

標籤雲
其他(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