[目標檢測] YOLO系列算法講解

前言

目標檢測就是做到給模型輸入一張圖片或者視頻,模型可以迅速判斷出視頻和圖片里面感興趣的目標所有的位置和它 的類別,而當前最熱門的目標檢測的模型也就是YOLO系列了。

YOLO系列的模型的提出,是為了解決當時目標檢測的模型幀率太低而提出來的模型,英文全稱是

You only look once。

深度學習目標檢測算法分類:

(1)two-stage 兩個階段的檢測,模型舉例 Faster-RCNN Mask-Rcnn系列

? ?(2) one-stage 一個階段的檢測:YOLO系列

這兩個主要區別可以簡單理解為,兩個階段有一個選擇預選框和物體分類的一個過程,而單階段的將檢測問題轉換為一個回歸問題

下邊來詳細講解YOLO系列的各個階段的模型。

一、YOLOv1

1、模型背景

YOLOV1,是以Joseph Redmon為首的大佬們于2015年提出的一種新的目標檢測算法。它與之前的目標檢測算法如R-CNN等不同之處在于,R-CNN等目標檢測算法是兩階段算法, 步驟為先在圖片上生成候選框,然后利用分類器對這些候選框進行逐一的判斷;而YOLOv1是一階段算法,是端到端的算法,它把目標檢測問題看作回歸問題,將圖片輸入單一的神經網絡,然后就輸出得到了圖片的物體邊界框(boundingbox)以及分類概率等信息。

總結:YOLOv1直接從輸入的圖像,僅僅經過一個神經網絡,直接得到一些bounding box(位置坐標)以及每個bounding box對所有類別的一個概率情況,因為整個的檢測過程僅僅有一個網絡,所以可以直接進行端到端的優化,而無需像Faster R-CNN的分階段的優化。

end-to-end(端到端):指的是一個過程,輸入原始數據,輸出最后結果。之前的網絡Fast RCNN等這種網絡分為兩個階段,一個是預選框的生成和目標分類與邊界框回歸,具體內容大家可以自行理解。

YOLO的核心思想就是把目標檢測轉變為一個回歸問題,利用整張圖作為網絡的輸入,僅僅經過一個神經網絡,得到bounding box(邊界框) 的位置及其所屬的類別。

2、網絡結構

YOLOv1的網絡結構簡單清晰,是一個最傳統的one-stage的卷積神經網絡。

網絡輸入:448*448*3的三通道圖片

中間層:由若干卷積層和最大池化層組成,用于提取圖片的抽象特征。

全連接層:由兩個全連接層組成,用來預測目標的位置和類別概率值。

網絡輸出:7*7*30的預測結果。

3、網絡細節

YOLOv1采用的是”分而治之“的策略,將一張圖片平均分成7*7個網格,每個網格分別負責預測中心點落在該網格內的坐標,回憶一下,在Faster R-CNN中,是通過一個RPN來獲得目標的感興趣區域,這種方法精度很高,但是需要額外訓練一個RPN網絡,這無疑增加了訓練的負擔。在YOLOv1中,通過劃分得到7*7個網絡,(原圖劃分),這49個網格就相當于是目標的感興趣區域。通過這種方式,我們就不需要再額外設計一個RPN網絡,這正是YOLOv1作為單階段網絡的簡單快捷之處。

補充說明過程:

1、將一副圖像分成S*S個網格(grid cell),如果某個目標的中心落在這個網格中,那么這個網絡就負責預測這個object。(原本中是7個)

2、每個網格要預測B個bounding box,每個bounding box要預測(x,y,w,h)和confidence共五個值。文中B為2。

其中:x和y是這些邊界框的中心坐標相對于網格單元格的坐標。也就是說,x和y是邊界框中心點相對于網格單元左上角的偏移量。坐標是以網格單元格的寬度和高度為單位的相對值。因此這兩個值表示的是邊界框中心的精確位置。

w和h,這些是邊界框的寬度和高度的相對值,通常是相對于整張圖片的寬度和高度,它們表示邊界框的大小,也就是邊界框的高度和寬度的預測值,這些值通常是對整張圖片的歸一化的比例值。

