機器學習在啟動耗時測試中的應用及模型調優(一)

IT技術精選文摘發表於2018-07-05

640?wx_fmt=gif

啟動耗時自動化方案在關鍵幀識別時,常規的影像對比準確率很低。本文詳細介紹了採用scikit-learn圖片分類演算法在啟動耗時應用下的模型調優過程。在之後的續篇中將採用TensorFlow CNN、遷移學習等演算法,給出對比識別效果


1、常規思路與困境


App啟動、關鍵頁面載入耗時是一個常規的效能指標,也是競品對比的關鍵性指標。在耗時測試中,如何自動化識別關鍵圖片至為關鍵。由於視訊App啟動過程廣告、首頁運營內容是分分鐘變化的。在識別關鍵圖片時,傳統的基於灰度直方圖+閾值的自動化對比方法行不通。

640?wx_fmt=png

圖片1.png

關鍵點:如何識別關鍵幀的自動化

Ø人工識別:耗時,費人力

Aphone610版本 3家競品、14個場景,每個場景10次,2分鐘1次 ,約14h ==2人天

Ø影像對比:灰度直方圖+閾值(不可行)

1)整圖對比:視訊啟動過程中的廣告、首頁海報是變化的

2)部分對比:app完整啟動後第一屏不完全展示的地方,每次不一定在同一處

Ø埋點上報:結果準確性一直被質疑(不可行)

1)adb shell am start -W packageName/packageName.MainActivity獲取

2)app埋點上報:程式碼里加埋點,首頁載入完成後資料上報

2、為什麼機器學習


啟動速度關鍵幀圖片識別,其實就是機器學習中常見的圖片分類問題。當前圖片分類演算法和開源的程式碼庫非常成熟,應用也屢見不鮮。之前在網上有瀏覽到一篇文章提到用機器學習實現耗時自動化的關鍵幀識別,眼前一亮,在此給出實現和調優過程。

3、實施方案


整體思路:

如下圖所示,採用錄屏軟體+自動化指令碼,完成啟動過程錄屏之後將視訊拆成一系列圖片幀。通過訓練好的機器學習模型,識別出每一張圖片所對應的啟動過程,計算啟動第一張圖片到啟動穩定後的總幀數,即可得出最終的啟動時間。

640?wx_fmt=png

圖片2.png

樣本與分類label設計

640?wx_fmt=png

圖片3.png

特徵選擇

常見的影像特徵處理方法有:

1)原始畫素特徵扁平化

2)提取顏色直方圖(使用cv2.normalize從HSV色域中提取一個3D顏色直方圖並做平滑處理)

在本方案中,最開始首先選擇方法(1)。即錄屏視訊解析度為480p*720p,拆幀後壓縮8倍,每個畫素點3個資料表示,最終一張圖片用16200 維列表表示——16200個特徵,後續會對比3D顏色直方圖作為特徵進行對比。

第一批樣本集

640?wx_fmt=png

圖片4.png

演算法選擇

在演算法選擇的過程中,依據“不要在演算法選擇上花費太多時間,先讓你的模型run 起來” 以及 sklearn 官網演算法選擇引導,因為樣本數1000+<100k,選擇  SVM+線性核  入手。

640?wx_fmt=png

圖片5.png

4、模型調優實戰


1)調優步驟

在機器學習中,如果遇到較大誤差時,常見的模型調優方法不外乎:

增加樣本 -----避免overfitting

選用更少的特徵-----避免overfitting

獲取更多的特徵-----避免underfitting

調整模型,或者正則引數-----均可

當然在實現過程中,我們需要首先找出問題所在,不能盲目的增加樣本或者減少引數。一般來說:

快速實現演算法

plot learning curve

分析 error—sample 特徵,選定要採取的手段

2)繪製學習曲線

模型:LinearSVC(C=1.0),sklearn中提供了learning_curve ()函式不用自己實現

1)總樣本1225,10%、25%、50%、75%、100% 5輪,train:valid = 3:1

2)計算平均方差隨樣本數變化的曲線

從下圖中看出,當前fit的模型是存在過擬合的,所以接下來要做的事情就是增加樣本、調參、減少特徵等方式來處理。

640?wx_fmt=png

圖片6.png

3)防止過擬合

第一步:調整LinearSVC 引數(如C 、class_weight)——確認C=10最合適

640?wx_fmt=png

圖片7.png

640?wx_fmt=png

圖片8.png

640?wx_fmt=png

圖片9.png

第二步:增加樣本(優先增加數量少的分類樣本、test_set準確率低的分類樣本) 1610個樣本時誤差最低

640?wx_fmt=png

圖片10.png

為了更好的分析問題,可以通過classification_report來得出各個分類的具體精確率情況

from sklearn.metrics import classification_report

640?wx_fmt=png

圖片11.png

第三步:減少特徵

1)減少特徵的過程中,嘗試通過RFEVC獲取最優特徵數,優化結果並不明顯

640?wx_fmt=png

圖片12.png

a.特徵增加的步長是人為選擇的,太大了可能會漏掉關鍵特徵,太小了計算量太大

b.step一致的,最優特徵數 每次可能不一樣

c.提升並不大

640?wx_fmt=png

圖片13.png

2)加大影像壓縮: 從原來的8倍->12倍->16倍

a.從學習曲線上看過擬合依然存在,整體的test_error還是減小了的

b.偏差嚴重的label=start 這一分類,壓縮倍速越高精確度越低

640?wx_fmt=png

圖片14.png

640?wx_fmt=png

圖片15.png

3)PCA

主要成分分析PCA:特徵置換,原特徵對映到新特徵,從而實現降維。降維的目的主要是減少計算量,但是有熱心同志建議試試,便試試。事實證明實際上證明“利用PCA來避免過擬合”是個bad case。

640?wx_fmt=png

圖片16.png

4)提取顏色直方圖並做平滑處理後,作為影像特徵之後,對比發現precison和recall低了10個百分點~~

640?wx_fmt=png

圖片17.png

第四步:調整結果分類

在前面有分析過,start這個分類識別準確率很低。 分析對比圖片,start與desk區別僅僅在於app icon是灰顯的。經評估desk和start分類合成一類,在實際耗時測試中影響並不大,但能提高不少test set的準確率

640?wx_fmt=png

圖片18.png

640?wx_fmt=png

圖片19.png

8分類變成7分類之後的學習曲線已經趨於收斂,且過擬合情況好很多了

640?wx_fmt=png

圖片20.png

分類準確率提升如下表所示:

640?wx_fmt=png

圖片21.png

4)調優前後對比

640?wx_fmt=png

圖片22.png

5、總結


640?wx_fmt=png

圖片23.png

6、後續 - 模型探討


SVM 線性核LinearSVC,在圖片分類問題中並非唯一選擇,也不是最佳選擇。後面將嘗試不同的影像特徵提取,與CNN和遷移學習演算法在本問題的應用情況進行對比

1、使用 TensorFlow 構建 CNN

2、使用Inception v3進行影像分類

3、嘗試新的影像特徵提取方式

公眾號推薦:

640?wx_fmt=jpeg

640?wx_fmt=jpeg

原文連結:http://wetest.qq.com/lab/view/392.html

相關文章