瞿定垚,王學(xué),
(1.河北工程大學(xué) 數(shù)理科學(xué)與工程學(xué)院,河北邯鄲,056038; 2.河北省計(jì)算光學(xué)成像與光電檢測(cè)技術(shù)創(chuàng)新中心,河北邯鄲,056038)
中國(guó)是全世界人口最多的國(guó)家,在日常生活的過(guò)程中,會(huì)制造大量垃圾。在由生態(tài)環(huán)境部所公布的《2019年全國(guó)大、中城市固體廢物污染環(huán)境防治年報(bào)》中顯示,在2018年里,在全國(guó)中的200個(gè)大、中城市里生活垃圾產(chǎn)生量為21147 3萬(wàn)噸,處置量為21028 9萬(wàn)噸,處置率達(dá)到了99 4%[1]。雖然由數(shù)據(jù)顯示的處置率己經(jīng)很高了,只有其中少部分未被處理。但是這并不是全國(guó)所有城市的數(shù)據(jù),除了生態(tài)環(huán)境部統(tǒng)計(jì)的這200個(gè)大、中城市,還有許多城市和落后的中小城鎮(zhèn)的數(shù)據(jù)并未被統(tǒng)計(jì)到,可以推斷出未被處理的生活垃圾仍有很多。在年報(bào)中,2013~2018年中國(guó)200個(gè)大、中城市生活垃圾產(chǎn)生量統(tǒng)計(jì)及增長(zhǎng)情況,可以得出生活垃圾產(chǎn)生量以5-10%的增長(zhǎng)速率逐年遞增[2]。在垃圾產(chǎn)量巨大的同時(shí),處置垃圾的方法仍然十分落后。
我國(guó)解決垃圾分類主要依靠人工二次分揀,其弊端如下:
(1)二次分揀模式的參與主體是分類指導(dǎo)員,居民其實(shí)還是沒(méi)有真正地參與進(jìn)來(lái),所以它解決不了居民參與率低的問(wèn)題[3];要讓居民真正地參與垃圾分類,從根本上還是要讓他們從源頭開始做好分類。
(2)二次分揀的對(duì)象是廚余垃圾,像可回收垃圾、有害垃圾等其他垃圾,分類指導(dǎo)員們都不分揀,所以沒(méi)有真正地達(dá)到生活垃圾的減量化、資源化、無(wú)害化[4]。
(3)此模式操作簡(jiǎn)單,方法原始,效率低,安全性差,更談不上精細(xì)化管理運(yùn)營(yíng)。因此靠“二次分揀”支撐的垃圾分類是走不長(zhǎng)遠(yuǎn)的。
使用計(jì)算機(jī)視覺(jué)技術(shù)實(shí)現(xiàn)自動(dòng)的垃圾分類識(shí)別,存在的問(wèn)題是效率低,回收利用效率降低,安全性差[5]。精度差,價(jià)格昂貴。
針對(duì)居民參與率低的問(wèn)題,我國(guó)應(yīng)該從垃圾產(chǎn)生源頭入手,以家居垃圾為研究環(huán)境,走出二次分揀的困境,使全民參與進(jìn)來(lái),切實(shí)解決分類問(wèn)題。針對(duì)垃圾數(shù)據(jù)集數(shù)據(jù)少、質(zhì)量較差、背景單一、存在標(biāo)注錯(cuò)誤的情況,神經(jīng)網(wǎng)絡(luò)無(wú)法全面、準(zhǔn)確分析、理解分類特征的問(wèn)題,構(gòu)建大規(guī)模垃圾圖像數(shù)據(jù)庫(kù)是重要途徑。同時(shí)數(shù)據(jù)量的大幅增加與計(jì)算機(jī)硬件性能的提升,使得深度學(xué)習(xí)技術(shù)開始在計(jì)算機(jī)視覺(jué)領(lǐng)域大放異彩。由于其速度快、準(zhǔn)確率高的優(yōu)點(diǎn),使得其在各個(gè)領(lǐng)域都取得了一定的成果。圖像分類在深度學(xué)習(xí)領(lǐng)域主要依靠CNN卷積神經(jīng)網(wǎng)絡(luò)和視覺(jué)Transformer圖卷積神經(jīng)網(wǎng)絡(luò),由于家居環(huán)境對(duì)分類精度要求高,對(duì)推理速度要求較低,使用單圖像分類而不是目標(biāo)檢測(cè)。
家居垃圾分類系統(tǒng)主要由三部分組成,構(gòu)建垃圾分類數(shù)據(jù)集、設(shè)計(jì)垃圾分類網(wǎng)絡(luò)和搭建安卓app。
首先,本文構(gòu)建垃圾分類數(shù)據(jù)集。數(shù)據(jù)集來(lái)源為:網(wǎng)絡(luò)爬蟲技術(shù)爬取生活中常見的各種家居垃圾圖片,將不符合要求的垃圾圖片剔除[6];使用華為垃圾數(shù)據(jù)集中垃圾圖片,選擇符合要求的垃圾圖片數(shù)據(jù);通過(guò)攝像設(shè)備收集邯鄲市河北工程大學(xué)生活中的常見家居垃圾圖片。通過(guò)數(shù)據(jù)增強(qiáng)方式,旋轉(zhuǎn),鏡像,對(duì)比度,進(jìn)一步擴(kuò)大數(shù)據(jù)集。其次,本文設(shè)計(jì)垃圾分類網(wǎng)絡(luò)。比較CV領(lǐng)域中的CNN經(jīng)典圖像分類模型的優(yōu)缺點(diǎn),設(shè)計(jì)實(shí)驗(yàn)選出適用于本課題的圖像分類模型[7][8][9]。通過(guò)NLP領(lǐng)域?qū)V領(lǐng)域的遷移,搭建了適用于本課題的圖像分類模型。通過(guò)遷移學(xué)習(xí)[10],數(shù)據(jù)增強(qiáng)和添加全局注意力的方式,對(duì)網(wǎng)絡(luò)進(jìn)行了優(yōu)化。最后,搭建了安卓端口app,對(duì)訓(xùn)練好了的模型成功進(jìn)行了轉(zhuǎn)換和量化,將自己訓(xùn)練好了的深度學(xué)習(xí)模型移植到了手機(jī)安卓app上。垃圾分類系統(tǒng)框架圖如圖1所示。
圖1 垃圾分類系統(tǒng)框架圖
Transformer在NLP領(lǐng)域應(yīng)用十分廣泛,但是在CV領(lǐng)域的應(yīng)用存在很多困難,這源自于兩類任務(wù)的本質(zhì)區(qū)別,例如CV里物體尺寸變化很大,模型需要處理不同尺度的同類物體,而在NLP領(lǐng)域,把word tokens作為基本要素,并不存在以上問(wèn)題。同時(shí)圖片分辨率高,自注意力如果逐像素計(jì)算成本過(guò)高[11]。
Swin Transformer 是一種新型的transformer,可以用作視覺(jué)和語(yǔ)言處理的統(tǒng)一模型, 引出了一種具有層級(jí)的特征表達(dá)方式和具有線性的計(jì)算復(fù)雜度。Swin Transformer有兩個(gè)特征: (1) 層級(jí)特征結(jié)構(gòu);(2) 線性復(fù)雜度。層級(jí)特征結(jié)構(gòu)使得本模型適用于 FPN 或者 U-Net 模型;線性復(fù)雜度是因?yàn)槭褂胠ocal window self-attention[12]。這些特點(diǎn)使得本模型可以作為一種通用模型用于各種視覺(jué)任務(wù)。在目標(biāo)檢測(cè)、圖像分割等視覺(jué)任務(wù)中,Swin Transformer 均得到了SOTA 的結(jié)果。
Swin Transformer在上游任務(wù)取得了極好的成績(jī),可拿來(lái)可直接做下游任務(wù),并且效果很好。本文選擇了swin_base_patch4_window12_384_in22k作為預(yù)訓(xùn)練模型,在保持高精度的同時(shí)推理速度也適用于家居垃圾分類任務(wù),并在后續(xù)的任務(wù)中加速了推理速度。
首先輸入像素384×384圖片到Patch Partition模塊中進(jìn)行分塊,即每4×4相鄰的像素為一個(gè)Patch,然后在channel方向展平(flatten)。本文輸入的是RGB三通道圖片,每個(gè)patch就有4×4=16個(gè)像素,然后每個(gè)像素有R、G、B三個(gè)值,展平后是16×3=48,所以通過(guò)Patch Partition后圖像shape由 [H, W, 3]變成了 [H/4, W/4, 48]。然后在通過(guò)Linear Embeding層對(duì)每個(gè)像素的channel數(shù)據(jù)做線性變換,由48變成C,即圖像shape再由 [H/4, W/4, 48]變成了 [H/4, W/4, C]。其實(shí)在源碼中Patch Partition和Linear Embeding就是直接通過(guò)一個(gè)卷積層實(shí)現(xiàn)的。
然后就是通過(guò)四個(gè)Stage構(gòu)建不同大小的特征圖,除了Stage1中先通過(guò)一個(gè)Linear Embeding層外,剩下三個(gè)stage都是先通過(guò)一個(gè)Patch Merging層進(jìn)行下采樣,然后都是重復(fù)堆疊Swin transformer Block。Swin transformer 網(wǎng)絡(luò)結(jié)構(gòu)如圖2所示。
圖2 Swin transformer網(wǎng)絡(luò)結(jié)構(gòu)
這里的Block有兩種結(jié)構(gòu),如圖3所示,這兩種結(jié)構(gòu)的不同之處僅在于一個(gè)使用了W-MSA結(jié)構(gòu),一個(gè)使用了SW-MSA結(jié)構(gòu)[13]。而且這兩個(gè)結(jié)構(gòu)是成對(duì)使用的,先使用一個(gè)W-MSA結(jié)構(gòu)再使用一個(gè)SW-MSA結(jié)構(gòu),堆疊Swin Transformer Block的次數(shù)都是偶數(shù)。
圖3 Swin transformer 兩種blocks結(jié)構(gòu)
最后對(duì)于圖像分類網(wǎng)絡(luò),后面還會(huì)接上一個(gè)Layer Norm層、全局池化層以及全連接層得到最終輸出。
2.1.1 數(shù)據(jù)增強(qiáng)
數(shù)據(jù)增強(qiáng):通過(guò)旋轉(zhuǎn),鏡像,對(duì)比度的方法擴(kuò)充了約54000張圖片用于訓(xùn)練,對(duì)擴(kuò)充后的數(shù)據(jù)集圖像數(shù)據(jù)進(jìn)行預(yù)處理,增加模型的魯棒性和模型泛化能力[14]。
2.1.2 遷移學(xué)習(xí)
微調(diào) Fine-tuning:將在大數(shù)據(jù)集上訓(xùn)練得到的weights作為特定任務(wù)(小數(shù)據(jù)集)的初始化權(quán)重,重新訓(xùn)練該網(wǎng)絡(luò)(根據(jù)需要,修改全連接層輸出)[15]。訓(xùn)練的方式可以是:(1)微調(diào)所有層,(2)固定網(wǎng)絡(luò)前面幾層權(quán)重,只微調(diào)網(wǎng)絡(luò)的后面幾層,這樣做有兩個(gè)原因:A 避免因數(shù)據(jù)量小造成過(guò)擬合現(xiàn)象;B CNN前幾層的特征中包含更多的一般特征(比如,邊緣信息,色彩信息等),這對(duì)許多任務(wù)來(lái)說(shuō)是非常有用的,但是CNN后面幾層的特征學(xué)習(xí)注重高層特征,也就是語(yǔ)義特征,這是針對(duì)于數(shù)據(jù)集而言的,不同的數(shù)據(jù)集后面幾層學(xué)習(xí)的語(yǔ)義特征也是完全不同的[16],本文選擇訓(xùn)練方式2。
網(wǎng)絡(luò)微調(diào)是一項(xiàng)非常強(qiáng)大的技術(shù),無(wú)需從頭開始訓(xùn)練整個(gè)網(wǎng)絡(luò),“快速啟動(dòng)”學(xué)習(xí),最終得到更高精度的遷移學(xué)習(xí)模型,同時(shí)節(jié)省了計(jì)算資源[17]。
在swin transformer基礎(chǔ)上加入了NLP領(lǐng)域的全局注意力Global Attention[18~20]。Global Attention的目的:Gobal Attention的目的是為了在生成上下文向量,用來(lái)處理文本信息的,單詞和句子存在聯(lián)系,局部像素點(diǎn)也和全圖存在聯(lián)系[21]。transformer是用來(lái)處理文本信息的,現(xiàn)在可以用來(lái)處理CV領(lǐng)域的圖像信息。swin transformer在CV領(lǐng)域起到了突破性的重大作用,選擇在swin transformer的head前 邊插 入Global Attention,經(jīng)過(guò)訓(xùn)練,精度得到了提升。全局注意力如圖4所示。
圖4 全局注意力
改進(jìn)實(shí)驗(yàn)分為三組,插入一層Gobal Attention,命名模型為Swin transformer-A;插入兩層Gobal Attention,命名模型為Swin transformer-B;插入三層Gobal Attention命名為Swin transformer-C。使用基于微調(diào)的遷移學(xué)習(xí),固定部分層數(shù)的權(quán)重,插入一層Gobal Attention模型訓(xùn)練層數(shù)如下代碼。
“training layers 4 norm1 weight
training layers 4 norm1 bias
training layers 4 attn qkv weight
training layers 4 attn qkv bias
training layers 4 attn proj weight
training layers 4 attn proj bias
training layers 4 norm2 weight
training layers 4 norm2 bias
training layers 4 mlp fc1 weight
training layers 4 mlp fc1 bias
training layers 4 mlp fc2 weight
training layers 4 mlp fc2 bias
training head weight
training head bias”
插入兩層和三層就是將代碼中的layers 4進(jìn)行堆疊。
實(shí)驗(yàn)整理的原始數(shù)據(jù)集共20022張,約13000張來(lái)自華為云比賽數(shù)據(jù)集,7022張自己收集標(biāo)注。提前做好四分類,O代表other waste,H代表harm garbage,K代表kitchen waste,R 代表recyclable garbage,小類別共計(jì)40類。途徑來(lái)自于拍攝,網(wǎng)絡(luò)爬蟲爬取,網(wǎng)上下載以及截取等方式。將其標(biāo)注好,放在同一類別的文件夾中,小類別共計(jì)40類。后來(lái)考慮到部分種類垃圾數(shù)量較少,使用數(shù)據(jù)增強(qiáng)的手段,通過(guò)鏡像,旋轉(zhuǎn),對(duì)比度三種方式,擴(kuò)充了數(shù)據(jù)集約54000張用于訓(xùn)練。由于旋轉(zhuǎn)角度有的圖像會(huì)缺失信息,所以對(duì)擴(kuò)充的數(shù)據(jù)進(jìn)行清洗,然后重新歸類,初始數(shù)據(jù)集類別和數(shù)量如圖5所示。
圖5 初始數(shù)據(jù)集類別以及種類
將家居垃圾數(shù)據(jù)集按照9:1的比例分為訓(xùn)練集和驗(yàn)證集,18035張用于訓(xùn)練,1987張用于驗(yàn)證。對(duì)訓(xùn)練集使用數(shù)據(jù)增強(qiáng)后,72035張用于訓(xùn)練,驗(yàn)證數(shù)量不變。使用預(yù)訓(xùn)練 權(quán) 重 swin_base_patch4_window12_384_in22k pth,模型準(zhǔn)確率如表1所示。
表1 不同模型準(zhǔn)確率
9 ConvNeXt-Base+遷移學(xué)習(xí)+數(shù)據(jù)增強(qiáng) 有 64 4 100 97 2%97 2%10 VIsion tranfformer-Base+遷移學(xué)習(xí)+數(shù)據(jù)增強(qiáng) 有 64 4 100 99 2%96 8%
通過(guò)該表,得出遷移學(xué)習(xí)和數(shù)據(jù)增強(qiáng)和全局注意力機(jī)制都能有效提升模型的精度。消融實(shí)驗(yàn)可以看出,在數(shù)據(jù)量小的時(shí)候,全局注意力提升的效果較好,使用數(shù)據(jù)增強(qiáng)后,仍然可以提升模型精度,提升幅度會(huì)變小。說(shuō)明全局注意力和數(shù)據(jù)增強(qiáng)以及遷移學(xué)習(xí)改善網(wǎng)絡(luò)性能有部分重合了,組合在一起時(shí)效果最好。實(shí)驗(yàn)8,9,10是和前四個(gè)實(shí)驗(yàn)進(jìn)行對(duì)比,在同量級(jí)參數(shù)下看模型效果,Efficientnetv2選擇m模型[22],pytorch架構(gòu)下無(wú)預(yù)訓(xùn)練權(quán)重,使用工具將Tensorflow下ImageNet-21K預(yù)訓(xùn)練權(quán)重轉(zhuǎn)換為Pytorch架構(gòu)下可以使用;ConNeXt選 擇 convnext_base_22k_224 pth 預(yù) 訓(xùn) 練權(quán)重[23];vision transformer選擇vit_base_patch16_224_in21k pth作為預(yù)訓(xùn)練權(quán)重[24]。
垃圾40分類最優(yōu)模型混淆矩陣如圖6所示。
圖6 垃圾40分類混淆矩陣
通過(guò)對(duì)每個(gè)類別的分析,誤差主要集中在可回收物瓶罐這些物品中,實(shí)際生活中只需要一級(jí)分類標(biāo)準(zhǔn)就可以了。使用一級(jí)標(biāo)準(zhǔn),重新訓(xùn)練4分類。選擇上邊最優(yōu)模型和策略,72084張用于訓(xùn)練,2001張用于驗(yàn)證,Train acc99 8%,Val acc99 2%,再次驗(yàn)證模型性能很強(qiáng)。
垃圾40分類每個(gè)類別的精確率,召回率,特異度如表2所示。
表2 每個(gè)類別的精確率、召回率、特異度
K_Fruit pulp 0 95 0 983 0 998 K_Leaves edible orange roots 0 964 1 0 0 998 K_Tea leaves 1 0 1 0 1 0 K_The shell 1 0 0 977 1 0 K_leftovers 0 936 0 957 0 998 O_Broken flowerpots and dishes 0 978 0 978 0 999 O_Cigarette butts 0 977 0 977 0 999 O_Disposable snack box 0 977 0 955 0 999 O_Stained plastic 0 978 0 938 0 999 O_chopstick 0 976 0 976 0 999 O_toothpick 0 9 1 0 0 999 R_Charging treasure 1 0 0 98 1 0 R_Cosmetics bottles 0 98 0 98 0 999 R_Courier bags 1 0 1 0 1 0 R_Edible oil drum 0 957 1 0 0 999 R_Leather shoes 1 0 0 98 1 0 R_Metal food can 0 974 0 949 0 999 R_Old clothes 0 977 0 956 0 999 R_Plastic bowl tub 0 986 0 986 0 999 R_Plastic hangers 1 0 0 98 1 0 R_Plastic toys 1 0 0 973 1 0 R_Plug wire 1 0 0 976 1 0 R_Plush toys 0 987 0 987 0 999 R_Shampoo bottle 1 0 0 976 1 0 R_Spice bottles 1 0 0 911 1 0 R_The bottle 0 929 1 0 0 998 R_The glass 0 966 0 983 0 999 R_cans 0 959 0 959 0 999 R_carton 1 0 1 0 1 0 R_cutting board 1 0 1 0 1 0 R_drink bottle 0 947 0 947 0 999 R_package 0 948 1 0 0 998 R_pan 1 0 1 0 1 0 R_pillow 0 915 0 956 0 998
40垃圾分類最優(yōu)模型訓(xùn)練過(guò)程如圖7所示。
通過(guò)遷移學(xué)習(xí),從曲線中可以看出模型收斂的很快,損失下降的很快并且到達(dá)了較低值,驗(yàn)證集準(zhǔn)確率很快得到了最優(yōu)解。訓(xùn)練集損失穩(wěn)定下降,訓(xùn)練集準(zhǔn)確率穩(wěn)定提升。在數(shù)據(jù)集復(fù)雜度更高的情況下,已經(jīng)超過(guò)了華為2019年垃圾分類挑戰(zhàn)杯的方案,40垃圾分類的準(zhǔn)確率達(dá)到了97 63%,超過(guò)了它的96 96%,并且參數(shù)量只占他的14,flops只占12。
Python垃圾圖片測(cè)試結(jié)果如圖8所示,推理結(jié)果全部正確。
圖8 python可視化測(cè)試結(jié)果
4.1.1 模型轉(zhuǎn)換預(yù)處理
Pytorch的模型文件一般會(huì)保存為 pth文件,C++接口一般讀取的是 pt文件,因此,C++在調(diào)用Pytorch訓(xùn)練好的模型文件的時(shí)候就需要進(jìn)行一個(gè)轉(zhuǎn)換,轉(zhuǎn)換為 pt文件,才能夠讀取。
預(yù)處理如下:
在轉(zhuǎn)換的時(shí)候,首先就需要先將模型文件讀取進(jìn)來(lái),然后利用pytorch提供的函數(shù)torch jit trace進(jìn)行轉(zhuǎn)換。PyTorch 一個(gè)算子可能會(huì)導(dǎo)出ONNX很多的膠水算子,計(jì)算圖變復(fù)雜,導(dǎo)致推理效率下降。使用onnx simply庫(kù)對(duì)onnx文件簡(jiǎn)化,使網(wǎng)絡(luò)結(jié)構(gòu)更加精簡(jiǎn),消除細(xì)碎op。
4.1.2 模型轉(zhuǎn)換方式以及結(jié)果
PyTorch -> ONNX -> 第三方后端(主流方式),第三方后端有 TensorRT,MNN,NCNN等,這樣的優(yōu)勢(shì)是不同的后端在目標(biāo)平臺(tái)都有相對(duì)應(yīng)的優(yōu)化,可以獲得最快的推理速度,但問(wèn)題是第三方后端對(duì)onnx算子的支持優(yōu)化,會(huì)有運(yùn)行不了的問(wèn)題[25]。
方案:Pytorch -> MNN:pytorch -> onnx -> MNN。
結(jié)果:模型轉(zhuǎn)換成功,python和C++調(diào)用結(jié)果一致。
轉(zhuǎn)化成mnn模型雖然可以進(jìn)行推理,模型文件較大或者運(yùn)行較慢的情況特別是在移動(dòng)設(shè)備等邊緣設(shè)備上,算力和儲(chǔ)存空間受限因此壓縮模型是一個(gè)急需的工作,本文所做的工作為離線量化[26,27]。
原模型轉(zhuǎn)換后數(shù)據(jù)類型為Fp32,由于模型太大370MB,使用轉(zhuǎn)換工具做了量化處理,壓縮模型的大小,同時(shí)可以加速模型的推理速度。模型量化如表3所示。
表3 模型量化
使用python和c++對(duì)同一張圖片進(jìn)行結(jié)果測(cè)試,輸出一致,說(shuō)明模型轉(zhuǎn)換和模型量化沒(méi)有問(wèn)題。Fp16量化和Int8量化后的模型可以正常推理,并且可以顯示出置信度。Int2量化后的模型圖像推理時(shí)候無(wú)任何反應(yīng),結(jié)構(gòu)壓縮太多,出現(xiàn)了精度失真的情況。最終量化選擇Fp16量化和Int8量化。
(1)模型準(zhǔn)備,留下以下兩個(gè)模型model-87_384_sim_fp16和model-87_384_sim_int8。
(2)創(chuàng)建工程。創(chuàng)建Android工程,打開Android Studio新建一個(gè)Native C++工程,配置好JDK 、SDK 、NDK。
(3)模型導(dǎo)入。將步驟(1)中生成的兩個(gè)文件復(fù)制到步驟(2)中的新工程中,存放的目錄為“F:swintransformerappsrcmainassets”。這兩個(gè)模型都可以使用,在后續(xù)的“MainActivity java”可以自由選擇切換。
(4)添加標(biāo)簽文件。在“app”目錄下創(chuàng)建名為“F:swintransformerappsrcmainjni”的文件,將本文需要分類的類別在這個(gè)“swimtransformer_jni cpp”文件中,共40類。編寫MNN進(jìn)行模型推理,根據(jù)自己的模型,編寫jni調(diào)用MNN進(jìn)行模型推理
(5)模型分類。在“app”目錄下創(chuàng)建名為“swintrans former java”的文件,在里面添加模型分類的代碼,主要包含了以下功能:目標(biāo)圖像讀取、目標(biāo)圖像預(yù)處理、模型加載、模型前向推理、模型預(yù)測(cè)結(jié)果。在圖像的預(yù)處理中,需要對(duì)圖像進(jìn)行歸一化處理,同時(shí)統(tǒng)一縮放為 384×384 大小。
(6) 界面設(shè)計(jì)和操作邏輯設(shè)計(jì)。在“app”目錄下創(chuàng)建名為“MainActivity java”的文件,寫入調(diào)用相冊(cè)、文件管理器、瀏覽器的函數(shù)以及一些操作的邏輯。創(chuàng)建“ xml”的文件,編輯 App 的界面顯示,完成 App的開發(fā)[28,29]。
4.4.1 app 界面以及操作方式
圖形界面主要分為三個(gè)按鈕,選圖、CPU識(shí)別、GPU識(shí)別。進(jìn)入界面后,下方會(huì)彈出“Copy model to data”和“Copy model to success”。之后就可以從相冊(cè)選圖或者文件管理或者瀏覽器選擇圖片進(jìn)行識(shí)別。
4.4.2 app 單張圖片測(cè)試分析
使用單張圖片測(cè)試模型量化和模型轉(zhuǎn)換有無(wú)推理精度損失,選出最優(yōu)搭配下的app。具體測(cè)試方案和結(jié)果如下:選取Mix2s、Note 10 pro、Redmi K40 在不同量化模型下,分別進(jìn)行同一張圖像用cpu 和gpu識(shí)別,評(píng)價(jià)指標(biāo)分為準(zhǔn)確率和推理速度。測(cè)試原圖與python測(cè)試圖如圖9所示,方便與表4進(jìn)行結(jié)果對(duì)比。
圖9 測(cè)試原圖與python測(cè)試可視化
python推理圖9(a)花費(fèi)時(shí)間400ms,結(jié)果如圖9(b),使用設(shè)備 GPU2080TI。
App具體測(cè)試圖9(a)結(jié)果如表4所示。
表4 APP測(cè)試圖a結(jié)果
結(jié)論:
(1)在單一量化時(shí),硬件設(shè)備越好,推理速度越快,精度越高。
(2) int8量化效果比Fp16量化效果更好,用同一款手機(jī)測(cè)試同一張圖片時(shí)候,精度和推理速度都得到部分提升;相比原模型Fp32數(shù)據(jù)推理同一張圖片時(shí),無(wú)精度損失。
(3) 使用Mnn加速優(yōu)化后,用同一款手機(jī)測(cè)試同一張圖片時(shí)候,推理速度得到了再一次的提升,但是精度對(duì)于不同的機(jī)型表現(xiàn)略有不同,但總體趨勢(shì)是下降的。
(4)在不同安卓版本和不同分辨率下下的不同機(jī)型,該App都能完美適用。手機(jī)移動(dòng)邊緣設(shè)備與顯卡算力差距很大,手機(jī)推理速度經(jīng)過(guò)優(yōu)化滿足日常操作時(shí)長(zhǎng)需要。
4.4.3 app 可視化
本次app可視化測(cè)試選擇機(jī)型Mix2s,選擇模型為Int8量化,加速推理使用MNN優(yōu)化,圖形測(cè)試選擇三張圖片,分別使用cpu和gpu推理。評(píng)價(jià)指標(biāo)分為準(zhǔn)確率和推理速度,圖像推理會(huì)顯示出前TOP5的標(biāo)簽和概率,標(biāo)簽按照概率大小依次排列??梢暬Y(jié)果如圖10所示。
App測(cè)試可視化推理結(jié)果全部正確,推理速度滿足日常使用。
通過(guò)對(duì)各種深度學(xué)習(xí)圖像算法進(jìn)行研究,加上了大量的訓(xùn)練策略,并且對(duì)網(wǎng)絡(luò)進(jìn)行了改進(jìn),最終得到超過(guò)現(xiàn)有技術(shù)的精度。在保持高精度的前提下,盡量提升推理速度,對(duì)模型進(jìn)行量化,使之可以移植到安卓嵌入式設(shè)備的智能垃圾分類應(yīng)用。通過(guò)模型轉(zhuǎn)換,使其用手機(jī)的cpu和gpu推理,徹底擺脫通信的束縛,在深度學(xué)習(xí)的多種部署方式中具有高度便攜性 、通用性 、經(jīng)濟(jì)適用性性的特點(diǎn)。除此之外,使用MNN優(yōu)化加速了推理速度。由于構(gòu)建并使用一個(gè)龐大的數(shù)據(jù)集進(jìn)行訓(xùn)練,模型的泛化性能較好,適用于生活中的各種場(chǎng)景。