confidence(置信度):描述的是邊界框的置信度(邊界框包含物體的概率)。換句話說,它衡量了邊界框中確實有物體的可信度。

3、每個網格還需要預測一個類別信息,記為C個類。文中為20,

4、總的來說,S*S個網格,每個網格預測2個bbx,還要預測20個類,那么網絡最后輸出的就是一個7*7*30.

在模型最后是生成了98個邊界框,生成完邊界框后,通過NMS(非極大值預測)來篩選出最優的邊界框。

4、預測階段

在模型訓練完成后,向搭載玩參數的模型輸入圖片,然后得到最后結果的一個過程。

將網絡當成一個黑箱子,輸入的是一個448*448*3的RGB圖像,最后輸出的一個7*7*30的向量。

整體的網絡結構很簡單,都是卷積、池化、全連接層,一目了然。

而最后輸出的向量,包含了類別、框、置信度等結果,而我們只需要解釋這個向量就得到最后的結果了。

下面對最后輸出的向量,進行一個分析,當我們輸入一張圖片的時候,最后會生成7*7*30的向量,如何去理解呢,可以將這個向量看做成7*7個1*30的向量,也就是49個1*30的向量,這里的每個1*30的向量,對應于前面的一個grid cell,將向量拆分為兩個預測框的坐標以及預測框包含物體的置信度,和20個類別的條件概率。其中每個gridcell只會預測一個物體,也因此暴露出YOLOv1在小目標上檢測的缺陷。然后預測中又引入了NMS向量對上述的98個框進行篩選,最后才可以得出我們的結果。

5、訓練階段

這個階段,我首先主要是解釋一下幾個問題,

,首先是YOLOv1是端到端的一個網絡,也就是輸入的是原圖,輸出的是一個向量,而訓練的過程包括兩個過程,一個是前向傳播,另一個就是反向傳播,通過不斷迭代,使梯度下降,進而使損失函數最小化,這個過程。訓練的流程大致為,輸入batchsize張圖片,得出batchsize*7*7*30的一個張量,將該張量與標簽(batchsize*7*7*30的向量)計算出損失為多少,然后根據這個損失對網絡的參數進行梯度計算,不斷迭代,不斷優化參數,這樣的一個過程。我覺得這樣理解好理解的多。

這個代碼大致流程可以分為以下部分

1、超參數初始化

2、數據初始化,構造數據迭代器,因為原本一張圖片對應的標簽并不是7*7*30的一個向量,因此要對數據進行預處理,把每一個圖片的標簽變成7*7*30的一個格式。

3、網絡初始化,我這里給的代碼使ResNet50的網絡,這個網絡也叫做backbone大家以后會經常看到的,網絡結構差不多,然后輸入是bs*448*448*3,輸出就是bs*7*7*30的這樣一個結構

4、上述都可以看成初始化過程,然后就開始訓練,也就是前向傳播,反向傳播,參數優化這樣迭代的一個過程,最后保存參數。

6、損失函數

可以大致看成四個部分,

第一部分表示負責檢測物體的bounding box中心點定位誤差,要和ground truth盡可能擬合,x xx帶上標的是標注值,不帶上標的是預測值。

第二表示表示負責檢測物體的bounding box的寬高定位誤差,加根號是為了使得對小框的誤差更敏感。

第三部分:

第四部分是負責檢測物體的grid的分類誤差。

7、總結

模型優點:YOLO檢測速度非常快,標準版本的YOLO可以每秒處理45張圖像,YOLO的極速版本可以每秒處理150幀圖像,這就意味著該模型可以實時處理視頻,在當時,準確率比它高的,速度沒他快,速度比他快的,精度沒他高。

遷移能力強,能運用到其他新的領域。

局限:

1、YOLO對相互靠近的物體,以及很小的群體檢測效果不好,因為只預測了98個框。假如一張圖片有200個目標的話,根本檢測不完。

2、由于損失函數的問題,定位誤差是影響檢測效果的主要原因,尤其是大小物體的處理上。有待提高。

