女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何實現基于SSD神經網絡構建實時手部檢測

zhKF_jqr_AI ? 來源:未知 ? 作者:佚名 ? 2017-12-22 08:00 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

來源:Victor Dibia編譯:weakish

編者按:傳統的追蹤檢測物體方法大多基于規則,面對一些復雜情況時(光照、遮蔽、視角)表現不佳。而快速神經網絡的興起,使神經網絡應用于實時物體追蹤檢測成為可能。IBM研究院研究員(Research Staff Member)Victor Dibia在本月初發文介紹了如何使用Tensorflow框架基于SSD神經網絡構建實時手部檢測器。

本文記錄了使用Tensorflow(Object Detection API)訓練一個手部檢測器的步驟和代碼。我主要感興趣的是實時檢測桌子上的手。我希望本文能夠展示如何將神經網絡應用于追蹤手部(第一人稱視角和其他視角),并取得良好的結果。

可以從Github獲取所有的代碼(包括訓練好的模型)。

下圖是檢測器的實時演示:

和任何基于DNN/CNN的任務一樣,流程中成本最高的(也是風險最大的)部分是尋找或創建正確的(標注過的)數據集。我首先嘗試了牛津手部數據集進行了實驗(結果不好)。我接著嘗試了Egohands數據集,這個數據集更符合我的需求(第一人稱視角、高質量圖像、手部標注)。

一些fps數字:

21 FPS使用320 * 240圖像,運行時無可視化結果。

16 FPS使用320 * 240圖像,運行時可視化結果

11 FPS使用640 * 480圖像,運行時可視化結果(上圖)

以上數據是在MacBook ProCPU(i7,2.5GHz,16GB)上測試的結果。

動機——為什么使用神經網絡追蹤/檢測手部?

