|
極市導(dǎo)讀 本文主要內(nèi)容還是圍繞著場景分析與數(shù)據(jù)理解、方法論與算法設(shè)計、工具鏈與部署落地等方面進行展開,重點關(guān)注的是頂層設(shè)計。 >>加入極市CV技術(shù)交流群,走在計算機視覺的最前沿 注意:本文從我的一個PPT整理而來,行文可能比較隨意,很多細節(jié)沒有寫清楚,后續(xù)有時間會持續(xù)修改。 上次說到,要寫一個系列,最后整理才發(fā)現(xiàn),還是合成一篇比較好一點。 皮特潘:AI 工業(yè)缺陷檢測 —— 寫在前面的話 https://zhuanlan.zhihu.com/p/375383384 主要內(nèi)容還是圍繞著場景分析與數(shù)據(jù)理解、方法論與算法設(shè)計、工具鏈與部署落地等方面進行展開。重點關(guān)注的還是頂層設(shè)計,因此涉及到的很多具體的細節(jié)沒有說太多,仁者見仁智者見智吧。在平時工作中和思考問題上,我喜歡用簡單粗暴的手段去分析,比如:本質(zhì)上,和某某沒有區(qū)別,說白了就這等語氣。目的就是透過現(xiàn)象看本質(zhì),抓住主要矛盾。 皮特潘:談一談我對AI項目落地的看法 https://zhuanlan.zhihu.com/p/336671388 內(nèi)容提要本文大致的脈絡(luò)是按照場景、數(shù)據(jù)分析,方法論算法設(shè)計,工具鏈與部署等進行展開。行文中一些比較重要點的,會單獨開篇幅進行展開。包含以下論點:
(一) 主要難點我認為缺陷檢測沒有啥難的,基本上都可以做。那為啥槽點還那么多?我認為很大一部分是AI的槽點,因為目前使用AI來做是主流,或者說只傳統(tǒng)方法搞不定的,沒辦法,只有上AI的方法。AI的槽點有很多,例如:
當(dāng)然,學(xué)術(shù)界和工業(yè)界也有一條巨大的鴻溝。學(xué)術(shù)界在于新,有創(chuàng)新點,在開源數(shù)據(jù)上各種嘗試。工業(yè)界強調(diào)的是精度、成本、落地。再者場景過于分散,沒辦法達成一致的共識,場景、數(shù)據(jù)、需求等均是如此。 單單從工業(yè)界來看,在“缺陷檢測”這一個細分的場景(其實也不是啥細分場景,所有找異常的都可以叫缺陷檢測)。也有很多的槽點或者坑點,我認為原因如下:
從業(yè)務(wù)、工具、管理上來說,有三大難點:
(二)場景分析本文討論的是工業(yè)場景,那就先和自然場景比一比吧!如下: 當(dāng)然有一個非常重要的特性沒有說: 自然場景一般是強語義信息,缺陷檢測一般為弱語義信息。近期利用輕量級語義分割訓(xùn)練缺陷檢測不好使有感而發(fā)。缺陷檢測不需要特別大的感受野,一般為紋路上的缺陷,局部區(qū)域就可以判別。 貌似難度比自然場景少不少,再仔細分析一下,工業(yè)場景其實有以下幾個特點:
以上是工業(yè)缺陷檢測場景的固有屬性。針對該場景,主要有以下三點需求:
(三)缺陷歸納做好缺陷的歸類,才容易下手。這里給出三種歸納方法: 歸納一:
歸納二(站在正常樣本建模的角度):
歸納三(形態(tài)上):
(四)簡單粗暴的可行性分析需求非常多,有時甚至來不及打光驗證。因此我有一套簡單粗暴的可行性分析辦法。主要針對業(yè)務(wù)場景來說。當(dāng)然這只是粗糙的可行性分析,只能建立大致的、初步的印象。具體能不能做,還要從光學(xué)、結(jié)構(gòu)復(fù)雜度、成本、運維、打開市場、推廣等多個維度進行評估。 簡單粗暴包括以下兩個點:
基本上滿足以上兩點,就可以認為該case是可行的,基本可以做的。不過實際的情況是比較復(fù)雜的。僅僅靠“明顯”和“明確”會把很多機會攔截在外。這種定義無可厚非,但是不夠深入,給算法設(shè)限。缺陷檢測,很難做到這兩點的理想情況。且看下一小結(jié)數(shù)據(jù)的詳細分析。 (五)數(shù)據(jù)的四大難點難分、多樣性、不平衡、數(shù)據(jù)臟。把握難點,針對舉措。 5.1 數(shù)據(jù)難分直接后果就是標(biāo)準難定,學(xué)術(shù)一點來說就是正負樣本類間差距較小,不是非黑既白的一刀切能夠搞定的,很難有一個一致性的標(biāo)注將正負樣本分開。也就是需求標(biāo)準難定,即便是人工也很難保證。標(biāo)準可能還比較好定,但是執(zhí)行起來較為困難。 這個放到第一點,因為它是場景和數(shù)據(jù)的固有屬性,人工很難改變,這也是大家吐槽缺陷檢測難做的主要原因。不管用任何手段去描述缺陷,都不能做到明顯可分。比如按照面積、灰度值等繪制其直方圖,中間過渡區(qū)域永遠存在一定量的樣本,處于灰色地帶,模棱兩可。不管你是多人標(biāo)注也好,不管你是做量化指標(biāo)也好,總很難有好的辦法改變這一現(xiàn)狀。 有人可能會說,直接給閾值進行一刀切或兩刀切,閾值交給客戶來定。不過我們自己本身要想明白這個事情:不管是AI,還是人工,都會檢出灰色地帶。該場景存在這種情況,那么說明其需求本應(yīng)該能夠接受灰色地帶的數(shù)據(jù)分錯。 標(biāo)注測試集就很難做,例如甲方合同明確要給出準確率。該問題的存在,很難達到理想的指標(biāo)。所以如果面臨該場景,建議在統(tǒng)計指標(biāo)上,給出明顯漏、明顯誤等。不然會陷入“清洗數(shù)據(jù)”、“更改需求”、“重復(fù)試驗”的死循環(huán),無法解脫。 能否給出對應(yīng)的量化指標(biāo),也是很大的問題,比如明顯的缺陷判分很低,微弱的缺陷置信度又很高。降低客戶的期望也好,讓客戶理解AI判定過程也好,總之就是既然想讓AI代替人工,我是可以做到。 針對該場景,我們要做的是:易分樣本(也就是明顯缺陷和明顯不是缺陷)不能出錯,然后在漏檢和誤檢的tradeoff尋求一個平衡。一般客戶會有“直通率”這個概念,可以多次磨合,多次迭代,趨向用戶期待。 5.2 多樣性不夠這點表現(xiàn)為類內(nèi)差異過大。比如同樣是劃痕,表現(xiàn)形式各種各樣,有的發(fā)白,有的發(fā)黑,有的吃視角,有的發(fā)生在邊緣地帶等等,出現(xiàn)在不同位置,表現(xiàn)形式都不一樣。因此導(dǎo)致一個問題:你很難收集到全部形態(tài)的缺陷樣本,所以在測試集上很難有一個不錯的表現(xiàn)。也就是你的訓(xùn)練集和測試集存在的明顯影響性能的偏差,這里的偏差不是標(biāo)注導(dǎo)致的,而是數(shù)據(jù)本身導(dǎo)致的。這種情況還是比較高頻率能夠遇到,比如和客戶聊一個需求的時候,對于某一種缺陷,他會說比較大概率發(fā)生在A處,但是不能排除發(fā)生在其他地方的概率。問題就是目前很難收集到樣本,即便收集到樣本,也很難覆蓋所有的情況。 一般我們做一個任務(wù),會有一份標(biāo)準測試集,方便我們的方案、算法進行迭代。沒有測試集,精度指標(biāo)無從談起。由于缺陷表現(xiàn)的多樣性問題,我們的標(biāo)準測試集可能就沒有那么的“標(biāo)準”。實際數(shù)據(jù)集構(gòu)建的過程中,盡量保證較大的覆蓋率。多樣性圖片拿不到,但是“缺陷描述”還是可以拿得到的。因此需要結(jié)合一些正常樣本學(xué)習(xí)和數(shù)據(jù)生成的方法來降低“多樣性不夠”帶來的影響。 5.3 樣本不平衡表現(xiàn)在3個方面:
5.4 數(shù)據(jù)臟工程上的問題,必須考慮數(shù)據(jù)臟的情況。 數(shù)據(jù)臟就是標(biāo)注的時候把標(biāo)注類別搞錯。搞錯大家一般會認為是數(shù)據(jù)難分的原因,其實不然,數(shù)據(jù)難分,也就是標(biāo)準難定或者無法清晰給出,因此這部分導(dǎo)致的原因不能單純歸納為數(shù)據(jù)臟。但是這里為了便于分析,我們區(qū)別對待。臟數(shù)據(jù)會對網(wǎng)絡(luò)訓(xùn)練帶來不利的影響,強行訓(xùn)練會有過擬合的風(fēng)險。因為網(wǎng)絡(luò)提取通用特征,擬合不到缺陷只能去擬合其他噪聲了。不過也有說法是,臟數(shù)據(jù)作為噪聲,也能給網(wǎng)絡(luò)帶來好的收益,讓網(wǎng)絡(luò)搜索參數(shù)的時候增加擾動,避免陷入局部最優(yōu),卻能防止網(wǎng)絡(luò)過擬合。不過一般任務(wù):數(shù)據(jù)還是越干凈越好。 那就是數(shù)據(jù)清洗,例如交叉驗證。學(xué)術(shù)上也有一些噪聲樣本學(xué)習(xí)的方案。數(shù)據(jù)臟還比較好辦,歸根到底是數(shù)據(jù)標(biāo)注的問題。隨著訓(xùn)練迭代以及人工清洗,可以很好的改善這一情況。 (六)數(shù)據(jù)生成雖然是工業(yè)場景,數(shù)據(jù)會源源不斷過來。但是上文提到數(shù)據(jù)的幾大問題,例如樣本不平衡等,所以有時我們會需要生成一部分的數(shù)據(jù)。還有一種情況,在項目初期,我們往往“打樣”。所謂demo階段,是拿不到足夠多的數(shù)據(jù)的。另外,數(shù)據(jù)肯定是多多益善,如果我們有生成數(shù)據(jù)的巧妙方法,訓(xùn)練從中受益的話,也很大程度上降低了數(shù)據(jù)收集、標(biāo)注、清洗的成本。 數(shù)據(jù)生成有傳統(tǒng)方法和深度學(xué)習(xí)方法兩種可用。傳統(tǒng)方法可以進行一些圖像融合,例如直接將缺陷裁剪下來到處貼,為了保證生成的逼真一點,還是需要一些融合的手段,例如泊松融合和邊緣融合等。當(dāng)然,有些場景,直接修改圖片局部的灰度值也可以生成逼真的缺陷。我就單單利用修改圖片的灰度和對比度就生成了很多以假亂真的圖片。深度學(xué)習(xí)方法一般用GAN和VAE等生成模型可用,利用GAN可以直接從噪聲生成數(shù)據(jù),不過產(chǎn)生新的對網(wǎng)絡(luò)訓(xùn)練有受益的信息比較有限??梢岳妙愃苝ix2pix的方案進行圖片編輯。傳統(tǒng)方法中的圖片融合也可以利用GAN來做。 (七)場景VS數(shù)據(jù)前面主要說了場景和數(shù)據(jù)的一些東西,這里對比再看一下。場景是客觀的,固有屬性,你做與不做,它都在那里。 數(shù)據(jù)是有主觀的成分在里面:從其光學(xué)設(shè)計、標(biāo)準執(zhí)行等上來說,有很大人為因素。也是上文說的可控。具有很大的操作和設(shè)計空間。 但是有時還要思考:值不值得做?可能是時間、成本、性價比、大規(guī)模推廣等方面的原因。當(dāng)然,大部分場景還是很容易做的,因為在工業(yè)領(lǐng)域,至少是受限的和可控的場景。關(guān)鍵要分清主要矛盾和次要矛盾。 (八)方法論這里重要要建設(shè)四種意識,要進行全員建設(shè)。從產(chǎn)品經(jīng)理、光學(xué)工程、結(jié)構(gòu)工程師、算法工程師、應(yīng)用工程師、運維工程師,當(dāng)然也包括決策者:
在進行需求挖掘和可行性分析的時候,有一些一些值得思考點
(九)算法積木當(dāng)然,上面也說了,數(shù)據(jù)場景復(fù)雜,一致性問題難以保證。而且面臨的數(shù)據(jù)量比較大,因此你還可以使用一些半監(jiān)督、弱監(jiān)督的手段來降低標(biāo)注的工作量。 (十)任務(wù)拆分任務(wù)拆分,可以降低算法的難度。多個結(jié)果進行分攤?cè)蝿?wù)難度,另外不同階段對數(shù)據(jù)的依賴不一樣,多個階段拆分更容易控制,尤其是在樣本平衡方面。多個階段對標(biāo)的是端到端,可以做到精度方面的提升。 (十一)定制語義分割模型定制特性:
當(dāng)然再配合一些訓(xùn)練tricks,可以達到事半功倍的效果:
(十二)dice loss 10 問眾所周知,diceloss是語義分割,尤其是應(yīng)對正負樣本不平衡的一把利器。但是它也有一些槽點,因此必須整明白。下面提出diceloss十問,暫時不給出答案。之前也寫過一個diceloss的深度解析,可以參考一下: 皮特潘:語義分割之dice loss深度分析(梯度可視化) https://zhuanlan.zhihu.com/p/269592183
(十三)定制分類分類是最簡單的任務(wù),當(dāng)然缺陷檢測可能會對它提出了更高的要求。例如下面這個方法 皮特潘:DCL細粒度分類網(wǎng)絡(luò)小記 https://zhuanlan.zhihu.com/p/328377321 分類任務(wù)有時會結(jié)合交叉驗證、多模型boosting、弱監(jiān)督語義分割。 (十四)定制目標(biāo)檢測很多技巧性的東西,都是通用的目標(biāo)檢測技巧,例如:尺度問題、形變問題等等;本文不再敘述。 (十五)正常樣本建模傳統(tǒng)方法:(場景受限,需要調(diào)參數(shù),可用于防呆,明顯缺陷沒問題,微弱缺陷效果不行)
深度學(xué)習(xí):
對場景進行篩選,從簡單、對齊入手。注意:可以利用監(jiān)督學(xué)習(xí)尋找算法的上限 ![]() (十六)工具鏈![]() 如上圖,缺陷檢測落地需要非常多的工具支撐:
難點:整合散亂的工具,甚至完全交給用戶。市面是有很多做自動訓(xùn)練軟件的,例如比較知名的VIDI,國內(nèi)也有AIDI、Alpha等??赡艽蠹疫x擇的模型不是非常先進,但是從標(biāo)注到訓(xùn)練,再到模型導(dǎo)出,用戶體驗和跨平臺做的比較好。工業(yè)場景,特定場景特定算法,工具做好,不必追求SOTA模型,SOTA模型只是提高了自然場景精度的上限,而我們需要把握模型的下限。 (十七)部署部署沒啥可說的,可其他任務(wù)沒有太大區(qū)別,這里列舉一些總結(jié)的點吧! 部署兩大任務(wù):
模型加速:
部署的兩種方式:
常用推理庫:
(十八)技術(shù)壁壘
所以缺陷檢測不單單是一個算法模型的問題,而是整個系統(tǒng)工程??赡懿恍枰浅G把缘乃惴?,但是需要成熟的工具鏈。即便是基礎(chǔ)的算法、看似容易的場景,也可以形成技術(shù)壁壘。如果想復(fù)刻,也沒有那么輕松。很多時候,不是不能做,而是值不值得做? Nothing is impossible, what you want is simply expensive (十九)總結(jié)
最后,缺陷檢測都是可以做的。那些非常難的,AI是目前最好的方案。 本文亮點總結(jié) 如果覺得有用,就請分享到朋友圈吧! |
|
|