91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

在X3派上玩轉(zhuǎn)一億參數(shù)量超大Transformer,DIY專屬你的離線語音識別

地瓜機器人 ? 2023-02-21 16:08 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Transformer模型在自然語言領(lǐng)域被提出后,目前已經(jīng)擴展到了計算機視覺、語音等諸多領(lǐng)域。然而,雖然Transformer模型在語音識別領(lǐng)域有著更好的準確率,但還面臨著一個問題,計算復(fù)雜度和內(nèi)存儲存開銷會隨著語音時長的增加而變大。

技術(shù)普及在于產(chǎn)品價格親民,而價格親民在于技術(shù)易落地易實現(xiàn),離線語音識別應(yīng)運而生,運用深度學習等技術(shù)且只需在本地進行運算就可實現(xiàn)人機語音交互,而且具備實時的響應(yīng)速度、無需聯(lián)網(wǎng)的特點,能更好的應(yīng)用在大小家電、照明、車載、健康儀器、教育設(shè)備等行業(yè)。

本次內(nèi)容由社區(qū)優(yōu)秀開發(fā)者、首百第四批新品體驗官——宋星辰將帶領(lǐng)大家DIY個人專屬離線語音識別,在X3派上玩轉(zhuǎn)一億參數(shù)量的超大Transformer。歡迎感興趣的旭友們點擊注冊地平線開發(fā)者社區(qū)交流討論,相關(guān)文檔詳見地平線開發(fā)者社區(qū)。

技術(shù)詳解

Step-1:模型轉(zhuǎn)換的環(huán)境準備

環(huán)境準備本身沒有什么奇技淫巧,這里想重點描述的是:pytorch版本的升級對精度瓶頸和速度瓶頸分析所帶來的跨越式的體驗提升。

在地平線開發(fā)者社區(qū)官方提供的安裝包中,為了兼容訓(xùn)練算法包海圖(HAT),安裝的 pytorch版本為1.10.0。pytorch版本本身對模型轉(zhuǎn)換的精度不會有什么影響,但是不同版本的pytorch所導(dǎo)出的onnx,在節(jié)點(node, 或稱op)命名上有很大的區(qū)別。

就一般情況而言,當torch版本為1.10.0時,Node的命名采用了“optype+數(shù)字”的形式,這種形式的缺點是:當模型 Layer/SubLayer數(shù)量非常多(比如本文一億參數(shù)量的Transformer,包含的 OP 有上千個),我們很難一眼定位 Conv_xx 到底是第幾層的第幾個卷積。

1.png


torch 1.10.0版本結(jié)果

通常一個量化明顯掉點的模型,會從中間某一個OP開始有鮮明的Cosine Similarity損失,在當前的命名格式下,為了找到這個OP在原始模型中的位置(第x Layer的第y SubLayer),我們需要從頭開始一個一個數(shù),這無疑是效率低下的。當然,隨著對模型細節(jié)的熟悉,定位的速度會越來越快,但這不能從根本上解決效率問題。

相反,當torch版本升級到1.13.0時Node的命名采用了“Layer+SubLayer+Attribute+OP”的形式,一眼定位,一眼丁真,大大節(jié)省了開發(fā)人員定位精度問題(哪層的OP相似度下降嚴重)or 速度問題(哪層的OP跑在CPU)的時間。

2.png


torch 1.13.0版本結(jié)果

Step-2:C++ Demo 的編譯

由于X3派板端內(nèi)存有限,編譯C++ Demo時筆者采用了交叉編譯的形式,在開發(fā)機上sudo安裝aarch gcc即可。至于使用C++實現(xiàn)BPU模型的板上推理,實現(xiàn)推理的邏輯本身是一件很容易的事情,無論是使用python實現(xiàn)亦或是C++實現(xiàn),其流程都是固定的,也即:

3.png

關(guān)于這四個步驟的API調(diào)用范例,官方 C++ 文檔中都給出了比較詳細的 know-how 示例,但是大多數(shù)都是單模型 + 單輸入的簡單case,在語音識別模型中,會涉及到 多模型(多個bin串聯(lián))+ 多輸入(一個bin有多個輸入)的情況,這里給出本文的針對性示例:

