開源AI模型生產平臺YMIR加速視覺模型開發與迭代 | 云天勵飛未來工廠技術總監胡文澤主講回顧
來源:云天勵飛 編輯:VI菲 2022-06-07 11:17:45 加入收藏 咨詢

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