陳超藝,陳新度,吳 磊
(1.廣東工業(yè)大學廣東省計算機集成制造重點實驗室;2.廣東工業(yè)大學省部共建精密電子制造技術與裝備國家重點實驗室,廣東 廣州 510006)
光學樂譜識別[1](Optical Music Recognition,OMR)技術是光學字符識別(Optical Character Recognition,OCR)的一個分支,可以提取樂譜圖像中的音符信息。該技術廣泛應用于樂譜檢索、播放及編輯分析中,有利于音樂的數(shù)字化和智能化發(fā)展,在音樂教學、創(chuàng)作等領域具有重要作用。
國內(nèi)外常用的樂譜包括五線譜、簡譜和奏法譜(Tablature),相較于五線譜和簡譜,奏法譜用文字、數(shù)字或其他記號表示演奏者的手指位置,更加適合吉他等帶有品格的撥弦樂器[2],國內(nèi)外普遍使用奏法譜作為吉他譜。吉他具有獨特的音色和寬廣的音域,可以演奏多種不同風格的音樂,是世界上最多人學習與演奏的樂器之一[3]。隨著吉他譜使用人群的日益增多,對其進行識別的需求也愈發(fā)迫切。五線譜是大部分樂器的通用樂譜,國內(nèi)外對于光學樂譜識別的研究主要集中在五線譜的譜線檢測刪除[4-7]和音符識別[8-13]等方面。吉他使用的記譜方法與五線譜在音符和時值的表示方式上有本質(zhì)區(qū)別,五線譜的識別方法不能有效應用于吉他譜中。此外,現(xiàn)有的吉他譜識別方法需對圖像進行大量分割識別,存在識別步驟繁瑣、識別速度慢和識別精度低等問題[14-15]。
針對上述問題,本文提出一種基于深度學習的吉他譜識別方法,該方法無需刪除譜線,識別步驟簡單,可準確識別多聲部吉他譜的音符和時值。
吉他譜可分為彈唱譜和獨奏譜,其中彈唱譜中有用于表示手指按壓位置的和弦圖,在譜線上用“X”或其他符號表示手指彈撥的位置,而獨奏譜一般不帶有和弦圖,在譜線上用數(shù)字或其他符號代表手指要按壓和彈撥的位置,具體如圖1 所示。彈唱譜只表示樂曲的伴奏,而獨奏譜同時帶有樂曲的伴奏和主旋律,音符和時值相對復雜,本文以吉他獨奏譜為例進行識別研究。
Fig.1 Guitar solo tablature圖1 吉他獨奏譜
吉他譜有6 條固定譜線,由上到下依次為第一譜線到第六譜線,分別與吉他的六弦對應。譜線上的數(shù)字為品格音符,表示該弦需要按壓的品格,同時需要彈奏該譜線對應的弦。吉他譜的水平方向為樂曲演奏的方向,代表樂曲的不同時刻,垂直方向為某一時刻需要同時彈奏的音符。第六譜線下方有用于表示該時刻音符時值的減時線,音符時值與減時線數(shù)的關系為:
式中,N 表示N 分音符,n 為減時線數(shù)。例如當減時線數(shù)為2 時,由式(1)可算出N 為16,即該音符為十六分音符。
減時線可以表達的音符時值有限,因此在吉他譜中有附點符號和增時線用于豐富音符時值。附點符號表示延長音符時值的一半,增時線表示增加一個四分音符的時值。此外,吉他譜中還有各種樣式的休止符,用于記錄不同長短音的間斷時值,可豐富樂曲的情感表達。若以十六分音符為單位時間值,各音符對應的時值如圖2 所示。
Muse 是由國人研發(fā),支持多種樂譜混排和腳本輸入的打譜軟件[16],在國內(nèi),人們普遍使用Muse 進行吉他譜的編制。支持腳本輸入是Muse 的強大之處,通過編寫程序隨機生成標簽和腳本,再將腳本輸入到Muse 中,便可隨機生成大量吉他譜。圖3 為吉他譜數(shù)據(jù)集制作流程圖,圖4 為各符號對應標簽。
Fig.2 Note duration圖2 音符時值
Fig.3 Production process of guitar score data set圖3 吉他譜數(shù)據(jù)集制作流程
Fig.4 Note label圖4 音符標簽
生成的吉他譜每行4 小節(jié),每小節(jié)4 拍,包含多種常用時值和休止符號,如圖5 所示。
Fig.5 Randomly generated guitar tablature圖5 隨機生成的吉他譜
識別方法基于CRNN 模型[17]建立,無需進行譜線去除,原理如圖6 所示。第一步是將樂譜圖像水平分割為品格音符圖像、減時線圖像、增時線圖像和休止符圖像。第二步是將減時線圖像分別與各譜線的品格音符圖像疊加,輸入到CRNN_1 模型中,輸出6 條譜線各時刻的品格音符;將減時線圖像、增時線圖像、休止符圖像疊加,輸入到CRNN_2 模型中,輸出樂譜各時刻的時值音符。第三步是將輸出的音符全局關聯(lián),獲取樂譜語義,如彈撥位置、品格音符的時值等。
Fig.6 Principle diagram of guitar tablature recognition method based on deep learning圖6 基于深度學習的吉他譜識別方法原理示意
吉他譜具有兩個維度上的信息,需利用垂直投影或水平投影[18]將樂譜分割成多個僅帶有一維信息的圖像,然后逐一識別。垂直投影分割符合讀譜順序,但隨著音符數(shù)量的增多,樂譜分割和識別的次數(shù)也會變多,會造成識別速率慢和識別步驟繁瑣等問題,且通過垂直投影不能很好地分割出增時線、休止符等音符,容易與減時線混淆,具體如圖7 所示。因此,本文采用水平投影的方法對樂譜圖像進行分割。
Fig.7 Guitar tablature vertical projection圖7 吉他譜垂直投影
6 條橫向譜的線是吉他譜的一大特點。減時線位于第六譜線下方固定位置,增時線位于第三譜線與第四譜線之間,休止符位于第四譜線與第五譜線之間。將吉他譜進行水平投影,通過分析6 條譜線的影像,可以準確分割出品格音符、減時線、增時線和休止符圖像,具體如圖8 所示。水平投影分割將吉他譜分為9 個部分進行識別,與垂直投影分割相比,水平投影分割與識別的次數(shù)大大減少,具有更高的效率。
Fig.8 Guitar tablature horizontal projection圖8 吉他譜水平投影
CRNN 是一種用于序列符號識別的模型,由卷積神經(jīng)網(wǎng)絡(Convolutional Neural Networks,CNN)、循環(huán)神經(jīng)網(wǎng)絡(Recurrent Neural Network,RNN)和鏈式時序分類(Connectionist Temporal Classification,CTC)函數(shù)組成,結(jié)構(gòu)如圖9所示。
Fig.9 CRNN model structure圖9 CRNN 模型結(jié)構(gòu)
CNN 部分對符號序列圖像進行特征提取,采用VGG 結(jié)構(gòu)[19]。RNN 部分對序列特征進行識別,采用深層雙向長短期記憶網(wǎng)絡(Bi-directional Long Short-Term Memory,BiL-STM),BiLSTM 具有“門機制”,可以防止訓練時梯度消失,且雙向網(wǎng)絡可以根據(jù)序列的前向信息和后向信息進行更準確的預測。CTC 函數(shù)位于轉(zhuǎn)錄層,用于實現(xiàn)音符分類,即將BiLSTM 輸出的序列轉(zhuǎn)化為標簽,可以解決不定長序列的對齊問題。
對于BiLSTM 給定輸入y的情況下,輸出序列標簽l的概率為:
式中,B表示刪除路徑中的重復標簽和非字符標簽,π為所有經(jīng)過B變換后為l的路徑。損失函數(shù)的定義為:
式中,X為數(shù)據(jù)集,Ii為輸入圖片,li為真實標簽序列,yi為輸入圖片Ii經(jīng)過卷積網(wǎng)絡層和循環(huán)網(wǎng)絡層的輸出序列。
若將分割后的吉他譜圖像直接輸入到CRNN 模型中,則只能識別出圖像各個音符的類型,不能識別出音符位于哪個時刻,會導致音符之間無法進行關聯(lián)。在吉他譜中,每個時刻對應的減時線上都會有一條豎線,利用此特點,可將減時線圖像與其他圖像結(jié)合起來進行識別。在識別品格音符時,將品格音符圖像與減時線圖像等比例疊加,再作為輸入圖像輸入到CRNN 模型中,可輸出所有時刻的音符和非音符,從而推斷出品格音符所在時刻。在識別時值音符時,由于各個時值音符不會位于同一時刻,故將分割出的3 個時值音符圖像等比例疊加輸入到CRNN 模型中,即可輸出所有時值音符的分類。因此,需要訓練兩個CRNN 模型,一個用于識別譜線上的品格音符,另一個用于識別時值音符。
樂譜中的每個符號都不是絕對獨立的,需將每個識別提取的符號信息在邏輯或語義上進行全局關聯(lián)[20]。在本文建立的方法中,時值音符的識別都是獨立的,但各個符號并不能獨立存在,附點符號必須與減時線或休止符關聯(lián),增時線必須與減時線關聯(lián),減時線必須與品格音符關聯(lián)。
吉他譜具有兩個維度的信息,在進行音符全局關聯(lián)時,先將各個時值符號關聯(lián),得到各個時刻的完整時值,然后依次將同時刻的品格音符關聯(lián)到各個時刻的非休止符時值上。
實驗環(huán)境為Intel Core i5-8500 CPU,Nvidia GTX 1080Ti GPU,16GB 運行內(nèi)存,Ubuntu 20.04 操作系統(tǒng),TensorFlow2.0 深度學習框架。
隨機生成416 張吉他譜,經(jīng)過水平投影分割后,得到品格音符圖像13 980 張,時值音符圖像2 330 張。訓練批量大小為32,學習速率為0.001,品格音符圖像和時值音符圖像的識別模型各經(jīng)過約25 000 次迭代后,識別準確率趨于穩(wěn)定,如圖10 所示。
以序列準確率作為評價標準,計算方式為:
式中,預測正確的序列數(shù)為預測序列與標簽序列完全一致的數(shù)量。訓練結(jié)果表明,品格音符在測試集的識別準確率約為98.3%,時值音符在測試集的識別準確率約為99.1%,均具有較高的識別精度。
Fig.10 Change of note recognition accuracy圖10 音符識別準確律變化
為測試本文方法的性能,將其與傳統(tǒng)的吉他譜識別方法進行對比,包括識別速度測試與識別精度測試。使用兩種識別方法分別對音符較少和較多的吉他譜進行識別,計算識別時間。測試結(jié)果如表1 所示,其中吉他譜一音符數(shù)量69 個,吉他譜二音符數(shù)量125 個。
Table 1 Recognition speed comparison表1 識別速度對比 單位:s
傳統(tǒng)識別方法通過對樂譜進行多次投影分割,將各個音符單獨分割出來再逐一識別。從表1 可以看出,本文識別方法比傳統(tǒng)吉他譜識別方法具有更快的識別速度,且隨著樂譜符號的增多,傳統(tǒng)吉他譜識別方法由于投影分割和音符識別次數(shù)增多,識別時間大大增加,而本文方法的識別時間幾乎不變。
分別對10 張采用Muse 編制的吉他譜進行識別,評價指標為符號錯誤率,即誤檢、漏檢和錯誤識別的音符數(shù)量與總音符數(shù)量的比例,分為品格音符錯誤率和時值音符錯誤率兩種。表2 為兩種方法的識別精度對比。
Table 2 Recognition accuracy comparison表2 識別精度對比 單位:%
傳統(tǒng)的識別方法需對吉他譜進行水平投影分割和垂直投影分割。吉他譜具有固定的6 條譜線,水平投影分割具有較高精度,但由于吉他譜音符的復雜性與多樣性,垂直投影分割的精度不高,不能準確分割出音符圖像,導致傳統(tǒng)方法的識別錯誤率較高。本文方法僅需對吉他譜進行水平投影分割,分割后各部分的識別完全端到端,無需進行垂直投影分割,具有更高的識別精度和更好的魯棒性。
本文針對吉他譜的特點,提出一種基于深度學習的吉他譜識別方法,并與傳統(tǒng)的吉他譜識別方法進行了比較。實驗結(jié)果表明,傳統(tǒng)識別方法過于依賴圖像分割,能否準確地分割出音符圖像對于吉他譜的識別精度有較大影響。相比之下,本文方法具有更快的識別速度和更高的識別精度,品格音符識別精度達98.3%,時值音符識別精度達
99.1%。
本文方法雖然可以有效識別吉他譜,但仍需對吉他譜進行多次投影分割識別,且目前僅對吉他譜中的品格音符與時值音符進行了識別研究,而在吉他譜中可能還包含其他音符,如掃弦、滑弦符號等。因此,今后研究的重點將主要集中在完善吉他譜的識別與實現(xiàn)吉他譜的完全端到端識別方面。