国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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值為0.9686@0.5IOU。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

    文章

    4838

    瀏覽量

    107745
  • SSD
    SSD
    +關注

    關注

    21

    文章

    3109

    瀏覽量

    122221
  • tensorflow
    +關注

    關注

    13

    文章

    334

    瀏覽量

    62169

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

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

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    神經網絡的初步認識

    日常生活中的智能應用都離不開深度學習,而深度學習則依賴于神經網絡實現。什么是神經網絡神經網絡的核心思想是模仿生物神經系統的結構,特別是大
    的頭像 發表于 12-17 15:05 ?323次閱讀
    <b class='flag-5'>神經網絡</b>的初步認識

    CNN卷積神經網絡設計原理及在MCU200T上仿真測試

    數的提出很大程度的解決了BP算法在優化深層神經網絡時的梯度耗散問題。當x&gt;0 時,梯度恒為1,無梯度耗散問題,收斂快;當x&lt;0 時,該層的輸出為0。 CNN
    發表于 10-29 07:49

    NMSIS神經網絡庫使用介紹

    NMSIS NN 軟件庫是一組高效的神經網絡內核,旨在最大限度地提高 Nuclei N 處理器內核上的神經網絡的性能并最??大限度地減少其內存占用。 該庫分為多個功能,每個功能涵蓋特定類別
    發表于 10-29 06:08

    構建CNN網絡模型并優化的一般化建議

    通過實踐,本文總結了構建CNN網絡模型并優化的一般化建議,這些建議將會在構建高準確率輕量級CNN神經網絡模型方面提供幫助。 1)避免單層神經網絡
    發表于 10-28 08:02

    在Ubuntu20.04系統中訓練神經網絡模型的一些經驗

    構建卷積神經網絡模型 model = models.Sequential()model.add(layers.Conv2D(input_shape=(28, 28, 1), filters=4
    發表于 10-22 07:03

    CICC2033神經網絡部署相關操作

    在完成神經網絡量化后,需要將神經網絡部署到硬件加速器上。首先需要將所有權重數據以及輸入數據導入到存儲器內。 在仿真環境下,可將其存于一個文件,并在 Verilog 代碼中通過 readmemh 函數
    發表于 10-20 08:00

    液態神經網絡(LNN):時間連續性與動態適應性的神經網絡

    1.算法簡介液態神經網絡(LiquidNeuralNetworks,LNN)是一種新型的神經網絡架構,其設計理念借鑒自生物神經系統,特別是秀麗隱桿線蟲的神經結構,盡管這種微生物的
    的頭像 發表于 09-28 10:03 ?1197次閱讀
    液態<b class='flag-5'>神經網絡</b>(LNN):時間連續性與動態適應性的<b class='flag-5'>神經網絡</b>

    【「AI芯片:科技探索與AGI愿景」閱讀體驗】+神經形態計算、類腦芯片

    AI芯片不僅包括深度學細AI加速器,還有另外一個主要列別:類腦芯片。類腦芯片是模擬人腦神經網絡架構的芯片。它結合微電子技術和新型神經形態器件,模仿人腦神經系統機選原理進行設計,實現類似
    發表于 09-17 16:43

    神經網絡的并行計算與加速技術

    隨著人工智能技術的飛速發展,神經網絡在眾多領域展現出了巨大的潛力和廣泛的應用前景。然而,神經網絡模型的復雜度和規模也在不斷增加,這使得傳統的串行計算方式面臨著巨大的挑戰,如計算速度慢、訓練時間長等
    的頭像 發表于 09-17 13:31 ?1122次閱讀
    <b class='flag-5'>神經網絡</b>的并行計算與加速技術

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

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

    神經網絡專家系統在電機故障診斷中的應用

    摘要:針對傳統專家系統不能進行自學習、自適應的問題,本文提出了基于種經網絡專家系統的并步電機故障診斷方法。本文將小波神經網絡和專家系統相結合,充分發揮了二者故障診斷的優點,很大程度上降低了對電機
    發表于 06-16 22:09

    神經網絡RAS在異步電機轉速估計中的仿真研究

    眾多方法中,由于其結構簡單,穩定性好廣泛受到人們的重視,且已被用于產品開發。但是MRAS仍存在在低速區速度估計精度下降和對電動機參數變化非常敏感的問題。本文利用神經網絡的特點,使估計更為簡單、快速
    發表于 06-16 21:54

    基于FPGA搭建神經網絡的步驟解析

    本文的目的是在一個神經網絡已經通過python或者MATLAB訓練好的神經網絡模型,將訓練好的模型的權重和偏置文件以TXT文件格式導出,然后通過python程序將txt文件轉化為coe文件,(coe
    的頭像 發表于 06-03 15:51 ?1190次閱讀
    基于FPGA搭建<b class='flag-5'>神經網絡</b>的步驟解析

    NVIDIA實現神經網絡渲染技術的突破性增強功能

    近日,NVIDIA 宣布了 NVIDIA RTX 神經網絡渲染技術的突破性增強功能。NVIDIA 與微軟合作,將在 4 月的 Microsoft DirectX 預覽版中增加神經網絡著色技術,讓開
    的頭像 發表于 04-07 11:33 ?1162次閱讀

    神經網絡壓縮框架 (NNCF) 中的過濾器修剪統計數據怎么查看?

    無法觀察神經網絡壓縮框架 (NNCF) 中的過濾器修剪統計數據
    發表于 03-06 07:10