操屁眼的视频在线免费看,日本在线综合一区二区,久久在线观看免费视频,欧美日韩精品久久综

新聞資訊


    文來自英特爾資深圖形圖像軟件工程師 郭葉軍在LiveVideoStack線上分享的內容,詳細介紹了FFmpeg中深度學習模塊的歷史、現狀及未來計劃,并針對深度學習模塊總體架構與代碼實踐做詳細解析。


    文 / 郭葉軍

    整理 / LiveVideoStack


    點擊拓展鏈接查看回放視頻


    很高興能有機會在LiveVideoStock做有關于FFmpeg深度學習模塊相關內容的技術分享。


    1 為什么需要在FFmpeg中實現深度學習模塊

    首先,為什么需要FFmpeg深度學習模塊,FFmpeg對輸入的碼流,首先進行解碼,解碼后得到一個個的視頻幀,以及相應的音頻數據等。經過一系列的Filter之后,最后可以進行重新編碼或者直接播放出來。這些filter的功能包括傳統的圖像處理,也包括一些統計功能,比如直方圖等。在深度學習的算法出來之后,由于他太有效了,包括很多的算法功能,例如超分辨率、目標識別、人臉檢測、目標檢測、人臉識別等等,都需要深度學習的算法來實現。所以,我們需要拓展filter的功能,使它可以支持深度學習算法。


    當我們將深度學習的算法加入到FFmpeg的Filter之后,Filter就擁有了很多計算機視覺相關的算法。那么它與比如說OpenCV的計算機視覺軟件包有什么關系?這個問題我們可以從兩個角度來看:在支持深度學習算法之前,FFmpeg與OpenCV是相互配合、相互支持的一種關系。例如在OpenCV中,可能需要先調用FFmpeg進行視頻解碼,解碼完成后回到OpenCV中進行相應的計算機視覺算法應用。此外,在FFmpeg中有一些Filter,這些Filter背后調用的就是OpenCV,通過這種方式來使用OpenCV中的一些算法功能。但是在比較新版本的OpenCV中,接口語言切換成了C++,而在FFmpeg中要求的是C代碼和并且調用的是C庫的接口, 因此FFmpeg基于OpenCV的Filter就很難用上OpenCV的最新算法功能,所以在這種情況下就很有必要在FFmpeg增加深度學習模塊來支持多個Filter應用深度學習算法。


    從另外一個角度來看,在之前,對于計算機視覺的算法開發者來說,會在OpenCV中進行算法實現,代碼完成后基本不太可能再次在其它應用中重新實現一次,那么這也就造成了很多的計算機視覺算法都只在類似于OpenCV的軟件包中完成。而在深度學習模塊,算法實現的載體已經從以前的代碼變成了模型文件,模型文件可以很容易的分發出去,被各個軟件包通過恰當的方式進行加載、執行,從而實現一些深度學習算法的功能。綜上所述,無論從什么角度來看,我們都有必要在FFmpeg中增加深度學習相應的模塊。在增加深度學習模塊之后,對于FFmpeg的開發者來說開發工作會更靈活,速度更快。想象一下,在這之前對于FFmpeg的開發者來說,需要首先調用FFmpeg的API進行解碼,解碼完成后,再編寫代碼或者調用第三方庫等實現深度學習算法的應用,最后再回到FFmpeg中進行編碼。而深度學習模塊就相當于將之前用戶需要自行開發的深度學習實現相關的部分轉移到FFmpeg內部,以Filter的形式對外暴露,因此對于FFmpeg的開發者來說開發變得更加便捷。


    2 FFmpeg深度學習模塊的發展歷史

    其實在2018年FFmpeg才開始支持深度學習模塊,是經過一個GsoC項目,即谷歌關于鼓勵在校學生做實習生的活動,鼓勵大家進入各個開源社區做一些代碼工作。因為具體的代碼實現一般都在7、8月份,所以稱為Summer of Code,項目的效果還不錯。2018我主要通過郵件參與討論深度學習模塊如何應用,但在GsoC2018完成之后,發現沒人進行接下來的維護。于是在2019年,我基于這一部分做了很多工作,包括貢獻了絕大部分的代碼。除此之外,大師兄劉歧還帶了一個GsoC2019的項目,帶領一名北大的學生基于深度學習的模塊做了些有關Filter的工作。2019年年底,我成為了深度學習模塊的Maintainer。


    到了2020年,發生了一個比較大的變化是我們將OpenVINO(英特爾的一個深度學習的推理引擎)加入到了FFmpeg的深度學習模塊中,同時也開展了一個GsoC項目,希望將深度學習模塊中的一些功能進行優化,能夠使用匯編語言做一些速度的提升。希望在2021年看到GsoC2021在FFmpeg深度學習模塊中的一些項目進展。


    3 FFmpeg深度學習模塊總體架構


    深入到FFmpeg中看一下深度學習模塊的總體架構:FFmpeg是由多個庫組成的,上圖左邊列出了部分:libavcodec是音視頻解碼相關的、libavdevice是音視頻輸入輸出相關的、libavformat是如何將音視頻碼流組合到一個文件中、libswscale是對視頻幀的一些處理、libswresample是對音頻數據的重采樣,以及所有util相關的Tool放在libavutil中。與深度學習模塊密切相關的是libavfilter模塊,因為我們的深度學習模塊目前主要是為Filter服務的,所以放在libavfilter模塊中。對外,我們的深度學習模塊可能會調用TensorFlow的 C動態庫,也可以調用OpenVINO的C動態庫,也就是說需要提前在系統中安裝TensorFlow或者OpenVINO的C庫的.so文件、.h文件等等。


    對于libavFilter內部,前面提到,我們可以有很多基于深度學習算法的Filter,也可以調用多個深度學習模塊,所以中間出現DNN接口層,對Filter以及下面的backend進行解耦。目前系統中有三個Filter與深度學習算法相關。第一個是Super-Resolution的Filter,是在GsoC2018的項目中加入的,支持了兩個算法模型:一個是ESPCN,即輸入的是一張低分辨率的圖片,輸出的是高分辨率圖片,模型直接進行超分應用;另外一個模型叫做SRCNN,首先將一張低分辨率的圖片經過快速放大,變成一張高分辨率但質量較為一般的圖片,這張圖片經過SRCNN算法之后,分辨率保持不變、圖片質量會變得更好,在后面我們會用到SRCNN算法舉例進行說明。


    第二個Filter叫derain:輸入一個RGB格式的圖片,調用的模型的算法可以將圖片中的雨滴去除掉,這是在GsoC2019完成的。我們分析前面兩個Filter就會發現,其實這兩個Filter實現的算法功能是在模型文件中體現的,在Filter里面的代碼更多的是將FFmpeg的數據結構與模型文件的輸入輸出進行連接。因此從這個角度來看,我們就沒有必要為每一個算法功能實現一個Filter,我們可以做一個比較general的Filter —— dnn_processing。只要調用這個Filter,無論模型文件提供的算法功能是什么,只要將FFmpeg與模型文件執行前后的數據流串通起來,就可以實現任何與圖像處理相關算法的支持。


    下面一層就是三個backend:TensorFlow backend對外調用TensorFlow的C動態庫,OpenVINO backend就會對外調用OpenVINO的C動態庫。如果考慮到系統中既沒有TensorFlow也沒有OpenVINO,我們可以選擇轉換到Native backend,即相應的代碼實現都在FFmpeg代碼樹中,可以直接拿來用。后面將會以Super-Resolution里面的算法模型為例,通過dnn_processing這個Filter舉例說明如何使用這三個不同的后端。


    4 FFmpeg深度學習模塊接口



    目前接口主要分為三塊:第一,有一個最基本的函數,輸入的是backend type,可選值是Native backend、TensorFlow backend或者OpenVINO backend,根據這個backend會返回一個DNNModule。在DNNModule數據結構中首先要做的就是給出模型文件所在的路徑,告知Module加載模型文件,加載完成后會在Filter中進行判斷,查詢加載的模型輸入的信息(包括輸入NHWC中的每個維度的數字是什么,formate是float32、RGB還是int8等等)。查到相關信息后再與FFmpeg的數據流進行比較是否能夠匹配,如果channel的數據匹配不上,則返回error,如果是其它的一些數據結構的大小有變化的話,可以提前做一些scale的轉換,或者做color spaceconvertion的一些變換。當一切都變換好之后,我們就會在為模型設置好輸入、輸出之后完成執行。當然,用set_input_output來設置模型的輸入/輸出主要是將輸入/輸出的變量名字告知Model,方便后續執行時清楚的知道要將FFmpeg的數據填充到模型的哪個地方,以及模型的哪個地方是輸出,獲取到輸出的數據重新放到FFmpeg的pipeline里。然后對每個Filter進行這樣的操作,做模型的推理,當所有的碼流或者圖片執行完畢之后,執行Model即可。以上就是深度學習模塊主要接口的使用方法。


    5 三種后端應用實例


    5.1 重現編譯FFmpeg

    前面提到深度學習模塊有三種后端,分別是OpenVINO、TensorFlow和Native。下面舉例說明應該如何應用:首先第一步,TensorFlow backend在默認編譯FFmpeg時是非enable的,所以我們需要加入一個選項,告知FFmpeg的build system,需要enable TensorFlow。在此之前我們要在Tensorflow的官方網站下載1.14(建議)版本,解壓、安裝到系統目錄下,包括.h文件和.so文件,然后再在configure進行以上配置,就可以生成支持TensorFlow backend的FFmpeg的可執行程序了。


    如果需要用的是Native backend,任何選項都不需要加,因為相應的代碼已經直接寫在代碼樹中。


    如果是使用OpenVINO backend,則與Tensorflow backend類似,也要加入選項,告知FFmpeg接下來我們要啟用OpenVINO backend。一般來說,OpenVINO的默認安裝目錄不是系統目錄,所以需要增加一些額外的cflags,指出OpenVINO的頭文件在哪里,用ldflags指出OpenVINO的.so庫在哪里。在configure的同時,其內部會寫一個最簡單的OpenVINO應用程序進行編譯并且執行,只有一切都通過,才會啟用OpenVINO的后端,因此前面需要加LD_LIBRARY_PATH指出OpenVINO的.so所在的位置。


    通過這樣的方式,我們就可以得到三種后端,即Tensorflow+backend的后端、Native+backend的后端或者OpenVINO+backend的后端,得出的結果都是一個可執行的程序,叫ffmpeg或者ffplay等等。


    5.2 準備SR模型文件


    準備好可執行的程序之后,我們就可以準備Super-Resolution的模型文件了。首先我們要來準備TensorFlow格式的模型文件。一開始這個是在vf_sr.c的Filter中寫的,也就是說我們需要下載一個第三方的庫,運行python腳本,就會生成srcnn.pb。這就是基于Tensorflow格式的模型文件,包括了已經訓練好的數據。


    在這個基礎上,如果我們需要使用Native backend,就需要在我們的FFmpeg/tools/python目錄下調用convert.ty這個python腳本,它的輸入就是Tensorflow的pb文件srcnn.pb。然后會生成在FFmpeg中自定義的一種新的格式——srcnn.model文件,這個.model文件就可以被Native backend加載和執行,這是我們在FFmpeg中自定義出來的,比較簡潔。


    如果需要使用OpenVINO后端,其實OpenVINO可以支持多個不同格式,例如Tensorflow格式、通過中間轉換的方式支持pyTorch格式,支持ONNX格式等等。OpenVINO的源代碼中有一個model-optimizer目錄,在這個目錄中有若干python腳本。例如mo_tf.py腳本文件就可以將Tensorflow格式的模型文件轉換為OpenVINO支持的格式,OpenVINO的模型文件有兩個,分別是.xml和.bin文件,我們只需要將這兩個模型文件放在同一個目錄下即可。


    如果大家想重現上述內容,而轉換又比較麻煩的話,大家可以在圖中最下方的網址中下載相應文件。


    5.3 應用SR算法

    準備好相應的程序和模型文件后,接下來要執行的FFmpeg的命令行如圖所示。


    TensorFlow backend命令行:


    -i:輸入文件是什么。一般來說FFmpeg處理的是視頻。在這里為了方便展示,我們輸入一個.jpg文件,解碼之后就經過若干的Filter。由于我們的模型需要的是YUV格式,我們首先應用了format的Filter進行格式的轉換,以確保輸出的是YUV格式。然后我們調用scale的Filter,其目的是為了將輸入圖片的長和寬簡單的放大一倍,得到高分辨率低質量的一張圖片。這張圖片再經過dnn_processing的Filter,就可以變成相同分辨率高質量的圖片。在該Filter中的參數部分,我們需要指出后端是Tensorflow,其模型文件是什么,以及模型的輸入輸出的變量名是什么,才能將FFmpeg的數據結構與模型串聯。


    如我們需要的是Native backend,只需要改變backend的flag,并改變模型文件的文件名即可。同樣的,對于OpenVINO來講,其它參數都保持不變,只要將OpenVINO的flag傳進去,并調整模型文件為srcnn.xml。Filter會根據flag經過dnn interface再調用希望應用的backend,最終完成相應的算法功能。


    6 下一步計劃


    那么接下來我們會有哪些新的實現計劃?


    第一,我們現在執行的是同步的處理,即給到一個frame,執行完畢后才會返回,這樣在有些時候會影響整體效率。因此接下來我們會實現一個異步的執行,即在接收到一個視頻幀后,直接將視頻幀輸入到深度學習模塊中,在推理完成之前返回調用,希望能夠加快處理的速度。并且在這個基礎上,我們就可以支持batch support,也就是每次推理并非一幀一幀進行,而是支持一次多幀的處理,盡可能用上下面硬件的并行處理功能。


    除此之外,剛才一直強調的模型的輸入輸出與FFmpeg的數據結構之間需要做一些恰當的轉換。由于模型的輸入千變萬化,存在很大可能性,而目前只是支持一些比較固定模式的轉化,因此希望后續可以加入一些比較靈活的轉化。再接下來,因為不同的backend會有自己的特性,需要單獨設置flag,那么我們就需要在接口中為每個backend實現其私有的操作選項,從Filter向下傳遞到相應的backend中。另外,從Filter的角度來講,其實還有很多事情是可以做的。例如目前增加的Filter只是可以用來對圖片進行處理,而沒有實現分析的功能,例如檢測和識別等這些都是下一步需要做的。甚至包括音頻相關的Filter,例如將識別音頻轉化為文字內容等等。


    最后以FFmpeg深度學習模塊Maintainer的角色,非常歡迎大家對FFmpeg深度學習模塊提出建議或意見,包括增加更多的基于深度學習模塊的Filter,歡迎大家一起討論。



    最后為大家推薦一本書籍《OpenCV深度學習應用與性能優化實踐》。書中主要講解了OpenCV深度學習模塊中加速相關的內容,很多加速的代碼都是由作者實現并貢獻出來的,并且將實現時的一些想法都寫入了書中,算是比較少見的一手信息。在書籍的最后,我們還介紹了一個完整的人臉活體檢測的過程。包括先將人臉檢測出來,再確保該檢測出來的人臉是一個真實的人,不是視頻、圖片或者面具等,即所謂的“活體”。確保為活體之后,再進行識別這個人是誰。即從檢測到防欺詐再到識別的全過程,整個過程包括源代碼都在書中有詳細介紹,有需要或者有興趣的朋友可以了解一下。

    https://www.livevideostack.cn/video/online-gyj/

    點擊上方關注,All in AI中國

    OpenCV是一個基于BSD許可(開源)發行的跨平臺計算機視覺庫,有進行物體識別、圖像分割、人臉識別、動作識別等多種功能,可以在Linux、Windows、Android、Mac OS等操作系統上運行,以輕量級、高效著稱,且提供多種語言接口。今年加入了深度學習DNN模塊,那么如何理解,它的加入又帶來了什么樣的價值?

    嘉賓簡介

    趙娟,Intel亞太研發有限公司資深軟件工程師、項目經理,她來自Intel 開源技術中心(Opensource Technology Center OTC)。Intel OTC幫助Intel打造開源社區促進企業數字化轉型,并利用開源新技術激發全產業創新活力。在OTC, 她主要帶領Media Processing和Media Framework團隊,主要關注開源項目中視頻處理和編解碼的算法與加速。

    今年2018年10月17日~19日,由IT168旗下ITPUB企業社區平臺主辦的第十屆中國系統架構師大會(SACC2018)上趙娟老師將會針對如何便利的使用OpenCV深度學習模塊更快的搭建出用戶的程序、深度學習的瓶頸和應用、OpenCV 的架構、深度學習庫的介紹和應用、如何理解OpenCV的深度學習模塊等問題展開深度討論,今天小編先帶大家一塊兒探探路。以下為采訪實錄。

    AI在各業務范圍內開枝散葉

    ITPUB:您認為人工智能現在處在一個什么樣的階段?

    趙娟:我認為人工智能已經經歷這么多年的發展,在framework領域已經逐漸成熟。而在各業務范圍的開枝散葉,是目前大的趨勢。舉一個例子,人工智能和AR,VR都有結合。在車載360度環視環境中,可以進行行人和障礙物檢測。

    ITPUB: 未來的發展方向如何?

    趙娟:目前我們看到的人工智能的應用,相對而言還比較窄,在未來,針對同一場景,做各種不同的智能檢測,反饋會是一個趨勢。目前在車載的智能應用,在機器人的系統開發中已經有了一些前沿的討論和研發。比如今年CVPR的最佳論文,taskonomy研究遷移學習,提供含室內環境20幾個的任務的bank。雖然文章討論的亮點是在于節約樣本,但是這也是為同時做多任務處理提供了非常好的樣例。

    還是以車載為例,在同一時間,它需要分析周邊環境,需要同時進行多方面的分析,包括路線、行人、障礙物。目前,我們大部分是使用高分率雷達和激光雷達結合深度完成,現在已經有一些純粹基于視頻的方案了。

    至于如何在各業務領域落地,一時間也不會有一個統一的方法,看各巨頭和新興企業之間的對客戶的博弈。比如在邊緣計算領域會提供一些低成本低功耗快速精減服務,而云計算也會在提高準確性、處理速度和低延時方面向邊緣計算提供補充。最終的目的,是改善各層次消費者的生活,降低社會成本。

    ITPUB:您認為視頻行業會在哪些關鍵部分和階段與AI技術產生“火花”?

    趙娟:如果說火花,其實現在就已經非常火了。我認為目前最大的火花,還在于車載和機器人兩個領域,結合邊緣和云計算,會更多的深度應用。同時對視頻處理的效率、性能、延時提出了高要求。

    ITPUB: 當初AI技術是如何與現有的系統進行融合的?

    趙娟:我們接觸AI源于四年前Michael Fu (Intel,我們base在JF的老板,帶Audio/Videol團隊 )的OpenCL的策略的一部分,到今年的Vulkan為DNN加速一切很自然。和Pisarevsky Vadim的合作非常順暢。

    ITPUB :這之間遇到什么挑戰您能談談么?

    趙娟:說起挑戰,是Google平臺(特別是Android)的加速引發,隨著Google也在推進Vulkan,所以我們迎接這個趨勢,也開始了一些path finding,目前也有1萬6千多行代碼和Vadim的團隊review。

    OpenCV 的深度學習魅力

    ITPUB:今年OpenCV增加了深度學習模塊,您能否簡單介紹下最新的進展情況和應用實踐?

    趙娟:OpenCV是一個非常有歷史的開源項目,受益群眾特別廣。它在3.3時開始將深度學習模塊從opencv_contrib移到OpenCV repo。它主要關注于inference。在framework層面,有caffe, caffe2, tensorflow,那為什么還會有OpenCV DNN呢?設計初衷是在inference時,方便不同框架通過同一個interface來做inference。同時OpenCV在圖像預處理和后處理中已經提供了非常豐富的方法。

    目前它的DNN的模塊加入了Intel的OpenVino的加速,來滿足Intel不同平臺的需要。 OpenVINO的全稱是Open Visual Inference & Neural Network Optimization。除此之外,OpenCV DNN也包含其他的backend, 比如Halide backend,經過優化的CPU和OpenCL backend以及目前正在進行中的Vulkan backend。OpenCV DNN中有提供非常多的sample,比如人臉檢測、圖像風格轉換,等等。 這里面有很多的工作來自于俄羅斯團隊。我們團隊前赴后繼的在OpenCV DNN 的Framework以及Backend方面提供優化和加速算法。

    ITPUB: 在具體的應用過程中,您比較關注哪些性能方面的優化?

    趙娟:談到應用,以前,我們團隊和Pisarevsky Vadim(OpenCV Maintainer,來自Intel俄羅斯)一起,幫助OpenCV DNN提供了OCL的硬件加速。目前我們更關注于使用新的技術對NN進行加速。比如Vulkan。

    ITPUB:處于當前的階段下,您認為深度學習DNN模塊的導入將帶來怎樣的價值?比如開發人員的準入門檻、視頻處理的性能優化等方面。

    趙娟:在我今年和應屆生、學校的老師以及一些論壇中的人有過討論后,驚喜的發現已經有人在使用OpenCV DNN。OpenCV DNN使用起來非常簡單,也有和Java, python結合。這降低了研發人員的準入門檻。結合OpenCV的本身的圖像預處理、后處理,讓整個pipeline更簡潔。

    ITPUB:您目前帶開源技術中心media framework和media processing,專注于Intel的開源生態,服務于Intel各產品部門的需求,據您經驗,在視頻處理方面有哪些坑?

    趙娟:談起視頻處理里的坑,有一個訴求是經久不變的,0-Copy。這個需要深入理解整個pipeline中對buffer的管理和傳遞。另一個坑是忘記打開硬件加速。用戶有時并不是直接使用FFmpeg/gstreamer,OpenCV,而是通過上層如HandBrake,JavaCV。這時需要檢查所依賴的FFmpeg/gstreamer,OpenCV是否已經打開了硬件加速。

    有關SACC

    ITPUB:今年是SACC大會的第十年,作為《機器學習與深度學習》專場的演講專家,在您看來,本次專場,能幫助聽眾解決企業哪些方面的問題?能為聽會者帶來哪些收益?

    趙娟:其實,這是我第一年參加SACC。令我特別高興的是,我在來參會嘉賓中看到了很多熟人。如果大家有對各種視頻處理,360圖像拼接,與深度學習相結合方面,或者硬件加速的問題,我樂意答疑解惑。

    ITPUB:對于本屆大會,您有什么想對參會者說的嗎?

    趙娟:我還是套用一句話吧,擼起袖子加油干。目前我們團隊打算寫一本OpenCV深度學習有關的書,來幫助大家。

    舊時王謝堂前燕,飛入尋常百姓家。深度學習在近兩年的發展中,走出學術圈,逐步應用在各行各業,更多關于深度學習的技術干貨盡在IT168 旗下 ITPUB 企業社區平臺主辦的第十屆中國系統架構師大會(SACC2018)。

網站首頁   |    關于我們   |    公司新聞   |    產品方案   |    用戶案例   |    售后服務   |    合作伙伴   |    人才招聘   |   

友情鏈接: 餐飲加盟

地址:北京市海淀區    電話:010-     郵箱:@126.com

備案號:冀ICP備2024067069號-3 北京科技有限公司版權所有