計算機視覺領域現在有若干追蹤方法。湊巧的是,其中許多方法是基于規則的(例如,基于紋理和邊界特征來提取背景,使用色彩直方圖和HOG分類器來區分手和背景等),因而它們的魯棒性不是非常好。例如,如果背景不同尋常,或者照明條件的急劇變化導致了膚色的急劇變化或追蹤物被遮蔽,這些算法可能會很困惑。(可以參考這篇關于HCI領域估計手部姿態的綜述:https://www.cse.unr.edu/~bebis/handposerev.pdf)。

快速移動或者手部角度比較特殊時會出現檢測不到的情況

有了足夠大的數據集,神經網絡提供了訓練表現良好的模型的機會,同時應對了現有對象追蹤/檢測算法的挑戰——多樣化的/差的照明條件,多化的視角甚至遮蔽。神經網絡用于實時跟蹤/檢測的主要缺陷是,它們可能是很復雜的,與僅作追蹤的算法比相對較慢,并且收集一個精良的數據集成本可能相當高。但隨著神經網絡的快速發展,情況正在改變。

此外,深度學習框架(例如tensorflow的Object Detection API)簡化了針對自定義物體檢測的模型的訓練過程,使這個領域的工作變得更加容易上手。更重要的是,ssd、faster r-cnn、rfcn等快速神經網絡模型如ssd,更快的r-cnn,rfcn(見這里)等的出現使神經網絡成為實時檢測(和追蹤)應用的有吸引力的候選者。在HCI領域(如輸入設備等),有很多像這樣的魯棒性很強的手部追蹤應用。

如果你對訓練檢測器的過程不感興趣,你可以直接跳到應用模型檢測手部的那節。

噪雜背景和遮蔽

訓練模型是一個多階段過程(匯總數據集、清洗,分割訓練、測試集并生成推理圖)。雖然我簡要描述了這些部分的細節,但還有其他一些教程更詳細地介紹如何使用tensorflow Object Detection API。如果對從頭開始訓練一個定制的檢測器感興趣,我建議你通讀這些教程。

Tensorflow的數據預備和網絡訓練

Egohands數據集

手部檢測器模型使用了Egohands數據集中的數據的。這個數據集效果不錯的原因有幾個。 它包含優質的像素級別標注(> 15000個摳像標注),其中有4800張圖像包含手部。所有的圖像都是基于第一人稱視角(Google glass)拍攝的,這些圖像取自48個不同的環境(室內,室外)和活動(玩紙牌,下國際象棋,搭積木,解決謎題等)。如果你將使用Egohands數據集,可以按如下方式引用它:

Bambach, Sven, et al. “Lending a hand: Detecting hands and recognizing activities in complex egocentric interactions.” Proceedings of the IEEE International Conference on Computer Vision. 2015.

Egohands數據集用多邊形(白點)圈出了每只手

Egohands數據集(包含標注數據的zip文件)包含48個文件夾,每個文件夾對應于視頻采集的地點(每個文件夾包含100張圖片)。


— LOCATION_X

— frame_1.jpg

— frame_2.jpg

— frame_100.jpg

— polygons.mat // 標注

— LOCATION_Y

— frame_1.jpg

— frame_2.jpg

— frame_100.jpg

— polygons.mat // 標注

轉換數據至Tensorflow格式

首先需要將Egohands數據集轉換為適用于Tensorflow的格式(tfrecord)。Github 倉庫中包含一個egohands_dataset_clean.py腳本,它可以幫助生成這些csv文件。

下載egohands數據集

重命名所有文件,在文件名中包含其目錄名稱,以確保每個文件名都是唯一的

將數據集分成訓練(80%)和測試(20%)兩個文件夾。

讀入每個文件夾中的“polygons.mat”,生成包圍盒,并將其可視化以確保正確。

一旦腳本運行完畢,你應該有一個包含訓練和測試文件夾的圖像文件夾。每個文件夾中還應該包含一個用于生成tfrecords的csv標注文件,文件名分別為train_labels.csv和test_labels.csv。

接著,將數據集和csv文件轉換為tfrecord。請參考Harrison提供的教程了解如何轉換(https://pythonprogramming.net/creating-tfrecord-files-tensorflow-object-detection-api-tutorial/)。如果你在本地訓練,這個教程還介紹了如何在本地啟動培訓進程。如果你使用GCP之類的服務在云端訓練,請參考這個教程(https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/running_on_cloud.md)。

注意:雖然egohands數據集為手部提供了四個單獨的標簽(自己的左手、自己的右手、他人的左手、他人的右手),但本文只對一般的“手”感興趣,因此上面的腳本將所有的訓練數據都標記為“手”。你可以修改訓練腳本以生成支持4個標簽的tfrecord。

訓練手部檢測模型

預備好數據集后,接下來的任務就是在這個數據集上訓練模型。我們可以使用遷移學習來縮短訓練整個模型所需的時間。這意味著我們可以找一個已經在相關的領域(這里是圖像分類)訓練過的現有模型,并重新訓練它最后一層或幾層網絡來檢測手部。棒!考慮到神經網絡有時候有幾千甚至幾百萬參數,這些參數可能需要幾周或幾個月的時間來訓練,遷移學習有助于縮短訓練時間,可能縮短到幾小時。實際上,Tensorflow就提供了一些模型(在tensorflow model zoo),我選擇ssd_mobilenet_v1_coco模型作為起點,因為它是目前最快的機型(之一,參見SSD研究論文),訓練過程可以在你本地的CPU機器上完成,這可能需要一段時間,或者在(云)GPU機器上訓練,這樣快很多(我正是這么做的)。作為參考,在我的MacBook Pro(從源碼編譯tensorflow以充分利用mac的cpu架構的特性)上,我取得的最大訓練速度是每步5秒,而在GPU上則是每步 0.5秒。也就是說,在我的mac(i7,2.5GHz,16GB)上運行20萬步需要約12天,而在GPU上需要約5小時。

隨著訓練過程的進展,我預期總損失(錯誤)會降低到可能的最小值(大約為1或更低)。通過觀察tensorboard圖形上顯示的總損失(見下圖),應該可以了解到訓練過程何時完成(總損失不會因更多迭代/步驟而下降)。我運行了20萬步訓練(花了大約5小時),在總損失(錯誤)值2.575處停止訓練。(現在反思一下,我本可以在大約5萬步處停止訓練,總損失值也差不多)。使用tensorflow,你還可以并發運行評估,評估你的模型在測試數據上的表現。衡量表現的常用指標是平均精確率(mean average precision,mAP),它是一個總結精度-召回曲線下面積的數字。mAP是衡量模型表現的度量,模型的表現指生成與我們的測試數據集中的摳像包圍盒至少有50%重疊區域的包圍盒。對于這里訓練的手部檢測器,mAP值為[email protected]。mAP取值范圍為0-1,越高越好。

最終的損失值為2.275,mAP為0.9686

訓練完成后,導出訓練好的推理圖(frozen_inference_graph.pb)(具體步驟參見前文提到的教程),將其保存在hand_inference_graph文件夾中。現在是時候做一些有趣的檢測了。

使用檢測器檢測和追蹤手部

將檢測器應用到Youtube視頻

如果你還沒有安裝好Tensorflow,請依照這個教程安裝Tensorflow及其object detection api(https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/installation.md)。

檢測手部的一般步驟如下:

加載frozen_inference_graph.pb

讀取輸入圖像(來自實時視頻流、視頻文件或靜態圖像)

檢測手部并可視化包圍盒

GitHub倉庫中有兩個腳本,整合了以上步驟:

detect_multi_threaded.py:讀取攝像頭視頻輸入并進行檢測的多線程實現。

detect_single_threaded.py: 和上面的腳本一樣,只不過它是單線程的。適用于視頻文件。

最重要的,代碼倉庫中的frozen_inference_graph.pb包含了一個基于SSD訓練好的模型,你能很容易地將它導入你的tensorflow應用來檢測手部。

一些優化的想法

顯著提升表現的因素:

線程:從攝像頭讀取圖像是一個負擔很重的I/O事件,如果在主應用線程上運行它,可能會減慢程序。我實現了Adrian Rosebuck的一些在多個工作線程上并行捕捉圖像的好想法。基本上,這增加了約5 FPS。

新接觸OpenCV的人可能沒考慮到cv2.read()方法返回BGR格式的圖像。 確保在檢測之前將其轉換為RGB(否則的話,精確率會大大降低)。

保證你的輸入圖像使用較小的尺寸將增加fps,同時不會帶來任何顯著的精確率下降(我使用了約320×240的圖像,而不是我的攝像頭默認提供的1280×720圖像)。

組合效果不錯的追蹤算法也能提升表現,我仍在嘗試這方面的優化。如果你有優化的想法,歡迎分享!

有很多手的隨機圖片顯示了檢測器的一些局限

注意:檢測器確實反映了與訓練集相關的一些限制。包括非第一人稱視角、非常嘈雜的背景(手山手海),有時甚至是膚色。使用更多的數據有機會改善這方面的表現。

集成多DNN

讓事情變得更有趣的一種方式是將我們對“手”的位置的新知識與經訓練用于識別其他物體的檢測器整合起來。不幸的是,雖然我們的手部檢測器確實可以檢測到手部,但它不能檢測到其他物體。 要創建一個可以分類多個不同對象的檢測器,意味著要為每個類預備一個數據集并進行訓練,這一過程將十分漫長。

因此,一個潛在的替代策略是探索允許我們高效地交錯用于多種物體的多個預訓練模型的結構,并讓它們檢測單個圖像上的多個物體。

舉例來說,我有興趣了解桌子上的物體相對于同一張桌子上的手的位置。我目前正在研發一個多線程應用,該應用加載多個檢測器,在一張圖像上輸出多個包圍盒。很快我會在后續的文章中介紹這方面的內容。

致謝

這個成果對我而言也是一次緊張的學習Python和Tensorflow的周末課程。沒有Egohands數據集的話,這一切都是不可能的,非常感謝作者們![Harrison][pythongramming]和Dat Tran的tensorflow自定義對象檢測教程對這個學習過程極有幫助。當然,非常感謝Tensorflow的作者們!它是一個很棒的框架!

引用本教程

如果你打算引用本教程:

Victor Dibia, Real-time Hand-Detection using Neural Networks (SSD) on Tensorflow, (2017), GitHub repository。


@misc{Dibia2017,

author = {Victor, Dibia},

title = {Real-time HandTrackingUsing SSD on Tensorflow },

year = {2017},

publisher = {GitHub},

journal = {GitHub repository},

howpublished = {url{https://github.com/victordibia/handtracking}},

commit = {b523a27393ea1ee34f31451fad656849915c8f42}

}

歡迎通過Twitter、Github和Linkedin與作者交流。

參考文獻

Bambach, S., Lee, S., Crandall, D. J., and Yu, C. 2015.“Lending A Hand: Detecting Hands and Recognizing Activities in Complex Egocentric Interactions,”in ICCV, pp. 1949–1957

Erol, A., Bebis, G., Nicolescu, M., Boyle, R. D., and Twombly, X. 2007. “Vision-based hand pose estimation: A review,” Computer Vision and Image Understanding (108:1–2), pp. 52–73 (doi: 10.1016/j.cviu.2006.10.012).

Liu, W., Anguelov, D., Erhan, D., Szegedy, C., Reed, S., Fu, C. Y., and Berg, A. C. 2016. “SSD: Single shot multibox detector,” in European conference on computer vision (Vol. 9905 LNCS), Springer Cham, pp. 21–37 (doi: 10.1007/978-3-319-46448-0_2).

Betancourt, A., Morerio, P., Regazzoni, C. S., and Rauterberg, M. 2015. “The Evolution of First Person Vision Methods: A Survey,” IEEE Transactions on Circuits and Systems for Video Technology (25:5), pp. 744–760 (doi: 10.1109/TCSVT.2015.2409731)

GitHub地址:https://github.com/victordibia/handtracking

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 神經網絡
    +關注

    關注

    42

    文章

    4814

    瀏覽量

    103920
  • SSD
    SSD
    +關注

    關注

    21

    文章

    2990

    瀏覽量

    119728
  • tensorflow
    +關注

    關注

    13

    文章

    330

    瀏覽量

    61216

原文標題:基于SSD神經網絡實時檢測手部

文章出處:【微信號:jqr_AI,微信公眾號:論智】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    無刷電機小波神經網絡轉子位置檢測方法的研究

    摘要:論文通過對無刷電機數學模型的推導,得出轉角:與三相相電壓之間存在映射關系,因此構建了一個以三相相電壓為輸人,轉角為輸出的小波神經網絡實現轉角預測,并采用改進遺傳算法來訓練網絡
    發表于 06-25 13:06

    BP神經網絡與卷積神經網絡的比較

    BP神經網絡與卷積神經網絡在多個方面存在顯著差異,以下是對兩者的比較: 一、結構特點 BP神經網絡 : BP神經網絡是一種多層的前饋神經網絡
    的頭像 發表于 02-12 15:53 ?708次閱讀

    BP神經網絡實現步驟詳解

    BP神經網絡實現步驟主要包括以下幾個階段:網絡初始化、前向傳播、誤差計算、反向傳播和權重更新。以下是對這些步驟的詳細解釋: 一、網絡初始化 確定
    的頭像 發表于 02-12 15:50 ?669次閱讀

    BP神經網絡的優缺點分析

    自學習能力 : BP神經網絡能夠通過訓練數據自動調整網絡參數,實現對輸入數據的分類、回歸等任務,無需人工進行復雜的特征工程。 泛化能力強 : BP神經網絡通過訓練數據學習到的特征表示
    的頭像 發表于 02-12 15:36 ?964次閱讀

    什么是BP神經網絡的反向傳播算法

    BP神經網絡的反向傳播算法(Backpropagation Algorithm)是一種用于訓練神經網絡的有效方法。以下是關于BP神經網絡的反向傳播算法的介紹: 一、基本概念 反向傳播算法是BP
    的頭像 發表于 02-12 15:18 ?811次閱讀

    BP神經網絡與深度學習的關系

    BP神經網絡與深度學習之間存在著密切的關系,以下是對它們之間關系的介紹: 一、BP神經網絡的基本概念 BP神經網絡,即反向傳播神經網絡(Backpropagation Neural N
    的頭像 發表于 02-12 15:15 ?896次閱讀

    深度學習入門:簡單神經網絡構建實現

    深度學習中,神經網絡是核心模型。今天我們用 Python 和 NumPy 構建一個簡單的神經網絡神經網絡由多個神經元組成,
    的頭像 發表于 01-23 13:52 ?550次閱讀

    人工神經網絡的原理和多種神經網絡架構方法

    在上一篇文章中,我們介紹了傳統機器學習的基礎知識和多種算法。在本文中,我們會介紹人工神經網絡的原理和多種神經網絡架構方法,供各位老師選擇。 01 人工神經網絡 ? 人工神經網絡模型之所
    的頭像 發表于 01-09 10:24 ?1250次閱讀
    人工<b class='flag-5'>神經網絡</b>的原理和多種<b class='flag-5'>神經網絡</b>架構方法

    卷積神經網絡實現工具與框架

    卷積神經網絡因其在圖像和視頻處理任務中的卓越性能而廣受歡迎。隨著深度學習技術的快速發展,多種實現工具和框架應運而生,為研究人員和開發者提供了強大的支持。 TensorFlow 概述
    的頭像 發表于 11-15 15:20 ?696次閱讀

    卷積神經網絡與傳統神經網絡的比較

    在深度學習領域,神經網絡模型被廣泛應用于各種任務,如圖像識別、自然語言處理和游戲智能等。其中,卷積神經網絡(CNNs)和傳統神經網絡是兩種常見的模型。 1. 結構差異 1.1 傳統神經網絡
    的頭像 發表于 11-15 14:53 ?1919次閱讀

    RNN模型與傳統神經網絡的區別

    神經網絡是機器學習領域中的一種強大工具,它們能夠模擬人腦處理信息的方式。隨著技術的發展,神經網絡的類型也在不斷增加,其中循環神經網絡(RNN)和傳統神經網絡(如前饋
    的頭像 發表于 11-15 09:42 ?1168次閱讀

    如何使用Python構建LSTM神經網絡模型

    構建一個LSTM(長短期記憶)神經網絡模型是一個涉及多個步驟的過程。以下是使用Python和Keras庫構建LSTM模型的指南。 1. 安裝必要的庫 首先,確保你已經安裝了Python和以下庫
    的頭像 發表于 11-13 10:10 ?1631次閱讀

    LSTM神經網絡的基本原理 如何實現LSTM神經網絡

    LSTM(長短期記憶)神經網絡是一種特殊的循環神經網絡(RNN),它能夠學習長期依賴信息。在處理序列數據時,如時間序列分析、自然語言處理等,LSTM因其能夠有效地捕捉時間序列中的長期依賴關系而受到
    的頭像 發表于 11-13 09:53 ?1627次閱讀

    Moku人工神經網絡101

    Moku3.3版更新在Moku:Pro平臺新增了全新的儀器功能【神經網絡】,使用戶能夠在Moku設備上部署實時機器學習算法,進行快速、靈活的信號分析、去噪、傳感器調節校準、閉環反饋等應用。如果您
    的頭像 發表于 11-01 08:06 ?694次閱讀
    Moku人工<b class='flag-5'>神經網絡</b>101

    matlab 神經網絡 數學建模數值分析

    matlab神經網絡 數學建模數值分析 精通的可以討論下
    發表于 09-18 15:14