當前位置:首頁 » 操作系統 » 演算法相亮

演算法相亮

發布時間: 2023-03-15 06:24:53

1. 哪些演算法曾讓你感覺醍醐灌頂

貝葉斯定理
比如這樣一個問題:你喜歡上一個人的概率,你覺得一個人某方面好的概率,你喜歡上一個人然後覺得這個人某方面好的概率,你覺得一個人某方面好然後喜歡上這個人的概率,這4個之間有什麼關系呢?
用數學語言表達:P(喜歡上一個人), P(覺得一個人某方面好), P(覺得這個人某方面好|喜歡上一個人) 和 P(喜歡上這個人|覺得一個人某方面好) 有什麼關系呢?
我們生活中遇到的很多概率其實都是條件概率/後驗概率(在某一條件下成立的事件的概率),貝葉斯定理揭示了不同的條件概率之間的關系: )
一瞬間,感覺讓你發現了世界運行了某些奧秘
KMP非常優美,SIFT 圖像匹配演算法很強大,plsa語義相似度計算也讓我震撼,不過最讓我震撼的還是mathematica里的fullsimplify背後的演算法。
Fullsimplify這玩意能搞定很多人都搞不定的公式,我說的搞不定是指該問題本身人可以在三五步之內求解,但卻是很難求解的問題,例如某些三角函數的積分需要巧妙地作換元積分才能得解。
從思想上看,最深刻的是遞歸,以及求泛函極值的最小作用量。基於這兩種思想的演算法,比如快排、HMM中的Baum-Welch,都是精美的演算法,但背後的思想根基並非首創。動態規劃、蒙特卡洛類的演算法也屬此列。
此外,有「道法自然」意味的模擬退火、蟻群、遺傳、粒子群這些,思想方法上有創新,但是演算法設計上與神經網路、SVM、HMM相比,就略顯粗糙。

2. A*演算法介紹

姓名:車文揚 學號:16020199006

【嵌牛導讀】:A*演算法的逐步詳解

【嵌牛鼻子】:啟發式演算法

【嵌牛提問】:A*演算法的原理是什麼?

【嵌牛正文】:

A*演算法

路徑規劃是指的是機器人的最優路徑規劃問題,即依據某個或某些優化准則(如工作代價最小、行走路徑最短、行走時間最短等),在工作空間中找到一個從起始狀態到目標狀態能避開障礙物的最優路徑。機器人的路徑規劃應用場景極豐富,最常見如游戲中NPC及控制角色的位置移動,網路地圖等導航問題,小到家庭掃地機器人、無人機大到各公司正爭相開拓的無人駕駛汽車等。

目前路徑規劃演算法分為:

A*演算法原理:

在計算機科學中,A*演算法作為Dijkstra演算法的擴展,因其高效性而被廣泛應用於尋路及圖的遍歷,如星際爭霸等游戲中就大量使用。在理解演算法前,我們需要知道幾個概念:

搜索區域(The Search Area):圖中的搜索區域被劃分為了簡單的二維數組,數組每個元素對應一個小方格,當然我們也可以將區域等分成是五角星,矩形等,通常將一個單位的中心點稱之為搜索區域節點(Node)。

開放列表(Open List):我們將路徑規劃過程中待檢測的節點存放於Open List中,而已檢測過的格子則存放於Close List中。

父節點(parent):在路徑規劃中用於回溯的節點,開發時可考慮為雙向鏈表結構中的父結點指針。

路徑排序(Path Sorting):具體往哪個節點移動由以下公式確定:F(n) = G + H 。G代表的是從初始位置A沿著已生成的路徑到指定待檢測格子的移動開銷。H指定待測格子到目標節點B的估計移動開銷。

啟發函數(Heuristics Function):H為啟發函數,也被認為是一種試探,由於在找到唯一路徑前,我們不確定在前面會出現什麼障礙物,因此用了一種計算H的演算法,具體根據實際場景決定。在我們簡化的模型中,H採用的是傳統的曼哈頓距離(Manhattan Distance),也就是橫縱向走的距離之和。

如下圖所示,綠色方塊為機器人起始位置A,紅色方塊為目標位置B,藍色為障礙物。

我們把要搜尋的區域劃分成了正方形的格子。這是尋路的第一步,簡化搜索區域。這個特殊的方法把我們的搜索區域簡化為了2 維數組。數組的每一項代表一個格子,它的狀態就是可走(walkalbe)或不可走(unwalkable) 。現用A*演算法尋找出一條自A到B的最短路徑,每個方格的邊長為10,即垂直水平方向移動開銷為10。因此沿對角移動開銷約等於14。具體步驟如下:

從起點 A 開始,把它加入到一個由方格組成的open list(開放列表) 中,這個open list像是一個購物清單。Open list里的格子是可能會是沿途經過的,也有可能不經過。因此可以將其看成一個待檢查的列表。查看與A相鄰的8個方格 ,把其中可走的 (walkable) 或可到達的(reachable) 方格加入到open list中。並把起點 A 設置為這些方格的父節點 (parent node) 。然後把 A 從open list中移除,加入到close list(封閉列表) 中,close list中的每個方格都是不需要再關注的。

如下圖所示,深綠色的方格為起點A,它的外框是亮藍色,表示該方格被加入到了close list 。與它相鄰的黑色方格是需要被檢查的,他們的外框是亮綠色。每個黑方格都有一個灰色的指針指向他們的父節點A。

下一步,我們需要從open list中選一個與起點A相鄰的方格。但是到底選擇哪個方格好呢?選F值最小的那個。我們看看下圖中的一些方格。在標有字母的方格中G = 10 。這是因為水平方向從起點到那裡只有一個方格的距離。與起點直接相鄰的上方,下方,左方的方格的G 值都是10 ,對角線的方格G 值都是14 。H值通過估算起點到終點( 紅色方格) 的Manhattan 距離得到,僅作橫向和縱向移動,並且忽略沿途的障礙。使用這種方式,起點右邊的方格到終點有3 個方格的距離,因此H = 30 。這個方格上方的方格到終點有4 個方格的距離( 注意只計算橫向和縱向距離) ,因此H = 40 。

比較open list中節點的F值後,發現起點A右側節點的F=40,值最小。選作當前處理節點,並將這個點從Open List刪除,移到Close List中。

對這個節點周圍的8個格子進行判斷,若是不可通過(比如牆,水,或是其他非法地形)或已經在Close List中,則忽略。否則執行以下步驟:

若當前處理節點的相鄰格子已經在Open List中,則檢查這條路徑是否更優,即計算經由當前處理節點到達那個方格是否具有更小的 G值。如果沒有,不做任何操作。相反,如果G值更小,則把那個方格的父節點設為當前處理節點 ( 我們選中的方格 ) ,然後重新計算那個方格的 F 值和 G 值。

若當前處理節點的相鄰格子不在Open List中,那麼把它加入,並將它的父節點設置為該節點。

按照上述規則我們繼續搜索,選擇起點右邊的方格作為當前處理節點。它的外框用藍線打亮,被放入了close list 中。然後我們檢查與它相鄰的方格。它右側的3個方格是牆壁,我們忽略。它左邊的方格是起點,在close list 中,我們也忽略。其他4個相鄰的方格均在open list 中,我們需要檢查經由當前節點到達那裡的路徑是否更好。我們看看上面的方格,它現在的G值為14 ,如果經由當前方格到達那裡,G值將會為20( 其中10為從起點到達當前方格的G值,此外還要加上從當前方格縱向移動到上面方格的G值10) ,因此這不是最優的路徑。看圖就會明白直接從起點沿對角線移動到那個方格比先橫向移動再縱向移動要好。