3、對一些不常見的角度的目標泛化性能差。

二、YOLOv2

1、模型背景

2017年,作者 Joseph Redmon 和 Ali Farhadi 在 YOLOv1 的基礎上,進行了大量改進,提出了 YOLOv2 和 YOLO9000。重點解決YOLOv1召回率和定位精度方面的不足。

YOLOv2 是一個先進的目標檢測算法,比其它的檢測器檢測速度更快。除此之外,該網絡可以適應多種尺寸的圖片輸入,并且能在檢測精度和速度之間進行很好的權衡。

相比于YOLOv1是利用全連接層直接預測Bounding Box的坐標,YOLOv2借鑒了Faster R-CNN的思想,引入Anchor機制。利用K-means聚類的方法在訓練集中聚類計算出更好的Anchor模板,大大提高了算法的召回率。同時結合圖像細粒度特征(特征融合),將淺層特征與深層特征相連,有助于對小尺寸目標的檢測。

YOLO9000 使用 WorldTree 來混合來自不同資源的訓練數據,并使用聯合優化技術同時在ImageNet和COCO數據集上進行訓練,能夠實時地檢測超過9000種物體。由于 YOLO9000 的主要檢測網絡還是YOLOv2,所以這部分以講解應用更為廣泛的YOLOv2為主。

2、網絡結構

YOLOv2 采用 Darknet-19 作為特征提取網絡,DarkNet-19,后邊的19指的是用了19個卷積層的意思。其整體結構如下:

說明:

1、DarkNet-19與VGG網絡相似,使用了很多3*3的卷積核;并且每一次池化后,下一層的卷積核的通道數 = 池化輸出的通道*2

2、每一次卷積后,都增加了BN(批量標準化)進行預處理。

3、采用了降維的思想,把1*1的卷積置于3*3之間,用來壓縮特征。

4、在網絡最后的輸出增加了一個global average pooling層,這個層就是把一個二維的特征圖縮減成一個數的一個操作。

5、網絡整體上采用了19個卷積層、5個池化層。

上述流程中有很多細節之處,我簡單總結一下。

1、在YOLOv1當中有全連接層,所以在YOLOv1當中是引入了Dropout正則化,用來防止過擬合,而在YOLOv2中去掉了全連接層,引入了BN層,在每一個卷積層后都加入了BN,也就是網絡的每一層都做了歸一化,收斂起來相對簡單,引入BN層后提升了2%的MAP,目前BN層可以說是網絡模型必備的處理方法。

2、引入了1*1和全局最大值池化對網絡的參數量有很大減少,減少了計算量,提升了檢測速度。

3、網絡細節

1、引入了anchor機制

這個機制在Faster R-CNN中引入的,在YOLOV1是直接做的回歸計算出bbx(bounding box)坐標值,并且是從全連接層變化來的,這會丟失較多的的空間信息,導致定位精度不高,并且在前期訓練時很困難,很難收斂。

而YOLOv2中借鑒了Faster R-CNN中的anchor思想,使得網絡在訓練時更容易收斂。這里引入的機制,相對于FasterR-cnn中的anchor機制做了一些改進,在rcnn中是初始化設定好的anchor,而在YOLO中是通過K-means聚類的方法來選擇出的合適訓練數據集的anchor,K-means聚類在后續進行介紹。通過提前篩選得到的具有代表性先驗框Anchors,使得網絡在訓練時更容易收斂。

在Faster R-CNN算法中,是通過預測boundingbox與ground truth的位置偏移值tx和ty,間接得到的boundingbox的位置,其公式如下:

這個公式是無拘束的,預測邊界框很容易向任何方向偏移。因此,每個位置預測的邊界框可以落在圖片的任何位置,這會導致模型很不穩定。

因此YOLOv2在上述方法做了提高,預測邊界框中心點相對于該網格左上角坐標(Cx,Cy)的相對偏移量,同時為了將bounding box的中心點坐標約束在當前網格中,使用sigmoid函數將tx和ty歸一化處理,讓這個值約束在0-1,