// BPUAsrModel 類定義 using hobot::easy_dnn::Model; using hobot::easy_dnn::DNNTensor; using hobot::easy_dnn::TaskManager; using hobot::easy_dnn::ModelManager; class BPUAsrModel : public AsrModel { public: BPUAsrModel() = default; ~BPUAsrModel(); BPUAsrModel(const BPUAsrModel& other); void Read(const std::string& model_dir); void PrepareEncoderInput(const std::vector>& chunk_feats); // 其他成員函數(shù)... protected: void ForwardEncoderFunc(const std::vector>& chunk_feats, std::vector>* ctc_prob) override; private: // models std::shared_ptr encoder_model_ = nullptr; std::shared_ptr ctc_model_ = nullptr; // input/output tensors, 使用vector方便應(yīng)對單模型多輸入的情況 std::vector> encoder_input_, encoder_output_; std::vector> ctc_input_, ctc_output_; // 其他成員變量... };

Step-3:正式開始模型轉(zhuǎn)換

(一)一行代碼 改寫Transformer模型

使用工具鏈去轉(zhuǎn)換NLP領(lǐng)域的原生Transformer模型,體驗可能會是非常糟糕的(甚至會在轉(zhuǎn)換過程中直接報錯)。這是因為NLP中的Transformer,輸入tensor的維度通常是二維或三維,類型既包含float也包含long 。而XJ3芯片在設(shè)計時只著重考慮了視覺任務(wù),通常都是浮點的四維圖像輸入,工具鏈也只對這類視覺模型有比較極致的體驗優(yōu)化。

那么,為了轉(zhuǎn)換NLP類的Transformer,我們是否需要重頭訓(xùn)練一個四維數(shù)據(jù)流的模型呢?答案顯然是否定的,本文通過等價替換和抽象封裝,實現(xiàn)了一行代碼將原生Transformer等價改寫為BPU友好的Transformer:

# 一鍵完成 3D數(shù)據(jù)流 Transformer 等價轉(zhuǎn)換 4D數(shù)據(jù)流 Transformer Encoder4D = wenet.bin.export_onnx_bpu.BPUTransformerEncoder(Encoder3D)

這里的BPU TransformerEncoder就像是科幻電影中的“外骨骼機甲”一樣,其內(nèi)核沒變(權(quán)重參數(shù)值沒變),但是功能上實現(xiàn)了針對性升級。具體而言,在 BPUTransformerEncoder 的構(gòu)造過程中,會逐OP遍歷原生的 Encoder3D,并對其中的 BPU 不友好的 OP 實施等價改寫。

(二) 一句命令 走完轉(zhuǎn)換全流程

一個完整pytorch模型到bpu模型的轉(zhuǎn)換流程,一般要經(jīng)過如下四步:

①pytorch 模型 轉(zhuǎn) onnx 模型;

②構(gòu)造 Calibration 數(shù)據(jù);

③構(gòu)造 config.yaml;

④調(diào)用 hb_mapper 執(zhí)行 onnx 轉(zhuǎn) bpu bin。

在WeNet開源的代碼中,我們用人民群眾喜聞樂見的python把這四個步驟 “粘” 到了一起,使用如下命令,就可走完全流程。

python3 $WENET_DIR/tools/onnx2horizonbin.py \ --config ./model_subsample8_parameter110M/train.yaml \ --checkpoint ./model_subsample8_parameter110M/final.pt \ --output_dir ./model_subsample8_parameter110M/sample50_chunk8_leftchunk16 \ --chunk_size 8 \ --num_decoding_left_chunks 16 \ --max_samples 50 \ --dict ./model_subsample8_parameter110M/units.txt \ --cali_datalist ./model_subsample8_parameter110M/calibration_data/data.list

其中:

config(描述了模型配置,幾層layer等);

checkpoint(pytorch 浮點模型);

output_dir(.bin 文件輸出目錄);

chunk_size(跟識別有關(guān)的解碼參數(shù));

num_decoding_left_chunks(跟識別有關(guān)的解碼參數(shù));

max_samples(使用多少句數(shù)據(jù)制作calibration data);

dict(字典);

cali_datalist(描述了標定數(shù)據(jù)的位置)。