當把4個已經在open list 中的相鄰方格都檢查後,沒有發現經由當前節點的更好路徑,因此不做任何改變。接下來要選擇下一個待處理的節點。因此再次遍歷open list ,現在open list中只有7 個方格了,我們需要選擇F值最小的那個。這次有兩個方格的F值都是54,選哪個呢?沒什麼關系。從速度上考慮,選擇最後加入open list 的方格更快。因此選擇起點右下方的方格,如下圖所示。

接下來把起點右下角F值為54的方格作為當前處理節點,檢查其相鄰的方格。我們發現它右邊是牆(牆下面的一格也忽略掉,假定牆角不能直接穿越),忽略之。這樣還剩下 5 個相鄰的方格。當前方格下面的 2 個方格還沒有加入 open list ,所以把它們加入,同時把當前方格設為他們的父親。在剩下的 3 個方格中,有 2 個已經在 close list 中 ( 一個是起點,一個是當前方格上面的方格,外框被加亮的 ) ,我們忽略它們。最後一個方格,也就是當前方格左邊的方格,檢查經由當前方格到達那裡是否具有更小的 G 值。沒有,因此我們准備從 open list 中選擇下一個待處理的方格。

不斷重復這個過程,直到把終點也加入到了open list 中,此時如下圖所示。注意在起點下方2 格處的方格的父親已經與前面不同了。之前它的G值是28並且指向它右上方的方格。現在它的G 值為20 ,並且指向它正上方的方格。這是由於在尋路過程中的某處使用新路徑時G值更小,因此父節點被重新設置,G和F值被重新計算。

那麼我們怎樣得到實際路徑呢?很簡單,如下圖所示,從終點開始,沿著箭頭向父節點移動,直至回到起點,這就是你的路徑。

A*演算法總結:

1. 把起點加入 open list 。

2. 重復如下過程:

a. 遍歷open list ,查找F值最小的節點,把它作為當前要處理的節點,然後移到close list中

b. 對當前方格的 8 個相鄰方格一一進行檢查,如果它是不可抵達的或者它在close list中,忽略它。否則,做如下操作:

□  如果它不在open list中,把它加入open list,並且把當前方格設置為它的父親

□  如果它已經在open list中,檢查這條路徑 ( 即經由當前方格到達它那裡 ) 是否更近。如果更近,把它的父親設置為當前方格,並重新計算它的G和F值。如果你的open list是按F值排序的話,改變後你可能需要重新排序。

c. 遇到下面情況停止搜索:

□  把終點加入到了 open list 中,此時路徑已經找到了,或者

□  查找終點失敗,並且open list 是空的,此時沒有路徑。

3. 從終點開始,每個方格沿著父節點移動直至起點,形成路徑。

3. 從感測器到演算法原理,機器人視覺避障原來是這樣的

避障是指移動機器人在行走過程中,通過感測器感知到在其規劃路線上存在靜態或動態障礙物時,按照 一定的演算法實時更新路徑,繞過障礙物,最後達到目標點。


避障常用哪些感測器?

不管是要進行導航規劃還是避障,感知周邊環境信息是第一步。就避障來說,移動機器人需要通過感測器 實時獲取自身周圍障礙物信息,包括尺寸、形狀和位置等信息。避障使用的感測器多種多樣,各有不同的原理和特點,目前常見的主要有視覺感測器、激光感測器、紅外感測器、超聲波感測器等。下面我簡單介紹一下這幾種感測器的基本工作原理。

超聲波

超聲波感測器的基本原理是測量超聲波的飛行時間,通過d=vt/2測量距離,其中d是距離,v是聲速,t是 飛行時間。由於超聲波在空氣中的速度與溫濕度有關,在比較精確的測量中,需把溫濕度的變化和其它因素考慮進去。


上面這個圖就是超聲波感測器信號的一個示意。通過壓電或靜電變送器產生一個頻率在幾十kHz的超聲波脈沖組成波包,系統檢測高於某閾值的反向聲波,檢測到後使用測量到的飛行時間計算距離。超聲波感測器一般作用距離較短,普通的有效探測距離都在幾米,但是會有一個幾十毫米左右的最小探測盲區。由於超聲感測器的成本低、實現方法簡單、技術成熟,是移動機器人中常用的感測器。超聲波感測器也有一些缺點,首先看下面這個圖。


因為聲音是錐形傳播的,所以我們實際測到的距離並不是 一個點,而是某個錐形角度范圍內最近物體的距離。

另外,超聲波的測量周期較長,比如3米左右的物體,聲波傳輸這么遠的距離需要約20ms的時間。再者,不同材料對聲波的反射或者吸引是不相同的,還有多個超聲感測器之間有可能會互相干擾,這都是實際應用的過程中需要考慮的。

紅外

一般的紅外測距都是採用三角測距的原理。紅外發射器按照一定角度發射紅外光束,遇到物體之後,光會反向回來,檢測到反射光之後,通過結構上的幾何三角關系,就可以計算出物體距離D。

當D的距離足夠近的時候,上圖中L值會相當大,如果超過CCD的探測范圍,這時,雖然物體很近,但是感測器反而看不到了。當物體距離D很大時,L值就會很小,測量量精度會變差。因此,常見的紅外感測器 測量距離都比較近,小於超聲波,同時遠距離測量也有最小距離的限制。另外,對於透明的或者近似黑體的物體,紅外感測器是無法檢測距離的。但相對於超聲來說,紅外感測器具有更高的帶寬。

激光

常見的激光雷達是基於飛行時間的(ToF,time of flight),通過測量激光的飛行時間來進行測距d=ct/2,類似於前面提到的超聲測距公式,其中d是距離,c是光速,t是從發射到接收的時間間隔。激光雷達包括發射器和接收器 ,發射器用激光照射目標,接收器接收反向回的光波。機械式的激光雷達包括一個帶有鏡子的機械機構,鏡子的旋轉使得光束可以覆蓋 一個平面,這樣我們就可以測量到一個平面上的距離信息。

對飛行時間的測量也有不同的方法,比如使用脈沖激光,然後類似前面講的超聲方案,直接測量佔用的時間,但因為光速遠高於聲速,需要非常高精度的時間測量元件,所以非常昂貴;另一種發射調頻後的連續激光波,通過測量接收到的反射波之間的差頻來測量時間。


圖一


圖二

比較簡單的方案是測量反射光的相移,感測器以已知的頻率發射一定幅度的調制光,並測量發射和反向信號之間的相移,如上圖一。調制信號的波長為lamda=c/f,其中c是光速,f是調制頻率,測量到發射和反射光束之間的相移差theta之後,距離可由lamda*theta/4pi計算得到,如上圖二。

激光雷達的測量距離可以達到幾十米甚至上百米,角度解析度高,通常可以達到零點幾度,測距的精度也高。但測量距離的置信度會反比於接收信號幅度的平方,因此,黑體或者遠距離的物體距離測量不會像光亮的、近距離的物體那麼好的估計。並且,對於透明材料,比如玻璃,激光雷達就無能為力了。還有,由於結構的復雜、器件成本高,激光雷達的成本也很高。

一些低端的激光雷達會採用三角測距的方案進行測距。但這時它們的量程會受到限制,一般幾米以內,並且精度相對低一些,但用於室內低速環境的SLAM或者在室外環境只用於避障的話,效果還是不錯的。

視覺

常用的計算機視覺方案也有很多種, 比如雙目視覺,基於TOF的深度相機,基於結構光的深度相機等。深度相機可以同時獲得RGB圖和深度圖,不管是基於TOF還是結構光,在室外強光環境下效果都並不太理想,因為它們都是需要主動發光的。

