本發(fā)明涉及人臉檢測領域,特別地,涉及一種基于深度學習的人臉檢測速度優(yōu)化方法及裝置。
背景技術:
人臉識別檢測研究,主要包括人臉檢測技術和人臉識別技術的研究。人臉識別檢測是指對于任意一幅給定的圖像,采用一定的策略對其進行搜索以確定其中是否含有人臉,如果是,則返回人臉的位置、大小和姿態(tài),接著對人臉進行識別。它是一個復雜的具有挑戰(zhàn)性的模式檢測問題。同時,人臉檢測要走向實際應用,精度和速度是亟需解決的兩個關健問題,自20世紀90年代以來,人臉檢測的精度得到了大幅度的提高,但是速度卻一直達不到應用系統(tǒng)用戶滿意的程度,為此研究者們付出艱辛的努力。
深度學習是近十年來人工智能領域取得的最重要的突破之一。它在語音識別、自然語言處理、計算機視覺、圖像與視頻分析、多媒體等諸多領域都取得了巨大成功。
深度學習與傳統(tǒng)模式識別方法的最大不同在于它所采用的特征是從大數(shù)據(jù)中自動學習得到,而非采用手工設計。好的特征可以提高模式識別系統(tǒng)的性能。過去幾十年,在模式識別的各種應用中,手工設計的特征一直處于統(tǒng)治地位。手工設計主要依靠設計者的先驗知識,很難利用大數(shù)據(jù)的優(yōu)勢。由于依賴手工調參數(shù),因此特征的設計中所允許出現(xiàn)的參數(shù)數(shù)量十分有限。深度學習可以從大數(shù)據(jù)中自動學習特征的表示,可以包含成千上萬的參數(shù)。
采用手工設計出有效的特征往往需要五到十年時間,而深度學習可以針對新的應用從訓練數(shù)據(jù)中很快學習到新的有效的特征表示。
一個模式識別系統(tǒng)包括特征和分類器兩部分。在傳統(tǒng)方法中,特征和分類器的優(yōu)化是分開的。而在神經(jīng)網(wǎng)絡的框架下,特征表示和分類器是聯(lián)合優(yōu)化的,可以最大程度地發(fā)揮二者聯(lián)合協(xié)作的性能。
深度學習采用了與傳統(tǒng)神經(jīng)網(wǎng)絡相似的分層結構,系統(tǒng)由包括輸入層、隱層(多層)、輸出層組成的多層網(wǎng)絡,只有相鄰層節(jié)點之間有連接,同一層以及跨層節(jié)點之間相互無連接,每一層可以看作是一個logisticregression模型;這種分層結構,比較接近人類大腦結構。
深度學習由于計算量大,計算復雜,所以基于深度學習的人臉檢測速度上與傳統(tǒng)方法比較起來,具有一定劣勢。針對深度學習人臉檢測速度優(yōu)化,存在很多的方案,如改變硬件條件,使用高性能硬件gpu,采用快速加速軟件atblas、openblas、nnpack等。這些現(xiàn)有的技術方案,都需要硬件具備相應的支持單位,如果沒有相應的支持單位,速度提升就會存在相應的瓶頸;另外在低端cpu上,支持效果達不到理想情況。
技術實現(xiàn)要素:
本發(fā)明提供了一種基于深度學習的人臉檢測速度優(yōu)化方法及裝置,以解決現(xiàn)有方案硬件成本高、無法在低端cpu上實現(xiàn)速度提升的技術問題。
本發(fā)明采用的技術方案如下:
根據(jù)本發(fā)明的一方面,提供了一種基于深度學習的人臉檢測速度優(yōu)化方法,該方法包括:將深度學習模型中的浮點數(shù)據(jù)定點化;將人臉圖像中的數(shù)據(jù)定點化;對深度學習模型中定點化后的數(shù)據(jù)以及人臉圖像中定點化后的數(shù)據(jù)進行平行運算;重復平行運算的步驟,直到整個深度學習模型運算完并輸出人臉目標框坐標信息以及人臉目標框校正信息;將人臉目標框校正信息還原成相應的浮點數(shù)據(jù);將人臉目標框坐標信息與還原后的人臉目標框校正信息進行結合,對人臉目標框進行調整,最終獲得人臉真正目標框位置。
進一步地,將深度學習模型中的浮點數(shù)據(jù)定點化的步驟包括:讀取深度學習模型;將深度學習模型中的浮點數(shù)據(jù)轉換為第一定點數(shù)據(jù);將第一定點數(shù)據(jù)存儲為第一short類型數(shù)據(jù)。
可選地,第一定點數(shù)據(jù)的數(shù)據(jù)范圍為-255到+255。
進一步地,將人臉圖像的數(shù)據(jù)定點化的步驟包括:讀取人臉圖像;對人臉圖像進行預處理;將預處理后的數(shù)據(jù)轉換成第二定點數(shù)據(jù);將第二定點數(shù)據(jù)存儲為第二short類型數(shù)據(jù)。
可選地,第二定點數(shù)據(jù)的數(shù)據(jù)范圍為-255到+255。
進一步地,平行運算的步驟包括:加載第一short類型數(shù)據(jù)和第二short類型數(shù)據(jù);對加載后的第一short類型數(shù)據(jù)和第二short類型數(shù)據(jù)進行平行乘加運算。
根據(jù)本發(fā)明的另一方面,還提供了一種基于深度學習的人臉檢測速度優(yōu)化裝置,該裝置包括:第一定點化模塊,用于將深度學習模型中的浮點數(shù)據(jù)定點化;第二定點化模塊,用于將人臉圖像進行預處理后的數(shù)據(jù)定點化;平行運算模塊,用于重復對深度學習模型中定點化后的數(shù)據(jù)以及人臉圖像中定點化后的數(shù)據(jù)進行平行運算,直到整個深度學習模型運算完并輸出人臉目標框坐標信息以及人臉目標框校正信息;還原模塊,用于將人臉目標框校正信息還原成相應的浮點數(shù)據(jù);調整模塊,用于將人臉目標框坐標信息與還原后的人臉目標框校正信息進行結合以對人臉目標框進行調整,并最終獲得人臉真正目標框位置。
進一步地,第一定點化模塊包括:第一讀取子模塊,用于讀取深度學習模型;第一轉換子模塊,用于將深度學習模型中的浮點數(shù)據(jù)轉換為第一定點數(shù)據(jù);第一存儲子模塊,用于將第一定點數(shù)據(jù)存儲為第一short類型數(shù)據(jù)。
進一步地,第二定點化模塊包括:第二讀取子模塊,用于讀取人臉圖像;預處理子模塊,用于對第二讀取模塊讀取的人臉圖像進行預處理;第二轉換子模塊,用于將預處理后的數(shù)據(jù)轉換成第二定點數(shù)據(jù);第二存儲子模塊,用于將第二定點數(shù)據(jù)存儲為第二short類型數(shù)據(jù)。
進一步地,平行運算模塊包括:加載子模塊,用于加載第一short類型數(shù)據(jù)和第二short類型數(shù)據(jù);平行乘加子模塊,用于對加載后的第一short類型數(shù)據(jù)和第二short類型數(shù)據(jù)進行平行乘加運算。
本發(fā)明的基于深度學習的人臉檢測優(yōu)化方法及裝置,通過將深度學習模型以及人臉圖像中的浮點數(shù)據(jù)定點化,再對定點化后的數(shù)據(jù)進行平行運算,可以節(jié)省數(shù)據(jù)占用空間,避免對浮點數(shù)據(jù)運算過程中耗費大量的運算資源和運算時間,對定點數(shù)據(jù)的運算可以提高處理數(shù)據(jù)的效率,且平行運算處理可以一次執(zhí)行多個數(shù)據(jù)的多次運算,減少總體運算次數(shù),提高運算效率和節(jié)省時間,達到降低硬件成本和提升人臉檢測速度的效果,有利于低端cpu上實現(xiàn)人臉檢測速度提升。
除了上面所描述的目的、特征和優(yōu)點之外,本發(fā)明還有其它的目的、特征和優(yōu)點。下面將參照附圖,對本發(fā)明作進一步詳細的說明。
附圖說明
構成本申請的一部分的附圖用來提供對本發(fā)明的進一步理解,本發(fā)明的示意性實施例及其說明用于解釋本發(fā)明,并不構成對本發(fā)明的不當限定。在附圖中:
圖1是本發(fā)明優(yōu)選實施例的基于深度學習的人臉檢測速度優(yōu)化方法的流程圖;
圖2是本發(fā)明優(yōu)選實施例的將深度學習模型中的浮點數(shù)據(jù)定點化的具體流程圖;
圖3是本發(fā)明優(yōu)選實施例的將人臉圖像的數(shù)據(jù)定點化的具體流程圖;
圖4是本發(fā)明優(yōu)選實施例的基于深度學習的人臉檢測速度優(yōu)化裝置的原理框圖。
具體實施方式
需要說明的是,在不沖突的情況下,本申請中的實施例及實施例中的特征可以相互組合。下面將參考附圖并結合實施例來詳細說明本發(fā)明。
本發(fā)明主要根據(jù)深度學習訓練得到的網(wǎng)絡結構及訓練得到的數(shù)據(jù),針對性的進行優(yōu)化,下邊將詳細闡述發(fā)明過程。
參照圖1,本發(fā)明的優(yōu)選實施例提供了一種基于深度學習的人臉檢測速度優(yōu)化方法,該方法包括:
步驟s100,將深度學習模型中的浮點數(shù)據(jù)定點化;
步驟s200,將人臉圖像中的數(shù)據(jù)定點化;
步驟s300,對深度學習模型中定點化后的數(shù)據(jù)以及人臉圖像中定點化后的數(shù)據(jù)進行平行運算;
重復平行運算的步驟s300,直到整個深度學習模型運算完并輸出人臉目標框坐標信息以及人臉目標框校正信息;
步驟s400,將人臉目標框校正信息還原成相應的浮點數(shù)據(jù);
步驟s500,將人臉目標框坐標信息與還原后的人臉目標框校正信息進行結合,對人臉目標框進行調整,最終獲得人臉真正目標框位置。
進一步地,參照圖2,將深度學習模型中的浮點數(shù)據(jù)定點化的步驟s100包括:
步驟s110,讀取深度學習模型;
本優(yōu)選實施例中,主要采用基于開源發(fā)型的跨平臺計算機視覺庫opencv、深度學習框架caffe、以及caffe所依賴的軟件來讀取深度學習模型文件。
步驟s120,將深度學習模型中的浮點數(shù)據(jù)轉換為第一定點數(shù)據(jù);本優(yōu)選實施例中,將浮點數(shù)據(jù)進行-255到+255定點化,即第一定點數(shù)據(jù)的數(shù)據(jù)范圍為-255到+255。
步驟s130,將第一定點數(shù)據(jù)存儲為第一short類型數(shù)據(jù)。對深度學習模型文件進行浮點轉定點后,為了避免后面的平行運算(乘法、加法、累加)后的結果數(shù)據(jù)越界,本發(fā)明將定點化后的數(shù)據(jù)保存成short類型定點數(shù)據(jù),因為short類型定點數(shù)據(jù)占用數(shù)據(jù)空間16字節(jié),要比浮點(float)數(shù)據(jù)占用空間少一半,這樣能在存儲上節(jié)省空間;同時,在后續(xù)平行運算步驟中加載數(shù)據(jù)的時候,一次可以加載更多的數(shù)據(jù)。
進一步地,參照圖3,將人臉圖像的數(shù)據(jù)定點化的步驟s200包括:
步驟s210,讀取人臉圖像;
步驟s220,對人臉圖像進行預處理;
步驟s230,將預處理后的數(shù)據(jù)轉換成第二定點數(shù)據(jù);同樣可選地,第二定點數(shù)據(jù)的數(shù)據(jù)范圍為-255到+255。
步驟s240,將第二定點數(shù)據(jù)存儲為第二short類型數(shù)據(jù)。與步驟s130同樣的道理,此步驟能夠節(jié)省存儲空間和便于后續(xù)高效讀取數(shù)據(jù),有利于后續(xù)高效的平行運算處理。
進一步地,平行運算的步驟s300包括:
步驟s310,加載第一short類型數(shù)據(jù)和第二short類型數(shù)據(jù);
本優(yōu)選實施例中,利用cpu計算單元進行數(shù)據(jù)加載,一次加載256字節(jié)數(shù)據(jù)(256字節(jié)數(shù)據(jù)可以表示8個short類型數(shù)據(jù)),將深度學習模型定點化后的8個第一short類型數(shù)據(jù)和人臉圖像定點化后的8個第二short類型數(shù)據(jù)加載完。
步驟s320,對加載后的第一short類型數(shù)據(jù)和第二short類型數(shù)據(jù)進行平行乘加運算。
本優(yōu)選實施例中,對加載完的數(shù)據(jù)利用cpu數(shù)據(jù)單位avx2并行乘加運算邏輯單元,進行平行乘加運算,如函數(shù)_mm256_hadd_epi32(),一次可完成多次乘法及多次加法,從運算過程上,這樣一次運算可代表以前的多次運算,這樣處理的好處同樣節(jié)省運算時間,提升工作效率。當然,在其它實施例中,也可以使用其它的cpu數(shù)據(jù)單位例如sse、sse2、avx等進行平行運算。這種一次一條指令做多個操作的運算方式,能增加緩存命中,減少內存訪問。
從硬件成本考量,gpu和fpga由于價格及功耗過高,限制了應用的場景,基本上在普通消費級產(chǎn)品中不會使用。而本發(fā)明的方法,可以降低硬件的條件,使得深度學習在普通消費級產(chǎn)品上得以實現(xiàn),有利于低端cpu上實現(xiàn)人臉檢測速度提升。
根據(jù)本發(fā)明的另一方面,還提供了一種基于深度學習的人臉檢測速度優(yōu)化裝置,參照圖4,該裝置包括:
第一定點化模塊100,用于將深度學習模型中的浮點數(shù)據(jù)定點化;
第二定點化模塊200,用于將人臉圖像進行預處理后的數(shù)據(jù)定點化;
平行運算模塊300,用于重復對深度學習模型中定點化后的數(shù)據(jù)以及人臉圖像中定點化后的數(shù)據(jù)進行平行運算,直到整個深度學習模型運算完并輸出人臉目標框坐標信息以及人臉目標框校正信息;
還原模塊400,用于將人臉目標框校正信息還原成相應的浮點數(shù)據(jù);
調整模塊500,用于將人臉目標框坐標信息與還原后的人臉目標框校正信息進行結合以對人臉目標框進行調整,并最終獲得人臉真正目標框位置。
進一步地,第一定點化模塊100包括:
第一讀取子模塊110,用于讀取深度學習模型;
第一轉換子模塊120,用于將深度學習模型中的浮點數(shù)據(jù)轉換為第一定點數(shù)據(jù);
第一存儲子模塊130,用于將第一定點數(shù)據(jù)存儲為第一short類型數(shù)據(jù)。
進一步地,第二定點化模塊200包括:
第二讀取子模塊210,用于讀取人臉圖像;
預處理子模塊220,用于對第二讀取模塊讀取的人臉圖像進行預處理;
第二轉換子模塊230,用于將預處理后的數(shù)據(jù)轉換成第二定點數(shù)據(jù);
第二存儲子模塊240,用于將第二定點數(shù)據(jù)存儲為第二short類型數(shù)據(jù)。
進一步地,平行運算模塊300包括:
加載子模塊310,用于加載第一short類型數(shù)據(jù)和第二short類型數(shù)據(jù);
平行乘加子模塊320,用于對加載后的第一short類型數(shù)據(jù)和第二short類型數(shù)據(jù)進行平行乘加運算。
本發(fā)明的方法和裝置具備檢測速度快的優(yōu)點,同時能降低硬件的存儲空間,為后期硬件平臺(arm、dsp等)移植優(yōu)化奠定基礎。本發(fā)明通過將深度學習模型以及人臉圖像中的浮點數(shù)據(jù)定點化,再對定點化后的數(shù)據(jù)進行平行運算,可以節(jié)省數(shù)據(jù)占用空間,避免對浮點數(shù)據(jù)運算過程中耗費大量的運算資源和運算時間,對定點數(shù)據(jù)的運算可以提高處理數(shù)據(jù)的效率,且平行運算處理可以一次執(zhí)行多個數(shù)據(jù)的多次運算,減少總體運算次數(shù),提高運算效率和節(jié)省時間,達到降低硬件成本和提升人臉檢測速度的效果。同時,將定點化后的數(shù)據(jù)存儲為short類型數(shù)據(jù),能夠防止平行運算后的結果數(shù)據(jù)越界。一次一條指令做多個操作的平行運算方式,能增加緩存命中,減少內存訪問。
以上所述僅為本發(fā)明的優(yōu)選實施例而已,并不用于限制本發(fā)明,對于本領域的技術人員來說,本發(fā)明可以有各種更改和變化。凡在本發(fā)明的精神和原則之內,所作的任何修改、等同替換、改進等,均應包含在本發(fā)明的保護范圍之內。