文章目錄
大家好,我是cv君,很多大創,比賽,項目,工程,科研,學術的煉丹術士問我上述這些識別,該怎么做,怎么選擇框架,今天可以和大家分析一下一些方案:
用單幀目標檢測做的話,前后語義相關性很差(也有優化版),效果不能達到實際項目需求,尤其是在誤檢上較難,並且目標檢測是需要大量數據來擬合的。標注需求極大。
用姿態加目標檢測結合的方式,效果是很不錯的,不過一些這樣類似Two stage的方案,速度較慢(也有很多實時的),同樣有着一些不能通過解決時間上下文的問題。
即:摔倒檢測 我們正常是應該有一個摔倒過程,才能被判斷為摔倒的,而不是人倒下的就一定是摔倒(純目標檢測弊病)
運動檢測 比如引體向上,和高抬腿計數,球類運動,若是使用目標檢測做,那么會出現什么問題呢? 引體向上無法實現動作是否規范(當然可以通過后處理判斷下巴是否過框,效果是不夠人工智能的),高抬腿計數,目標檢測是無法計數的,判斷人物的球類運動,目標檢測是有很大的誤檢的:第一種使用球檢測,誤檢很大,第二種使用打球手勢檢測,遇到人物遮擋球類,就無法識別目標,在標注上也需要大量數據…
今天cv君鋪墊了這么多,只是為了給大家推薦一個全新出爐視頻序列檢測方法,目前代碼已開源至Github:https://github.com/xiaobingchan/CV-Action 歡迎star~
歡迎移步。只需要很少的訓練數據,就可以擬合哦!不信你來試試吧~幾個訓練集即可。
神經網絡使用的是這兩個月開源的實時動作序列強分類神經網絡:realtimenet 。
我的github將收集 所有的上述說到的動作序列視頻數據,訓練出能實用的檢測任務:目前實現了手勢控制的檢測,等等,大家歡迎關注公眾號,后續會接着更新。
開始
目前以手勢和運動識別為例子,因為cv君沒什么數據哈哈
項目演示:
本人做的沒轉gif,所以大家可以看看其他的演示效果圖,跟我的是幾乎一樣的~ 只是訓練數據不同
一、 基本過程和思想
基本思想是將數據集中視頻及分類標簽轉換為圖像(視頻幀)和其對應的分類標簽,也可以不標注,單獨給一個小視頻標注上分類類別,再采用CNN網絡對圖像進行訓練學習和測試,將視頻分類問題轉化為圖形分類問題。具體步驟包括:
(1) 對每個視頻(訓練和測試視頻)以一定的FPS截出視頻幀(jpegs)保存為訓練集和測試集,將對圖像的分類性能作為所對應視頻的分類性能
(2)訓練一個人物等特征提取模型,並采用模型融合策略,一個特征提取,一個分類模型。特征工程部分通用人物行為,分類模型,訓練自己的類別的分類模型即可。
(4) 訓練完成后載入模型對test set內所有的視頻幀進行檢查驗證,得出全測試集上的top1准確率和top5准確率輸出。
(5)實時檢測。
二 、視頻理解還有哪些優秀框架
第一個 就是我github這個了,比較方便,但不敢排前幾,因為沒有什么集成,
然后MMaction ,就是視頻理解框架了,眾所周知,他們家的東西很棒
第二個就是facebook家的一些了,
再下來基本上就不多了,全面好用的實時框架。
好,所以我們先來說說我的使用過程。
三、效果體驗~使用
體驗官方的一些模型 (模型我已經放在里面了)
將模型放置此處:
首先,請試用我們提供的演示。在sense/examples目錄中,您將找到3個Python腳本, run_gesture_recognition.py ,健身_跟蹤器 run_fitness_tracker.py .py,並運行卡路里_估算 run_calorie_estimation .py. 啟動每個演示就像在終端中運行腳本一樣簡單,如下所述。
手勢:
cd examples/
python run_gesture_recognition.py
健身_跟蹤器:
卡路里計算
三、訓練自己數據集步驟
首先 clone一下我的github,或者原作者github,
然后自己錄制幾個視頻,比如我這里capture 一個類別,錄制了幾個視頻,可以以MP4 或者avi后綴,再來個類別,再錄制一些視頻,以名字為類別。
然后
- 1
這一步,會顯示:
然后,打開這個網址:
來到前端界面
點擊一下start new project
這樣編寫
然后點擊create project 即可制作數據。
但是官方的制作方法是有着嚴重bug的~我們該怎么做呢!
下面,我修改后,可以這樣!
這里請仔細看:
我們在sense_studio 文件夾下,新建一個文件夾:我叫他cvdemo1
然后新建兩個文件夾:videos_train 和videos_valid 里面存放的capture是你的類別名字的數據集,capture存放相關的訓練集,click存放click的訓練集,同樣的videos_valid 存放驗證集,
在cvdemo1文件夾下新建project_config.json ,里面寫什么呢? 可以復制我的下面的代碼:
里面的name 改成你的文件夾名字即可。
就這么簡單!
然后就可以訓練:
python train_classifier.py 你可以將main中修改一下。
將path in修改成我們的訓練數據地址,即可,其他的修改不多,就按照我的走即可,
訓練特別快,10分鍾即可,
然后,你可以運行run_custom_classifier.py
同樣修改路徑即可。
結果就可以實時檢測了
原代碼解讀
同樣的,我們使用的是使用efficienct 來做的特征,你也可以改成mobilenet 來做,有示例代碼,就是訓練的時候,用mobilenet ,檢測的時候也是,只需要修改幾行代碼即可。
efficienct 提取特征部分代碼:
這個InvertedResidual 在這,
我們finetune自己的數據集
構建數據的dataloader
如何實時檢測視頻序列的?
這個問題,主要是通過 系列時間內幀間圖像組合成一個序列,送到網絡中進行分類的,可以在許多地方找到相關參數,比如 display.py :
每個類別只需要5個左右的視頻,即可得到不錯的效果嗷~
歡迎Star github~
.
任何程序錯誤,以及技術疑問或需要解答的,請掃碼添加作者VX::1755337994