像基於結構光的深度相機,發射出的光會生成相對隨機但又固定的斑點圖樣,這些光斑打在物體上後,因為與攝像頭距離不同,被攝像頭捕捉到的位置也不相同,之後先計算拍到的圖的斑點與標定的標准圖案在不同位置的偏移,利用攝像頭位置、感測器大小等參數就可以計算出物體與攝像頭的距離。而我們目前的E巡機器人主要是工作在室外環境,主動光源會受到太陽光等條件的很大影響,所以雙目視覺這種被動視覺方案更適合,因此我們採用的視覺方案是基於雙目視覺的。

雙目視覺的測距本質上也是三角測距法,由於兩個攝像頭的位置不同,就像我們人的兩隻眼睛一樣,看到的物體不一樣。兩個攝像頭看到的同一個點P,在成像的時候會有不同的像素位置,此時通過三角測距就可以測出這個點的距離。與結構光方法不同的是,結構光計算的點是主動發出的、已知確定的,而雙目演算法計算的點一般是利用演算法抓取到的圖像特徵,如SIFT或SURF特徵等,這樣通過特徵計算出來的是稀疏圖。

要做良好的避障,稀疏圖還是不太夠的,我們需要獲得的是稠密的點雲圖,整個場景的深度信息。稠密匹配的演算法大致可以分為兩類,局部演算法和全局演算法。局部演算法使用像素局部的信息來計算其深度,而全局演算法採用圖像中的所有信息進行計算。一般來說,局部演算法的速度更快,但全局演算法的精度更高。

這兩類各有很多種不同方式的具體演算法實現。能過它們的輸出我們可以估算出整個場景中的深度信息,這個深度信息可以幫助我們尋找地圖場景中的可行走區域以及障礙物。整個的輸出類似於激光雷達輸出的3D點雲圖,但是相比來講得到信息會更豐富,視覺同激光相比優點是價格低很多,缺點也比較明顯,測量精度要差 一些,對計算能力的要求也高很多。當然,這個精度差是相對的,在實用的過程中是完全足夠的,並且我們目前的演算法在我們的平台NVIDIA TK1和TX1上是可以做到實時運行。


KITTI採集的圖


實際輸出的深度圖,不同的顏色代表不同的距離

在實際應用的過程中,我們從攝像頭讀取到的是連續的視頻幀流,我們還可以通過這些幀來估計場景中 目標物體的運動,給它們建立運動模型,估計和預測它們的運動方向、運動速度,這對我們實際行走、避障規劃是很有用的。

以上幾種是最常見的幾種感測器 ,各有其優點和缺點,在真正實際應用的過程中,一般是綜合配置使用多種不同的感測器 ,以最大化保證在各種不同的應用和環境條件下,機器人都能正確感知到障礙物信息。我們公司的E巡機器人的避障方案就是以雙目視覺為主,再輔助以多種其他感測器,保證機器人周邊360度空間立體范圍內的障礙物都能被有效偵測到,保證機器人行走的安全性。

避障常用演算法原理

在講避障演算法之前,我們假定機器人已經有了一個導航規劃演算法對自己的運動進行規劃,並按照規劃的路徑行走。避障演算法的任務就是在機器人執行正常行走任務的時候,由於感測器的輸入感知到了障礙物的存在,實時地更新目標軌跡,繞過障礙物。

Bug演算法知乎用戶無方表示

Bug演算法應該是最簡單的一種避障演算法了,它的基本思想是在發現障礙後,圍著檢測到的障礙物輪廓行走,從而繞開它。Bug演算法目前有很多變種, 比如Bug1演算法,機器人首先完全地圍繞物體,然後從距目標最短距離的點離開。Bug1演算法的效率很低,但可以保證機器人達到目標。

Bug1演算法示例

改進後的Bug2演算法中,機器人開始時會跟蹤物體的輪廓,但不會完全圍繞物體一圈,當機器人可以直接移動至目標時,就可以直接從障礙分離,這樣可以達到比較短的機器人行走總路徑。


Bug2演算法示例

除此之外,Bug演算法還有很多其他的變種, 比如正切Bug演算法等等。在許多簡單的場景中,Bug演算法是實現起來比較容易和方便的,但是它們並沒有考慮到機器人的動力學等限制,因此在更復雜的實際環境中就不是那麼可靠好用了。

勢場法(PFM)

實際上,勢場法不僅僅可以用來避障,還可以用來進行路徑的規劃。勢場法把機器人處理在勢場下的 一個點,隨著勢場而移動,目標表現為低谷值,即對機器人的吸引力,而障礙物扮演的勢場中的一個高峰,即斥力,所有這些力迭加於機器人身上,平滑地引導機器人走向目標,同時避免碰撞已知的障礙物。當機器人移動過程中檢測新的障礙物,則需要更新勢場並重新規劃。

上面這個圖是勢場比較典型的示例圖,最上的圖a左上角是出發點,右下角是目標點,中間三個方塊是障礙物。中間的圖b就是等勢點陣圖,圖中的每條連續的線就代表了一個等勢位的一條線,然後虛線表示的在整個勢場裡面所規劃出來的一條路徑,我們的機器人是沿著勢場所指向的那個方向一直行走,可以看見它會繞過這個比較高的障礙物。

最下面的圖,即我們整個目標的吸引力還有我們所有障礙物產生的斥力最終形成的一個勢場效果圖,可以看到機器人從左上角的出發點出發,一路沿著勢場下降的方向達到最終的目標點,而每個障礙物勢場表現出在很高的平台,所以,它規劃出來的路徑是不會從這個障礙物上面走的。

一種擴展的方法在基本的勢場上附加了了另外兩個勢場:轉運勢場和任務勢場。它們額外考慮了由於機器人本身運動方向、運動速度等狀態和障礙物之間的相互影響。

轉動勢場考慮了障礙與機器人的相對方位,當機器人朝著障礙物行走時,增加斥力, 而當平行於物體行走時,因為很明顯並不會撞到障礙物,則減小斥力。任務勢場則排除了那些根據當前機器人速度不會對近期勢能造成影響的障礙,因此允許規劃出 一條更為平滑的軌跡。

另外還有諧波勢場法等其他改進方法。勢場法在理論上有諸多局限性, 比如局部最小點問題,或者震盪性的問題,但實際應用過程中效果還是不錯的,實現起來也比較容易。

向量場直方圖(VFH)

它執行過程中針對移動機器人當前周邊環境創建了一個基於極坐標表示的局部地圖,這個局部使用柵格圖的表示方法,會被最近的一些感測器數據所更新。VFH演算法產生的極坐標直方圖如圖所示:


圖中x軸是以機器人為中心感知到的障礙物的角度,y軸表示在該方向存在障礙物的概率大小p。實際應用的過程中會根據這個直方圖首先辨識出允許機器人通過的足夠大的所有空隙,然後對所有這些空隙計算其代價函數,最終選擇具有最低代價函數的通路通過。

代價函數受三個因素影響:目標方向、機器人當前方向、之前選擇的方向,最終生成的代價是這三個因素的加權值,通過調節不同的權重可以調整機器人的選擇偏好。VFH演算法也有其他的擴展和改進,比如在VFH+演算法中,就考慮了機器人運動學的限制。由於實際底層運動結構的不同,機器的實際運動能力是受限的,比如汽車結構,就不能隨心所欲地原地轉向等。VFH+演算法會考慮障礙物對機器人實際運動能力下軌跡的阻擋效應,屏蔽掉那些雖然沒有被障礙物占據但由於其阻擋實際無法達到的運動軌跡。我們的E巡機器人採用的是兩輪差動驅動的運動形式,運動非常靈活,實際應用較少受到這些因素的影響。

具體可以看 一下這個圖示:

