1. 程式人生 > >行為識別-從訊號分析到機器學習到深度學習

行為識別-從訊號分析到機器學習到深度學習

一直想寫點東西和大家交流,但是又怕自己才疏學淺,寫出的東西讓大家笑話,今天突然有感,被笑話也是督促自己進步的途徑。

本文的話題是一個看似簡單的行為識別模型給我帶來的“驚喜”。

為了便於理解,本文對問題進行的簡化。本文不涉及用到的理論和方法的詳細描述,只是講述了在解決問題中遇到的問題和收穫的知識。

模型功能:識別急加速行為。
輸入:三軸加速計資料x,y,z,取樣頻率10條/秒;
輸出:是否發生急加速行為。
應用環境:智慧手機

做為一個受過一點教育的工程師,接到這個任務滿心歡喜,So easy(領導一定也這麼覺得,So easy)。

模型方案信手拈來,蒐集急加速行為的資料,標記為1,正常駕駛資料標記為0,建個分類模型,搞定!問題來了,資料要怎麼蒐集呢?整個幾臺車出去跑,一個人開車,一個人記錄?跑10天,20天…,這樣也不是不可以,但是沒車沒人浪費錢啊。於是乎有人提議了,不如眾稠吧,於是一個急加速行為識別的應用誕生了,聰明的讀者要發問了,急加速行為識別的模型還沒有資料呢,應用是怎麼誕生的?是的,這就是本文的一個主題,沒有資料的情況下如何建立模型。

沒有資料的情況下如何建立模型

機理+規則。看看輸入資料的物理意義,輸入和輸出之間的關聯,定義行為判定規則。三軸加速計資料其實就是三個軸的加速度(三軸分別是橫向加速度-y軸、前向加速度-x軸、縱向加速度-z軸)

急加速時前向加速度會突變,一定程度的突變就是急加速了,哈哈,讀到這裡估計有的讀者也會覺得不就這麼簡單嗎,這不就是一個訊號突變檢測嗎,檢測出來前向加速度突變,定了程度就完事了。大家不要忘了,我們的應用環境是手機啊,手機座標系和車輛座標系重合時(手機的x、y、z軸和車輛的x、y、z軸重合)前向加速度突變才是急加速。那你做一下座標變換就好了,嗯,我也是這麼想的。通過旋轉座標變換,將手機的資料變換到車輛的座標系,變換後的y軸資料突變就是急加速行為,於是乎,資料經過旋轉矩陣的轉啊轉,終於和車輛座標系重合了。資料蒐集硬體也是各種電路吧,會有高頻干擾,導致訊號突變,加個濾波功能,選小波濾波還是滑動視窗濾波呢(就知道他倆),小波變換可以去除高頻噪音,我們這個資料蒐集頻率就10HZ,還是選滑動視窗濾波。一個濾波+旋轉座標變換的資料變換功能實現了,小小的成就感。

可愛的隊友將第一版模型整合到手機,檢測結果的提示音相當刺耳,一拿起手機就響,嗯嗯,竟然忽略瞭如此頻繁的場景。要怎麼規避使用手機場景的誤判呢?使用手機時手機在手裡,沒有使用手機時手機在車上,車應該比手抖得厲害吧(暫時不考慮手抖的使用者了),於是萬能的小波分析有派上了用場。在現有模型基礎上增加了一層小波分析,又興致勃勃地拿給隊友測試,玩手機不誤報了哎,好開心。

看似問題已經解決了,其實並不然,經過測試發現,模型只適用於抗干擾性較好的硬體,然而不同手機抗干擾性差異很大,真的有很不靠譜的硬體啊,自己抽風發抖的,我們又增加了資料來源,設計了相應的演算法,這裡不再贅述了,結論是好手機的使用者是我們的好朋友,破手機的使用者我們也盡力了(訊號分析的方法本人已經技窮了,有高手還希望多多指點)。還有一個問題,幾乎每個客戶都會問我,加速什麼程度算急加速,這個值你們是怎麼確定的,說我自己定的,我不夠權威,說看別人論文定的,好像自己很Low,技窮。

總結一下本節,有的時候確實需要我們在沒有資料的時候做模型,其實大家都不想這樣,但是沒辦法,機理模型、訊號分析、專家規則等可以幫助我們過渡這個困難的時期,注意不是渡過。

