四. caffe2 我怕是要放棄了...

轉眼間關注這個專欄的已經近200人了,感謝各位支持

前些天好奇用caffe2寫了一個檢測疲勞的demo,因為還沒有時間探索檢測,(其實看到有人本來準備移植ssd,然後後來因為坑多放棄中。。。,本來準備寒假很好調研一下的),所以這個還是基於分類做的,因為之前對分類的流程很熟了,想著類別比較少,應該效果還不錯吧...

然後就開始動手了,大概就是

采數據->清洗和預處理->finetune->部署Android(Android從入門到放棄)

這個是基於人臉分類來做的,因為想想也知道直接分類整張圖片和把人臉摳出來再分類肯定後者效果更好,然後集成了某人臉SDK(所以抱歉這個demo不能開源...)扣了人臉,你如果能找到扣人臉的方法,最後效果應該差不多的,這部分就是簡單的SDK集成了。

我簡單分了三類,然後finetune了一個squeezenet和shufflenet,發現最後效果相當,精度大概都到0.97(注意,這是server上跑的驗證集,而這些驗證集是手機實拍後的圖片)就停了,但squeezenet的參數量是shufflenet的2/3左右。

一切都很簡單,但當我部署完,實測卻發現,和我預料的差好多,同樣的模型文件,我在server或pc上測試手機實拍的圖片效果很好,幾乎都能測對,但當我實時顯示手機的測試結果,卻發現不是這樣,還達不到我之前那篇7分類的實時分類結果,top1常常徘徊在兩個類別之間,置信度也比較低,只有特徵比較明顯的一類效果還不錯,比如打哈欠這個動作特徵,然後我就各種查資料,發現我之前在YUV上扣人臉寫的那部分不太好,花了點時間改這個,(吐槽Android圖片格式太多太雜,光YUV就好多種),最後這個確保搞定了,因為還原YUV到圖片顯示是非常準確的,然鵝。。。對輸出結果並沒有什麼明顯的提升,有些類別還是亂猜似的,然後我就陷入了沉思....

為什麼PC或server上結果那麼好,一到移動端就不行了?而且我在GitHub caffe2移動端官方demo(AICamera)的issue里見到了好幾個和我同樣問題的人,主要是這種差異性的本質在哪,無奈這個發展的好慢,沒什麼人解答,幾乎同樣的數據集,因為都是手機實拍的圖,而且我還控制了拍的光照環境,直到現在,我仍不能得解,不知道其他框架也會出現這個問題?有人跟我說是手機半精度的原因,那是不是說移動端不適合這種可能特徵比較相似的類別呢,比如一張臉在不確定是否戴眼鏡的情況下的睜眼還是閉眼類別,(我訓練集都涵蓋了,而且數量很多,分布也差不多均勻),望dalao告知,萬分感謝,不然真的要放棄了,如果caffe2在移動端連這種分類都分不好的話...

以下demo是我加各種trick方法 來輔助的,方法還不便告知(逃...,重點是我上面的問題,歡迎大家討論啊/(ㄒoㄒ)/~~

https://www.zhihu.com/video/945253439190671360
推薦閱讀:

一. caffe2之安裝與編譯
二. caffe2之保存/讀取模型並retrain

TAG:Caffe2 | 移動端 | PyTorch |