類似這樣傳統的避障方法還有很多,除此之外,還有許多其他的智能避障技術,比如神經網路、模糊邏輯等。

神經網路方法對機器人從初始位置到目標位置的整個行走路徑進行訓練建模,應用的時候,神經網路的輸 入為之前機器人的位姿和速度以及感測器的輸 入,輸出期望的下一目標或運動方向。

模糊邏輯方法核心是模糊控制器,需要將專家的知識或操作人員的經驗寫成多條模糊邏輯語句,以此控制機器人的避障過程。比如這樣的模糊邏輯:第一條,若右前方較遠處檢測到障礙物,則稍向左轉;第 二條,若右前方較近處檢測到障礙物,則減速並向左轉更多角度等等。


4. 【目標檢測演算法解讀】yolo系列演算法二

https://blog.csdn.net/Gentleman_Qin/article/details/84349144

|聲明:遵循CC 4.0 BY-SA版權協議

    建立在YOLOv1的基礎上,經過Joseph Redmon等的改進,YOLOv2和YOLO9000演算法在2017年CVPR上被提出,並獲得最佳論文提名,重點解決YOLOv1召回率和定位精度方面的誤差。在提出時,YOLOv2在多種監測數據集中都要快過其他檢測系統,並可以在速度與精確度上進行權衡。

    YOLOv2採用Darknet-19作為特徵提取網路,增加了批量標准化(Batch Normalization)的預處理,並使用224×224和448×448兩階段訓練ImageNet,得到預訓練模型後fine-tuning。

    相比於YOLOv1是利用FC層直接預測Bounding Box的坐標,YOLOv2借鑒了FSR-CNN的思想,引入Anchor機制,利用K-Means聚類的方式在訓練集中聚類計算出更好的Anchor模板,在卷積層使用Anchor Boxes操作,增加Region Proposal的預測,同時採用較強約束的定位方法,大大提高演算法召回率。同時結合圖像細粒度特徵,將淺層特徵與深層特徵相連,有助於對小尺寸目標的檢測。 

    下圖所示是YOLOv2採取的各項改進帶了的檢測性能上的提升:

    YOLO9000 的主要檢測網路也是YOLO v2,同時使用WordTree來混合來自不同的資源的訓練數據,並使用聯合優化技術同時在ImageNet和COCO數據集上進行訓練,目的是利用數量較大的分類數據集來幫助訓練檢測模型,因此,YOLO 9000的網路結構允許實時地檢測超過9000種物體分類,進一步縮小了檢測數據集與分類數據集之間的大小代溝。

    下面將具體分析YOLOv2的各個創新點:

BN概述:

    對數據進行預處理(統一格式、均衡化、去噪等)能夠大大提高訓練速度,提升訓練效果。BN正是基於這個假設的實踐,對每一層輸入的數據進行加工。

    BN是2015年Google研究員在論文《Batch Normalization: Accelerating Deep Network Training by Recing Internal Covariate Shift》一文中提出的,同時也將BN應用到了2014年的GoogLeNet上,也就是Inception-v2。

    BN層簡單講就是對網路的每一層的輸入都做了歸一化,這樣網路就不需要每層都去學數據的分布,收斂會更快。YOLOv1演算法(採用的是GoogleNet網路提取特徵)是沒有BN層的,而在YOLOv2中作者為每個卷積層都添加了BN層。

    使用BN對網路進行優化,讓網路提高了收斂性,同時還消除了對其他形式的正則化(regularization)的依賴,因此使用BN後可以從模型中去掉Dropout,而不會產生過擬合。

BN優點:

神經網路每層輸入的分布總是發生變化,加入BN,通過標准化上層輸出,均衡輸入數據分布,加快訓練速度,因此可以設置較大的學習率(Learning Rate)和衰減(Decay);

通過標准化輸入,降低激活函數(Activation Function)在特定輸入區間達到飽和狀態的概率,避免梯度彌散(Gradient Vanishing)問題;

輸入標准化對應樣本正則化,BN在一定程度上可以替代 Dropout解決過擬合問題。

BN演算法:

    在卷積或池化之後,激活函數之前,對每個數據輸出進行標准化,方式如下圖所示:

    公式很簡單,前三行是 Batch內數據歸一化(假設一個Batch中有每個數據),同一Batch內數據近似代表了整體訓練數據。第四行引入了附加參數 γ 和 β,此二者的取值演算法可以參考BN論文,在此不再贅述。

    fine-tuning:用已經訓練好的模型,加上自己的數據集,來訓練新的模型。即使用別人的模型的前幾層,來提取淺層特徵,而非完全重新訓練模型,從而提高效率。一般新訓練模型准確率都會從很低的值開始慢慢上升,但是fine-tuning能夠讓我們在比較少的迭代次數之後得到一個比較好的效果。

    YOLO模型分為兩部分,分類模型和檢測模型,前者使用在ImageNet上預訓練好的模型,後者在檢測數據集上fine-tuning。

    YOLOv1在預訓練時採用的是224*224的輸入(在ImageNet數據集上進行),然後在檢測的時候採用448*448的輸入,這會導致從分類模型切換到檢測模型的時候,模型還要適應圖像解析度的改變。

    YOLOv2則將預訓練分成兩步:先用224*224的輸入在ImageNet數據集訓練分類網路,大概160個epoch(將所有訓練數據循環跑160次)後將輸入調整到448*448,再訓練10個epoch(這兩步都是在ImageNet數據集上操作)。然後利用預訓練得到的模型在檢測數據集上fine-tuning。這樣訓練得到的模型,在檢測時用448*448的圖像作為輸入可以順利檢測。

    YOLOv1將輸入圖像分成7*7的網格,每個網格預測2個Bounding Box,因此一共有98個Box,同時YOLOv1包含有全連接層,從而能直接預測Bounding Boxes的坐標值,但也導致丟失較多的空間信息,定位不準。

    YOLOv2首先將YOLOv1網路的FC層和最後一個Pooling層去掉,使得最後的卷積層可以有更高解析度的特徵,然後縮減網路,用416*416大小的輸入代替原來的448*448,使得網路輸出的特徵圖有奇數大小的寬和高,進而使得每個特徵圖在劃分單元格(Cell)的時候只有一個中心單元格(Center Cell)。

    為什麼希望只有一個中心單元格呢?由於圖片中的物體都傾向於出現在圖片的中心位置,特別是比較大的物體,所以有一個單元格單獨位於物體中心的位置用於預測這些物體。

    YOLOv2通過引入Anchor Boxes,通過預測Anchor Box的偏移值與置信度,而不是直接預測坐標值。YOLOv2的卷積層採用32這個值來下采樣圖片,所以通過選擇416*416用作輸入尺寸最終能輸出一個13*13的特徵圖。若採用FSRCNN中的方式,每個Cell可預測出9個Anchor Box,共13*13*9=1521個(YOLOv2確定Anchor Boxes的方法見是維度聚類,每個Cell選擇5個Anchor Box)。

    在FSRCNN中,以一個51*39大小的特徵圖為例,其可以看做一個尺度為51*39的圖像,對於該圖像的每一個位置,考慮9個可能的候選窗口:3種面積3種比例。這些候選窗口稱為Anchor Boxes。下圖示出的是51*39個Anchor Box中心,以及9種Anchor Box示例。

YOLOv1和YOLOv2特徵圖數據結構:

YOLOv1:S*S* (B*5 + C) => 7*7(2*5+20)

    其中B對應Box數量,5對應邊界框的定位信息(w,y,w,h)和邊界框置信度(Confidience)。解析度是7*7,每個Cell預測2個Box,這2個Box共用1套條件類別概率(1*20)。

