① 嵌入式系統自學
嵌入式系統軟體工程 方法實用技術及應用,免費下載
鏈接:https://pan..com/s/10No3IypKyLg01bV4T9b22w
《嵌入式系統軟體工程:基礎知識、方法和應用》系統地闡述嵌入式系統軟體工程所涉及的過程、方法、內容,以及在典型工業領域中的應用。全書內容分為兩大部分:第一部分介紹嵌入式系統軟體工程方法論,主要包括嵌入式軟體的開發過程(需求工程、軟體和系統體系結構、編程和測試等內容),開發和測試中所採用的標准,與安全性相關的軟體系統的准入,以及嵌入式軟體所涉及的法律問題:第二部分介紹嵌入式系統軟體在汽車領域、軌道交通領域、航天領域、醫療器械、工業自動化、通信系統中的應用,在每個應用領域重點介紹具體應用領域的一些特定需求、技術和限制條件,以及它們對於嵌入式系統軟體開發過程的影響。
② 文字轉語音晶元(單片機用)
45Microcontrollers & Embedded Systems2002.12
新器件新技術 NEW PRODUCT & TECH
用EP7211實現傳呼信息實時語音合成和播放
■ 鄭州解放軍信息工程大學 胡澤明 王鵬
摘 要
關鍵詞
闡述在一款集成傳呼功能的二合一PDA系統中,使用嵌入式處理器EP7211實現個人傳呼信
息的實時語音合成和播放的功能,主要包括字元語音庫的建立,字元語音合成演算法和Codec
語音中斷服務常式等3部分.
PDA G.729 語音庫 語音合成
引 言
PDA(Personal Digital Assitant,個人數字助理)
是近年來繼尋呼機和行動電話之後,在國內市場迅
速崛起的攜帶型電子產品.就其擴展意義來講,它
能夠集成移動計算,電話和網路等多種功能.根據
不同的應用需求,它可以管理個人信息,提供名片
存儲和日程安排,也可以接收各種尋呼信息(如股
市,天氣預報等).如果是集成通信模塊,還可以
作為行動電話使用,進行無線網路互聯.廣義的
PDA包括簡單的電子記事本,電子辭典和功能強大
的掌上電腦,它們的主要區別表現在操作系統,存
儲能力,運算速度和數據交換能力等方面.
目前國內傳統PDA產品經過幾年的高速發展
後,市場基本飽和,銷售額出現負增長.不過由於
PDA產品的靈活性,有針對性的行業應用作為一個
新亮點,開始為人們所關注.經過行業應用改造後
的PDA產品,已經在國內市場大顯身手.文曲星
展現超強的語言翻譯能力,比較適合於大學生和語
言翻譯者使用;藍火系列能實時接收股市信息和
專家點評,適合工薪階層的炒股者.國家信息產業
部已經鼓勵PDA產品在交通,警務,保險等領域
的行業應用和推廣.
分析市場需求,我們研發了集成傳呼功能的,
專門面向鐵路交通行業應用的鐵路交通信息系統
PDA.本PDA系統除了具備傳統PDA的個人名片
管理和辭典檢索等功能外,同時提供交通行業應用
的民航航班查詢,鐵路列車時刻表查詢等功能.
本PDA的尋呼系統實現如下功能:能夠通過尋
呼對列車時刻表,列車晚點信息,列車剩餘票額,
股道信息等行業數據進行動態更新.作為另一個特
色,當接收到個人尋呼時,能夠將尋呼內容實時地
轉換成語音並播放.
下面重點介紹本PDA系統中使用嵌入式處理
器EP7211實現個人尋呼內容的實時語音轉換和播
放.該功能的實現包含前後相關的3個部分:字元
語音庫的建立,字元的語音合成演算法和Codec語音
中斷服務常式.
1實現條件和要求
PDA屬於嵌入式應用系統,其同一般PC機有
很大差別.硬體方面,嵌入式處理器基於RISC體
系結構,一般工作頻率在幾十MHz,甚至更低;系
統內存容量一般在幾百KB~幾MB之間;一般使用
容量小的ROM或者Flash作為硬碟來存儲可執行程
序和數據.軟體方面,PDA系統一般有專用的嵌入
式操作系統和軟體開發調試移植環境.
個人傳呼信息的特點是單條傳呼信息長度變化
較大,20~50個字元不等.最為常見的是"請回電
話***";傳呼信息涉及到的字元數量較大,字元
語音合成時運算量大,單字元合成後語音數據佔用
的存儲空間多;需要事先建立字元語音庫等.
由於具體硬體環境的限制,傳呼信息的特點和
語音合成的要求,該功能能夠實現的前提有:語音
庫佔用的空間小;字元合成時速度要快;採用前台
進行字元語音合成時,以後台中斷方式進行合成語
音的播放來保證其實時性和連續性.
2具體實現
下面分別介紹字元語音庫的建立,字元語音合成
演算法,本PDA系統的框架結構和語音中斷服務常式.
2.1建立字元語音庫
我們選用G.729語音壓縮編碼標准來建立語音
庫.該標准採用的演算法是共軛結構的代數碼激勵線
462002.12
新器件新技術 NEW PRODUCT & TECH
性預測(CS-ACELP),是基於CELP(碼激勵線性預
測)編碼模型的演算法.這種編碼規范的嚴格性使性
能達到或超過了32 Kbps的G.726 ADPCM編碼,具
有很高的語音質量;同時,它是在語音信號8 KHz
取樣的基礎上得到16 bit線性PCM後進行編碼的,
壓縮後的數據速率僅為8 Kbps,具有相當於8:1的
高壓縮率.其演算法延遲少於16 ms.由於G.729編解
碼器能夠實現很高的語音質量和很低的演算法延時,
因此被廣泛地應用.
字元語音庫是一個單字發音語音數據的集合,
各段數據之間相互獨立,不具有相關性.語音庫包
含了國標一,二級字型檔中的所有6763個漢字,10個
阿拉伯數字和26個英文字元的標准普通話語音數
據.每個漢字或字元發音時長為0.65 s,採用8 KHz
抽樣頻率,使用了G.729A語音編碼演算法對上述的語
音數據進行壓縮,壓縮後的數據速率為8 Kbps,相
當於具有8:1的高壓縮率.在漢字中,同音字佔了
相當大的比例,而在語音合成中對於同音字的處理
是沒有區別的,故近7000個漢字,我們只存儲1123
個不同的發音.經過同音字處理和採用G.729A標准
壓縮字元語音數據,則最終建立的語音庫文件大小
為729 950位元組,完全符合本PDA系統的數據存儲
要求;否則,語音庫數據量太大,本PDA系統不
能接受!
建立一個語音壓縮資料庫的具體步驟如下:
◇ 將數字和常用漢字的標准發音獨立地錄入到
數據文件中,作為基礎數據.使用cooledit2000軟
件完成語音的錄入.
◇ 對於輸入數據,按照每幀10 ms(80個樣點)
的長度,將A_law語音通過簡單換算變成16 bit PCM
數據,作為編碼演算法的輸入.
◇ 按照G.729A演算法標准,對數據進行編碼.
◇ 將編碼後的數據轉換為二進制比特流,寫
入語音庫文件中.壓縮後數據速率為8 Kbps,具有
相當於8:1的高壓縮率.
用C語言實現這一過程的程序流程如圖1所示.
字元語音庫的建立是在Windows平台及Visual
C++編程環境下實現的,最終壓縮處理後數據量的
大小為729 950位元組,每個字元語音數據的大小是
650位元組.
2.2語音合成
當收到個人傳呼信息時,語音合成程序首先從
指定位置獲取傳呼信息數據,然後在語音庫中查找
每個漢字,阿拉伯數字或者英文字元的發音,重組
一個數據文件.解碼程序對該文件進行解碼並且輸
出原始語音.語音合成流程如圖2所示.
語音合成過程首先是當前字元在語音庫的定
位.對於10個阿拉伯數字和26個英文字元,將其
放在語音庫開頭.這些字元的查找比較方便.漢字
是2位元組存儲,我們依據其區位碼來作為語音庫中
的定位索引.字元語音庫檢索結束後的語音壓縮數
頭文件,全局變數,函數原型的說明
輸入語音文件及壓縮後的碼文件名
初始化編碼器,包括濾波器狀態的初始
化及語音,激勵等緩沖區的初始化
語音文件是否結束
讀1幀語音(80點)(A_Law)
轉換成16bit線性PCM
將參數碼字轉成串列碼
流,再轉成碼字codeword
寫文件
結束
編碼主函數Coder_ld8a()
Y
N
圖1 字元語音庫的建立流程圖
查找語音庫,將尋呼文字信
息替換為壓縮語音文件
解碼器初始化
碼文件是否結束
讀取1幀數據,並
轉換成二進制碼流
解碼主函數
輸出數據變為A_LAW信號
語音播放
結束
Y
N
圖2 語音合成流程圖
47Microcontrollers & Embedded Systems2002.12
新器件新技術 NEW PRODUCT & TECH
據作為該字元解碼過程的輸入.
數據解碼過程可以分為參數解碼和重構信號後
處理2部分.首先要從輸入的數據中提取參數符
號,對這些符號解碼之後,可以獲得相應於10 ms
話音幀的編碼器參數.這些參數包括線性預測系
數,自適應碼本矢量,固定碼本矢量以及它們的增
益.解碼之後的參數用來計算重建語音信號.得到
重構語音信號只有通過後處理過程來對該信號進行
放大,包括後向濾波,高通濾波以及按比例因子擴
大,最後得到原始的語音數據.
字元解碼器原理如圖3所示.
2.3PDA系統的體系結構
PDA系統的硬體體系結構如圖4所示.
PDA系統中嵌入式處理器EP7211進行數據處
理,傳呼解碼晶元接收傳呼信息並進行解碼, LCD
提供數據輸出顯示,觸摸屏提供用戶輸入介面,
Flash用來存儲應用程序和數據,SRAM為程序運行
提供內存空間,電源電路為嵌入式處理器和外圍設
備提供所需要的工作電壓.
嵌入式處理器EP7211是Cirrus Logic公司專門為
低成本,超低功耗的嵌入式應用設計的,包含
ARM7TDMI處理器內核和豐富的外圍介面.外圍接
口有CODEC音頻介面,SPI串列A/D介面,單色LCD
介面,DRAM介面,紅外介面,2個PWM介面,實
時時鍾RTC以及電源檢測介面.EP7211的內核電路
工作在2.5 V,而外圍電路工作在3.3 V;可根據具
體情況對內核的
時鍾進行動態編
程式控制制,可工作
在18,36,49和74
MHz.另外EP7211
還有3種基本供
電模式:正常操
作(operating),
空閑(idle)和等
待(standby).在
等待模式,主時
鍾被關斷,整個
CPU及相關外圍
(除中斷和RTC)
也關斷,但可通
過中斷或按鈕來
喚醒.
系統軟體開發平台採用了我們自主開發研製
的,專門面向嵌入式應用系統開發的XGW平台.
XGW開發平台採用消息驅動機制,是C語言開發.
它功能強大,模塊化設計,擴展性強,產品升級容
易,總體框架如圖5所示.
圖5全面反應了XGW開發平台的體系結構,包
括事件消息驅動機制,內存管理,字元和圖形顯示
輸出,圖形組件庫等.圖形組件庫中的編輯框,列
表框,按鈕等為用戶應用程序開發提供了系統應用
編程介面API.不過,XGW平台對於系統硬體的中
斷響應沒有提供統一的入口和出口,需要開發人員
單獨處理.XGW開發平台的消息分為滑鼠消息,鍵
盤消息和定時器消息等3類.
2.4語音中斷服務常式
嵌入式處理器EP7211本身提供的外設語音錄放
Codec(coder/decoder)晶元可以實現語音的錄入和
適應碼
向量解碼
增益解碼
固定碼
向量解碼
結構激勵
MA碼增
益預測
11
,GBGA
22
,GBGA
)(nv
間隔延時
p
g^
^
c
g^
11
,CS
22
,CS
)(zP
)(nc
編碼序號
LP綜合
濾波器
)(nu
後濾波器
)(^ns
高通上標定
)(nfs
LSP解碼內插值)(^zALSF
LSP序號
3210
,,,LLLL
每幀
每子幀
210
,,PPP
圖3 字元解碼原理框圖
天線
LCD
觸摸屏
時鍾,復
位,喚醒射頻輸入
FlashSRAM電源管理
串列口
紅外口
傳呼解
碼晶元嵌入式
處理器
EP7211
收音設備
語音錄放電路
圖4 硬體結構
482002.12
新器件新技術 NEW PRODUCT & TECH
播放功能.該模塊提供2個獨立的16位元組長的數據
發送和接收緩沖區(FIFO),其為全雙工模式,數
據收發速率是64 kbps.晶元自身提供工作時鍾,定
時脈沖以及數據的串/並和並/串轉換功能.編程
人員通過設置EP7211相應的控制寄存器使能這些項
功能,則每當數據收發緩沖區半慢或者半空時(8
位元組),晶元自身就會產生一次中斷信號供外部處
理.理論計算晶元中斷速率是1 ms/次.
語音播放中斷服務常式主要完成的工作是,當
產生語音中斷時,仍然有數據需要播放,則向語音
數據發送緩沖區FIFO中寫入指定數據,剩下的工
作由Codec晶元本身來完成.中斷服務常式ISR的
偽代碼如下(因為具體實現代碼沒有通用性,故此
處用偽碼描述):
void IRQ_Codec_Handler(void)
{
while(檢測系統狀態寄存器,發現語音晶元數據發送緩
沖區FIFO非滿)
{
if(已經播放過的語音數據長度 = 給定的需要播
放的語音數據長度) //結束
{
禁止數據發送緩沖區中斷;
復位各相關的全局變數;
程序返回;
}
}
else
{
向語音晶元發送數據緩沖區FIFO寫入默認數據
系統調用
通用開
發控制項字元輸出圖形輸出
內存管理用戶自
定義控制項
事件消息驅動
硬體中斷
執行
ISR
中斷返回
硬體中斷
執行
ISR
中斷返回
用戶級應用程序
圖5 XGW平台的軟體體系結構
0XFF;
}
}
}3試驗結果和分析
由於在設計階段充分考慮過語音合成演算法的
大運算量和系統的實時性要求,故我們在具體實
現的時候也採取了一些措施,比較突出的有:用
ARM匯編語言來實現關鍵性的函數代碼;語音合
成時提高處理器EP7211的工作頻率(處理器正常
工作頻率是18 MHz);對於一些常用的三角函數計
算,採用查表的方式等來加快程序執行速度.在
PDA樣機測試中,單字元合成時間在650 ms左右,
基本上能夠滿足實際應用需求.數據語音庫經過
處理之後,佔用了729 560位元組也能夠滿足本PDA
系統的存儲要求.
當PDA系統收到1條個人傳呼信息時,在語音
庫的支持下,立刻啟動語音合成演算法,逐個進行字
符語音合成.當第1個字元語音合成結束後,立刻
啟動語音中斷服務常式進行語音播放.這樣收到的
個人傳呼信息,在前台逐個字元解碼時,其後台語
音播放也在進行.根據實際測試參數,基本上滿足
了系統的實時性要求.
從一定角度看,單字元650 ms的語音合成時間
基本能夠滿足實際應用需要,但還是希望能夠進一
步減小這個值.這由於我們對ARM處理器的使用
還處在研究階段.ARM本身提供了16位的Thumb
指令集和32位的ARM指令集,而且兩者在某些方
面表現出較大差別.一般來講,Thumb代碼長度是
ARM代碼長度的65%,而執行效率要比後者高出
60%.但在某些方面,32位的ARM指令集也會表
現出其優於16位Thumb指令集的強大功能;同時
該處理器系統支持ARM指令集和Thumb指令集混
合編程模式.隨著對二者差別和各自優勢的深入理
解,結合本系統的硬體體系結構,採用有效的指令
集混合編程模式將會使程序執行效率進一步提高,
從而使實時性得到進一步加強.
參考文獻
1Cirrus Logic公司. EP7211數據手冊
2馬忠梅. ARM嵌入式處理器結構與應用基
礎. 北京:北京航空航天大學出版社,2002
3Gibson Jerry D,等. 多媒體數字壓縮原理與
標准. 李煜暉等譯. 北京:電子工業出版社,2000
③ N-Shot Learning:用最少的數據訓練最多的模型
作 者 | Heet Sankesara
翻 譯 | 天字一號(鄭州大學)、鄴調(江蘇 科技 大學)
審 校 | 唐里、Pita
如果將AI比作電力的話,那麼數據就是創造電力的煤。
不幸的是,正如我們看到可用煤是消耗品一樣,許多 AI 應用程序可供訪問的數據很少或根本就沒有數據。
新技術已經彌補了物質資源的不足;同樣需要新的技術來允許在數據很少時,保證程序的正常運行。這是正在成為一個非常受歡迎的領域,核心問題:N-shot Learning
1. N-Shot Learning
你可能會問,什麼是shot?好問題,shot只用一個樣本來訓練,在N-shot學習中,我們有N個訓練的樣本。術語「小樣本學習」中的「小」通常在0-5之間,也就是說,訓練一個沒有樣本的模型被稱為 zero-shot ,一個樣本就是 one-shot 學習,以此類推。
1-1 為什麼需要N-Shot?
我們在 ImageNet 中的分類錯誤率已經小於 4% 了,為什麼我們需要這個?
首先,ImageNet 的數據集包含了許多用於機器學習的示例,但在醫學影像、葯物發現和許多其他 AI 可能至關重要的領域中並不總是如此。典型的深度學習架構依賴於大量數據訓練才能獲得足夠可靠的結果。例如,ImageNet 需要對數百張熱狗圖像進行訓練,然後才能判斷一幅新圖像准確判斷是否為熱狗。一些數據集,就像7月4日慶祝活動後的冰箱缺乏熱狗一樣,是非常缺乏圖像的。
機器學習有許多案例數據是都非常稀缺,這就是N-Shot技術的用武之地。我們需要訓練一個包含數百萬甚至數十億個參數(全部隨機初始化)的深度學習模型,但可用於訓練的圖像不超過 5 個圖像。簡單地說,我們的模型必須使用非常有限的熱狗圖像進行訓練。
要處理像這個這樣復雜的問題,我們首先需要清楚N-Shot的定義。
對我來說,最有趣的子領域是Zero-shot learning,該領域的目標是不需要一張訓練圖像,就能夠對未知類別進行分類。
沒有任何數據可以利用的話怎麼進行訓練和學習呢?
想一下這種情況,你能對一個沒有見過的物體進行分類嗎?
夜空中的仙後座(圖源:https:// www .star-registration .com /constellation/cassiopeia)
是的,如果你對這個物體的外表、屬性和功能有充足的信息的話,你是可以實現的。想一想,當你還是一個孩子的時候,是怎麼理解這個世界的。在了解了火星的顏色和晚上的位置後,你可以在夜空中找到火星。或者你可以通過了解仙後座在天空中"基本上是一個畸形的'W'"這個信息中識別仙後座。
根據今年NLP的趨勢,Zero-shot learning 將變得更加有效(https://blog.floydhub .com /ten-trends-in-deep-learning-nlp/#9-zero-shot-learning-will-become-more-effective)。
計算機利用圖像的元數據執行相同的任務。元數據只不過是與圖像關聯的功能。以下是該領域的幾篇論文,這些論文取得了優異的成績。
在one-shot learning中,我們每個類別只有一個示例。現在的任務是使用一個影像進行訓練,最終完成將測試影像劃分為各個類。為了實現這一目標,目前已經出現了很多不同的架構,例如Siamese Neural Networks(https:// www .cs.cmu.e/~rsalakhu/papers/oneshot1.pdf),它帶來了重大進步,並達到了卓越的結果。然後緊接著是matching networks(https://ar xi v.org/pdf/1606.04080.pdf),這也幫助我們在這一領域實現了巨大的飛躍。
小樣本學習只是one-shot learning 的靈活應用。在小樣本學習中,我們有多個訓練示例(通常為兩到五個圖像,盡管上述one-shot learning中的大多數模型也可用於小樣本學習)。
在2019年計算機視覺和模式識別會議上,介紹了 Meta-Transfer Learning for Few-Shot Learning(https://ar xi v.org/pdf/ 181 2.02391v3.pdf)。這一模式為今後的研究開創了先例;它給出了最先進的結果,並為更復雜的元遷移學習方法鋪平了道路。
這些元學習和強化學習演算法中有許多都是與典型的深度學習演算法相結合,並產生了顯著的結果。原型網路是最流行的深度學習演算法之一,並經常用於小樣本學習 。
在本文中,我們將使用原型網路完成小樣本學習,並了解其工作原理。
2. 原型網路背後的思想
上圖為原型網路函數的示意圖。編碼器將圖像進行編碼映射到嵌入空間(黑圈)中的矢量中,支持圖像用於定義原型(星形)。利用原型和編碼查詢圖像之間的距離進行分類。圖源:https:// www .semanticscholar.org/paper/Gaussian-Prototypical-Networks-for-Few-Shot-on-Fort//figure/1
與典型的深度學習體系結構不同,原型網路不直接對圖像進行分類,而是通過在度量空間(https://en.wikipedia.org/wiki/Metric_space)中尋找圖像之間的映射關系。
對於任何需要復習數學的人來說,度量空間都涉及"距離"的概念。它沒有一個可區分的"起源"點。相反,在度量空間中,我們只計算一個點與另一個點的距離。因此,這里缺少了矢量空間中加法和標量乘法(因為與矢量不同,點僅表示坐標,添加兩個坐標或縮放坐標毫無意義!)請查看此鏈接,詳細了解矢量空間和度量空間之間的差異:https://math.stackexchange .com /questions/1 149 40/what-is-the-difference-between-metric-spaces-and-vector-spaces。
現在,我們已經學習了這一背景,我們可以開始了解原型網路是怎樣不直接對圖像進行分類,而是通過在度量空間中尋找圖像之間的映射關系。如上圖所示,同一類的圖像經過編碼器的映射之後,彼此之間的距離非常接近,而不同類的圖像之間具有較長的距離。這意味著,每當給出新示例時,網路只需檢查與新示例的圖像最近的集合,並將該示例圖像分到其相應的類。原型網路中將圖像映射到度量空間的基礎模型可以被稱為"Image2Vector"模型,這是一種基於卷積神經網路 (CNN) 的體系結構。
現在,對於那些對 CNN 不了解的人,您可以在此處閱讀更多內容:
簡單地說,他們的目標是訓練分類器。然後,該分類器可以對在訓練期間不可用的新類進行概括,並且只需要每個新類的少量示例。因此,訓練集包含一組類的圖像,而我們的測試集包含另一組類的圖像,這與前一組完全不相關。在該模型中,示例被隨機分為支持集和查詢集。
很少有鏡頭原型ck被計算為每個類的嵌入式支持示例的平均值。編碼器映射新圖像(x)並將其分類到最接近的類,如上圖中的c2(圖源:https://ar xi v.org/pdf/ 1703 .05 175 .pdf)。
在少鏡頭學習的情況下,訓練迭代被稱為一個片段。一個小插曲不過是我們訓練網路一次,計算損失並反向傳播錯誤的一個步驟。在每一集中,我們從訓練集中隨機選擇NC類。對於每一類,我們隨機抽取ns圖像。這些圖像屬於支持集,學習模型稱為ns-shot模型。另一個隨機采樣的nq圖像屬於查詢集。這里nc、ns和nq只是模型中的超參數,其中nc是每次迭代的類數,ns是每個類的支持示例數,nq是每個類的查詢示例數。
之後,我們通過「image2vector」模型從支持集圖像中檢索d維點。該模型利用圖像在度量空間中的對應點對圖像進行編碼。對於每個類,我們現在有多個點,但是我們需要將它們表示為每個類的一個點。因此,我們計算每個類的幾何中心,即點的平均值。之後,我們還需要對查詢圖像進行分類。
為此,我們首先需要將查詢集中的每個圖像編碼為一個點。然後,計算每個質心到每個查詢點的距離。最後,預測每個查詢圖像位於最靠近它的類中。一般來說,模型就是這樣工作的。
但現在的問題是,這個「image2vector」模型的架構是什麼?
論文匯總 Image2Vector 向量的結構
對於所有實際應用中,一般都會使用 4-5 CNN 模塊。如上圖所示,每個模塊由一個 CNN 層組成,然後是批處理規范化,然後是 ReLu 激活函數,最後通向最大池層。在所有模塊之後,剩餘的輸出將被展平並返回。這是本文中使用的網路結構(https://ar xi v.org/pdf/ 1703 .05 175 v2.pdf),您可以使用任何任何你喜歡的體系結構。有必要知道,雖然我們稱之為"Image2Vector"模型,但它實際上將圖像轉換為度量空間中的 64 維的點。要更好地了解差異,請查看 math stack exchange(https://math.stackexchange .com /questions/ 64 5672/what-is-the-difference-between-a-point-and-a-vector)。
負log概率的原理,圖源:https://ljvmiranda921.github.io/notebook/2017/08/13/softmax-and-the-negative-log-likelihood/#nll
現在,已經知道了模型是如何工作的,您可能更想知道我們將如何計算損失函數。我們需要一個足夠強大的損失函數,以便我們的模型能夠快速高效地學習。原型網路使用log-softmax損失,這只不過是對 softmax 損失取了對數。當模型無法預測正確的類時,log-softmax 的效果會嚴重懲罰模型,而這正是我們需要的。要了解有關損失函數的更多情況,請訪問此處。這里是關於 softmax 和 log-softmax 的很好的討論。
Omniglot數據集中的部分示例(圖源:https://github .com /brendenlake/omniglot)
該網路在 Omniglot 數據集(https://github .com /brendenlake/omniglot)上進行了訓練。Omniglot 數據集是專門為開發更類似於人類學習的演算法而設計。它包含 50個不同的字母表,共計1623 個不同的手寫字元。為了增加類的數量,所有圖像分別旋轉 90、 180 和 270 度,每次旋轉後的圖像都當做一個新類。因此,類的總數達到 了 64 92(1,623 + 4)類別。我們將 4200 個類別的圖像作為訓練數據,其餘部分則用於測試。對於每個集合,我們根據 64 個隨機選擇的類中的每個示例對模型進行了訓練。我們訓練了模型 1 小時,獲得了約 88% 的准確率。官方文件聲稱,經過幾個小時的訓練和調整一些參數,准確率達到99.7%。
是時候親自動手實踐了!
您可以通過訪問以下鏈接輕松運行代碼:
代碼地址: https://github .com /Hsankesara/Prototypical-Networks
運行地址: https://floydhub .com /run?template=https://github .com /Hsankesara/Prototypical-Networks
讓我們深入學習一下代碼!(向左←滑動可查看完整代碼)
以上的代碼是 Image2Vector CNN結構的一個實現。它的輸入圖像的維度為28*28*3,返回特徵向量的長度為 64 。
上面的代碼片段是原型網中單個結構的實現。如果你有任何疑問,只需在評論中詢問或在這里創建一個問題,非常歡迎您的參與和評論。
網路概述。圖源:https://youtu.be/wcKL05DomBU
代碼的結構與解釋演算法的格式相同。我們為原型網路函數提供以下輸入:輸入圖像數據、輸入標簽、每次迭代的類數(即 Nc )、每個類的支持示例數(即 Ns )和每個類的查詢示例數(即 Nq )。函數返回 Queryx ,它是從每個查詢點到每個平均點的距離矩陣, Queryy 是包含與 Queryx 對應的標簽的向量。 Queryy 存儲 Queryx 的圖像實際所屬的類。在上面的圖像中,我們可以看到,使用3個類,即 Nc =3,並且對於每個類,總共有5個示例用於訓練,即 Ns =5。上面的s表示包含這15個( Ns * Nc )圖像的支持集, X 表示查詢集。注意,支持集和查詢集都通過 f ,它只不過是我們的「image2vector」函數。它在度量空間中映射所有圖像。讓我們一步一步地把整個過程分解。
首先,我們從輸入數據中隨機選擇 Nc 類。對於每個類,我們使用random_sample_cls函數從圖像中隨機選擇一個支持集和一個查詢集。在上圖中,s是支持集,x是查詢集。現在我們選擇了類( C1 、C2 和 C3 ),我們通過「image2vector」模型傳遞所有支持集示例,並使用get_centroid函數計算每個類的質心。在附近的圖像中也可以觀察到這一點。每個質心代表一個類,將用於對查詢進行分類。
網路中的質心計算。圖源:https://youtu.be/wcKL05DomBU
在計算每個類的質心之後,我們現在必須預測其中一個類的查詢圖像。為此,我們需要與每個查詢對應的實際標簽,這些標簽是使用get_query_y函數獲得的。 Queryy 是分類數據,該函數將該分類文本數據轉換為一個熱向量,該熱向量在列點對應的圖像實際所屬的行標簽中僅為「1」,在列中為「0」。
之後,我們需要對應於每個 Queryx 圖像的點來對其進行分類。我們使用「image2vector」模型得到這些點,現在我們需要對它們進行分類。為此,我們計算 Queryx 中每個點到每個類中心的距離。這給出了一個矩陣,其中索引 ij 表示與第 i 個查詢圖像對應的點到第 j 類中心的距離。我們使用get_query_x函數構造矩陣並將矩陣保存在 Queryx 變數中。在附近的圖像中也可以看到同樣的情況。對於查詢集中的每個示例,將計算它與 C1、C2 和 C3 之間的距離。在這種情況下, X 最接近 C2 ,因此我們可以說 X 被預測屬於 C2 類。
以編程方式,我們可以使用一個簡單的ARMmin函數來做同樣的事情,即找出圖像被預測的類。然後使用預測類和實際類計算損失並反向傳播錯誤。
如果你想使用經過訓練的模型,或者只需要重新訓練自己,這里是我的實現。您可以使用它作為API,並使用幾行代碼來訓練模型。你可以在這里找到這個網路。
3. 資源列表
這里有些資源可以幫你更全面的了解本文內容:
4. 局限性
盡管原型網路的結果不錯,但它們仍然有局限性。首先是缺乏泛化,它在Omniglot數據集上表現很好,因為其中的所有圖像都是一個字元的圖像,因此共享一些相似的特徵。然而,如果我們試圖用這個模型來分類不同品種的貓,它不會給我們准確的結果。貓和字元圖像幾乎沒有共同的特徵,可以用來將圖像映射到相應度量空間的共同特徵的數量可以忽略不計。
原型網路的另一個限制是只使用均值來確定中心,而忽略了支持集中的方差,這在圖像有雜訊的情況下阻礙了模型的分類能力。利用高斯原網路(https://ar xi v.org/abs/ 1708 .02 73 5)類中的方差,利用高斯公式對嵌入點進行建模,克服了這一局限性。
5. 結論
小概率學習是近年來研究的熱點之一。有許多使用原型網路的新方法,比如這種元學習方法,效果很好。研究人員也在 探索 強化學習,這也有很大的潛力。這個模型最好的地方在於它簡單易懂,並且能給出令人難以置信的結果。
via https://blog.floydhub .com /n-shot-learning/
本文由雷鋒字幕組成員翻譯,雷鋒字幕組是由AI愛好者組成的字幕翻譯團隊;團隊成員有大數據專家、演算法工程師、圖像處理工程師、產品經理、產品運營、IT咨詢人、在校師生;志願者們來自IBM、AVL、Adobe、阿里、網路等知名企業,北大、清華、港大、中科院、南卡羅萊納大學、早稻田大學等海內外高校研究所。了解字幕組 請加 微信 ~
④ 學習嵌入式開發要學習哪些知識
嵌入式系統是計算機軟體和硬體的綜合體,你可以先下載全套嵌入式視頻課自學,看是否感興趣。
①C,Java核心編程:c語言核心編程,Java核心編程;
②Linux核心操作與演算法:Linux系統使用,Linux-c編程核心技術,精品數據結構,Linux-c編程精髓;
③核心操作與演算法:Linux系統編程,Linux網路編程核心技術,UI編程,Java核心編程,安卓核心技術;
④ARM+Linux底層開發:數字電路,ARM編程核心,Linux系統開發,嵌入式Linux驅動開發;
⑤大型項目實踐:每期安排各類型真實的項目,詳細可以點我下載資料。
ESE(嵌入式軟體工程師);
ADE(嵌入式應用開發工程師);
FWE(嵌入式底層開發工程師);
FEC(嵌入式固件開發工程師)
你可以考察對比一下南京課工場、北大青鳥、中博軟體學院等開設有嵌入式開發專業的學校。記得下載全套嵌入式開發視頻課,祝學有所成!望採納!
⑤ ARM中內存是如何存放數據的
每條指令都按照規定的編碼格式 arm是32位的,所以每條指令的格式如下:
[31:28] [24:21] [20]
指令執行條件編碼 指令操作符編碼 是否影響CPSR的值
[19:16] [15:12] [11:0]
第一個操作數寄存器編碼 目標寄存器編碼 第二個操作數
所以ARM的指令和數據不是存儲在同一個單元的,是根據指令(在flash中)到對應的寄存器中讀取該寄存器中的數據或地址的內容進行操作的。