近幾年,深度學習已經(jīng)徹底改變了計算機視覺。由于各類學習資源隨處可見,任何人都可以在數(shù)天(甚至數(shù)小時)內(nèi)掌握最新技術(shù),并將它應(yīng)用到自己的領(lǐng)域內(nèi)。隨著深度學習變得越來越普遍,一個重要的問題就是如何將它創(chuàng)造性地應(yīng)用在不同的領(lǐng)域里。
今天,計算機視覺領(lǐng)域的深度學習已經(jīng)解決了大量關(guān)于圖像識別、目標檢測和圖像分割等方面的問題。在這些領(lǐng)域中,深度神經(jīng)網(wǎng)絡(luò)表現(xiàn)出了極其優(yōu)異的性能。
即使你的數(shù)據(jù)并不是可視化的,同樣可以利用這些視覺領(lǐng)域深度學習模型(特別是 CNN 模型)的強大功能——你所需要做的僅僅是:將你的數(shù)據(jù)從非視覺領(lǐng)域變換成圖像,然后就可以將由圖像訓練出來的模型應(yīng)用到你的數(shù)據(jù)上。理論上而言,任何有局部相關(guān)性的數(shù)據(jù)都能使用卷積網(wǎng)絡(luò)處理,因此你會驚奇地發(fā)現(xiàn),這種方法竟然出奇得好。
在這篇文章中,我將簡單介紹 3 個案例,看一下企業(yè)如何將視覺深度學習模型創(chuàng)造性地應(yīng)用到非視覺領(lǐng)域。在這三個案例中,基本方法都是將非視覺問題轉(zhuǎn)換成適合做圖像分割的問題,然后利用深度學習模型來解決。
案例一:石油工業(yè)
梁泵(beam pumps)通常在石油工業(yè)中被用來從地下抽取石油或天然氣。它們由連接在步進梁(walking beam)的發(fā)動機提供動力。步進梁將發(fā)動機的旋轉(zhuǎn)運動傳遞到抽油桿的垂直往復運動,從而將石油抽取到地面。
一個步進泵,也成為抽油機。
作為一個復雜系統(tǒng),梁泵很容易出現(xiàn)故障。為了輔助診斷,在洗盤上安裝了一個測量梁桿負載的測功機(dynamometer)。測功機會繪制出一個測功機泵卡(dynamometer pump card),如下圖所示,顯示出引擎旋轉(zhuǎn)周期內(nèi)的負載。
測功機卡
當梁泵出現(xiàn)故障時,測功機卡的形狀就會發(fā)生變化。通常情況下會邀請專業(yè)技術(shù)人員來檢測測功機卡,并判斷哪里出現(xiàn)問題,并提出解決方案。這個過程非常耗時,且只有極為專業(yè)的人士才能有效地解決問題。
另一方面,這個過程看起來完全可以自動化。之前也曾嘗試用過許多經(jīng)典的機器學習系統(tǒng)來解決這個問題,但結(jié)果并不是很好,正確率只有 60% 左右。
貝克休斯(Baker Hughes)作為眾多油田服務(wù)公司之一,則采用了一種創(chuàng)新性的方法將深度學習應(yīng)用到了這個問題上。他們首先將測功機卡轉(zhuǎn)換成圖像,并將之作為預訓練 ImageNet 模型的輸入。結(jié)果非常令人振奮,只使用圖像分類預訓練模型并根據(jù)新數(shù)據(jù)做了些微調(diào),正確率瞬間從 60% 提升到了 93%;對模型進一步的優(yōu)化后,他們甚至將正確率提高到 97%。
貝克休斯使用系統(tǒng)的一個樣例。左圖是一張輸入圖片,右圖是缺陷模式的實時分類。整個系統(tǒng)只需要在便攜設(shè)備上就可以運行,右下角顯示了推斷時間。
貝克休斯采用這種方法不僅獲得了比之前經(jīng)典機器學習方法更高的精度,甚至他們現(xiàn)在都不再需要梁泵技術(shù)專家來花費大量時間診斷問題了。一旦出現(xiàn)機器故障,他們能夠立刻進行修復。
想了解更多關(guān)于這個案例的內(nèi)容,你可以:
讀一些類似工作的文章: https://www.knepublishing.com/index.php/KnE-Engineering/article/download/3083/6587
或觀看視頻:https://v.qq.com/x/page/h08318aglac.html
案例二:在線欺詐檢測
計算機用戶在使用計算機時具有獨特的模式和習慣,你瀏覽網(wǎng)頁時使用鼠標的方式或你撰寫電子郵件時敲擊鍵盤的方式,都是獨一無二的。
在這種特殊情況下,Splunk 解決了根據(jù)用戶使用計算機鼠標的方式對用戶進行分類的問題。如果你的系統(tǒng)可以根據(jù)鼠標使用模式唯一識別用戶,則可以將其用于欺詐檢測。想象一下這種情況:欺詐者竊取某人的登錄名和密碼,然后使用它們登錄并在網(wǎng)上商店購物。由于每個人使用計算機鼠標的方式都是獨一無二的,系統(tǒng)可以輕松檢測到這種異常并防止發(fā)生欺詐性交易,并通知真實賬戶所有者。
使用專門的 JavaScript 代碼就可以收集所有鼠標活動,該程序可以每 5 - 10 毫秒記錄一次鼠標活動。結(jié)果,每個用戶的數(shù)據(jù)將包含每頁每個用戶大約 5000 - 10000 個數(shù)據(jù)點。這里有兩個挑戰(zhàn):第一,每個用戶都有大量的數(shù)據(jù);第二,不同用戶的數(shù)據(jù)集所包含的數(shù)據(jù)點數(shù)量不同。這很不方便,如果序列長度不同,通常需要更為復雜的深度學習框架。
解決方案是將每個用戶在每個網(wǎng)頁上的鼠標活動轉(zhuǎn)換為單個圖像。在每個圖像中,鼠標移動由一條線表示,其顏色編碼鼠標速度,左右點擊由綠色和紅色圓圈表示。這種處理初始數(shù)據(jù)的方法解決了這兩個問題:首先,所有圖像具有相同的大??;其次,現(xiàn)在基于圖像的深度學習模型可以與該數(shù)據(jù)一起使用。
在每張圖中,鼠標運動被表示成一條線,線的顏色代表鼠標速度;左擊表示為綠色圓,右擊表示為紅色圓。
Splunk 使用 TensorFlow + Keras 構(gòu)建了一個深度學習系統(tǒng)來進行用戶分類,他們進行了兩個實驗:
金融服務(wù)網(wǎng)站用戶群體的分類——訪問類似頁面時的常客組和非客戶組。他們使用了一個相對較小的僅包含 2000 張圖像的訓練數(shù)據(jù)集。在基于 VGG16 的修改架構(gòu)上訓練僅 2 分鐘后,系統(tǒng)便能夠識別這兩個類別,準確度超過 80%。
用戶的個人分類。任務(wù)是針對給定用戶進行預測,來判斷使用者是該用戶還是其他模仿者。同樣是一個非常小的訓練數(shù)據(jù)集,只有 360 張圖像;同樣是基于 VGG16 的框架,但考慮到數(shù)據(jù)集較小防止過擬合做了些許調(diào)整。經(jīng)過 3 分鐘的訓練便可以達到約 78% 的準確率,考慮到這種任務(wù)本身是挑戰(zhàn)性的,因此這樣的結(jié)果還是蠻令人振奮的。
更多信息,可以閱讀關(guān)于這個系統(tǒng)和實驗的完整文章:https://www.splunk.com/blog/2017/04/18/deep-learning-with-splunk-and-tensorflow-for-security-catching-the-fraudster-in-neural-networks-with-behavioral-biometrics.html
案例三:鯨魚的聲學檢測
在這個例子中,谷歌使用卷積神經(jīng)網(wǎng)絡(luò)分析了聲音記錄并從中檢測出了座頭鯨。這對于座頭鯨的研究是有非常有用的,例如跟蹤個體鯨魚的運動、歌曲的屬性、鯨魚的數(shù)量等。在這里,有意思的并不是他們研究的目的,而是如何預處理數(shù)據(jù)以方便使用卷積神經(jīng)網(wǎng)絡(luò)。
將音頻數(shù)據(jù)轉(zhuǎn)換為圖像的方法是使用頻譜圖。頻譜圖是音頻數(shù)據(jù)基于頻率特征的視覺表示。
一個例子:一個男性說」nineteenth century」的頻譜圖。
將聲學數(shù)據(jù)轉(zhuǎn)換為頻譜圖后,谷歌研究人員使用 ResNet-50 框架來訓練模型。他們訓練出的模型性能達到:
90% 精度:分類為鯨魚聲音的音頻片段中的 90% 是正確的;
90% 召回率:給定鯨魚聲音的錄音,有 90%的可能性被標記為鯨魚。
這個結(jié)果令人印象深刻,將很大程度上有助于鯨魚的研究。
讓我們將焦點從鯨魚切換到你處理音頻數(shù)據(jù)時可以做的事情。創(chuàng)建頻譜圖時,你可以選擇要使用的頻率,這取決于你的音頻數(shù)據(jù)類型。對于人類語音、座頭鯨歌曲、工業(yè)設(shè)備錄音等,你可能需要不同的頻率,因為不同的情況下重要信息往往包含在不同的頻段中,這時候就必須依靠你的領(lǐng)域知識來選擇參數(shù)了。例如如果你正在處理的是人類語音數(shù)據(jù),那么你首選的就應(yīng)該是梅爾頻率倒譜系數(shù)了。
目前有一些很好的軟件來處理音頻。Librosa(https://librosa.github.io/librosa/)是一個免費的音頻分析 Python 庫,可以使用 CPU 來生成頻譜圖。如果你正在使用 TensorFlow 進行開發(fā)并希望在 GPU 上進行頻譜圖計算,那么這也是可以的(https://www.tensorflow.org/api_guides/python/contrib.signal#Computing_spectrograms)。
想了解 Google 如何使用座頭鯨數(shù)據(jù)的詳細內(nèi)容,可以參考 Google AI 的博客文章: https://ai.googleblog.com/2018/10/acoustic-detection-of-humpback-whales.html。
總而言之,本文中概述的一般方法遵循兩個步驟。首先找到一種將數(shù)據(jù)轉(zhuǎn)換為圖像的方法,然后使用一個預訓練的卷積網(wǎng)絡(luò)或自己從頭開始訓練一個卷積網(wǎng)絡(luò)。第一步比第二步更難,這需要你去創(chuàng)造性思考如何將你的數(shù)據(jù)轉(zhuǎn)換成圖像,希望我提供的示例對解決你的問題有所幫助。