下圖為anchor box 與 bounding box轉換的示意圖,其中藍色是要預測的bounding box,黑色虛線框是Anchor box。

YOLOv2在最后一個卷積層輸出了13*13的feature map,意味著一張圖片被分成了13*13個網格,每個網格有5個anchor box來預測5個bounding box,每個bounding box預測得到五個值:tx、ty、tw、th和to,通過這五個值簡介預測得到的bounding box的位置的計算公式為:

YOLOv1有一個缺陷是,一張圖片被分成了7*7的網絡,一個網格只能預測一個類,當一個網格中出現了多個類時,就無法檢測出所有的類,針對這個問題,YOLOv2做出了相對應的改進:

1、首先將YOLOv1網絡的FC層和最后一個Pooling層去掉,使得最后的卷積層的輸出可以有更高的分辨率特征。

2、然后縮減網絡,用416×416大小的輸入代替原來的448×448,使得網絡輸出的特征圖有奇數大小的寬和高,進而使得每個特征圖在劃分單元格的時候只有一個中心單元格(Center Cell)。YOLOv2通過5個Pooling層進行下采樣,得到的輸出是13×13的像素特征。
3、借鑒Faster R-CNN,YOLOv2通過引入Anchor Boxes,預測Anchor Box的偏移值與置信度,而不是直接預測坐標值。
4、采用Faster R-CNN中的方式,每個Cell可預測出9個Anchor Box,共13×13×9=1521個(YOLOv2確定Anchor Boxes的方法見是維度聚類,每個Cell選擇5個Anchor Box)。比YOLOv1預測的98個bounding box 要多很多,因此在定位精度方面有較好的改善。

2、K-means聚類方法選擇Anchors

Faster R-CNN 中 Anchor Box 的大小和比例是按經驗設定的,不具有很好的代表性。若一開始就選擇了更好的、更有代表性的先驗框Anchor Boxes,那么網絡就更容易學到準確的預測位置了!

YOLOv2 使用 K-means 聚類方法得到 Anchor Box 的大小,選擇具有代表性的尺寸的Anchor Box進行一開始的初始化。傳統的K-means聚類方法使用標準的歐氏距離作為距離度量,這意味著大的box會比小的box產生更多的錯誤。因此這里使用其他的距離度量公式。聚類的目的是使 Anchor boxes 和臨近的 ground truth boxes有更大的IOU值,因此自定義的距離度量公式為 :

到聚類中心的距離越小越好,但IOU值是越大越好,所以使用 1 - IOU;這樣就保證距離越小,IOU值越大。具體實現方法如下:

?如下圖所示,是論文中的聚類效果,其中紫色和灰色也是分別表示兩個不同的數據集,可以看出其基本形狀是類似的。

從下表可以看出,YOLOv2采用5種 Anchor 比 Faster R-CNN 采用9種 Anchor 得到的平均 IOU 還略高,并且當 YOLOv2 采用9種時,平均 IOU 有顯著提高。說明 K-means 方法的生成的Anchor boxes 更具有代表性。為了權衡精確度和速度的開銷,最終選擇K=5。

3、特征融合 Fine-Grained Features

細粒度特征,就是不同層之間的特征融合,和殘差里面的概念很像,就是把淺層特征和深層特征融合在一起。YOLOv2通過添加了一個Passthrough Layer,把淺層特征和深層特征在不同的通道上進行融合,具體操作是:先獲取淺層的26*26的特征圖,再將最后輸出的13*13的特征圖進行拼接,再輸入檢測器進行檢測,以此來提高對小目標的檢測能力。

Passthrough層與ResNet網絡的shortcut類似,以前面更高分辨率的特征圖為輸入,然后將其連接到后面的低分辨率特征圖上。前面的特征圖維度是后面的特征圖的2倍,passthrough層抽取前面層的每個2×2的局部區域,然后將其轉化為channel維度,對于26×26×512的特征圖,經Passthrough層處理之后就變成了13×13×2048的新特征圖(特征圖大小降低4倍,而channles增加4倍),這樣就可以與后面的13×13×1024特征圖連接在一起形成13×13×3072的特征圖,然后在此特征圖基礎上卷積做預測。示意圖如下:

