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