在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

移動端人像分割開發

張康康 ? 2018-12-21 14:17 ? 次閱讀

作者 | Video++極鏈科技AI實驗室謝錦濱

整理 | 包包

個人對移動端神經網絡開發一直饒有興致。去年騰訊開源了NCNN框架之后,一直都在關注。近期嘗試將分割網絡移植到NCNN,能夠在手機端實現一些有趣的應用,本文就幾個技術話題作相關介紹。

神經網絡選擇

目前做segmentation常用的一些神經網絡網絡有如下幾個可以選擇:

  • MaskRCNN

  • FCN

  • UNET

  • SegNet

  • Tiramisu

在移動端做人像分割有兩大優勢,首先是隱私,其次是可以做到實時,能夠創造更多玩法。因為UNET模型比較簡單,干脆就從這個入手。下面是UNET網絡結構:


首先我采用了基于keras的版本: https://github.com/TianzhongSong/Person-Segmentation-Keras,訓了一個基本模型,大小為39M, iphone X上15秒處理一幀。明顯這個速度太慢,需要進行改造。

移動端Inference框架

經過調研,粗略比較了幾個神經網絡框架:

b8e564fcbf56462381f0a476d1354f71


其中使用難易程度,主要跟我個人習慣有關。NCNN框架比較好,代碼不多,而且兼容iOS和安卓(臺式機以及嵌入式環境同樣支持),同時底層計算采用匯編做了優化。NCNN只實現神經網絡的forward部分,沒有反向傳播,所以訓練仍舊依賴其他開源框架,現在幾大框架都遵守ONNX協議,理論上各種框架模型之間互相轉換并不存在什么問題,工具也都是開源的。

不過keras沒辦法直接轉成ncnn模型,研究過通過onnx模型做中間跳板,采用了一些開源的轉換工具,也是一堆問題。NCNN支持幾個神經網絡訓練框架:caffe/mxnet/pytorch,在ncnn的github有一篇issue里nihui推薦采用MXNET,因此MXNET也成為了我的首選。其他框架往NCNN轉換工具:

2b40104f5a4a45379aba0c90bf743fad


NCNN轉換Tensorflow模型有問題; Caffe沒有Pytorch和MXNET好用; 最終在MXNet和Pytorch之間選擇了MXNet。

人像數據集

  • https://github.com/lemondan/HumanParsing-Dataset

  • https://github.com/ZhaoJ9014/Multi-Human-Parsing_MHP

  • COCO人像數據集 – 加入后效果質的飛躍

  • ADE20K

網上找了上面幾個數據集,抽取出人像部分,采用基本的flip/crop/rotate操作做了擴充,得到228423張訓練樣本,另外湊了9064張驗證樣本。