綜上,我們對如下這四個步驟實現(xiàn)了完完全全的 python化封裝 和 一體化串聯(lián) ,真正實現(xiàn)了一句命令(python3 $WENET_DIR/tools/onnx2horizonbin.py ...)走完全部轉(zhuǎn)換流程。

Demo展示

硬件配置:

4.png

模型配置:

5.png

解碼速度對比(單核單線程,量化后的模型):

6.png

本文轉(zhuǎn)自地平線開發(fā)者社區(qū)
原作者:xcsong

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5200

    文章

    20457

    瀏覽量

    334293
  • 語音識別
    +關(guān)注

    關(guān)注

    39

    文章

    1812

    瀏覽量

    116067
  • 人工智能
    +關(guān)注

    關(guān)注

    1817

    文章

    50105

    瀏覽量

    265531
  • Transformer
    +關(guān)注

    關(guān)注

    0

    文章

    156

    瀏覽量

    6939
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    分享一款高端離線語音識別IC AT680系列

    離線語音識別IC的本地處理帶來極速響應(yīng),識別指令可在毫秒級完成,用戶體驗流暢無延遲。除此之外,離線語音
    的頭像 發(fā)表于 12-30 16:19 ?263次閱讀

    低成本AI邊緣計算盒子DIY:基于迅為RK3568和開源模型,輕松玩轉(zhuǎn)智能識別

    低成本AI邊緣計算盒子DIY:基于迅為RK3568和開源模型,輕松玩轉(zhuǎn)智能識別
    的頭像 發(fā)表于 11-12 13:42 ?1783次閱讀
    低成本AI邊緣計算盒子<b class='flag-5'>DIY</b>:基于迅為RK3568和開源模型,輕松<b class='flag-5'>玩轉(zhuǎn)</b>智能<b class='flag-5'>識別</b>

    什么是離線語音識別芯片(離線語音識別芯片有哪些優(yōu)點)

    離線語音識別芯片,是一種集成了語音信號采集、前端處理和本地識別功能的專用集成電路,無須聯(lián)網(wǎng)也可以進行語音
    的頭像 發(fā)表于 10-31 15:27 ?521次閱讀

    奇瑞風云X3系列雙車上市

    8月16日,奇瑞汽車旗下風云品牌全新方盒子產(chǎn)品序列——風云X3與風云X3 PLUS正式宣告上市。風云X3系列基于iCAR 03系列煥新升級而來,造型設(shè)計、動力性能、智能科技、功能配置
    的頭像 發(fā)表于 08-19 11:48 ?1123次閱讀

    AT6811-超低功耗離線智能語音識別 SoC

    AT6811芯片以0.8mA超低功耗實現(xiàn)離線語音交互,嘈雜環(huán)境中仍保持92%識別率,已賦能空調(diào)、電動工具、助聽器等設(shè)備,讓萬物擁有自然對話能力。
    的頭像 發(fā)表于 08-07 17:44 ?1452次閱讀

    哪些離線語音芯片適用于家電設(shè)備

    ?哪些離線語音芯片適用于家電設(shè)備?選擇適用于家電設(shè)備的離線語音芯片時,需綜合考量家電的使用環(huán)境、功能需求、成本預(yù)算等多方面因素。以下為您推薦幾款性能出色的
    的頭像 發(fā)表于 08-06 17:27 ?870次閱讀
    哪些<b class='flag-5'>離線</b><b class='flag-5'>語音</b>芯片適用于家電設(shè)備

    樹莓5開啟YOLO姿態(tài)估計識別之旅!

    大家好,接下來會為大家開一個樹莓5和YOLO的連載文章。內(nèi)容包括四個部分:樹莓5使用YOLO進行物體和動物識別-入門指南
    的頭像 發(fā)表于 07-18 15:31 ?2510次閱讀
    <b class='flag-5'>在</b>樹莓<b class='flag-5'>派</b>5<b class='flag-5'>上</b>開啟YOLO姿態(tài)估計<b class='flag-5'>識別</b>之旅!

    樹莓5使用YOLO進行物體和動物識別-入門指南

    大家好,接下來會為大家開一個樹莓5和YOLO的專題。內(nèi)容包括四個部分:樹莓5使用YOLO進行物體和動物識別-入門指南
    的頭像 發(fā)表于 07-17 17:16 ?2075次閱讀
    <b class='flag-5'>在</b>樹莓<b class='flag-5'>派</b>5<b class='flag-5'>上</b>使用YOLO進行物體和動物<b class='flag-5'>識別</b>-入門指南

    AT6802-超低功耗離線智能語音識別芯片

    AT6802超低功耗離線語音識別芯片以1mA工作電流實現(xiàn)98%識別率,支持方言和連續(xù)指令,數(shù)據(jù)本地加密處理,為智能家居、工業(yè)控制帶來安全流暢的交互革命
    的頭像 發(fā)表于 07-03 19:04 ?1615次閱讀

    語音識別芯片選型有哪些技術(shù)參數(shù)要注意

    語音識別芯片的使用場景越來越多涉及的范圍也越來越廣!那么語音芯片的選型就很重要了,選型不對直接影響產(chǎn)品的使用體驗,下面小編從不同的維度來給大家介紹語音
    的頭像 發(fā)表于 06-23 17:31 ?886次閱讀
    <b class='flag-5'>語音</b><b class='flag-5'>識別</b>芯片選型有哪些技術(shù)<b class='flag-5'>參數(shù)</b>要注意

    【重磅】企業(yè)版華秋DFM&amp;華秋CAM正式發(fā)布!離線審查+定制開發(fā)+專屬護航

    ,打造的輕量級國產(chǎn)CAM利器 1、操作極簡 ◆ 自動識別層名/層序,智能調(diào)整鉆孔格式 2、功能精專 ◆ 支持Gerber/ODB++查看/分析/編輯,裸板參數(shù)(線路/鉆孔/阻焊/絲印)分析 3
    發(fā)表于 06-11 16:02

    芯資訊|廣州唯創(chuàng)電子WTK6900P語音識別芯片:離線語音交互的革新者

    智能設(shè)備全面普及的浪潮中,語音交互技術(shù)正逐步從“云端依賴”向“本地化高效處理”演進。廣州唯創(chuàng)電子推出的WTK6900P語音識別芯片,憑借其本地化
    的頭像 發(fā)表于 05-22 09:22 ?820次閱讀
    芯資訊|廣州唯創(chuàng)電子WTK6900P<b class='flag-5'>語音</b><b class='flag-5'>識別</b>芯片:<b class='flag-5'>離線</b><b class='flag-5'>語音</b>交互的革新者

    樹莓派上設(shè)置 DeepSeek R1:2025 年離線人工智能的未來

    概述《樹莓派上設(shè)置DeepSeekR1:2025年離線人工智能的未來》是一份前瞻性技術(shù)指南,聚焦中國AI初創(chuàng)公司DeepSeek于2023年底推出的開源模型DeepSeekR1。該模型旨在通過提供
    的頭像 發(fā)表于 03-25 09:20 ?1350次閱讀
    <b class='flag-5'>在</b>樹莓<b class='flag-5'>派上</b>設(shè)置 DeepSeek R1:2025 年<b class='flag-5'>離線</b>人工智能的未來

    人臉識別指南:如何在樹莓派上安裝和設(shè)置 Dlib

    學習如何在樹莓派上安裝Dlib并配置人臉識別功能,為您的AI項目奠定基礎(chǔ)。樹莓派上安裝Dlib的詳細步驟要為樹莓安裝Dlib并確保人臉
    的頭像 發(fā)表于 03-24 17:31 ?1553次閱讀
    人臉<b class='flag-5'>識別</b>指南:如何在樹莓<b class='flag-5'>派上</b>安裝和設(shè)置 Dlib

    NRK3301離線語音識別模塊七彩燈的應(yīng)用方案

    的NRK3301語音識別模塊。廣州九芯電子推出的這款芯片,如何讓七彩燈擺脫“手動時代”?本文將拆解技術(shù)真相! ? NRK3301是廣州九芯電子專為智能家居場景打造的離線語音
    的頭像 發(fā)表于 03-10 14:04 ?1109次閱讀
    NRK3301<b class='flag-5'>離線</b><b class='flag-5'>語音</b><b class='flag-5'>識別</b>模塊<b class='flag-5'>在</b>七彩燈<b class='flag-5'>上</b>的應(yīng)用方案