4、總結

在VOC2007數據集上進行測試,YOLOv2在速度為67fps時,精度可以達到76.8的mAP;在速度為40fps時,精度可以達到78.6的mAP,可以在速度和精度之間進行平衡。

三、YOLOv3

1、模型背景

2018年,作者Redmon又在YOLOv2的基礎上做了一些改進,特征提取部分(backbone)網絡結構darknet53代替了原來的darknet19,利用特征金字塔網絡實現了多尺度預測,分類方法使用邏輯回歸代替了softmax,在兼顧實時性的同時保證了目標檢測的準確性。

從YOLOv1到YOLOv3,每一代性能的提升都與backbone(骨干網絡)的改進密切相關。在YOLOv3中,作者不僅提供了darknet-53,還提供了輕量級的tiny-darknet。如果你想要檢測精度與速度兼具,可以選擇darknet-53作為backbone;如果希望達到更快的檢測速度,精度方面可以妥協,那么tiny-darknet是最好的選擇。總之,YOLOv3的靈活性使得在實際工程中得到很多人的青睞。

2、網絡結構

相比于YOLOv2的骨干網絡,YOLOv3進行了較大的改進。借助殘差網絡的思想,YOLOv3將原來的darknet-19改進成了darknet-53,論文中給出的整體結構如下。

DarkNet-53主要是由1*1和3*3的卷積核組成。每個卷積層之后包含一個批量歸一化層和一個Leaky Relu,加入這兩個部分的目的是防止過擬合。卷積層、批量歸一化層以及Leaky Relu共同組成DarkNet-53中的基本卷積單元DBL。因為在DarkNet-53中包含53個這樣的DBL,所以稱為Darknet-53.

為了更加清晰了解DarkNet-53的網絡結構,可以看下面這張圖:

網絡結構其實看的話,不是算很復雜。下面對主要的幾個單元進行解釋。

1、DBL:一個卷積層、一個BN層和一個Leaky ReLU組成的基本卷積單元。

這個是組成網絡的基本組成單元,其中的話,中間層經過一個DBL后,特征圖的大小不會發生變化

2、res unit:輸入通過兩個DBL后,再與原輸入進行add;這是一種常規的殘差單元。殘差單元的目的是為了讓網絡可以提取到更深層次的特征,同時避免出現梯度消失或者爆炸。

通過一個殘差塊后,特征圖的尺寸并沒有發生變化,不管是特征圖的長寬,還是特征圖的通道數,都沒有發生變化。

3、resn:其中的n表示的是n個res unit;所以resn = Zero Padding +DBL+n*res unit

4、concat:將darknet-53的中間層和后面的某一層的上采樣進行張量拼接,達到多尺度特征融合的目的。這與殘差層的add操作是不一樣的,拼接會擴充張量的維度,而add直接相加不會導致張量維度的改變。

Y1、Y2、Y3:分別表示YOLOv3三種尺度的輸出。

與darkNet-19對比可知,darkNet-53主要做了如下改進。

1、沒有采用最大池化層,而是采用步長為2的卷積層進行下采樣。

2、為了防止過擬合,每個卷積層后加入了一個BN層和一個Leaky ReLU。

3、引入了殘差網絡的思想,目的是為了讓網絡可以提取到更深層的特征,同時為了防止出現梯度的消失和爆炸。

4、將網絡的中間層和后面某一層的上采樣進行張量拼接,達到多尺度特征融合的目的。

3、改進之處

YOLOv3最大的改進之處還在于網絡結構的改進,由于上面已經講過了。因此下面主要對其他改進方面進行介紹。

1、多尺度預測

為了能給預測多尺度的目標,YOLOv3選了三種不同shape的Anchors,同時每種Anchors具有三種不同的尺度,一共9種不同大小的Anchors。在COCO數據集上選擇的9種Anchors的尺寸如下圖紅色框所示:

借鑒特征金字塔網的思想,YOLOv3設計了三種不同尺度的網絡輸出Y1、Y2、Y3、目的是為了預測不同尺度的坐標,由于每一個尺度網格都負責預測3個邊界框,且COCO數據集有80個類。所以網絡輸出的張量應該是:N*N*(3*(5+1+80)).由下采樣次數不同,得到的N不同,最終,Y1、Y2、Y3的shape分別為:[13, 13, 255]、[26, 26, 255]、[52, 52, 255]。可見參見原文:

先寫到這里,后續有時間再寫。

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/906314.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/906314.shtml
英文地址,請注明出處:http://en.pswp.cn/news/906314.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

服務器操作系統時間同步失敗的原因及修復

服務器操作系統時間同步失敗可能導致日志記錄不準確、安全證書失效等問題。以下是常見原因及對應的修復方法: ### 一、時間同步失敗的常見原因 1. **網絡連接問題** - NTP服務器無法訪問(防火墻阻止、網絡中斷) - DNS解析失敗或網…

Cribl 中function 使用過濾的特殊case:Parser + rename

Cribl 利用function 對parser 進行特殊過濾處理: Parser Function – Fields Filter Expression? When you use the Stream Parser Functions Reserialize option, there is a special option that becomes available, called the Fields Filter Expression. This is basica…

inverse-design-of-grating-coupler-3d

一、設計和優化3D光柵耦合器 1.1 代碼講解 通過預定義的環形間距參數(distances數組),在FDTD中生成橢圓光柵結構,并通過用戶交互確認幾何正確性后,可進一步執行參數掃描優化。 # os:用于操作系統相關功能(如文件路徑操作) import os import sys# lumapi:Lumerical 的…

TuyaOpen橫空出世!涂鴉智能如何用開源框架重構AIoT開發范式?

??「炎碼工坊」技術彈藥已裝填! 點擊關注 → 解鎖工業級干貨【工具實測|項目避坑|源碼燃燒指南】 一、引子:AIoT開發的“不可能三角”被打破 當AI與物理世界深度融合的浪潮席卷全球,開發者們卻始終面臨一個“不可能三角”——開發效率、技術深度與商業化落地難以兼得。 …

智慧賦能光伏運維——無人機巡檢+地面監控雙鏈路覆蓋,打造光伏電站管理新標桿

一、引言:光伏電站運維的挑戰與機遇 在全球能源轉型浪潮下,光伏電站作為清潔能源的重要載體,其高效運維管理成為行業核心命題。然而,傳統光伏電站運維存在覆蓋范圍廣、設備分散、人工巡檢效率低、故障響應慢等痛點。為破解這一難…

前端無感登錄刷新

前端實現無感登錄 在現代的前端開發中,用戶體驗是非常重要的一環。無感登錄(也叫自動登錄)就是其中一個提升用戶體驗的關鍵功能。它的目標是讓用戶在登錄后,即使關閉瀏覽器或長時間不操作,也能在下次訪問時自動登錄&a…

JAVASE查漏補缺

這段時間學習了很多知識,好多還有疑問不清楚的地方。今天有空總結一下。 javame,javase,javaee 一、Java ME(Micro Edition,微型版) Java ME是一種適用于移動設備和嵌入式系統的小型Java平臺,具有高度可移植性和跨平…

【設計模式】基于 Java 語言實現工廠模式

目錄 一、簡單工廠模式 1.1 簡單工廠模式的介紹 二、工廠方法模式 2.1 工廠方法模式的介紹 2.2 工廠方法模式的基本實現 2.3 工廠方法模式的應用場景 三、抽象工廠 3.1 抽象工廠的概念 3.2 抽象工廠的基本結構 3.3 抽象工廠的基本實現 3.4 抽象工廠的應用場景 四、…

OpenCV CUDA模塊中的矩陣算術運算------創建卷積操作對象的工廠方法 cv::cuda::createConvolution