YOLOv2:S*S*K* (5 + C) => 13*13*9(5+20)

    解析度提升至13*13,對小目標適應性更好,借鑒了FSRCNN的思想,每個Cell對應K個Anchor box(YOLOv2中K=5),每個Anchor box對應1組條件類別概率(1*20)。

    聚類:聚類是指事先沒有「標簽」而通過某種成團分析找出事物之間存在聚集性原因的過程。即在沒有劃分類別的情況下,根據數據相似度進行樣本分組。

    在FSR-CNN中Anchor Box的大小和比例是按經驗設定的,然後網路會在訓練過程中調整Anchor Box的尺寸,最終得到准確的Anchor Boxes。若一開始就選擇了更好的、更有代表性的先驗Anchor Boxes,那麼網路就更容易學到准確的預測位置。

    YOLOv2使用K-means聚類方法類訓練Bounding Boxes,可以自動找到更好的寬高維度的值用於一開始的初始化。傳統的K-means聚類方法使用的是歐氏距離函數,意味著較大的Anchor Boxes會比較小的Anchor Boxes產生更多的錯誤,聚類結果可能會偏離。由於聚類目的是確定更精準的初始Anchor Box參數,即提高IOU值,這應與Box大小無關,因此YOLOv2採用IOU值為評判標准,即K-means 採用的距離函數(度量標准) 為:

d(box,centroid) = 1 - IOU(box,centroid)

    如下圖,左邊是聚類的簇個數和IOU的關系,兩條曲線分別代表兩個不同的數據集。分析聚類結果並權衡模型復雜度與IOU值後,YOLOv2選擇K=5,即選擇了5種大小的Box 維度來進行定位預測。

    其中紫色和灰色也是分別表示兩個不同的數據集,可以看出其基本形狀是類似的。更重要的是,可以看出聚類的結果和手動設置的Anchor Box位置和大小差別顯著——結果中扁長的框較少,而瘦高的框更多(更符合行人的特徵)。

    YOLOv2採用的5種Anchor的Avg IOU是61,而採用9種Anchor Boxes的Faster RCNN的Avg IOU是60.9,也就是說本文僅選取5種box就能達到Faster RCNN的9中box的效果。選擇值為9的時候,AVG IOU更有顯著提高。說明K-means方法的生成的boxes更具有代表性。

    直接對Bounding Boxes求回歸會導致模型不穩定,其中心點可能會出現在圖像任何位置,有可能導致回歸過程震盪,甚至無法收斂,尤其是在最開始的幾次迭代的時候。大多數不穩定因素產生自預測Bounding Box的中心坐標(x,y)位置的時候。

    YOLOv2的網路在特徵圖(13*13)的每一個單元格中預測出5個Bounding Boxes(對應5個Anchor Boxes),每個Bounding Box預測出5個值(tx,ty,tw,th,t0),其中前4個是坐標偏移值,t0是置信度結果(類似YOLOv1中的邊界框置信度Confidence)。YOLOv2借鑒了如下的預測方式,即當Anchor Box的中心坐標和寬高分別是(xa,ya)和(wa,wh)時,Bounding Box坐標的預測偏移值(tx,ty,tw,th)與其坐標寬高(x,y,w,h)的關系如下:                         

tx = (x-xa)/wa

ty= (y-ya)/ha

tw = log(w/wa)

th = log(h/ha)

    基於這種思想,YOLOv2在預測Bounding Box的位置參數時採用了如下強約束方法:

    上圖中,黑色虛線框是Anchor Box,藍色矩形框就是預測的Bounding Box結果,預測出的Bounding Box的坐標和寬高為(bx,by)和(bw,bh),計算方式如圖中所示,其中:對每個Bounding Box預測出5個值(tx,ty,tw,th,t0),Cell與圖像左上角的橫縱坐標距離為(cx,cy),σ定義為sigmoid激活函數(將函數值約束到[0,1]),該Cell對應的Anchor Box對應的寬高為(pw,ph)。

    簡而言之,(bx,by)就是(cx,cy)這個Cell附近的Anchor Box針對預測值(tx,ty)得到的Bounding Box的坐標預測結果,同時可以發現這種方式對於較遠距離的Bounding Box預測值(tx,ty)能夠得到很大的限制。

    YOLOv2通過添加一個轉移層,把高解析度的淺層特徵連接到低解析度的深層特徵(把特徵堆積在不同Channel中)而後進行融合和檢測。具體操作是先獲取前層的26*26的特徵圖,將其同最後輸出的13*13的特徵圖進行連接,而後輸入檢測器進行檢測(檢測器的FC層起到了全局特徵融合的作用),以此來提高對小目標的檢測能力。    

    為了適應不同尺度下的檢測任務,YOLOv2在訓練網路時,其在檢測數據集上fine-tuning時候採用的輸入圖像的size是動態變化的。具體來講,每訓練10個Batch,網路就會隨機選擇另一種size的輸入圖像。因為YOLOv2用到了參數是32的下采樣,因此也採用32的倍數作為輸入的size,即採用{320,352,…,608}的輸入尺寸(網路會自動改變尺寸,並繼續訓練的過程)。

這一策略讓網路在不同的輸入尺寸上都能達到較好的預測效果,使同一網路能在不同解析度上進行檢測。輸入圖片較大時,檢測速度較慢,輸入圖片較小時,檢測速度較快,總體上提高了准確率,因此多尺度訓練算是在准確率和速度上達到一個平衡。

    上表反映的是在檢測時,不同大小的輸入圖片情況下的YOLOv2和其他目標檢測演算法的對比。可以看出通過多尺度訓練的檢測模型,在測試的時候,輸入圖像在尺寸變化范圍較大的情況下也能取得mAP和FPS的平衡。

    YOLOv1採用的訓練網路是GoogleNet,YOLOv2採用了新的分類網路Darknet-19作為基礎網路,它使用了較多的3*3卷積核,並把1*1的卷積核置於3*3的卷積核之間,用來壓縮特徵,同時在每一次池化操作後把通道(Channels)數翻倍(借鑒VGG網路)。

    YOLOv1採用的GooleNet包含24個卷積層和2個全連接層,而Darknet-19包含19個卷積層和5個最大池化層(Max Pooling Layers),後面添加Average Pooling層(代替v1中FC層),而Softmax分類器作為激活被用在網路最後一層,用來進行分類和歸一化。

    在ImageNet數據集上進行預訓練,主要分兩步(採用隨機梯度下降法):

輸入圖像大小是224*224,初始學習率(Learning Rate)為0.1,訓練160個epoch,權值衰減(Weight Decay)為0.0005,動量(Momentum)為0.9,同時在訓練時採用標準的數據增強(Data Augmentation)方式如隨機裁剪、旋轉以及色度、亮度的調整。