有一點資料的情況下如何建立模型

經過上面的努力,依然存在沒有解決和沒有答案的問題,於是乎我們覺得,還是需要一點資料做支撐的,拉著我們組的大哥,蒐集了一點點急加速行為資料,實在是太珍貴了,向上取樣將資料擴充了幾倍,進行了均勻處理,在時域和頻域對資料進行特徵提取,運用機器學習分類模型進行分類;於是乎,資料的可貴映入眼簾。與之前的訊號分析方法相比,特徵提取環節提取的特徵更加豐富,特徵的有效性具有可檢測性,就是得試來試去,及其費體力,雖然也有各種各樣的選擇方法,什麼熵增、與因變數關聯關係、降維,但依然費體力。與此同時,什麼程度的加速是急加速的問題也得到了一定程度上的解決,和我們採集的急加速行為有一定相似度的就是了,這樣好像比閾值方法高明一點吧。估計大家又要發問了,你之前為什麼不這麼做,因為我沒有想到硬體差異會這麼大,還有就是之前提到的沒車沒人沒錢啊。

一次和別人的合作,讓我有幸接觸到了Tensoflow、卷積神經網路,頓時感覺,這東西好啊,完全省去了特徵提取的體力活了,把輸入準備好,調參,期待完美的輸出吧。卷積神經網路在影象領域表現突出,通過卷積、池化、連線實現對影象的特徵提取和分類。影象可以表示成三維陣列,而我們的輸入資料屬於時域訊號,這個輸入該如何構造呢?博士運用手機檢測碰撞的模型思路,將時域訊號構造成滿足Tensorflow-CNN輸入結構,按照同樣的方法進行嘗試,果然省時省力啊。經過深入研究CNN,感覺博士構造輸入資料結構和網路結構的方式,只能實現對每個變數的單獨特徵提取,到最後的全連線層才能融合所有輸入特徵,能不能在構造輸入時能夠使卷積實現不同變數之間的特徵提取呢?因為再對影象進行特徵提取時就是鄰近區域的特徵提取;那麼CNN是否支援多輸入呢?之前研究過Siamese網路就是多輸入的,那麼通過構建不同的輸入,融合一些先驗的資訊,來減少網路深度,降低模型的複雜度是否可行呢,我還沒有驗證啊,感覺應該可行的,有興趣的讀者可以嘗試啦。有的讀者該發問了,深度學習不就是用深度網路來提升分析的準確性嗎?你這是倒退了。但是我並不覺得這是倒退了,我們解決問題的宗旨永遠都是用最少的投入獲得最大的產出,現實並沒有您想象的那麼完美,資料足夠多、足夠全、資源隨便用是不現實的,當我們有一些先驗知識有助於降低對資料的需求、對資源的需求就要把這些知識融入到模型。

資料的價值在於它蘊含的資訊和知識,而先驗的知識有助於降低對資料的需求,我不贊同那些拋棄機理盲目追求資料的主張,大家對資料太迷戀了,就像我的老公,一個畫配電圖的都覺得不懂點大資料都不好意思出門,不得不說,大資料的宣傳絕對是成功的。我的意思並不是資料不重要,看到我前面的分析也能感受到資料是重要的,但是資料應該是針對我們解決的問題蒐集的資料才有價值。總是看到報導稱大部分大資料產品都是偽價值,究其原因各個領域的大資料並沒有發展到可以產生價值的階段,好多行業的現狀是,覺得資料有價值,然後隨隨便便的蒐集著,最後交給資料分析師說,你去挖掘一下資料的價值,最後結論往往都是資料分析師水平不行~~,哈哈,我想說如果真的想做大資料就找個領域資料分析專家好好規劃一下。

有的時候條件確實是艱苦的,就像創業一樣,只有讓投資者感受到價值他們才願意掏錢。先創立一個新方向的時候,就是需要我們從零開始,從一無所有開始解決問題,但是知識和經驗就是在磨練中積累,喝下這碗雞湯吧。

之後我會對工作中遇到的問題,學到的知識進行總結,和大家交流,希望大家能夠多多指教。

寫部落格的目的是學習的總結和知識的共享,如有侵權,請與我聯絡,我將盡快處理