操作系統:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 編程語言:C11 算法描述 createConvolution函數是OpenCV CUDA 模塊中用于創建卷積操作對象的工廠方法。它返回一個指向 cv::cuda::Convolution 接口的智能指針&#xff0…

IDEA:程序編譯報錯:java: Compilation failed: internal java compiler error

目錄 簡介異常信息排查原因解決 簡介 代碼無法編譯、無法打包 異常信息 java: Compilation failed: internal java compiler error排查 1、代碼近期沒有改動過,原先是可以正常編譯的 2、查看程序JDK,是JDK1.8沒錯,與原先JDK一致 3、出現…

windows 10 做服務器 其他電腦無法訪問,怎么回事?

一般我們會先打開win10自己的防火墻策略,但是容易忽略 電腦之間 路由器上的防火墻,此時也需要查看一下,可以嘗試先關閉路由器防火墻,如果可以了,再 設置路由器上的防火墻規則。 將路由器的上網設置 改成 路由模式 &a…

【人工智能-agent】--Dify+Mysql+Echarts搭建了一個能“聽懂”人話的數據可視化助手!

Echarts官網:https://echarts.apache.org/zh/index.html ECharts 是一個由百度團隊開發的、基于 JavaScript 的開源可視化圖表庫,它提供了豐富的圖表類型和強大的交互功能,能夠幫助開發者輕松創建專業級的數據可視化應用。 核心特點 豐富的圖…

Android設備 顯示充電速度流程

整體邏輯:設備充電速度的判斷 系統通過讀取充電器的最大電流(Current)與最大電壓(Voltage),計算最大充電功率(Wattage),以此判斷當前是慢充、普通充還是快充&#xff1a…

十一、Hive JOIN 連接查詢

作者:IvanCodes 日期:2025年5月16日 專欄:Hive教程 在數據分析的江湖中,數據往往分散在不同的“門派”(表)之中。要洞察數據間的深層聯系,就需要JOIN這把利器,將相關聯的數據串聯起來…

Excel在每行下面插入數量不等的空行

1、在B列輸入要添加的空行數量(如果加7行,則寫6,也可以插入數量不等的空行) 2、在C1單元格輸入1 3、在C2輸入公式:SUM($B$1:B1)1,下拉填充 4、在C9單元格輸入1 5、選中C9單元格-->選擇菜單欄“開始”…

iOS熱更新技術要點與風險分析

iOS的熱更新技術允許開發者在無需重新提交App Store審核的情況下,動態修復Bug或更新功能,但需注意蘋果的審核政策限制。以下是iOS熱更新的主要技術方案及要點: 一、主流熱更新技術方案 JavaScript動態化框架 React Native & Weex 通過Jav…

服務器多用戶共享Conda環境操作指南——Ubuntu24.02

1. 使用阿里云鏡像下載 Anaconda 最新版本 wget https://mirrors.aliyun.com/anaconda/archive/Anaconda3-2024.02-1-Linux-x86_64.sh bug解決方案 若出現:使用wget在清華鏡像站下載Anaconda報錯ERROR 403: Forbidden. 解決方案:wget --user-agent“M…

基于YOLO算法的目標檢測系統實現指南

YOLO(You Only Look Once)作為計算機視覺領域最具影響力的實時目標檢測算法之一,其最新版本YOLOv8在速度與精度之間達到了新的平衡。本文將從技術實現角度,詳細介紹如何使用YOLO算法構建高效的目標檢測系統。 一、算法原理與技術架構 1.1 YOLO核心思想…

C++ asio網絡編程(6)利用C11模擬偽閉包實現連接的安全回收

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 文章目錄 前言一、智能指針管理Session二、用智能指針來實現Server的函數1.start_accept()1.引用計數注意點2.std::bind 與異步回調函數的執行順序分析 2.handle_accept1.異步…

AI與產品架構設計(2):Agent系統的應用架構與落地實

什么是AI Agent?其在架構中的獨特定位 AI Agent(人工智能代理)是一種模擬人類智能行為的自主系統,通常以大型語言模型(LLM)作為核心引擎。簡單來說,Agent能夠像人一樣感知環境信息、規劃行動方…