fine-tuning:第1步結束後,改用448*448輸入(高解析度模型),學習率改為0.001,訓練10個epoch,其他參數不變。結果表明:fine-tuning後的top-1准確率為76.5%,top-5准確率為93.3%,若按照原來的訓練方式,Darknet-19的top-1准確率是72.9%,top-5准確率為91.2%。可以看出,兩步分別從網路結構和訓練方式方面入手提高了網路分類准確率。

    預訓練之後,開始基於檢測的數據集再進行fine-tuning。    

    首先,先把最後一個卷積層去掉,然後添加3個3*3的卷積層,每個卷積層有1024個卷積核,並且後面都連接一個1*1的卷積層,卷積核個數(特徵維度)根據需要檢測的類數量決定。(比如對VOC數據,每個Cell需要預測5個Boungding Box,每個Bounding Box有4個坐標值、1個置信度值和20個條件類別概率值,所以每個單元格對應125個數據,此時卷積核個數應該取125。)

    然後,將最後一個3*3*512的卷積層和倒數第2個卷積層相連(提取細粒度特徵),最後在檢測數據集上fine-tuning預訓練模型160個epoch,學習率採用0.001,並且在第60和90個epoch的時候將學習率除以10,權值衰減、動量和數據增強方法與預訓練相同。

    YOLO9000通過結合分類和檢測數據集,使得訓練得到的模型可以檢測約9000類物體,利用帶標注的分類數據集量比較大的特點,解決了帶標注的檢測數據集量比較少的問題。具體方法是:一方面採用WordTree融合數據集,另一方面聯合訓練分類數據集和檢測數據集。

    分類數據集和檢測數據集存在較大差別:檢測數據集只有粗粒度的標記信息,如「貓」、「狗」,而分類數據集的標簽信息則更細粒度,更豐富。比如「狗」就包括「哈士奇」、「金毛狗」等等。所以如果想同時在檢測數據集與分類數據集上進行訓練,那麼就要用一種一致性的方法融合這些標簽信息。

    用於分類的方法,常用Softmax(比如v2),Softmax意味著分類的類別之間要互相獨立的,而ImageNet和COCO這兩種數據集之間的分類信息不相互獨立(ImageNet對應分類有9000種,而COCO僅提供80種目標檢測),所以使用一種多標簽模型來混合數據集,即假定一張圖片可以有多個標簽,並且不要求標簽之間獨立,而後進行Softmax分類。

    由於ImageNet的類別是從WordNet選取的,作者採用以下策略重建了一個樹形結構(稱為WordTree):

遍歷ImageNet的標簽,然後在WordNet中尋找該標簽到根節點(所有的根節點為實體對象)的路徑;

如果路徑只有一條,將該路徑直接加入到WordTree結構中;

否則,從可選路徑中選擇一條最短路徑,加入到WordTree結構中。

WordTree的作用就在於將兩種數據集按照層級進行結合。

    如此,在WordTree的某個節點上就可以計算該節點的一些條件概率值,比如在terrier這個節點,可以得到如下條件概率值:

    進而,如果要預測此節點的概率(即圖片中目標是Norfolk terrier的概率),可以根據WordTree將該節點到根節點的條件概率依次相乘得到,如下式:

其中:        

    YOLO9000在WordTree1k(用有1000類別的ImageNet1k創建)上訓練了Darknet-19模型。為了創建WordTree1k作者添加了很多中間節點(中間詞彙),把標簽由1000擴展到1369。

    訓練過程中GroundTruth標簽要順著向根節點的路徑傳播:為了計算條件概率,模型預測了一個包含1369個元素的向量,而且基於所有「同義詞集」計算Softmax,其中「同義詞集」是同一概念下的所屬詞。

    現在一張圖片是多標記的,標記之間不需要相互獨立。在訓練過程中,如果有一個圖片的標簽是「Norfolk terrier」,那麼這個圖片還會獲得「狗」以及「哺乳動物」等標簽。

    如上圖所示,之前的ImageNet分類是使用一個大Softmax進行分類,而現在WordTree只需要對同一概念下的同義詞進行Softmax分類。然後作者分別兩個數據集上用相同訓練方法訓練Darknet-19模型,最後在ImageNet數據集上的top-1准確率為72.9%,top-5准確率為91.2%;在WordTree數據集上的top-1准確率為71.9%,top-5准確率為90.4%。

    這種方法的好處是有「退而求其次」的餘地:在對未知或者新的物體進行分類時,性能損失更低,比如看到一個狗的照片,但不知道是哪種種類的狗,那麼就預測其為「狗」。

    以上是構造WordTree的原理,下圖是融合COCO數據集和ImageNet數據集以及生成它們的WordTree的示意圖(用顏色區分了COCO數據集和ImageNet數據集的標簽節點), 混合後的數據集對應的WordTree有9418個類。另一方面,由於ImageNet數據集太大,YOLO9000為了平衡兩個數據集之間的數據量,通過過采樣(Oversampling)COCO數據集中的數據,使COCO數據集與ImageNet數據集之間的數據量比例達到1:4。

    對YOLO9000進行評估,發現其mAP比DPM高,而且YOLO有更多先進的特徵,YOLO9000是用部分監督的方式在不同訓練集上進行訓練,同時還能檢測9000個物體類別,並保證實時運行。雖然YOLO9000對動物的識別性能很好,但是對衣服或者裝備的識別性能不是很好(這跟數據集的數據組成有關)。

    YOLO9000的網路結構和YOLOv2類似,區別是每個單元格只採用3個Anchor Boxes。

    YOLO9000提出了一種在分類數據集和檢測數據集上聯合訓練的機制,即使用檢測數據集(COCO)的圖片去學習檢測相關的信息即查找對象(例如預測邊界框坐標、邊界框是否包含目標及目標屬於各個類別的概率),使用僅有類別標簽的分類數據集(ImageNet)中的圖片去擴展檢測到的對象的可識別種類。

    具體方法是:當網路遇到一個來自檢測數據集的圖片與標記信息,就把這些數據用完整的損失函數(v2和9000均沿用了v1網路的損失函數)反向傳播,而當網路遇到一個來自分類數據集的圖片和分類標記信息,只用代表分類誤差部分的損失函數反向傳播這個圖片。

    YOLO v2 在大尺寸圖片上能夠實現高精度,在小尺寸圖片上運行更快,可以說在速度和精度上達到了平衡,具體性能表現如下所示。

coco數據集

voc2012數據集

5. 開拓低空AI新藍海,星邏祺雲AI演算法平台亮相WAIC


SKYSYS

近日,2021屆世界人工智慧大會在上海召開。本次大會以 「智聯世界,眾智成城」 為主題,共同擁抱數字經濟,創享智慧未來。星邏智能聯合創始人兼AI技術總監肖素枝受邀參加AI菁英女性論壇,並代表星邏智能,在大會上發布 無人機低空AI演算法平台 的全新解決方案。



作為無人機低空AI演算法提供商,五年來,星邏智能在無人機賦能領域持續深耕,截至目前已實現 百台無人機自動化系統的部署 。隨著近年來在行業領域的持續深耕,星邏智能意識到,傳統的數據流轉已無法滿足各行業用戶的實際需求,如何讓 巡檢任務更加簡單、巡檢效率更加高效、巡檢結果更加「聰明」 ,是行業內需待解決的難題。

星邏智能擁有完整的AI飛采與AI分析演算法團隊,具有近六年無人機全自動化系統運營經驗,對各行業用戶的實際需求有更深刻的理解。截止目前,星邏智能憑借無人機+AI智能演算法服務 全國二十餘個省市、三十餘個應用場景 ,為各行各業提供解決方案,實現城市違建識別、車牌識別以及紅藍藻檢測等多個行業場景的項目落地,降低成本,提高生產效率,解決了以往單靠人力巡檢困難的問題。




此次無人機低空AI演算法平台的發布,引領了無人機全自動化行業向AI演算法發展的新浪潮。星邏智能希望通過AI演算法的數據驅動,助力整個無人機生態的產業轉型升級,從已經成熟的地面自動化,到目前的飛行採集自動化,星邏智能不斷創新,迎接即將到來的的數據分析自動化時代。



在此次世界人工智慧大會中,肖素枝表示,一直以來無人機自動化行業還停留在數據搬運階段,星邏率先進入數據變現階段。如今,星邏希望做 AI生態的共建者 ,提供低空45 /90 視角演算法,創新無人機AI生態領域。


以數字化助力行業用戶發展一直以來都是星邏 探索 的願景。在未來,星邏智能將持續賦能無人機AI領域,開拓 低空45 /90 視角AI新藍海 ,變革行業生態,以更智能化的技術引領無人機賦能行業的新浪潮!


