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