1簡介
人工智能圖像識別是人工智能領(lǐng)域的一個重要分支,它涉及計算機視覺、深度學(xué)習(xí)、機器學(xué)習(xí)等多個領(lǐng)域的知識和技術(shù)。圖像識別主要是處理具有一定復(fù)雜性的信息。計算機采用與人類類似的圖像識別原理,即對圖像的重要特征進行分類和提取,并有效排除無用的多余特征,進而實現(xiàn)圖像識別。一般而言,圖像識別有四大類任務(wù):(1)分類-Classification:解決“是什么?”的問題,即給定一張圖片或一段視頻判斷里面包含什么類別的目標(biāo)。(2)定位-Location:解決“在哪里?”的問題,即定位出這個目標(biāo)的的位置。(3)檢測-Detection:解決“在哪里?是什么?”的問題,即定位出這個目標(biāo)的位置并且知道目標(biāo)物是什么。(4)分割-Segmentation:分為實例的分割(Instance-level)和場景分割(Scene-level),解決“每一個像素屬于哪個目標(biāo)物或場景”的問題。
我們之前已經(jīng)介紹了如何使用分類任務(wù)進行手寫數(shù)字的分類。相信大家腦海中可能會產(chǎn)生如下疑問:
數(shù)據(jù)依賴性強:分類模型的表現(xiàn)通常依賴于大量的標(biāo)注數(shù)據(jù)進行訓(xùn)練。獲取高質(zhì)量、大規(guī)模的數(shù)據(jù)集既耗時又昂貴。
泛化能力有限:模型可能在訓(xùn)練數(shù)據(jù)上表現(xiàn)良好,但在遇到未曾見過的數(shù)據(jù)(例如不同環(huán)境、光照條件、角度等)時性能可能會下降。
對異常值敏感:如果訓(xùn)練集中包含異常值或者噪聲數(shù)據(jù),這可能導(dǎo)致模型學(xué)習(xí)到不正確的模式,從而影響其準(zhǔn)確性。
類別不平衡問題:當(dāng)某些類別的樣本數(shù)遠(yuǎn)多于其他類別時,分類器可能會偏向多數(shù)類別,導(dǎo)致少數(shù)類別的預(yù)測精度較低。
過擬合風(fēng)險:復(fù)雜的模型容易在訓(xùn)練數(shù)據(jù)上過擬合,即學(xué)到了訓(xùn)練數(shù)據(jù)中的特定特征而不是一般化的規(guī)律,從而降低了模型在新數(shù)據(jù)上的泛化能力。
對抗攻擊易感性:圖像分類模型容易受到精心設(shè)計的對抗樣本的影響,這些樣本在人類看來幾乎與原始圖像相同,但卻會導(dǎo)致模型做出錯誤的分類。
背景干擾:在自然場景中,目標(biāo)物體周圍復(fù)雜的背景信息可能會干擾分類結(jié)果,使得分類器難以專注于真正重要的區(qū)域。
在深入探討了圖像分類任務(wù)及其面臨的挑戰(zhàn)之后,我們現(xiàn)在將目光轉(zhuǎn)向一個更為復(fù)雜的計算機視覺問題——目標(biāo)檢測。
如果說分類任務(wù)是識別圖像中主體內(nèi)容的是什么?的問題,那么目標(biāo)檢測則是進一步解答在哪里?
目標(biāo)檢測不僅需要識別出圖像或視頻流中存在哪些類型的物體,還需要精確定位每個物體的位置。這種能力對于許多實際應(yīng)用場景至關(guān)重要,比如:
自動駕駛汽車需要準(zhǔn)確地識別并定位行人、其他車輛和交通標(biāo)志;
安防監(jiān)控系統(tǒng)依賴于實時檢測異?;顒拥木唧w位置;
而在零售環(huán)境中,智能貨架可以通過檢測商品來管理庫存;
隨著物聯(lián)網(wǎng)(IoT)的發(fā)展以及邊緣計算能力的增強,越來越多的目標(biāo)檢測應(yīng)用開始直接在靠近數(shù)據(jù)源的邊緣設(shè)備上運行。這不僅減少了數(shù)據(jù)傳輸延遲,保護了用戶隱私,同時也減輕了云端服務(wù)器的壓力。然而,在邊緣端部署高效且準(zhǔn)確的目標(biāo)檢測模型并非易事,它涉及到從選擇合適的算法架構(gòu)到針對特定硬件平臺進行優(yōu)化等一系列復(fù)雜的工作。
接下來,我們將詳細(xì)介紹如何在資源受限的邊緣設(shè)備上成功部署目標(biāo)檢測模型,探索其背后的原理和技術(shù),并討論解決該領(lǐng)域內(nèi)常見挑戰(zhàn)的方法。
2 目標(biāo)檢測模型介紹
在目標(biāo)檢測的任務(wù)中,有著許許多多的模型,如 Picodet、Faster R-CNN、YOLO、SSD等,它們都實現(xiàn)了檢測目標(biāo)并定位其位置的功能。我們主要介紹的是百度的Picodet模型,它是一種基于深度卷積網(wǎng)絡(luò)(DNN)的輕量級目標(biāo)檢測模型,具有非常高的檢測精度,可以在低算力設(shè)備進行實時的端到端推理檢測。
2.1 Picodet模型介紹
目標(biāo)檢測在各個領(lǐng)域都有廣泛的應(yīng)用,然而,在移動端工業(yè)領(lǐng)域的實際應(yīng)用中,對目標(biāo)檢測算法提出了更為苛刻的要求:需要實現(xiàn)高速度、高精度、小體積、易部署等特性。為應(yīng)對這一挑戰(zhàn),百度于2021年末發(fā)布了一篇關(guān)于移動端性能卓越的實時目標(biāo)檢測網(wǎng)絡(luò) PP-PicoDet。PP-PicoDet 具有以下架構(gòu)優(yōu)點:
網(wǎng)絡(luò)架構(gòu)優(yōu)化: PP-PicoDet 基于 ShuffleNetV2 進行改進,引入了 SE 模塊和 Ghost 模塊,同時采用神經(jīng)網(wǎng)絡(luò)搜索(NAS)技術(shù),最終形成了 ESNet(Enhanced ShuffleNet)作為骨干網(wǎng)絡(luò),以在移動端保證高效性能。
采樣策略和標(biāo)簽分配: 使用 SimOTA 采樣策略,動態(tài)變換標(biāo)簽分配方式,并采用VFL+GloU替代CELoss+IoU作為損失函數(shù),從而提高模型的訓(xùn)練效果。
激活函數(shù)和學(xué)習(xí)率策略: 將 H-Swish 替代 Relu 作為激活函數(shù),采用 cosine 學(xué)習(xí)率衰減策略,以提高模型的學(xué)習(xí)能力和泛化性能。
硬件友好性: 在驍龍865等硬件平臺上表現(xiàn)出色,并支持快速導(dǎo)出為 ONNX 格式,使得模型在硬件部署時更加友好和高效。
在此基礎(chǔ)上,2022年初,PaddleDetction 再次發(fā)布了增強版本的 PP-PicoDet,在以下方面做出了改進:
引入 TAL 及 ETA Head,優(yōu)化 PAN 等結(jié)構(gòu),精度提升2個點以上
優(yōu)化 CPU 端預(yù)測速度,同時訓(xùn)練速度提升一倍
導(dǎo)出模型將后處理包含在網(wǎng)絡(luò)中,預(yù)測直接輸出 box 結(jié)果,無需二次開發(fā),遷移成本更低,端到端預(yù)測速度提升10%-20%。
2.2 模型結(jié)構(gòu)
PP-PicoDet 網(wǎng)絡(luò)結(jié)構(gòu)圖如下所示:
Backbone:基于 shuffleNetV2 改進,ESNet,輸出 C3,C4,C5 特征圖進入 neck;
Neck:CSP-PAN,接受 C3,C4,C5輸入,輸出 P3,P4,P5,P6;
2.2.1 BackBone
基于大量實驗,發(fā)現(xiàn) ShuffleNetV2 比移動設(shè)備上的其他網(wǎng)絡(luò)更穩(wěn)健。為了進一步提高 ShuffleNet V2 的性能,遵循 PP-LCNet 的一些方法來增強網(wǎng)絡(luò)結(jié)構(gòu)并構(gòu)建一個新的骨干網(wǎng),即增強型 ShuffleNet(ESNet)。下圖詳細(xì)描述了 ESNet 的 ES 塊。SE 模塊在加權(quán)網(wǎng)絡(luò)通道以獲得更好的功能方面做得很好。因此,將 SE 模塊添加到所有塊中。與MobileNetV3 一樣,SE 模塊兩層的激活函數(shù)分別是 ReLU 和 H-Sigmoid。信道混洗提供了 ShuffleNetV2 信道的交換信息,但它會導(dǎo)致融合特征的丟失。為了解決這個問題,當(dāng)步幅為2時,添加了深度卷積和逐點卷積來整合不同的信道信息(圖 a)。GhostNet 的作者提出了一種新的 Ghost 模塊,該模塊可以用更少的參數(shù)生成更多的特征圖,以提高網(wǎng)絡(luò)的學(xué)習(xí)能力。在步幅設(shè)置為1的塊中添加 Ghost 模塊,以進一步提高 ESNet 的性能(圖b)。
2.2.2 Neural Architecture Search(NAS)
Picodet 提出首個針對目標(biāo)檢測器的 one-shot 搜索的工作。目標(biāo)檢測模型搭配在分類上高性能的主干網(wǎng)絡(luò),可能會因為不同任務(wù)間的差異而性能下降。Picodet 沒有去搜索一個較佳的分類器,而是在檢測數(shù)據(jù)集上訓(xùn)練和搜索檢測的超網(wǎng)絡(luò),從而介紹了大量計算并且達到檢測而不是分類的最優(yōu)。此框架僅需兩步:(1)在檢測數(shù)據(jù)集上訓(xùn)練 one-shot 超網(wǎng),(2)使用 EA(evolutionary algorithm,進化算法)算法對訓(xùn)練好的超網(wǎng)絡(luò)進行架構(gòu)搜索。
2.2.3 CSP-PAN and Detector Head
使用PAN結(jié)構(gòu)來獲得多層特征圖以及 CSP 結(jié)構(gòu)來進行相鄰特征圖間的特征連接和融合。在原始的 CSP-PAN 中,每個輸出特征圖的通道數(shù)與來自主干網(wǎng)絡(luò)的輸入特征圖保持相同。對于移動設(shè)備來說,這樣大通道數(shù)的結(jié)構(gòu)具有昂貴的計算成本。為了解決這個問題,本文用1 × 1 卷積使所有特征圖中的通道數(shù)與最小的通道數(shù)相等,(也就是都設(shè)為96)。通過 CSP 結(jié)構(gòu)實現(xiàn) top-down 和 bottom-up 的特征融合??s小的特征使得計算成本更低且不損失準(zhǔn)確性。此外,在原有 CSP-PAN 的頂部加入了一個特征圖尺度分支來檢測更多物體。與此同時,所有除了1 × 1 卷積外的卷積層都使用深度可分離卷積(Depthwise Separable Convolution)。深度可分離卷積使用5 × 5 卷積擴大感受野。這種結(jié)構(gòu)在使用很少參數(shù)的情況下給精度帶來了大幅度提升。模塊的具體結(jié)構(gòu)如下圖所示。
在檢測頭中,使用 Depthwise Separable Convolution和5 × 5 卷積來擴大感受野。深度可分離卷積的數(shù)量可以被設(shè)置為2、4或更多。Neck 和 head 部分都有四個尺度分支。其中 head 部分的通道數(shù)與 neck 部分保持一致,并將分類和回歸分支耦合在一起,在 Picodet 中耦合預(yù)測頭在沒有降低通道數(shù)時表現(xiàn)更好。
2.3 神經(jīng)網(wǎng)絡(luò)的相關(guān)知識點
2.3.1 卷積的基本概念
卷積是一種數(shù)學(xué)運算,在計算機視覺中被廣泛應(yīng)用于特征提取。它通過一個小型矩陣(稱為卷積核或濾波器)與輸入圖像的局部區(qū)域進行相乘并求和,生成新的特征圖(Feature Map)。這個過程可以看作是用卷積核掃描整個輸入圖像,以捕捉圖像中的模式,如邊緣、紋理等。
卷積操作有幾個關(guān)鍵參數(shù):
卷積核(Kernel):也被叫做濾波器(filter),假設(shè)卷積核的高和寬分別為?和,則將稱為?×卷積,比如3×3卷積,就是指卷積核的高為3, 寬為3。卷積核中數(shù)值為對圖像中與卷積核同樣大小的子塊像素點進行卷積計算時所采用的權(quán)重。
填充(Padding): 填充(Padding)是在卷積神經(jīng)網(wǎng)絡(luò)(CNN)中為輸入張量的邊緣添加額外的像素,以控制輸出特征圖的大小并保持輸入圖像的空間尺寸。填充有助于保留輸入圖像邊緣的信息,并在卷積運算中避免空間尺寸的過度縮小。
步長(Stride): 步長(Stride)是卷積操作中的一個參數(shù),決定了卷積核在輸入圖像上滑動的步幅。具體來說,步長定義了卷積核每次滑動的距離。它控制了卷積運算中卷積核在輸入圖像上移動的距離,從而影響輸出特征圖的大小。
卷積層輸出特征圖的尺寸計算:
其中,H為輸出特征圖的高度和寬度(假設(shè)輸入為正方形圖像),W為輸入圖像的高度和寬度,F(xiàn)為卷積核大小,P為填充,S為步長。卷積的計算過程
2.3.2 逐深度卷積
逐深度卷積(Depthwise convolution,DWConv)與標(biāo)準(zhǔn)卷積的區(qū)別在于,深度卷積的卷積核為單通道模式,需要對輸入的每一個通道進行卷積,這樣就會得到和輸入特征圖通道數(shù)一致的輸出特征圖。即有輸入特征圖通道數(shù)=卷積核個數(shù)=輸出特征圖個數(shù)。假設(shè)一個大小為64×64像素、3通道彩色圖片,3個單通道卷積核分別進行卷積計算,輸出3個單通道的特征圖。所以,一個3通道的圖像經(jīng)過運算后生成了3個 Feature map,如下圖所示。其中一個 Filter 只包含一個大小為3×3的 Kernel,卷積部分的參數(shù)量為:depthwise=3×3×3=27。
2.3.3 逐點卷積
逐點卷積(Pointwise Convolution)就是 W/H 維度不變,改變 channel。根據(jù)深度卷積可知,輸入特征圖通道數(shù)=卷積核個數(shù)=輸出特征圖個數(shù),這樣會導(dǎo)致輸出的特征圖個數(shù)過少(或者說輸出特征圖的通道數(shù)過少,可看成是輸出特征圖個數(shù)為1,通道數(shù)為3),從而可能影響信息的有效性。此時,就需要進行逐點卷積。逐點卷積(Pointwise Convolution,PWConv)實質(zhì)上是用1x1的卷積核進行升維。在 GoogleNet 中大量使用1x1的卷積核,那里主要是用來降維。1x1的卷積核主要作用是對特征圖進行升維和降維。舉一個例子,如下圖所示,從深度卷積得到的3個單通道特征圖,經(jīng)過4個大小為1x1x3卷積核的卷積計算,輸出4個特征圖,而輸出特征圖的個數(shù)取決于 Filter 的個數(shù)。因此,卷積層的參數(shù)量為:
2.3.4 深度可分離卷積
深度可分離卷積(Depthwise separable convolution)由逐深度卷積和逐點卷積組成,深度卷積用于提取空間特征,逐點卷積用于提取通道特征。深度可分離卷積在特征維度上分組卷積,對每個 channel 進行獨立的逐深度卷積(depthwise convolution),并在輸出前使用一個1x1卷積(pointwise convolution)將所有通道進行聚合。
2.3.5 卷積神經(jīng)網(wǎng)絡(luò)的組成
當(dāng)然,可以對卷積神經(jīng)網(wǎng)絡(luò)(CNN)的組成進行更詳細(xì)的介紹。以下是基于上述五個關(guān)鍵組件的進一步擴展和說明:
2.3.5.1 卷積層(Convolutional Layer)
多通道輸入:在處理彩色圖像時,每個像素有三個通道(紅、綠、藍),即三維輸入數(shù)據(jù)。卷積核也相應(yīng)地是三維的,以匹配輸入數(shù)據(jù)的深度。
多濾波器:通常一個卷積層包含多個不同的濾波器,它們共同工作來捕捉輸入數(shù)據(jù)的不同特征。每一個濾波器都會生成一個稱為“特征圖”或“激活圖”的輸出。
共享權(quán)重:所有位置使用相同的卷積核參數(shù),這不僅減少了模型參數(shù)的數(shù)量,還使得模型能夠?qū)W習(xí)到平移不變的特征。
2.3.5.2 激活層(Activation Layer)
(1)Leaky ReLU
Leaky ReLU(泄漏修正線性單元)是ReLU(修正線性單元)的變種,旨在解決標(biāo)準(zhǔn)ReLU函數(shù)在負(fù)值區(qū)域輸出為零的問題,即所謂的“死神經(jīng)元”問題。對于輸入x小于0的情況,Leaky ReLU會給出一個小的非零梯度,這有助于訓(xùn)練過程中的梯度傳播,特別是在網(wǎng)絡(luò)較深時。公式:
其中 α 是一個很小的正數(shù),通常是0.01,用于控制負(fù)區(qū)間的斜率。
優(yōu)點:
緩解死區(qū)問題:與傳統(tǒng)的ReLU不同,Leaky ReLU對于所有輸入都有非零梯度,這意味著它可以在一定程度上避免神經(jīng)元“死亡”的情況。
加速收斂:由于在所有區(qū)域都有梯度,Leaky ReLU可以加速某些類型模型的訓(xùn)練過程。
保留稀疏激活:與ReLU類似,Leaky ReLU仍然能夠促進稀疏激活,這對模型的學(xué)習(xí)是有利的。
缺點:
性能提升有限:盡管Leaky ReLU解決了ReLU的一些問題,但在實踐中,它的表現(xiàn)并不總是優(yōu)于其他改進版本的ReLU函數(shù),如PReLU或ELU。
超參數(shù)選擇: α 的選擇可能需要一些試驗和錯誤來找到最適合特定任務(wù)的值。不合適的 可能會導(dǎo)致不良的訓(xùn)練動態(tài)。
總的來說,Leaky ReLU是一個簡單而有效的激活函數(shù),它可以改善某些情況下傳統(tǒng)ReLU的局限性。然而,在選擇激活函數(shù)時,應(yīng)該根據(jù)具體的應(yīng)用場景和實驗結(jié)果來決定最合適的選項。
(2)Parametric ReLU
Parametric ReLU(PReLU),即參數(shù)化的修正線性單元,是Leaky ReLU的一種擴展。與Leaky ReLU相比,PReLU允許負(fù)輸入的斜率 α 是一個可學(xué)習(xí)的參數(shù),這意味著它可以在訓(xùn)練過程中根據(jù)數(shù)據(jù)自動調(diào)整。這種靈活性使得PReLU能夠更好地適應(yīng)不同任務(wù)的需求。公式:
其中 是針對每個神經(jīng)元或共享給所有神經(jīng)元的學(xué)習(xí)參數(shù),用于控制負(fù)區(qū)間的斜率。優(yōu)點
自適應(yīng)學(xué)習(xí): α 參數(shù)可以被優(yōu)化算法自動調(diào)整,因此PReLU可以更靈活地適應(yīng)不同的數(shù)據(jù)分布。
緩解死區(qū)問題:如同Leaky ReLU一樣,PReLU也避免了傳統(tǒng)ReLU中“死神經(jīng)元”的問題,因為對于任何輸入都有非零梯度。
可能更好的表現(xiàn):在某些情況下,PReLU可以比標(biāo)準(zhǔn)ReLU和Leaky ReLU提供更好的性能,因為它可以根據(jù)具體任務(wù)來調(diào)整激活函數(shù)的形狀。
保留稀疏激活:類似于其他ReLU變體,PReLU仍然能夠在正輸入?yún)^(qū)域促進稀疏激活,這對模型的學(xué)習(xí)是有利的。
缺點
增加模型復(fù)雜度:由于引入了額外的可學(xué)習(xí)參數(shù) α,這增加了模型的復(fù)雜性和需要優(yōu)化的參數(shù)數(shù)量。
潛在過擬合風(fēng)險:更多的可學(xué)習(xí)參數(shù)意味著模型有更大的能力去記憶訓(xùn)練數(shù)據(jù),從而可能導(dǎo)致過擬合,特別是在小規(guī)模數(shù)據(jù)集上。
訓(xùn)練時間延長:因為需要額外的時間來學(xué)習(xí) α 參數(shù),這可能會導(dǎo)致訓(xùn)練過程稍微變慢。
(3)Softmax
Softmax函數(shù)是一種常用于多分類問題中的激活函數(shù),它將一個含任意實數(shù)的K維向量。z 轉(zhuǎn)換為另一個同樣長度為K的概率分布向量 σ(z),每個元素都在0和1之間,并且所有元素之和等于1。這使得Softmax非常適合用作分類任務(wù)中最后的輸出層,以生成各個類別的概率估計。
優(yōu)點
產(chǎn)生概率分布:Softmax可以將模型的原始輸出轉(zhuǎn)換成一個合理的概率分布,這對于解釋性和決策制定非常有用。
支持多分類:與二元分類問題不同,Softmax自然地擴展到了多分類場景,適用于需要區(qū)分多個類別的任務(wù)。
計算簡單:其形式相對簡單,易于實現(xiàn),并且在現(xiàn)代深度學(xué)習(xí)框架中都有高效的實現(xiàn)。
結(jié)合交叉熵?fù)p失函數(shù):當(dāng)與交叉熵?fù)p失一起使用時,Softmax能提供一個平滑、可微分的目標(biāo)函數(shù),有利于梯度下降優(yōu)化過程。
缺點
梯度消失:對于遠(yuǎn)離正確答案的預(yù)測,Softmax加上交叉熵?fù)p失可能會導(dǎo)致非常小的梯度,從而影響訓(xùn)練速度,特別是在深層網(wǎng)絡(luò)中。
對異常值敏感:由于采用了指數(shù)運算,Softmax對異常大的輸入值非常敏感,這些異常值可能導(dǎo)致不理想的模型性能。
2.3.5.3 池化層(Pooling Layer)
重疊池化(Overlapping Pooling):池化窗口之間有一定的重疊,能增加一些不變性,同時不會顯著增加計算量。
全局池化(Global Pooling):對整個特征圖應(yīng)用池化操作,而不是局部區(qū)域。它可以在一定程度上替代全連接層,并減少過擬合。
2.3.5.4 批歸一化層(Batch Normalization Layer)
訓(xùn)練與推理:在訓(xùn)練階段,批歸一化使用每一批次的數(shù)據(jù)來估計均值和方差;而在推理階段,則使用運行時統(tǒng)計(通常是移動平均)。
γ和β參數(shù):除了標(biāo)準(zhǔn)化外,批歸一化還引入了兩個可學(xué)習(xí)參數(shù)γ(縮放)和β(偏移),使網(wǎng)絡(luò)能夠在需要時恢復(fù)原始的激活尺度和位置。
2.3.5.5 全連接層(Fully Connected Layer, FC Layer)
Dropout技術(shù):為了防止過擬合,在全連接層中經(jīng)常采用dropout方法,隨機丟棄一部分神經(jīng)元,強迫網(wǎng)絡(luò)學(xué)習(xí)更加魯棒的特征表示。
稀疏連接:作為全連接層的一種替代方案,某些架構(gòu)嘗試使用稀疏連接來減少參數(shù)數(shù)量并提高效率,比如通過只連接特定模式下的神經(jīng)元。
動態(tài)架構(gòu)調(diào)整:現(xiàn)代的一些研究探索了動態(tài)改變網(wǎng)絡(luò)結(jié)構(gòu)的可能性,例如根據(jù)輸入樣本的復(fù)雜度自動調(diào)整FC層的大小或配置。
這些組件的組合和優(yōu)化構(gòu)成了卷積神經(jīng)網(wǎng)絡(luò)的核心,并且隨著計算機視覺領(lǐng)域的發(fā)展,新的技術(shù)和理論不斷被提出,以進一步提升CNN的性能和泛化能力。例如,殘差網(wǎng)絡(luò)(ResNet)、密集連接網(wǎng)絡(luò)(DenseNet)等創(chuàng)新設(shè)計都是為了克服深層網(wǎng)絡(luò)訓(xùn)練中的挑戰(zhàn)而提出的。
3 邊緣端設(shè)備部署
在邊緣端設(shè)備部署目標(biāo)檢測模型,特別是像PP-PicoDet這樣輕量級且高效的模型,涉及到多個步驟和技術(shù)考量。
以下是一些關(guān)鍵點和建議,可以幫助你在資源受限的環(huán)境中成功部署這樣的模型:
3.1 準(zhǔn)備工作
在進行模型的部署之前,我們首先需要確認(rèn)自己手上的模塊的支持哪些算子、支持什么類型的量化(int4/int8/fp16/混合精度)、內(nèi)存大小等參數(shù),對于手上的板子有一個全面的了解。在進行部署時,我們常常將訓(xùn)練的模型轉(zhuǎn)化成onnx中間文件,再根據(jù)硬件設(shè)備要求的轉(zhuǎn)化成硬件要求的模型文件。在本次實驗中,我使用的模塊是凌智視覺模塊(Lockzhiner Vision Module) ,這個模塊是福州市凌睿智捷電子有限公司聯(lián)合百度飛槳傾力打造的一款高集成度人工智能視覺模塊,專為邊緣端人工智能和機器視覺應(yīng)用而設(shè)計,模塊的參數(shù)如下圖所示。
這個模塊有著一個很吸引人的特點與飛槳低代碼開發(fā)工具 PaddleX 完美適配,配合飛槳星河社區(qū) Al Studio, 可以實現(xiàn)一鍵訓(xùn)練;配合凌智視覺算法部署庫,用戶可以實現(xiàn)一鍵部署,減少我們在模型部署時遇到的疑難雜癥。如果遇到問題,可以去廠家開源倉庫提交問題。凌智視覺模塊Gitee鏈接
3.2 模型轉(zhuǎn)換
在 百度飛槳的 AiStudio 中,搜索【硬件部署】在凌智視覺模塊上部署 PaddleDetection 模型如果說有自己制作數(shù)據(jù)的話,需要將數(shù)據(jù)上傳,然后在修改全局配置項,修改數(shù)據(jù)集地址以及對應(yīng)的類別數(shù)。
按照廠家提供的配置直接進行訓(xùn)練轉(zhuǎn)換。
訓(xùn)練完成后,會自動生成一個rknn模型文件,
3.3 部署結(jié)果
模型的推理結(jié)果如下圖所示
-
AI
+關(guān)注
關(guān)注
87文章
30728瀏覽量
268875 -
人工智能
+關(guān)注
關(guān)注
1791文章
47183瀏覽量
238213 -
目標(biāo)檢測
+關(guān)注
關(guān)注
0文章
209瀏覽量
15605
發(fā)布評論請先 登錄
相關(guān)推薦
評論