模型轉換(MXNET->NCNN

MXNET的UNET版本并沒有現成可用的合適版本。參照其他版本的UNET,自己coding完成一個版本。代碼請參考: https://github.com/xuduo35/unet_mxnet2ncnn。

在這個基礎上訓練完成,用來測試ncnn轉換基本可用。這里提一下轉換過程遇到的一些問題和解決方案。

一個是調用ncnn extract函數會crash,經過調查,發現mxnet2ncnn工具也有bug,blob個數算錯,其次是input層one_blob_only標志我的理解應該是false,不知道什么原因轉換過來的模型這邊是true,導致forward_layer函數里面bottoms變量訪問異常。后來一層層extract出來打印輸出的channel/width/height調查后又發現,自己代碼里unet.py里的name為pool5寫成了pool4,前面的crash跟這個致命錯誤有關系也有直接關聯。

第二個問題是轉成ncnn后的預測結果死活不對。只能一層層去檢查,寫了幾個簡單的工具可以打印中間隱藏層的結果(代碼: https://github.com/xuduo35/unet_mxnet2ncnn/check.py)。在這個基礎之上,發現是第一次反卷積就出了問題(mxnet神經網絡trans_conv6的輸出)。結果完全不一致,按個人理解,反卷積算法會出問題的可能性基本為0,所以把mxnet這一層的權重值打印了出來。再在mxnet2ncnn的代碼里把對應的參數打印,最后發現是num_group出了問題,簡單處理就是把mxnet2ncnn.cpp里的反卷積num_group固定為1,終于解決問題。得到正確的輸出結果:


中間還遇到一些ncnn和mxnet之間圖像格式之類的轉換問題,特別是浮點數的處理,就不啰嗦了。另外,調試過程發現,ncnn的中間層輸出和mxnet的輸出不是完全一致,可能是有一些參數或者運算細節問題,不影響最后mask結果,暫時忽略。

幾個問題

到目前為止還存在幾個問題,1. 模型比較大;2. 單幀處理需要15秒左右的時間(Mac Pro筆記本,ncnn沒有使用openmp的情況);3. 得到的mask結果不是特別理想。針對這三個問題,對網絡結構進行調整。

1. 模型比較大

采取將網絡卷積核數量減少4倍的方式,模型大小下降到2M,粗略用圖片測試,效果也還可以。同時把之前用0值填充圖片的方式,改成用邊界值填充,因為測試的時候發現之前的方式總在填充的邊界往往會出現檢測錯誤。

2. 單幀處理需要15秒左右的時間

按照第一步處理之后,基本上一張圖片只要1秒鐘就處理完成,。在手機上由于NCNN做了優化,經過測試速度是Mac Pro的好幾倍。

3. 得到的mask結果不是特別理想

在權衡模型大小和準確率的基礎上修改UNET網絡結構,具體不再贅述。

最終結果




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

    關注

    0

    文章

    42

    瀏覽量

    4566
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    labview使用tcp接收下位機數據,最大也就200Hz,如何提高速率到500Hz?

    labview使用tcp采集數據,使用了生產者-消費者模式,將接收功能和存儲、顯示功能分割開來,用隊列在中間傳輸數據,但是這樣速率也很慢,最多也就達到200Hz,有沒有別的辦法能夠提升接收速率到500Hz呢?
    發表于 06-11 16:18

    Arm 公司面向移動市場的 ?Arm Lumex? 深度解讀

    子系統(CSS)? ? 在移動的落地形態,Lumex 旨在通過高度集成化的軟硬件方案,解決移動設備在 AI 性能、能效比與開發效率上的挑戰。以下從技術架構、性能突破、應用場景、生態系
    的頭像 發表于 05-29 09:54 ?471次閱讀

    MWC2025亮點放送 探索Arm如何塑造移動技術未來

    ,彰顯了人工智能 (AI) 和移動技術之間的共生關系。 ?Arm 計算平臺賦能從云到邊的 AI 體驗。Arm 通過提供的高能效、高性能計算,致力于不斷演進的技術領域,MWC 正
    的頭像 發表于 03-14 15:40 ?870次閱讀
    MWC2025亮點放送 探索Arm如何塑造<b class='flag-5'>移動</b><b class='flag-5'>端</b>技術未來

    BEM在移動開發中的應用案例

    BEM(Block Element Modifier)在移動開發中的應用案例非常廣泛,它作為一種前端開發中的命名規范和架構方法,旨在提高代碼的可維護性和復用性。以下是一些具體的應用案
    的頭像 發表于 02-12 17:13 ?417次閱讀

    MediaTek天璣移動平臺賦能騰訊會議側AI人像分割模型

    MediaTek 與騰訊會議聯合優化的側 NPU 虛擬背景功能,已在搭載 MediaTek 天璣旗艦芯的終端正式上線。作為雙方初次開展的軟硬件生態合作,此次聯合優化旨在充分利用天璣移動平臺的 AI 算力,為騰訊會議用戶打造更加智能的線上會議體驗。
    的頭像 發表于 11-29 15:30 ?647次閱讀

    畫面分割器怎么調試

    畫面分割器,通常指的是視頻畫面分割器,它是一種可以將一個視頻信號分割成多個小畫面的設備。這種設備廣泛應用于監控系統、視頻會議、多畫面顯示等場景。調試畫面分割器是一個技術性很強的工作,需
    的頭像 發表于 10-17 09:32 ?976次閱讀

    畫面分割器怎么連接

    畫面分割器,也稱為視頻分割器或多畫面處理器,是一種可以將多個視頻信號源分割成單個畫面或多個畫面顯示在單個監視器上的設備。這種設備廣泛應用于監控系統、視頻會議、多媒體展示等領域。 一、畫面分割
    的頭像 發表于 10-17 09:29 ?899次閱讀

    畫面分割器有幾路主輸出

    畫面分割器,也稱為視頻分割器或多畫面處理器,是一種可以將一個視頻信號分割成多個獨立視頻畫面的設備。這種設備廣泛應用于監控系統、視頻會議、多媒體展示等領域,能夠將多個攝像頭的信號整合到一個顯示設備上
    的頭像 發表于 10-17 09:24 ?780次閱讀

    芯盾時代設備指紋技術如何助力移動安全

    隨著移動互聯網的快速發展,移動安全風險頻發。設備指紋技術憑借高精度的設備識別能力,能夠幫助企業提升移動安全防護能力,精準區分合法與風險行
    的頭像 發表于 08-28 09:41 ?938次閱讀

    圖像語義分割的實用性是什么

    圖像語義分割是一種重要的計算機視覺任務,它旨在將圖像中的每個像素分配到相應的語義類別中。這項技術在許多領域都有廣泛的應用,如自動駕駛、醫學圖像分析、機器人導航等。 一、圖像語義分割的基本原理 1.1
    的頭像 發表于 07-17 09:56 ?847次閱讀

    圖像分割和語義分割的區別與聯系

    圖像分割和語義分割是計算機視覺領域中兩個重要的概念,它們在圖像處理和分析中發揮著關鍵作用。 1. 圖像分割簡介 圖像分割是將圖像劃分為多個區域或對象的過程。這些區域或對象具有相似的屬性
    的頭像 發表于 07-17 09:55 ?1785次閱讀

    圖像分割與目標檢測的區別是什么

    圖像分割與目標檢測是計算機視覺領域的兩個重要任務,它們在許多應用場景中都發揮著關鍵作用。然而,盡管它們在某些方面有相似之處,但它們的目標、方法和應用場景有很大的不同。本文將介紹圖像分割與目標檢測
    的頭像 發表于 07-17 09:53 ?2257次閱讀

    機器學習中的數據分割方法

    在機器學習中,數據分割是一項至關重要的任務,它直接影響到模型的訓練效果、泛化能力以及最終的性能評估。本文將從多個方面詳細探討機器學習中數據分割的方法,包括常見的分割方法、各自的優缺點、適用場景以及實際應用中的注意事項。
    的頭像 發表于 07-10 16:10 ?3042次閱讀

    圖像分割與語義分割中的CNN模型綜述

    圖像分割與語義分割是計算機視覺領域的重要任務,旨在將圖像劃分為多個具有特定語義含義的區域或對象。卷積神經網絡(CNN)作為深度學習的一種核心模型,在圖像分割與語義分割中發揮著至關重要的
    的頭像 發表于 07-09 11:51 ?1826次閱讀

    機器人視覺技術中常見的圖像分割方法

    機器人視覺技術中的圖像分割方法是一個廣泛且深入的研究領域。圖像分割是將圖像劃分為多個區域或對象的過程,這些區域或對象具有某種共同的特征,如顏色、紋理、形狀等。在機器人視覺中,圖像分割對于物體識別
    的頭像 發表于 07-09 09:31 ?1300次閱讀
    主站蜘蛛池模板: 国产日本久久久久久久久婷婷 | 免费在线色视频 | 99热久久久久久久免费观看 | 亚洲国产视频一区 | 手机在线黄色 | 日本一区二区三区视频在线观看 | 日本高清午夜色wwwσ | 1024手机在线看 | 色视频一区二区三区 | 男人的午夜影院 | 国产精品久久久香蕉 | 日韩亚射吧 | 国产成人精品系列在线观看 | 午夜影院一区二区三区 | www.午夜视频 | 国产四虎精品 | 正在播放91 | 日本一区二区不卡在线 | 欧美极品在线视频 | 午夜干b| 综合激情婷婷 | 狠狠色丁香婷婷第六色孕妇 | 在线视频免费视频网站 | 国产免费一区二区三区 | 亚洲人成电影在线 | 你懂的视频在线看 | 欧美成人看片一区二区三区 | 日本午夜大片 | 五月婷婷六月爱 | 久久手机视频 | 深夜视频在线播放视频在线观看免费观看 | 欧洲无线区一二区 | 禁网站在线观看免费视频 | 久久久久久久成人午夜精品福利 | 色噜噜噜噜噜 | 日本三浦理惠子中文字幕 | 400部大量精品情侣网站 | 午夜福利国产一级毛片 | 婷婷综合五月天 | 激情五月综合婷婷 | 久色网 |