商務合作及產品業務咨詢TEL:400-860-8819


招賢納士:[email protected]


技術咨詢:[email protected]


- END -

6. vivo自研晶元V1開啟硬體級演算法時代 將於X70系列亮相

  2021年9月6日,vivo「芯之所像」主題影像技術分享會正式召開。vivo自主研發的首款專業影像晶元——vivo V1亮相,全面開啟手機硬體級演算法時代。

  分享會中,超高透玻璃鏡片、全新鍍膜工藝、蔡司自然色彩等vivo手機影像技術新成果一同亮相。通過與蔡司在影像晶元、光學器件和軟體演算法的全面協同合作,vivo在技術上大幅提升了夜間拍攝體驗、減少眩光和鬼影,在專業人像和色彩上不斷提升。

   vivo V1——vivo首款自主研發專業影像晶元

  超大廣角、潛望變焦的出現,一次次突破人們對於手機攝影光學器件的想像。面對復雜光線、暗光場景、極限夜景以及眾多視頻拍攝場景時,手機的影像算力、晶元功耗都需要進一步升級進化。

  最終,vivo與手機SoC廠商深度合作,歷時24個月、投入超300人研發,用自研專業影像晶元V1給出了答案。

  作為一款全定製的特殊規格集成晶元,專業影像晶元V1與主晶元協作,效果體驗兼容兼得,擁有高算力、低時延、低功耗的特性。

  在既定的業務下,V1既可以像CPU一樣高速處理復雜運算,也可以像GPU和DSP一樣,完成數據的並行處理。面對大量復雜運算,V1在能效比上相比DSP和CPU有指數級提升。

  為實現其同期處理能力最大化,vivo優化數據在晶元內部的儲存架構和高速讀寫電路,實現等效32MB的超大緩存,全片上儲存。超越目前部分旗艦級桌面電腦處理器,做到低時延實時降噪插幀。

  此外,在主晶元ISP強大成像能力的基礎上,疊加專業影像晶元V1內計算成像演算法,在高速處理同等計算量任務時,相比軟體實現的方式,V1的專用演算法使硬體電路功耗降低50%。

  得益於V1高速數據處理,實現夜景實時預覽成片

  在手機影像的道路上,vivo對極致影像的技術突破不斷 探索 。專業影像晶元V1的亮相,是vivo晶元戰略的第一步,未來vivo將會在晶元領域進行更全面的 探索 ,針對特定場景拓展,最終實現全場景目標。

   超低色散高透玻璃鏡片 突破手機光學器件天花板

  受制於空間限制,手機拍照要實現進一步跨越,做到鏡頭的升級,難度更大。此次vivo投入巨大研發成本,與蔡司團隊經過多輪驗證,最終克服了工藝、良品率等技術限制,在手機上實現了高規格玻璃鏡片,做到高透光率、超低色散、熱穩定強的效果。大幅降低了夜景拍攝時眩光鬼影的出現。

  相較塑料鏡片,玻璃鏡片有著天然的低色散優勢。vivo的超低色散高透玻璃鏡片,進一步降低色散,在衡量色散能力的權威指標阿貝數上,得到了突破手機鏡頭阿貝數值的行業最高分81.6,比肩專業相機鏡片,有效解決高反差場景的紫邊、偽色等問題。

  超低色散高透玻璃鏡片同樣達到了更高的純凈度,中心透過率提高至最大95%。採用AOA動態光學校準工藝,調整鏡片厚度誤差和鏡片偏心誤差引起的清晰度降低問題,保證最終鏡頭的光學品質。

   多重鍍膜抑制眩光鬼影,與蔡司共同樹立行業高標准

  自誕生以來,蔡司T*鍍膜一直是蔡司的看家本領,也是高畫質成像的有力保障。得益於此,vivo蔡司攜手將先進的鍍膜技術應用在手機鏡頭中,帶來媲美專業相機的成像效果。

  面對炫光和鬼影等行業傳統難題,vivo創新引入SWC鍍膜技術。基於仿生學原理,充分抑制反射光,反射率最低降低至0.1%,大幅提升純凈度。此外,vivo獨家首發ALD原子層沉積工藝,在超高透玻璃鏡片上形成納米級鍍膜,進一步降低光線反射。

  花瓣鬼影問題同樣是手機拍照甩不掉的陰影。vivo在鏡頭中採用色素旋塗技術,解決色素與藍玻璃的附著力問題,塗層厚度薄至2um,經過10次以上的不同工藝參數調試,最終實現量產。可以說,不論是工藝還是材質,vivo都是當前手機光學器件的行業翹楚。

   忠實還原人眼所見 演繹蔡司自然色彩

  vivo在歷經3年10款機型的打磨中,形成了自己「鮮活」、「明快」、「有質感」的獨有風格——vivo色彩。在此次分享會上,vivo對於色彩,又有了新的解讀。

  「專業創作者更傾向於忠實還原人眼所見的自然色彩」。為此vivo攜手蔡司深入探討制定了所見即所得的真實色彩理念,通過140個色卡表現以及引入3D色彩映射矩陣演算法調教262144個參數,使色相進一步准確,飽和度處理更加精細,最終使照片色相准確度ΔE提升約15.5%,領先業界帶來蔡司自然色彩。

  在人像賽道中,vivo與蔡司持續進行研發與調教。於人像模式中內置蔡司鏡頭風格,深度還原蔡司經典的Biotar和Sonnar等鏡頭效果,帶來蔡司質感人像,賦能大眾創作,讓人人都可以成為人像攝影大師。

   堅定vivo影像長賽道 讓每個人都能享受創作帶來的樂趣

  vivo將影像上的技術研發,看作系統性的技術工程。通過平台、器件、演算法等各方面的共同協作,提升最後的成像品質。專業影像晶元V1晶元的亮相,開啟了手機影像行業的下一個時代——硬體級演算法時代。

  vivo希望通過對手機影像不斷的人文思考和技術 探索 ,為用戶帶來場景、人、影像的無界體驗。即不給場景設限,何時何地想拍就拍;不給人設限,讓所有人都能拍出更好的作品;不給影像設限,讓手機影像的表達更加有力、直抵人心。

  堅持影像長賽道,不斷滿足消費者需求,vivo在技術研發上突破想像力,在光學設計上追求極致,在人性化的專業影像道路上大步前行,讓每個人都有機會成為創作者。

  專業影像旗艦vivo X70系列將於9月9日19點30分正式亮相。屆時搭載專業影像晶元V1的首款旗艦新品將正式到來,邀請您持續關注。

7. 優化演算法筆記(二)優化演算法的分類

(以下描述,均不是學術用語,僅供大家快樂的閱讀)

在分類之前,我們先列舉一下常見的優化演算法(不然我們拿什麼分類呢?)。
1遺傳演算法Genetic algorithm
2粒子群優化演算法Particle Swarm Optimization
3差分進化演算法Differential Evolution
4人工蜂群演算法Artificial Bee Colony
5蟻群演算法Ant Colony Optimization
6人工魚群演算法Artificial Fish Swarm Algorithm
7杜鵑搜索演算法Cuckoo Search
8螢火蟲演算法Firefly Algorithm
9灰狼演算法Grey Wolf Optimizer
10鯨魚演算法Whale Optimization Algorithm
11群搜索演算法Group search optimizer
12混合蛙跳演算法Shuffled Frog Leaping Algorithm
13煙花演算法fireworks algorithm
14菌群優化演算法Bacterial Foraging Optimization
以上優化演算法是我所接觸過的演算法,沒接觸過的演算法不能隨便下結論,知之為知之,不知為不知。其實到目前為止優化演算法可能已經有幾百種了,我們不可能也不需要全面的了解所有的演算法,而且優化演算法之間也有較大的共性,深入研究幾個之後再看其他優化演算法上手速度會灰常的快。
優化演算法從提出到現在不過50-60年(遺傳演算法1975年提出),雖種類繁多但大多較為相似,不過這也很正常,比較香蕉和人的基因相似度也有50%-60%。當然演算法之間的相似度要比香蕉和人的相似度更大,畢竟人家都是優化演算法,有著相同的目標,只是實現方式不同。就像條條大路通羅馬,我們可以走去,可以坐汽車去,可以坐火車去,也可以坐飛機去,不管使用何種方式,我們都在去往羅馬的路上,也不會說坐飛機去要比走去更好,交通工具只是一個工具,最終的方案還是要看我們的選擇。

