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