開(kāi)源AI模型生產(chǎn)平臺YMIR加速視覺(jué)模型開(kāi)發(fā)與迭代 | 云天勵飛未來(lái)工廠(chǎng)技術(shù)總監胡文澤主講回顧
來(lái)源:云天勵飛 編輯:VI菲 2022-06-07 11:17:45 加入收藏 咨詢(xún)

所在單位: | * |
姓名: | * |
手機: | * |
職位: | |
郵箱: | * |
其他聯(lián)系方式: | |
咨詢(xún)內容: | |
驗證碼: |
|
前言
5月25日,智東西公開(kāi)課聯(lián)合云天勵飛策劃的「開(kāi)源AI模型生產(chǎn)平臺YMIR公開(kāi)課」順利完結直播。公開(kāi)課由YMIR核心開(kāi)發(fā)成員、云天勵飛未來(lái)工廠(chǎng)技術(shù)總監胡文澤主講,主題為《開(kāi)源AI模型生產(chǎn)平臺YMIR加速視覺(jué)模型開(kāi)發(fā)與迭代》。
胡文澤博士首先快速介紹了AI應用開(kāi)發(fā)的背景,之后比較了AI模型開(kāi)發(fā)與軟件開(kāi)發(fā)的不同,并重點(diǎn)解讀了以數據為中心的開(kāi)發(fā)方式。最后,他還深入講解YMIR系統的設計理念和項目實(shí)踐。
本次公開(kāi)課分為主講和Q&A兩個(gè)環(huán)節,以下則是主講回顧:
智東西公開(kāi)課的各位同學(xué)晚上好,下面由我來(lái)做主題為《開(kāi)源AI模型生產(chǎn)平臺YMIR加速視覺(jué)模型開(kāi)發(fā)與迭代》的直播講解。我叫胡文澤,是這個(gè)項目的核心開(kāi)發(fā)成員,同時(shí)也是云天勵飛未來(lái)工廠(chǎng)部門(mén)的技術(shù)總監,負責部門(mén)的日常運作。
正式開(kāi)始之前,我再來(lái)做下簡(jiǎn)單的自我介紹,我是胡文澤,博士畢業(yè)于加州大學(xué)洛杉磯分校,在云天勵飛主要負責未來(lái)工廠(chǎng)部門(mén),做一些面向公司未來(lái)的項目。我早期曾經(jīng)在公司參與做過(guò)一個(gè)門(mén)禁機的產(chǎn)品,當時(shí)同學(xué)們比較打趣,直接把我的照片放到了門(mén)禁機的 ID罩上,所以我可能不是公司見(jiàn)客戶(hù)最多的人,但是是客戶(hù)見(jiàn)過(guò)最多的公司的人。
言歸正傳,下面來(lái)看下公開(kāi)課的內容大綱。首先是背景介紹;然后會(huì )對AI模型開(kāi)發(fā)與軟件開(kāi)發(fā)進(jìn)行比較;之后引出 AI模型開(kāi)發(fā)的兩種具體開(kāi)發(fā)模式,并通過(guò)幾個(gè)例子來(lái)說(shuō)明,以數據為中心的開(kāi)發(fā)模式是一個(gè)更符合規?;P烷_(kāi)發(fā)的方法;之后會(huì )介紹YMIR訓練系統,特別是它的設計理念和產(chǎn)品特點(diǎn);最后用一個(gè)樂(lè )高檢測的案例,系統的給大家展示怎樣使用YMIR系統降低模型訓練的門(mén)檻,并提高模型開(kāi)發(fā)的效率。上述內容可以總結為以下5部分:
1、背景介紹
2、AI模型開(kāi)發(fā)VS軟件開(kāi)發(fā)
3、AI模型開(kāi)發(fā)模式
4、YMIR系統設計理念
5、YMIR實(shí)踐
背景介紹
隨著(zhù)深度學(xué)習技術(shù)的快速發(fā)展,大量的人工智能技術(shù)進(jìn)入到了快速落地和普及的階段。幾年前,談起人工智能或者計算機視覺(jué),大家可能知道的都是最典型的應用,比如人臉識別。
但是現在只以計算機視覺(jué)里的目標檢測任務(wù)為例,都能列舉出許多已經(jīng)落地或正在嘗試落地的應用,如上圖所示。在精準農業(yè)方面,可以用目標檢測技術(shù)來(lái)粗略的估計、識別并計算果樹(shù)上的果子數量,從而對整個(gè)產(chǎn)量做大概的估計;在現代制造方面,可以用目標檢測技術(shù)做裝備關(guān)鍵零件的檢查,確保整個(gè)裝配質(zhì)量是合格的;在商標檢測方面,商標檢測是一個(gè)非常成熟的技術(shù),典型的應用像在互聯(lián)網(wǎng)數據中檢測商標的分布,能夠為各個(gè)廠(chǎng)家在營(yíng)銷(xiāo)上提供一些基礎數據;在路政巡檢方面,路政巡檢也是目前正在落地的一類(lèi)項目,過(guò)去可能都是用人工巡查道路,檢查道路里的病害,現在可以很智能、很方便的用公交車(chē)或出租車(chē)上搭載的攝像頭檢查道路的一些問(wèn)題,自動(dòng)對各種病害進(jìn)行評估和排序,從而自動(dòng)生成工單,大大節約了路政巡檢的成本。除了上面提到的一些應用外,目標檢測還可用在電網(wǎng)巡檢、手術(shù)導航、車(chē)輛定損、污染檢測等方面。
總而言之,以計算機視覺(jué)技術(shù)為代表的AI技術(shù),不再是花拳繡腿,而是能夠在各個(gè)行業(yè)里開(kāi)始應用,而且是規?;膽?。那自然而然帶來(lái)了一個(gè)問(wèn)題,如何能夠規?;a(chǎn)或開(kāi)發(fā)這些模型?
AI模型開(kāi)發(fā)VS軟件開(kāi)發(fā)
在思考這個(gè)問(wèn)題是,我們很容易拿 AI模型開(kāi)發(fā)行業(yè)與軟件行業(yè)作比較。那我們先看看軟件行業(yè)的變遷哈。如上圖所示,左邊是1998年的谷歌,在Susan(Susan Wojcicki, 現任YouTube的CEO)家的車(chē)庫里的樣子。隨著(zhù)軟件產(chǎn)業(yè)發(fā)展到2019年,目前都是現代化、大型的、集團化的作業(yè)。從車(chē)庫到軟件集團,軟件產(chǎn)業(yè)已經(jīng)經(jīng)歷了一次產(chǎn)業(yè)化的革命。那AI作為一個(gè)即將要經(jīng)歷大規模產(chǎn)業(yè)化落地的行業(yè),怎么能夠完成革命,實(shí)現大規模生產(chǎn)?這是一個(gè)很現實(shí)和嚴肅的問(wèn)題。類(lèi)比于前面提到的1998年的谷歌,我們的現狀就是那時(shí)的狀況。
上面提到AI模型開(kāi)發(fā)可以與軟件開(kāi)發(fā)進(jìn)行類(lèi)比,但仔細分析一下,其實(shí)AI模型在廣義上就是一個(gè)計算機軟件。什么叫軟件?從最基礎的指令層面上看,軟件是一系列特定順序的計算機數據和指令,從而實(shí)現用戶(hù)想要的一些計算,達到用戶(hù)期望的功能。常規的軟件通常是人工編寫(xiě)這些算法,通過(guò)一行一行的代碼組織這些數據和指令,實(shí)現用戶(hù)想要的功能。比如經(jīng)常寫(xiě)的if-else語(yǔ)句等,用這樣的控制語(yǔ)句來(lái)可以實(shí)現各種各樣的算法。
AI模型在執行時(shí)也是組織數據和指令,但是不是通過(guò)這些控制流或一句句語(yǔ)言實(shí)現的,更多的是通過(guò)參數和權重來(lái)實(shí)現數據和指令的組織。比如現在很熱門(mén)的Transformer結構,一個(gè)位置的新特征是怎樣計算的?并不是直接從某個(gè)位置把特征拷貝過(guò)來(lái),而是根據上一次這個(gè)位置的Key和 Query相關(guān)性計算Attention Map,然后再按 Attention Map把不同位置的數據,按照不同的權重相加,才能得到一個(gè)新的Token。這是通過(guò)模型參數和實(shí)時(shí)計算完成數據的變化,從而實(shí)現指令和數據的組織。所以 ,AI模型的靈魂不在于一行行代碼,因此你的模型是PyTorch實(shí)現的,還是TensorFlow實(shí)現的,還是其他方式實(shí)現的,并不重要。它的靈魂在于模型權重。
如果AI模型也是一種軟件,那能否照搬傳統軟件的開(kāi)發(fā)經(jīng)驗開(kāi)發(fā)AI模型呢?我們答案是可行也不可行。雖然兩者有相似性,但還是有很多的不同點(diǎn)。
下面簡(jiǎn)單看下傳統軟件的開(kāi)發(fā)。如上圖所示,傳統軟件開(kāi)發(fā)流程可以總結為左邊的四步:首先產(chǎn)品經(jīng)理做一個(gè)需求分析、需求說(shuō)明;然后軟件架構師做問(wèn)題的分解,把大的系統分解成各個(gè)模塊,即分層解耦,模塊式實(shí)現。模塊化、中臺等概念都是在分層解耦過(guò)程中出現的。這些模塊有些可以直接復用以前的,即使不能復用,也能夠把多個(gè)模塊分給多個(gè)團隊并行開(kāi)發(fā),從而實(shí)現大規模開(kāi)發(fā),提高效率。這種開(kāi)發(fā)性質(zhì)導致了上圖右邊的系統架構圖的樣式。中間這幅圖是YMIR開(kāi)源系統的架構,右邊是Linux kernel diagram的架構,可以看到一塊一塊的框圖。
再看 AI模型開(kāi)發(fā),從流程上就有一些不同。不同點(diǎn)有哪些呢?首先,在做完需求分析之后,AI模型開(kāi)發(fā)有一個(gè)很重要的點(diǎn),是收集大量的數據和標注,進(jìn)而嚴格定義這個(gè)問(wèn)題到底是什么,期望的輸入是什么,期望的輸出是什么,不再是傳統意義上需求分析文檔或產(chǎn)品設計文檔里的幾句自然語(yǔ)言。
其次,架構師做問(wèn)題分解和模塊化實(shí)現部分也變了,因為我們發(fā)現很多深度學(xué)習模型是端到端的解決問(wèn)題,而不再是按分層解耦的方式解決問(wèn)題。而且通過(guò)端到端用數值優(yōu)化方法解決這個(gè)問(wèn)題,往往比過(guò)去模塊化方法實(shí)現這些問(wèn)題的效果要更好。所以現在的工作變成了模型結構的選型。還是以目標檢測問(wèn)題為例,變成了選用FasterRCNN還是YOLO作為整體模型結構解決這個(gè)問(wèn)題,而不再是怎么把問(wèn)題分解成特征提取、特征變換、特征組合等小模塊。
最后,在模型訓練部分,目前我們大部分工作時(shí)間都花在模型訓練上,調了一些參數,即俗稱(chēng)煉丹。大量在職的算法工程師在學(xué)校學(xué)習時(shí),或者在各個(gè)機構培訓時(shí),也是類(lèi)似的情況。在學(xué)習AI開(kāi)發(fā)時(shí),通常發(fā)現數據集已經(jīng)有了,而我們只學(xué)習了這些網(wǎng)絡(luò )模型以及怎樣調權重,精力也都花在調超參數上。這帶來(lái)的影響就是在實(shí)際工作當中,平常是怎么學(xué)的,實(shí)際工作中也怎么干,大量時(shí)間投入到了調超參和嘗試新的網(wǎng)絡(luò )結構,去或跟蹤最新的論文這事兒上。
AI模型開(kāi)發(fā)的模式
在外人看來(lái),這項工作還很有價(jià)值。因為這項工作是在碼代碼,類(lèi)似于軟件工程師,也是在每天碼代碼。這種開(kāi)發(fā)模式叫做以模型為中心的開(kāi)發(fā)模式,是由于行業(yè)演變、客觀(guān)現實(shí)構成的一個(gè)模式。但實(shí)際上會(huì )發(fā)現,也是今天要提出的一個(gè)重點(diǎn),即如果時(shí)間和精力都放在了數據的定義和高質(zhì)量數據上,往往能夠得到更好的模型開(kāi)發(fā)效率。
下面用兩個(gè)例子來(lái)論證,以數據為中心的模型開(kāi)發(fā)效率遠高于以模型為中心的開(kāi)發(fā)效率。第一個(gè)例子是一個(gè)虛擬實(shí)驗,如上圖左下角所示,橙色條框是2021年6月發(fā)表的一篇論文。該論文提出了一種新的方法,在COCO數據集不同的數據量情況下,檢測精度比2020年10月藍色條框的方法效果要好。如果看具體的數據,AP50 基本提升了0.4~6個(gè)點(diǎn)不等。橙色條框論文當時(shí)的效果是 state of the art。這兩篇論文都是由國際上非常知名的研究機構提出,即大量的一流工程師和研究人員花了8個(gè)月的時(shí)間,模型的精度才提升了0.4~6個(gè)點(diǎn)不等。
同時(shí)拿這個(gè)數據表去做另外一組實(shí)驗。如上圖下半部分所示,如果從橫軸看,不改變方法,而是改變數據量,想辦法在一個(gè)實(shí)際項目中增加訓練數據,可以看到從左向右每增加一次數據,精度都提升10個(gè)點(diǎn)以上。而很多項目里增加的這些數據,并不需要花八個(gè)月,也不需要國際一流的研究人員或者研究環(huán)境,反而效率比研發(fā)新方法要高。
無(wú)獨有偶,不光是我們發(fā)現了這個(gè)問(wèn)題。如上圖所示的表格中,是吳恩達老師在一次講座里提到他們做的一些實(shí)際項目,比如 Steel defect detection,即鐵板卷的缺陷檢測,發(fā)現用一個(gè)比較標準的方法和超參數,能夠訓練出76.2%的精度。然后,他找同學(xué)花兩周時(shí)間想辦法改進(jìn)算法,結果并沒(méi)有得到實(shí)質(zhì)性的性能提升,但讓另一個(gè)同學(xué)花兩周時(shí)間從數據上想辦法,會(huì )發(fā)現精度一下提升了16.9,這是非常顯著(zhù)的提升。他不只做了這一類(lèi)實(shí)驗,包括太陽(yáng)能電池板和或其他表面缺陷檢測的問(wèn)題,都發(fā)現了這個(gè)情況,即想辦法調參數、改模型得到的收益,遠遠低于想辦法改數據并提高數據質(zhì)量得到的效益。也就是后者的收益遠大于前者,而且更快。通過(guò)這個(gè)例子可以看到,在實(shí)際的模型開(kāi)發(fā)中,這種做法是更有效的手段。
過(guò)去大多數的軟件工程師 、算法工程師都是以模型為中心,死磕各種參數。但是在實(shí)際項目開(kāi)發(fā)當中,我們倡導應該積極向以數據為中心的開(kāi)發(fā)模式轉變。這也引出了今天要介紹的YMIR平臺。為什么要做這個(gè)平臺,就是想快速地實(shí)現以數據為中心的模型開(kāi)發(fā)方式。
我們把相關(guān)的想法和以前的同事、朋友討論之后,發(fā)現大家不謀而合。隨后我們把這個(gè)系統的想法以及設計理念寫(xiě)成一篇論文,并發(fā)表在NeurIPS Data Centric AI Workshop上。同時(shí),我們也把這個(gè)平臺開(kāi)發(fā)出來(lái),并進(jìn)行開(kāi)源,目標是讓有類(lèi)似想法的同事和朋友能夠有一個(gè)共同的平臺做開(kāi)發(fā),不需要再重復造輪子。
YMIR系統設計理念
YMIR本身是一個(gè)模型訓練平臺。相信很多朋友和同學(xué)應該已經(jīng)見(jiàn)過(guò)很多種模型訓練平臺。我總結了現有大多數模型訓練平臺的特點(diǎn),基本上是導入數據,然后做數據標注、模型訓練,然后最多會(huì )再做模型部署,并把它放到云里。但是,實(shí)際上,如果大家在企業(yè)里真真正正做模型開(kāi)發(fā)應該都知道,至少我工作的時(shí)間里,還沒(méi)有見(jiàn)到任何一個(gè)項目里的模型是這么簡(jiǎn)單的,即訓練一次就結束了,實(shí)際上都要經(jīng)過(guò)大量的迭代。這也引出了YMIR平臺的一個(gè)特點(diǎn),即我們是以數據迭代為中心的思想快速做模型的迭代。這里還加入了數據挖掘的技術(shù),在大量的未標注的數據集中快速尋找有價(jià)值的、但未標注的數據,并把這些數據進(jìn)行標注,然后加入訓練集,進(jìn)而快速提升模型的精度。
這套方式其實(shí)并不是我們發(fā)明的,在學(xué)術(shù)界叫做主動(dòng)學(xué)習,相信有不少同學(xué)都聽(tīng)說(shuō)過(guò)。這種主動(dòng)學(xué)習的技術(shù),指的是通過(guò)數據挖掘提升有效數據量,隨之提升模型的精度,我們把這個(gè)系統真真正正實(shí)現了。以前也見(jiàn)過(guò)、討論過(guò)很多次做主動(dòng)學(xué)習的系統,但這次是真真正正把它做出來(lái),對我們來(lái)說(shuō)是一個(gè)很鼓舞很興奮的事情。
除了做數據挖掘和快速模型迭代的特點(diǎn)之外,YMIR平臺還有什么特點(diǎn)?YMIR平臺能夠適應規?;_(kāi)發(fā),在設計時(shí)就把規?;_(kāi)發(fā)放在腦子里,并支持多個(gè)模型或多個(gè)項目,在同一個(gè)數據集上進(jìn)行并行開(kāi)發(fā),最終將這些數據都沉淀在同一個(gè)平臺里。大家可以互相、便捷的使用其他項目里的一些數據和標注,甚至一些模型來(lái)幫助你的項目開(kāi)發(fā)。就像代碼開(kāi)發(fā)里的 Git一樣,使得我們的數據和模型都能夠沉淀到YMIR平臺里,把傳統所說(shuō)的數據資源真真正正變成立等可取的、高價(jià)值的數據資產(chǎn)。
同時(shí),為了進(jìn)一步降低YMIR平臺的使用門(mén)檻,我們把各個(gè)模型開(kāi)發(fā)的各個(gè)步驟抽象成一些標準的操作,形成了一個(gè)標準的流程。大家不需要懂什么叫主動(dòng)學(xué)習,什么叫數據挖掘,只需要按照我們的界面指導來(lái)串流程,跟著(zhù)流程就能夠把模型開(kāi)發(fā)出來(lái)。
YMIR實(shí)踐
前面講解了以數據為中心的模型開(kāi)發(fā),以及YMIR系統的特點(diǎn)。下面給大家演示下YMIR系統是怎么工作的。
上圖右邊放了一張圖,有一大堆樂(lè )高。大家在做樂(lè )高時(shí),會(huì )發(fā)現拼裝并不是最難的,或者拼裝是很有意思的,但最麻煩的是在一大堆樂(lè )高零件里,找到說(shuō)明書(shū)上下一步拼裝的零件在哪。周末我就遇到了這個(gè)頭疼的問(wèn)題,想到能否用YMIR系統做一個(gè)樂(lè )高零件的檢測的模型。所以,按照剛才講的AI開(kāi)發(fā)流程,做了一個(gè)模型開(kāi)發(fā)作為今天的例子。
首先是系統安裝。YMIR系統安裝很簡(jiǎn)單,只需要到YMIR的Github地址“https://github.com/IndustryEssentials/ymir”,點(diǎn)“安裝”按鈕,就能夠跳到安裝的指導。安裝YMIR系統只需要有一臺帶GPU的電腦,安裝一些必須的Docker,比如Docker和Docker-Compose以及NVIDIA DockerDriver。然后克隆我們的代碼,基本上就可以一步啟動(dòng)了,即“bashymir.sh start”。之后會(huì )提供一系列的指導,讓你做一些必要的設置,比如初始賬戶(hù)管理員、初始賬戶(hù)等,很快就可以安裝成功。
由于這臺電腦是蘋(píng)果M1芯片的,目前還沒(méi)來(lái)得及集成支持M1芯片GPU的PyTorch,就不演示具體的步驟這一步,我們后面假設系統已經(jīng)安裝成功。下面要根據數據來(lái)定義這個(gè)問(wèn)題,可能有這個(gè)痛點(diǎn)或者有這個(gè)想法的不止我一個(gè)人,網(wǎng)上有一個(gè)公開(kāi)的數據集,有一系列圖像,大概是由13種樂(lè )高的零件圖片組成。我簡(jiǎn)單把它分成訓練集、測試集和挖掘集。訓練集放了100張圖像。由于想快速的做演示,測試集只放了10張圖像。這兩個(gè)都是已經(jīng)標注好的圖像,如上圖右邊所示。挖掘集放了1181張。挖掘集,通常是未標注的數據,為了演示節約時(shí)間,提前也已經(jīng)把它們標注好了。
有了這些數據集,可以開(kāi)始工作了,下面演示具體的過(guò)程。安裝好YMIR系統之后,安裝界面會(huì )提示你把前端放在哪個(gè)端口,通過(guò)瀏覽器上打開(kāi) IP地址和端口就能進(jìn)入這個(gè)界面,可能會(huì )有用戶(hù)注冊的流程,我就不再演示用戶(hù)注冊了。
注冊完之后就可以登錄,之后進(jìn)入到我們的界面。進(jìn)入界面后,除了一個(gè)主頁(yè),還有一個(gè)項目管理、標簽管理和系統配置。標簽管理和系統配置,后邊會(huì )再詳細介紹。在“主頁(yè)”這個(gè)界面,不僅可以看到我們已經(jīng)做過(guò)或要做的項目,還可以看到一個(gè)公共數據集,即大家在YMIR平臺上能夠共享的數據集。以及作為個(gè)人開(kāi)發(fā)的一些模型與活躍度統計,這與GithubContribution Activity墻類(lèi)似。
進(jìn)入到這個(gè)界面后,如果想做一個(gè)模型,可以創(chuàng )建一個(gè)項目,比如名字叫“lego_detection_demo”,那要訓練哪些類(lèi)別呢?如上圖所示,數據集的類(lèi)別并沒(méi)有寫(xiě)名字,直接用編號來(lái)代替這些類(lèi)別的名字,來(lái)對數據進(jìn)行標注,在“訓練類(lèi)別”里直接輸要檢測類(lèi)別“0、1、2、3......13”,然后可以創(chuàng )建項目。有了這個(gè)項目,就像打開(kāi)了文件夾一樣,接下來(lái)可以開(kāi)始導入數據。
我們可以先給要導入的數據起一個(gè)名稱(chēng),比如“lego_training set”。導入數據有好多種方式:一種是公共數據集。在首頁(yè)里的右上部分,可以直接把數據集拷貝到自己的文件夾里,或者是復制已經(jīng)導入的數據集;還支持網(wǎng)絡(luò )的遠程導入以及本地導入。這里選擇本地導入,導入的數據集有一定的格式要求,采用的是Pascal Voc格式,是一個(gè)比較通用的格式,然后點(diǎn)擊數據上傳。
上傳完畢之后,點(diǎn)擊“導入”,系統會(huì )自動(dòng)新建了一個(gè)lego_training數據集。這時(shí)再導入另外一個(gè)測試集,步驟與上面的類(lèi)似。導完數據集之后,可以看到數據集的大小,以及數據集里有什么標簽,什么時(shí)候導入。數據集右邊的顯示是可以對數據集做各種操作,點(diǎn)擊“訓練”就可以做模型訓練了。
YMIR系統會(huì )自動(dòng)把訓練集指定為剛才所點(diǎn)“訓練”那一行的數據集,即lego_training,然后會(huì )用real_test,即10張的測試集做測試。你會(huì )發(fā)現選定lego_training數據集之后,會(huì )把樣本的比例做一個(gè)簡(jiǎn)單的展示。這也是YMIR友好性的體現,會(huì )幫你自動(dòng)展示數據集樣本的分布情況。如果發(fā)現標簽分布非常不均衡,通常是會(huì )出問(wèn)題的,這也是模型訓練一個(gè)常見(jiàn)的問(wèn)題,即inbalance dataset的問(wèn)題。如果發(fā)現數據分布不均衡,盡量調整你的數據集,使得各個(gè)標簽的數量能夠在同一個(gè)數量級范圍內。之后我們要訓練哪些目標,在項目設置里已經(jīng)設置過(guò)了,系統會(huì )自動(dòng)的填上。
隨后我們會(huì )選擇用哪個(gè)算法進(jìn)行訓練,這里選擇Yolov4。后面會(huì )再介紹下如果有新的模型,或新的方法該怎么辦。然后要選用幾個(gè)GPU,當前我們有7個(gè)GPU,選擇其中的1個(gè)GPU,然后點(diǎn)擊訓練。對于一些比較高級的用戶(hù),也可以調一些對應的參數,這里不再贅述這些參數了。點(diǎn)“訓練”之后,模型訓練就開(kāi)始了,可以看到數據集自動(dòng)的跳到模型訓練tag里,顯示模型訓練已經(jīng)開(kāi)始了。
在模型訓練同時(shí),YMIR系統還有一些比較友善的功能。比如每個(gè)數據集,都支持點(diǎn)開(kāi)這個(gè)數據集的詳情頁(yè),可以看到數據集的名字、圖片數量、來(lái)源、創(chuàng )建時(shí)間等各種信息,同時(shí)還可以查看每一張數據以及它的標注。如果遇到的數據集樣本標簽比較多,還可以一鍵關(guān)閉所有的標簽,然后逐個(gè)去看它的標簽,并展示它的標簽和標注。不知道大家是否遇到過(guò)處理大數據集的情況,我并不想每一張數據都去看標簽,那可以怎么辦?我們有一個(gè)“隨機圖像”的按鈕,可以隨機的在數據集里抽樣,去看有哪些這些圖像以及標注。我也建議在真正訓練一個(gè)模型之前,要認真觀(guān)察你的數據集,確保沒(méi)有太明顯的問(wèn)題。
在訓練過(guò)程中,還可以觀(guān)察模型的一些基礎的訓練狀態(tài)。YMIR系統引入了TensorBoard來(lái)觀(guān)察各種模型內部的各種Graphmatrix。由于模型訓練時(shí)間比較長(cháng),這個(gè)模型正常訓練一般需要七、八個(gè)小時(shí),就不再具體展示模型的訓練過(guò)程。
這里以一個(gè)用一個(gè)已經(jīng)訓練好的模型為例。模型訓練完之后,“精度均值(mAP)”界面會(huì )顯示它的精度是90.12。對于最普通的問(wèn)題,如果mAP是90.12應該已經(jīng)很高。由于雖然樂(lè )高檢測是一個(gè)相對比較簡(jiǎn)單的問(wèn)題,但因為要檢測目標都是剛體,不變性主要存在于視角上。對于這類(lèi)問(wèn)題,“90.12”并不是一個(gè)滿(mǎn)意的結果,那該怎么辦呢?這就進(jìn)入到YMIR系統非常關(guān)鍵的一個(gè)環(huán)節,通過(guò)模型迭代挖掘有意義的數據,然后訓練新的模型實(shí)現更好的效果。這就用到了首頁(yè)上面的面板,開(kāi)始用以數據為中心的方式開(kāi)發(fā)模型。
先按“迭代數據準備”按鈕,將測試集以及要挖掘的數據集給指定好,訓練集是已經(jīng)指定好的。在挖掘策略部分,對于超大規模的數據集,像云天勵飛內部有時(shí)可能會(huì )用到百萬(wàn)級或千萬(wàn)級的數據集,建議用分塊挖掘,一般情況下,建議用去重挖掘。把基本的設置完成之后,還有要準備一個(gè)初始迭代模型,就是剛才訓練的模型。初始迭代模型確定之后,你會(huì )發(fā)現“開(kāi)始迭代”按鈕變藍了,這意味著(zhù)前續條件都滿(mǎn)足,可以點(diǎn)擊“開(kāi)始迭代”。在這個(gè)過(guò)程中,會(huì )發(fā)現把迭代流程都清晰的展示了出來(lái),大家可以按照這個(gè)流程做模型開(kāi)發(fā)。
接著(zhù)準備挖掘數據集,挖掘數據集要用到是原始的1181張圖片的數據集。如果大家有更復雜的條件,可以在這個(gè)界面做數據合并、數據排除、數據隨機采樣等操作,這些操作留給了大家很高的自由度。這個(gè)過(guò)程主要是在做模型挖掘集的復制,挖掘集并不是嚴格復制,是一個(gè)虛擬的point-level復制。
設置完之后,點(diǎn)下一步就可以開(kāi)始做數據挖掘。點(diǎn)“數據挖掘”按鈕,會(huì )發(fā)現根據項目的設置,挖掘集以及用來(lái)挖掘的模型都已經(jīng)填好,你需要選擇挖掘鏡像,選擇想挖掘多少張數據,這里示例例如挖掘20張樣本。在“是否產(chǎn)生新標注”部分,如挖掘的數據是已經(jīng)標注過(guò)的,可以選擇“否”;如果是沒(méi)有標注過(guò)的,還可以利用挖掘模型對數據產(chǎn)生預標注,從而提高后面標注的效率。在“GPU個(gè)數”部分選“1”,即用1個(gè)GPU,然后點(diǎn)擊“挖掘”按鈕,幾分鐘之后就能挖掘完成。
挖掘完成之后,會(huì )顯示出“下一步”的按鈕,表示這時(shí)可以看具體挖掘了哪些數據。如果對挖掘的這些數據滿(mǎn)意,可以點(diǎn)擊“下一步”;如果對這些數據不滿(mǎn)意,還可以重新挖掘并更改其他參數。我們默認是“下一步”,并把這些數據送去標注。點(diǎn)擊“數據標注”,會(huì )自動(dòng)的標注剛才挖掘的20張數據,標注人員部分選擇自己,例如填寫(xiě)“tony.mir@gmail.com”,標注目標是上面提到的14類(lèi):“0、1、2......13”。在是否保留原標注部分,選擇“是”,然后點(diǎn)擊“標注”,系統會(huì )生成一個(gè)標注的任務(wù)送給標注分系統。
這里提一下,因為YMIR的核心功能在于數據和模型訓練,所以還會(huì )有另外一個(gè)系統叫LabelFree。這里是把標注任務(wù)送到LabelFree這個(gè)新系統中,可以看到新系統又增加了一個(gè)新任務(wù),就是剛才要標注樂(lè )高圖片的任務(wù),點(diǎn)擊“標注”按鈕就可以開(kāi)始標注。
在標注的操作過(guò)程中,需要畫(huà)下樂(lè )高零件的目標框就可以開(kāi)始標注了。每一張標注完成之后點(diǎn)“提交”,然后標注下一張。標注完成之后,會(huì )提示標注完畢,標注進(jìn)度變成了100%,然后再回到YMIR系統里。隔一段時(shí)間YMIR會(huì )去LabelFree系統查詢(xún),看這個(gè)任務(wù)標注的進(jìn)度情況如何。如果標注完成,會(huì )把結果拿回來(lái),也可以在“數據集”里,看得到標注結果。如果對標注結果滿(mǎn)意,可以點(diǎn)擊“下一步”;如果不滿(mǎn)意,可以打回重標,點(diǎn)擊“重新標注”,給LabelFree系統再發(fā)一個(gè)標注任務(wù)。
如果滿(mǎn)意標注的數據,點(diǎn)擊“下一步”更新訓練集。這步主要是把標注完的數據和最早的訓練數據做合并,即最開(kāi)始訓練數據集只有100張圖片,現在又挖掘并標注了20張圖片,形成120張圖片的數據集。對于這個(gè)流程,之所以留給大家手動(dòng)的按鈕,是希望大家如果有時(shí)想用它來(lái)做一些特殊操作,比如可能要再引入一些數據,或者再排除一些數據等,都可以在這部分實(shí)現。
數據合成完成之后,點(diǎn)擊“下一步”進(jìn)入模型訓練的步驟。在模型訓練部分用到的是上面合并的120張圖片的數據集。其他內容還是像上面提到的訓練界面一樣,會(huì )自動(dòng)展示這個(gè)數據集的標簽分布,然后選擇訓練鏡像,同時(shí)還可以選擇初始的預訓練模型,這個(gè)模型可以用系統內部你已經(jīng)訓練出來(lái)的模型,作為一個(gè)初始點(diǎn)做下一個(gè)模型訓練。與上面講過(guò)的類(lèi)似,在“GPU個(gè)數”部分選“1”,即選一個(gè)GPU,然后點(diǎn)擊“訓練”,等待訓練完成。
訓練完成之后,這時(shí)可以看到模型頁(yè)面,已經(jīng)顯示出訓練出來(lái)的模型。由于這個(gè)項目的測試集只有10張,訓練精度會(huì )有一些隨機誤差,第一個(gè)模型訓練出來(lái)時(shí)mAP是87%,第二個(gè)模型訓練出來(lái)后mAP是90%,比第一個(gè)模型還是有提升的。這也表明通過(guò)添加挖掘數據,能夠得到模型精度的提升。那多加點(diǎn)數據能否取得更好的效果呢?
點(diǎn)擊“下一步”,表示這一輪迭代就結束了,可以開(kāi)啟下一輪迭代。在開(kāi)始下一輪迭代之前還有一個(gè)列表。這個(gè)列表讓大家能夠看到每次迭代的整體情況,例如第一次迭代模型的一些關(guān)鍵結果和步驟已經(jīng)展示出來(lái)了。
本次迭代完成之后,可以點(diǎn)擊“開(kāi)啟下一次迭代”。從這步已經(jīng)開(kāi)始進(jìn)入到了一個(gè)無(wú)限循環(huán)的狀態(tài),即你想循環(huán)多少次,就可以循環(huán)多少次的模型迭代。這里面的具體步驟和上面提到的類(lèi)似,在準備挖掘數據部分,用的還是剛才的數據,但會(huì )自動(dòng)選擇排除已經(jīng)挖掘的數據,然后點(diǎn)擊“確定”,經(jīng)過(guò)數據挖掘、數據標注、更新訓練集、模型訓練等步驟,再去迭代。
迭代了幾次之后,會(huì )產(chǎn)生幾個(gè)模型,同時(shí)模型通過(guò)不斷添加數據,精度也在不停的提升,這些可以在模型列表里有一個(gè)很好的體現。我一共做了4次迭代,挖掘數據集的圖像數量在不停減少,每次數據挖掘完成之后都會(huì )減少20張數據,并把它添加到了訓練集里。在訓練集數量部分可以看到,訓練集的數量從120到140再到160、180,每次都在增加訓練集的數據,與之相對應的是模型精度也在不斷增加,從剛開(kāi)始的90.94,第二次迭代到了95.88,然后是96.41、 96.6。同時(shí)YMIR系統產(chǎn)品和UI非常友好,類(lèi)似于炒股,可以看到每次迭代后精度增長(cháng)的趨勢提示。通過(guò)這個(gè)過(guò)程,大家可以看到通過(guò)不停的挖掘數據、添加數據,能夠快速提升模型的精度。
訓練完模型之后,還想知道模型的性能究竟如何,YMIR系統還有一個(gè)模型驗證的功能。點(diǎn)擊選擇最終訓練完成后對應的模型鏡像,然后可以上傳一些樂(lè )高的圖片,來(lái)看看最終的檢測結果。我提前準備選擇了一張真實(shí)拍攝的圖片,并選擇一個(gè)合適的閾值,點(diǎn)擊“模型驗證”,這時(shí)系統在啟動(dòng)另外Docker,同時(shí)把模型加載進(jìn)來(lái),對這個(gè)圖像進(jìn)行計算,最后把結果顯示出來(lái)。結果顯示出來(lái)了之后,檢測結果還是比較準確的。
與上圖正確的數據標注做對比,可以看到模型顯示的預測結果是4號的Lego,置信度是99.31,上圖顯示4號是一個(gè)1x1Brick,正確 ;還有一個(gè)3號,是置信度是98.23,上圖顯示3號是一個(gè)1x2 Brick,也沒(méi)有問(wèn)題 ;印象中比較容易犯錯的應該是5號,是一個(gè)2x2 Plate ,顯示置信度是86.77,5號是一個(gè)白色的Plate ,是一個(gè)薄片,比較容易和一個(gè)2x2 Brick 相混淆, Brick 和Plate 比較容易混淆,特別是背面時(shí),雖然結果預測5號是 Plate ,但是它究竟是Plate 還是 Brick ,還需要實(shí)際去驗證?;蛘咭部梢钥此?detection的score,相比起其他的樂(lè )高零件都是90+以上的分數,5號的分數相對低一些,也說(shuō)明5號確實(shí)是一個(gè)比較容易混淆的類(lèi),其他的零件我相信也大概率沒(méi)有太多問(wèn)題。到此模型訓練就完成了。模型訓練完成之后,可以就把模型下載下來(lái),真正放到項目中應用。到此為止,已經(jīng)講解完整個(gè)YMIR系統的一些主要的功能。
下面再介紹下另外的配置和管理功能。在完成這些任務(wù)之前,要讓YMIR系統知道你要訓練哪些目標,這里有一個(gè)標簽空間的維護和管理頁(yè)面。目前對于我們使用數據集的0~13標簽我已經(jīng)打好了,也可以選擇手動(dòng)添加標簽或批量的添加標簽,以及在上面講到的項目設置時(shí),“訓練類(lèi)別”部分也可以手動(dòng)的添加標簽,比方寫(xiě)一個(gè)“new Label”,然后回車(chē),它會(huì )提示這個(gè)標簽在標簽管理頁(yè)沒(méi)有添加,是否添加。選擇“添加”,之后在標簽管理界面可以看到新的標簽,大家用時(shí)可能要注意下。
另外系統配置部分有一個(gè)鏡像列表。本次的樂(lè )高檢測用到的是Yolov4算法,這是在YMIR里一個(gè)默認的鏡像算法。那可否不用Yolov4,用一些其他更好的算法呢。?可以手動(dòng)的添加鏡像,但這個(gè)鏡像并不是隨意添加的,需要滿(mǎn)足一些規則,選要滿(mǎn)足并開(kāi)發(fā)好適配YMIR的接口鏡像,之后通過(guò)Docker hub把鏡像拉回來(lái)。大家想用的鏡像,包括今天用的Yolov4都可以在Docker hub中找到。
如果是自己開(kāi)發(fā)的項目、鏡像,想給大家用,也可以告訴我們,我們可以幫你添加到Docker hub中;如果只想自己用,可以直接把鏡像的地址,填到創(chuàng )建鏡像的“鏡像”選項中,填一些必要的描述,就可以把鏡像拉回來(lái),拉回來(lái)之后就可以用你自己的算法做模型開(kāi)發(fā)。但系統配置這一頁(yè)應該只有管理員能用,一般第一個(gè)用戶(hù)默認是管理員,其他用戶(hù)可以通過(guò)第一個(gè)用戶(hù)添加作為管理員。
以上是YMIR系統樂(lè )高檢測案例的全部?jì)热荨?/p>
添加挖米匠微信,可獲取直播回放鏈接,并加入YMIR交流群。
評論comment