上面列舉了一些常見的演算法,即使你一個都沒見過也沒關系,後面會對它們進行詳細的介紹,但是對後面的分類可能會有些許影響,不過問題不大,就先當總結看了。
再對優化演算法分類之前,先介紹一下演算法的模型,在筆記(一)中繪制了優化演算法的流程,不過那是個較為簡單的模型,此處的模型會更加復雜。上面說了優化演算法有較大的相似性,這些相似性主要體現在演算法的運行流程中。
優化演算法的求解過程可以看做是一個群體的生存過程。

有一群原始人,他們要在野外中尋找食物,一個原始人是這個群體中的最小單元,他們的最終目標是尋找這個環境中最容易獲取食物的位置,即最易存活下來的位置。每個原始人都去獨自尋找食物,他們每個人每天獲取食物的策略只有採集果實、製作陷阱或者守株待兔,即在一天之中他們不會改變他們的位置。在下一天他們會根據自己的策略變更自己的位置。到了某一天他們又聚在了一起,選擇了他們到過的最容易獲取食物的位置定居。
一群原始人=優化演算法中的種群、群體;
一個原始人=優化演算法中的個體;
一個原始人的位置=優化演算法中個體的位置、基因等屬性;
原始人變更位置=優化演算法中總群的更新操作;
該位置獲取食物的難易程度=優化演算法中的適應度函數;
一天=優化演算法中的一個迭代;
這群原始人最終的定居位置=優化演算法所得的解。
優化演算法的流程圖如下:

對優化演算法分類得有個標准,按照不同的標准分類也會得到不一樣的結果。首先說一下我所使用的分類標准(動態更新,有了新的感悟再加):

按由來分類比較好理解,就是該演算法受何種現象啟發而發明,本質是對現象分類。

可以看出演算法根據由來可以大致分為有人類的理論創造而來,向生物學習而來,受物理現象啟發。其中向生物學習而來的演算法最多,其他類別由於舉例有偏差,不是很准確,而且物理現象也經過人類總結,有些與人類現象相交叉,但仍將其獨立出來。
類別分好了,那麼為什麼要這么分類呢?

當然是因為要湊字數啦,啊呸,當然是為了更好的理解學習這些演算法的原理及特點。
向動物生存學習而來的演算法一定是一種行之有效的方法,能夠保證演算法的效率和准確性,因為,如果使用該策略的動物無法存活到我們可以對其進行研究,我們也無法得知其生存策略。(而這也是一種倖存者偏差,我們只能看到行之有效的策略,但並不是我們沒看到的策略都是垃圾,畢竟也發生過小行星撞地球這種小概率毀滅性事件。講個冷笑話開cou心一shu下:一隻小恐龍對他的小夥伴說,好開心,我最喜歡的那顆星星越來越亮了(完)。)但是由於生物的局限性,人們所創造出的演算法也會有局限性:我們所熟知的生物都生存在三維空間,在這些環境中,影響生物生存的條件比較有限,反應到演算法中就是這些演算法在解決較低維度的問題時效果很好,當遇到超高維(維度>500)問題時,結果可能不容樂觀,沒做過實驗,我也不敢亂說。

按更新過程分類相對復雜一點,主要是根據優化演算法流程中更新位置操作的方式來進行分類。更新位置的操作按我的理解可大致分為兩類:1.跟隨最優解;2.不跟隨最優解。
還是上面原始人的例子,每天他有一次去往其他位置狩獵的機會,他們採用何種方式來決定今天自己應該去哪裡呢?
如果他們的策略是「跟隨最優解」,那麼他們選取位置的方式就是按一定的策略向群體已知的最佳狩獵位置(歷史最佳)或者是當前群體中的最佳狩獵位置(今天最佳)靠近,至於是直線跑過去還是蛇皮走位繞過去,這個要看他們群體的策略。當然,他們的目的不是在最佳狩獵位置集合,他們的目的是在過去的途中看是否能發現更加好的狩獵位置,去往已經到過的狩獵地點再次狩獵是沒有意義的,因為每個位置獲取食物的難易程度是固定的。有了目標,大家都會朝著目標前進,總有一日,大家會在謀個位置附近相聚,相聚雖好但不利於後續的覓食容易陷入局部最優。
什麼是局部最優呢?假設在當前環境中有一「桃花源」,擁有上帝視角的我們知道這個地方就是最適合原始人們生存的,但是此地入口隱蔽「山有小口,彷彿若有光」、「初極狹,才通人。」,是一個難以發現的地方。如果沒有任何一個原始人到達了這里,大家向著已知的最優位置靠近時,也難以發現這個「桃源之地」,而當大家越聚越攏之後,「桃源」被發現的可能性越來越低。雖然原始人們得到了他們的解,但這並不是我們所求的「桃源」,他們聚集之後失去了尋求「桃源」的可能,這群原始人便陷入了局部最優。

如果他們的策略是「不跟隨最優解」,那麼他們的策略是什麼呢?我也不知道,這個應該他們自己決定。畢竟「是什麼」比「不是什麼」的范圍要小的多。總之不跟隨最優解時,演算法會有自己特定的步驟來更新個體的位置,有可能是隨機在自己附近找,也有可能是隨機向別人學習。不跟隨最優解時,原始人們應該不會快速聚集到某一處,這樣一來他們的選擇更具多樣性。
按照更新過程對上面的演算法分類結果如下

可以看出上面不跟隨最優解的演算法只有遺傳演算法和差分進化演算法,他們的更新策略是與進化和基因的重組有關。因此這些不跟隨最優解的演算法,他們大多依據進化理論更新位置(基因)我把他們叫做進化演算法,而那些跟隨群體最優解的演算法,他們則大多依賴群體的配合協作,我把這些演算法叫做群智能演算法。

目前我只總結了這兩種,分類方法,如果你有更加優秀的分類方法,我們可以交流一下:

目錄
上一篇 優化演算法筆記(一)優化演算法的介紹
下一篇 優化演算法筆記(三)粒子群演算法(1)

熱點內容
安卓手機怎麼玩安卓老版本的游戲 發布:2025-08-23 21:05:59 瀏覽:117
java數據訪問層 發布:2025-08-23 21:02:42 瀏覽:456
如何選購安卓大屏usb行車記錄儀 發布:2025-08-23 20:56:29 瀏覽:495
排序演算法比較c語言 發布:2025-08-23 20:53:02 瀏覽:720
加速內核編譯 發布:2025-08-23 20:46:02 瀏覽:512
nc程序編譯原理 發布:2025-08-23 20:15:05 瀏覽:513
安卓12哪個廠家最先適配 發布:2025-08-23 20:00:31 瀏覽:367
檢測加星數量腳本 發布:2025-08-23 20:00:30 瀏覽:742
sql2005aspnet 發布:2025-08-23 19:57:07 瀏覽:965
c語言for循環執行順序 發布:2025-08-23 19:57:00 瀏覽:262