[發明專利]一種基于ARM Cotex-A系列平臺的人臉檢測實現方法有效
| 申請號: | 201810372936.5 | 申請日: | 2018-04-24 |
| 公開(公告)號: | CN108764037B | 公開(公告)日: | 2021-12-24 |
| 發明(設計)人: | 洪朝群;王善炮 | 申請(專利權)人: | 石獅市森科智能科技有限公司 |
| 主分類號: | G06K9/00 | 分類號: | G06K9/00;G06T1/20;G06F8/41 |
| 代理公司: | 北京科億知識產權代理事務所(普通合伙) 11350 | 代理人: | 湯東鳳 |
| 地址: | 362000 福建省泉州市石獅市*** | 國省代碼: | 福建;35 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 基于 arm cotex 系列 平臺 檢測 實現 方法 | ||
1.一種基于ARM Cotex-A系列平臺的人臉檢測實現方法,其特征在于,包括如下步驟:
S1、在ARM Cotex-A系列處理器硬件環境下修改seetaface的FaceDetection中的源碼,修改編譯器類型為交叉編譯器;
S2、在編譯器設置中增加NEON的編譯選項;
S3、替換FaceDetection中原有的SSE指令所需頭文件為NEON所需頭文件;
S4、針對FaceDetection的原代碼中的使用SSE指令的部分修改為NEON指令,將使用SSE指令的函數修改為使用NEON的函數;
S5、在步驟S2中已增加NEON的編譯選項支持下,重新編譯程序,得到需要的動態鏈接庫文件,從而編譯得到在ARM Cotex-A系列處理器平臺下支持NEON的FaceDetection程序;
步驟S1的具體操作為:
修改SET命令:
1)設置系統類型,選擇使用linux:
SET(CMAKE_SYSTEM_NAME Linux)
2)設置交叉編譯器路徑:啟用交叉編譯器,并添加交叉編譯器的路徑:
SET(CMAKE_CXX_COMPILER/opt/hisi-linux/x86-arm/arm-hisiv400-linux/bin/arm-hisiv400-linux-gnueabi-g++);
步驟S4的具體操作為:
將原有的SSE指令轉換為arm指令集下的neon指令;
先在代碼中替換原有使用SSE的代碼;代碼中使用了SSE指令的函數有如下幾個:
_mm_add_epi32(__m128i a,__m128i b)——①;
_mm_sub_epi32(__m128i a,__m128i b)——②;
_mm_mullo_epi32(__m128i a,__m128i b)——③;
_mm_mul_ps(__m128i a,__m128i b)——④;
_mm_cmpgt_ps(__m128 a,__m128 b)——⑤;
_mm_set_epi32(int i3,int i2,int i1,int i0)——⑥;
其中:
_mm_add_epi32()函數的功能為一次完成4個32位整形數的相加,并返回相加結果,函數①的替換函數為:vaddq_s32(a,b);vaddq_s32()的函數原型為int32x4_t vaddq_s32(int32x4_t__a,int32x4_t__b);為arm指令集下的向量計算,功能與_mm_add_epi32()相同;
_mm_sub_epi32()函數的功能為一次完成4個32位整形數的相減,并返回相加結果,函數②的替換函數為:vsubq_s32(a,b);vsubq_s32()的函數原型為int32x4_t vsubq_s32(int32x4_t__a,int32x4_t__b);為arm指令集下的向量計算,功能與_mm_sub_epi32()相同;
_mm_mullo_epi32()函數的功能為一次完成4個32位整形數的相乘,并返回相加結果;函數③的替換函數為vmulq_s32(a,b);vmulq_s32()的函數原型為int32x4_t vmulq_s32(int32x4_t__a,int32x4_t__b);為arm指令集下的向量計算,功能與_mm_mullo_epi32()相同;
_mm_mul_ps()函數的功能為一次完成4個32位整形數的相乘,并返回相加結果;對于函數④,返回在一個__m128的寄存器,具體函數實現如下:
INLINE__m128_mm_mul_ps(__m128 a,__m128 b)
{
__m128 ret;
ret[0]=a[0]*b[0];
ret[1]=a[1]*b[1];
ret[2]=a[2]*b[2];
ret[3]=a[3]*b[3];
return ret;
}
_mm_cmpgt_ps()函數的功能為比較大于;函數⑤的替換函數為(__m128)vcleq_f32(a,b);vcleq_f32()的函數原型為float32x4_tvcleq_f32(float32x4_t__a,float32x4_t__b);為arm指令集下的向量計算,功能與_mm_cmple_ps()相同;
_mm_set_epi32()功能為設置4個有符號的32位整數值;函數⑥的替換函數為:vreinterpretq_m128i_s32(vld1q_s32(data));
其中返回值的類型定義在宏定義中,如下所示:
#define_MM_SHUFFLE(z,y,x,w)((z6)|(y4)|(x2)|w)
#define vreinterpretq_m128 i_s32(x)\
(x)
#define vreinterpretq_m128i_u32(x)\
vreinterpretq_s32_u32(x)
#define vreinterpretq_s32_m128i(x)\
(x)。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于石獅市森科智能科技有限公司,未經石獅市森科智能科技有限公司許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201810372936.5/1.html,轉載請聲明來源鉆瓜專利網。





