0
雷鋒網(wǎng)AI科技評(píng)論按:這篇文章介紹了作者Gidi Sheperber在greenScreen.AI項(xiàng)目中所做的工作和研究,雷鋒網(wǎng)AI科技評(píng)論對(duì)本文做了詳細(xì)介紹和編譯。
在機(jī)器學(xué)習(xí)方興未艾的過(guò)去幾年里,我一直想要親自開(kāi)發(fā)具有實(shí)用價(jià)值且基于機(jī)器學(xué)習(xí)的產(chǎn)品。然后幾個(gè)月前,在我學(xué)習(xí)了由Fast.AI所提供的深度學(xué)習(xí)課程之后,我意識(shí)到機(jī)會(huì)來(lái)了。當(dāng)前的機(jī)遇是:深度學(xué)習(xí)的技術(shù)優(yōu)勢(shì)使得許多之前不能完成的事情變得可能,并且還有許多新興工具被開(kāi)發(fā)出來(lái),這使得深度學(xué)習(xí)的部署過(guò)程變得更加簡(jiǎn)單。
在上述課程中,我遇到了Alon Burg——一名經(jīng)驗(yàn)豐富的web開(kāi)發(fā)人員,我們剛好趣味相投。所以為了實(shí)現(xiàn)這么一款產(chǎn)品,我們?yōu)樽约涸O(shè)定了一些目標(biāo):
提高自身的深度學(xué)習(xí)技巧
提高自身的AI產(chǎn)品部署技巧
針對(duì)市場(chǎng)需求,開(kāi)發(fā)具有實(shí)用價(jià)值的產(chǎn)品
產(chǎn)品要有趣
要分享我們的經(jīng)驗(yàn)
綜合考慮以上的目標(biāo),我們進(jìn)行了頭腦風(fēng)暴:
哪些東西是沒(méi)被做過(guò)的(或者說(shuō)還不夠完善)
產(chǎn)品的設(shè)計(jì)以及實(shí)現(xiàn)難度不能太大——因?yàn)槲覀兊挠?jì)劃是花上2-3個(gè)月的時(shí)間,每周只在這上邊花個(gè)1天時(shí)間
用戶(hù)接口要足夠簡(jiǎn)單,容易上手——因?yàn)槲覀兿M脩?hù)能夠輕松學(xué)會(huì)如何使用這個(gè)產(chǎn)品,畢竟該產(chǎn)品開(kāi)發(fā)的初衷不是為了科學(xué)驗(yàn)證
用于訓(xùn)練深度學(xué)習(xí)模型的數(shù)據(jù)要容易獲取——因?yàn)橛袡C(jī)器學(xué)習(xí)經(jīng)驗(yàn)的人基本都知道,有時(shí)數(shù)據(jù)比算法來(lái)的更加重要
將采用尖端的深度學(xué)習(xí)技巧(這種技巧還未被Google、Amazon等公司投入商業(yè)化應(yīng)用),但是也不能太過(guò)于新穎(以便于我們可以在網(wǎng)上找到參考例子)
產(chǎn)品將具備有生產(chǎn)的潛力
我們最早的想法是從醫(yī)療項(xiàng)目入手,因?yàn)獒t(yī)療領(lǐng)域與我們的初衷很接近,并且那時(shí)認(rèn)為(現(xiàn)在依然認(rèn)為)深度學(xué)習(xí)在醫(yī)療領(lǐng)域還存在著大量機(jī)會(huì)。但是,我們意識(shí)到這將違背有關(guān)于數(shù)據(jù)收集那一條,數(shù)據(jù)要容易獲取的原則。因此我們退而求其次,選擇了做背景消除(Background removal)。
背景消除這項(xiàng)任務(wù)如果由人類(lèi)純手工來(lái)做,或者借助諸如Photoshop、Power Point等工具來(lái)實(shí)現(xiàn)都是非常簡(jiǎn)單的。然而,全自動(dòng)化的背景消除卻是一項(xiàng)充滿(mǎn)挑戰(zhàn)的任務(wù)。并且根據(jù)我們的了解,目前還沒(méi)有一款產(chǎn)品能夠在背景消除任務(wù)中實(shí)現(xiàn)非常好的效果,不過(guò)有些廠商已經(jīng)進(jìn)行了嘗試。
那么問(wèn)題來(lái)了,我們需要消除什么樣的背景?這是一個(gè)很重要的問(wèn)題。因?yàn)橐粋€(gè)模型越是具體(比如說(shuō)對(duì)物體、角度等方面有詳細(xì)規(guī)定),它最后的分割效果也越好。在我們剛開(kāi)始時(shí),我們將這個(gè)范圍定義得比較廣:一個(gè)通用的背景消除器將能夠從任何類(lèi)型的圖片中自動(dòng)識(shí)別出前景與背景。但是在我們訓(xùn)練出了第一個(gè)模型之后,我們意識(shí)到如果將精力集中于一組特定的圖像上,將取得更好的效果。因此,我們決定專(zhuān)注于肖像以及自拍類(lèi)型的照片。
背景消除樣例
自拍的圖像具有突出和集中的前景(一個(gè)或者多個(gè)“人”),這樣使得背景和物體(臉部和上半身)間能實(shí)現(xiàn)較好的分割,并且能保持一個(gè)相對(duì)穩(wěn)定的角度。
在做了這些基本假設(shè)之后,我們開(kāi)始了理論研究、代碼實(shí)現(xiàn)和長(zhǎng)達(dá)數(shù)小時(shí)模型訓(xùn)練的旅程,以創(chuàng)建能夠一鍵輕松消除背景的服務(wù)。其中最重要的一部分工作是訓(xùn)練模型,但是也不能低估了正確部署模型的重要性。另外當(dāng)前最好的分割模型還無(wú)法像分類(lèi)模型(比如SqueezeNet)那么緊湊。并且我們還主動(dòng)檢查了服務(wù)器和瀏覽器的部署選項(xiàng)。
如果你想了解更多關(guān)于我們產(chǎn)品的部署過(guò)程,建議你去閱讀這兩篇文章,它們分別從服務(wù)器端和客戶(hù)端的角度介紹了該項(xiàng)目。
如果你只是想了解模型和它的訓(xùn)練過(guò)程,那么請(qǐng)接著閱讀吧。
當(dāng)我們開(kāi)始認(rèn)真思考深度學(xué)習(xí)和計(jì)算機(jī)視覺(jué)中各項(xiàng)技術(shù)的時(shí)候,顯而易見(jiàn)的,最適于用來(lái)實(shí)現(xiàn)背景消除任務(wù)的技術(shù)是語(yǔ)義分割。
當(dāng)然也有其它的策略,比如說(shuō)通過(guò)深度檢測(cè)器實(shí)現(xiàn)分割,但是這個(gè)對(duì)于我們而言似乎還不夠成熟。
語(yǔ)義分割(Semantic segmentation)是一項(xiàng)眾所周知計(jì)算機(jī)視覺(jué)任務(wù),與圖像分類(lèi)和物體檢測(cè)并列為計(jì)算機(jī)視覺(jué)領(lǐng)域的三大挑戰(zhàn)。分割的過(guò)程可以視為將圖像中的每個(gè)像素點(diǎn)分類(lèi)到圖像中某一個(gè)物體類(lèi)別上,所以分割實(shí)際上也是分類(lèi)任務(wù)。與圖像分類(lèi)或檢測(cè)不同,語(yǔ)義分割真正展現(xiàn)出了對(duì)圖像“理解”。因?yàn)樗⒉恢皇呛?jiǎn)單地指明“圖像中有只貓”,而且還在像素的級(jí)別上直接指出了圖中的貓?jiān)谀膫€(gè)位置,以及貓所占的范圍。
那么分割究竟是如何實(shí)現(xiàn)的呢?為了更好的理解這一點(diǎn),我們將回顧一下該領(lǐng)域的一些早期工作。
最早的想法是采用一些早期的分類(lèi)網(wǎng)絡(luò),比如VGG和Alexnet。VGG是2014年用于處理圖像分類(lèi)任務(wù)最先進(jìn)的模型,并且由于它簡(jiǎn)單明了的網(wǎng)絡(luò)結(jié)構(gòu),使得它在今天依然非常有用。在VGG較靠前的網(wǎng)絡(luò)層中,在要進(jìn)行分類(lèi)的物體周?chē)鷷?huì)具有較高的激活,并且在更深的層次中將具有更強(qiáng)的激活。但是由于重復(fù)的池化(Pooling)操作使得這些激活的性質(zhì)相對(duì)粗糙。有了這點(diǎn)基本理解之后,我們可以假設(shè)分類(lèi)訓(xùn)練模型在進(jìn)行一些調(diào)整之后也能被應(yīng)用于尋找或者分割圖像中的物體。
語(yǔ)義分割的早期結(jié)果與分類(lèi)算法一起出現(xiàn)。在這篇文章中,你將看到一些通過(guò)VGG實(shí)現(xiàn)的分割結(jié)果,但是結(jié)果比較粗糙。
較后邊網(wǎng)絡(luò)的結(jié)果:
校車(chē)的分割結(jié)果,淺紫色(29)代表了校車(chē)類(lèi)別
經(jīng)過(guò)雙線(xiàn)性上采樣之后:
這些結(jié)果僅來(lái)自于將全連接層轉(zhuǎn)換為原始形狀,而保持了原本的空間特征。在上邊所展示的實(shí)例中,我們輸入一張768*1024的圖像到VGG中,然后獲得一層24*32*1000,其中24*32是該圖像池化后的版本,而1000則指的是Image-net的類(lèi)別數(shù)量,從中可以導(dǎo)出分割結(jié)果。
為了實(shí)現(xiàn)平滑預(yù)測(cè),研究員使用了一個(gè)簡(jiǎn)單的雙線(xiàn)性上采樣層。
在FCN的論文中,研究員進(jìn)一步改進(jìn)了上述的方法。他們連接了一些層次,以便于獲取更多的特征解釋?zhuān)⑶乙罁?jù)上采樣率,分別被命名為FCN-32、FCN-16和FCN-8。
在層之間添加一些跳躍連接允許預(yù)測(cè)器從原始圖像獲取更精細(xì)的細(xì)節(jié)。進(jìn)一步的訓(xùn)練更能提高結(jié)果。
這種技術(shù)本身并不像以前所想那么糟糕,并且證明了深度學(xué)習(xí)在語(yǔ)義分割領(lǐng)域的潛力。
FCN的處理結(jié)果,圖像來(lái)自論文
FCN為語(yǔ)義分割打開(kāi)了一扇通往新世界的大門(mén),研究員為此任務(wù)嘗試了不同的網(wǎng)絡(luò)結(jié)構(gòu)。但是核心思想保持不變:使用已知的結(jié)構(gòu)、上采樣和網(wǎng)絡(luò)層間跳躍連接。這些技巧在較新的模型中依然常見(jiàn)。
你可以在這幾個(gè)貼子中進(jìn)一步獲取語(yǔ)義分割領(lǐng)域的發(fā)展情況:
另外你可能也發(fā)現(xiàn)了,大多數(shù)語(yǔ)義分割方法都保持了編碼-解碼(Encoder-decoder)的架構(gòu)模式。
在一番調(diào)研之后,我們將目光聚集在了三個(gè)模型上:FCN、Unet。其中Tiramisu采用了非常深的編碼-解碼架構(gòu)。我們也對(duì)Mask-RCNN有些想法,但是實(shí)現(xiàn)它似乎已經(jīng)超出了本項(xiàng)目的范圍。
FCN由于效果太差,首先被我們舍棄。而另外兩個(gè)模型的結(jié)果還不錯(cuò):Tiramisu和Unet的主要優(yōu)勢(shì)在于模型緊湊和計(jì)算快速。就實(shí)現(xiàn)方面而言,Unet非常容易實(shí)現(xiàn)(采用Keras)而Tiramisu也可以實(shí)現(xiàn)。并且我們也使用了來(lái)自Jeremy Howard's的Deep learning課程中最后一堂課所提供的Tiramisu的實(shí)現(xiàn)代碼。
保留著兩個(gè)候選的模型,我們進(jìn)入到了下一步——開(kāi)始訓(xùn)練模型。必須說(shuō)明的一點(diǎn)是,當(dāng)我第一次嘗試了Tiramisu模型之后,就被它驚人的結(jié)果所深深捕獲,因?yàn)樗軌虿东@到圖像中的尖銳邊緣。另一方面,Unet似乎還不夠好,它的結(jié)果也是差強(qiáng)人意。
既然在模型選擇方面已經(jīng)有個(gè)大概方向,那么接下來(lái)我們將開(kāi)始尋找合適的訓(xùn)練數(shù)據(jù)。用于訓(xùn)練分割模型的數(shù)據(jù)并不像分類(lèi)或者檢測(cè)那樣常見(jiàn)。事實(shí)上,圖像分割最常用的幾個(gè)數(shù)據(jù)集分別是COCO,它包含有90種類(lèi)別,大概有8萬(wàn)張圖像;VOC pascal,它包含有20種類(lèi)別和1.1萬(wàn)張圖像;以及最近發(fā)布的ADE20K。
最終我們選擇采用COCO數(shù)據(jù)集,因?yàn)樗性S多關(guān)于“人”這一類(lèi)別的圖像,而這正是我們所感興趣的。
考慮到產(chǎn)品所要實(shí)現(xiàn)的任務(wù),我們還需要考慮是只使用與任務(wù)最相關(guān)的那一部分?jǐn)?shù)據(jù)集,還是使用更多的更一般的數(shù)據(jù)?一方面,使用具有更多圖像和類(lèi)別的更一般性的數(shù)據(jù)集,將使得模型具備有處理更多場(chǎng)景和更具挑戰(zhàn)性的圖像;而另一方面,一個(gè)通宵的時(shí)間我們能夠訓(xùn)練15萬(wàn)張圖像。因此如果我們將完整的COCO數(shù)據(jù)集都用于訓(xùn)練模型,則一個(gè)通宵的時(shí)間下來(lái),平均而言,每張圖像將被使用2次左右。所以采用更加精簡(jiǎn)的部分?jǐn)?shù)據(jù)將對(duì)模型訓(xùn)練有益,此外,它將使得模型更加集中。
還有一件值得一提的事是,Tiramisu模型原本是在CamVid數(shù)據(jù)集上進(jìn)行訓(xùn)練的,該數(shù)據(jù)具有一些缺陷,但最重要的是它的圖像內(nèi)容非常單調(diào)——所有的圖像都是道路與汽車(chē)。相信你可以很容易就理解,從這樣的數(shù)據(jù)集中進(jìn)行學(xué)習(xí)(即便它包含有人)對(duì)我們的最終目的也沒(méi)有任何好處,所以經(jīng)過(guò)短暫的考慮,我們選擇了放棄而改用COCO。
來(lái)自CamVid數(shù)據(jù)集的樣例
COCO數(shù)據(jù)集附有非常簡(jiǎn)單明了的API,這可以讓我們準(zhǔn)確地知道每張圖像上都包含了哪些物體(根據(jù)90個(gè)預(yù)定義的類(lèi)別)。
經(jīng)過(guò)一番實(shí)驗(yàn),我們決定精簡(jiǎn)數(shù)據(jù)集。首先,我們選出了那些包含有人物的圖像,這樣的圖像有4萬(wàn)張。然后,我們繼續(xù)將那些包含有太多人物的圖像剔除,剩余的圖片中只包含有1到2個(gè)人,因?yàn)檫@樣的圖像與我們的產(chǎn)品目標(biāo)最契合。最終,我們只留下那些圖中有20%~70%的區(qū)域被標(biāo)記為人的圖像,而繼續(xù)移除了那些背景中人物過(guò)小,或者是存在某些怪異東西的圖片。最終,精簡(jiǎn)后的數(shù)據(jù)集包含有1.1萬(wàn)張圖像,而我們認(rèn)為這個(gè)數(shù)據(jù)量在現(xiàn)階段已經(jīng)足夠了。
左邊:好樣例,中間:包含有太多元素,右邊:目標(biāo)主體太小
如上所述,我們?cè)贘eremy Howard的課程中學(xué)習(xí)到了Tiramisu模型。雖然它的全名“100層Tiramisu”可能暗示了它是一個(gè)巨大的模型,但事實(shí)上它非常地經(jīng)濟(jì),甚至只有900萬(wàn)個(gè)參數(shù),而VGG16則擁有超過(guò)1.3億個(gè)參數(shù)。
Tiramisu模型是參考了DensNet的設(shè)計(jì)而提出的。而DensNet是一個(gè)最近提出的圖像分類(lèi)模型,在這個(gè)模型中所有層都相互連接。此外,Tiramisu還在上采樣層添加了跳躍連接(Skip connections),這一點(diǎn)和Unet一樣。
如果你還記得,這個(gè)架構(gòu)是符合FCN所提出的想法的:使用分類(lèi)架構(gòu)、上采樣和跳躍連接進(jìn)行細(xì)化。
Tiramisu的通用架構(gòu)
DenseNet模型可以看作是ResNet模型的一個(gè)自然演變,但是DenseNet不是“記住”層與層之間的關(guān)系,而是記住了模型中的所有層。這種連接被稱(chēng)為高速公路連接(Highway connections)。它導(dǎo)致了過(guò)濾器數(shù)量激增,這被定義為“增長(zhǎng)率”。Tiramisu的增長(zhǎng)率為16,因此在每一層我們需要添加16個(gè)新的濾波器,直到達(dá)到某一層具有1072個(gè)濾波器。你也許會(huì)期望1600層,因?yàn)槟P偷拿质恰?00層Tiramisu”,然而上采樣層降低了一些濾波器。
Densenet模型草圖,早期的濾波器堆疊在整個(gè)模型中
我們按照原始論文所述的方式對(duì)模型進(jìn)行了訓(xùn)練:標(biāo)準(zhǔn)的交叉熵、采用1e-3學(xué)習(xí)率的RMSProp優(yōu)化器和較小的衰減值。我們將精簡(jiǎn)后的1.1萬(wàn)張圖像分成了70%的訓(xùn)練集和20%的驗(yàn)證集,以及10%的測(cè)試集。接下來(lái)展示的所有圖片均來(lái)自測(cè)試集。
為了保證我們的訓(xùn)練過(guò)程與論文中的保持一致,我將Epoch size設(shè)置為每500張圖像,這使得我們能夠隨著每個(gè)結(jié)果的改進(jìn)而定期保存模型,因?yàn)槲覀儗?duì)更多的數(shù)據(jù)進(jìn)行了訓(xùn)練(原論文使用的CamVid數(shù)據(jù)集包含的圖像少于1千)。
此外,我們只在兩種類(lèi)別上進(jìn)行訓(xùn)練:背景與人,而論文中則使用了12種類(lèi)別。我們一開(kāi)始嘗試在COCO的類(lèi)別上進(jìn)行訓(xùn)練,但是發(fā)現(xiàn)這對(duì)訓(xùn)練并沒(méi)有太大幫助。
一些數(shù)據(jù)集的缺陷阻礙了模型的表現(xiàn)能力:
動(dòng)物——我們的模型有時(shí)候分割動(dòng)物,這將導(dǎo)致較低的IoU。在我們?nèi)蝿?wù)中往主要類(lèi)別增加動(dòng)物進(jìn)去或者是其它東西將導(dǎo)致結(jié)果變差。
軀干——由于我們是通過(guò)程序自動(dòng)化地過(guò)濾了數(shù)據(jù)集,所以無(wú)法判斷一張包含有人物的圖片是真的有一個(gè)人,還是說(shuō)僅僅只有一些軀干,比如手或者腳。這些圖像并不在我們的目標(biāo)范圍內(nèi),但是它們還是出現(xiàn)在了數(shù)據(jù)集中。
動(dòng)物,軀干,手持物體
手持物體——數(shù)據(jù)集中的許多圖像都是與運(yùn)動(dòng)有關(guān)的,圖中人物總是伴隨著棒球棒、網(wǎng)球拍和滑雪板等出現(xiàn)。我們的模型在某種程度上混淆了應(yīng)該如何去區(qū)分圖中的人和物。與在動(dòng)物的案例中一樣,將它們歸為主體的一部分或則區(qū)分開(kāi)來(lái)都將有助于提高模型的表現(xiàn)力。
粗糙的真實(shí)數(shù)據(jù)(Ground truth)——COCO數(shù)據(jù)集不是按像素進(jìn)行逐個(gè)標(biāo)記,而是使用了多邊形進(jìn)行標(biāo)注。有些時(shí)候,這種程度的標(biāo)注已經(jīng)足夠了,但是有些時(shí)候,這樣的真實(shí)數(shù)據(jù)還是過(guò)于粗糙,從而阻礙了模型的學(xué)習(xí)。
原圖以及粗糙的真實(shí)數(shù)據(jù)
我們的結(jié)果非常令人滿(mǎn)意,雖然還有些美中不足:我們?cè)跍y(cè)試集上取得IoU是84.6,而目前最佳的成績(jī)則是85。這個(gè)數(shù)據(jù)(IoU)也是棘手的,因?yàn)樗诓煌臄?shù)據(jù)集和類(lèi)別中會(huì)發(fā)生波動(dòng)。有些類(lèi)別本身就更容易進(jìn)行分割,例如房子、道路等,許多模型都能很容易取得90的IoU。另一些更加具有挑戰(zhàn)性的類(lèi)別有樹(shù)和人,在這些類(lèi)別的分割上大多數(shù)模型只能達(dá)到60的IoU。為了衡量這一困難,我們幫助網(wǎng)絡(luò)專(zhuān)注于單一的類(lèi)別和有限類(lèi)型的照片。
盡管我們?nèi)匀挥X(jué)得目前的成果尚不足以達(dá)到“可以投入使用(Production ready)”的標(biāo)準(zhǔn)要求,但是現(xiàn)在是一個(gè)暫停下來(lái)好好討論結(jié)果的好時(shí)機(jī),因?yàn)榇蠹s有50%的照片都給出了不錯(cuò)的結(jié)果。
以下是一些比較好的例子。
從左到右分別是:圖像,真實(shí)數(shù)據(jù),輸出結(jié)果(來(lái)自測(cè)試集)
訓(xùn)練神經(jīng)網(wǎng)絡(luò)的很重要一部分工作就是進(jìn)行調(diào)試。開(kāi)始一個(gè)神經(jīng)網(wǎng)絡(luò)的訓(xùn)練非常容易,只要獲取數(shù)據(jù)輸入網(wǎng)絡(luò),然后就開(kāi)始進(jìn)行訓(xùn)練,最終再看看輸出結(jié)果如何。但是我們發(fā)現(xiàn),跟蹤網(wǎng)絡(luò)訓(xùn)練的每一步都是非常重要的,所以我們?yōu)樽约褐谱髁讼鄳?yīng)的工具,以便于能在每個(gè)步驟中檢查結(jié)果。
以下是一些常見(jiàn)的挑戰(zhàn),以及我們所采取的措施:
早期問(wèn)題——該模型可能無(wú)法訓(xùn)練。這可能是因?yàn)橐恍┕逃械膯?wèn)題,或者由于某種預(yù)處理錯(cuò)誤,例如忘記歸一化數(shù)據(jù)塊導(dǎo)致的。無(wú)論如何,將結(jié)果可視化出來(lái)將非常有幫助。這有一個(gè)與該主題有關(guān)的貼子。
調(diào)試網(wǎng)絡(luò)——在確定沒(méi)有重大問(wèn)題之后,網(wǎng)絡(luò)將以預(yù)定義的損失開(kāi)始訓(xùn)練。在語(yǔ)義分割領(lǐng)域主要的衡量指標(biāo)是IoU——交疊率(Intersect over union)。我們花了一段時(shí)間才開(kāi)始采用IoU作為模型訓(xùn)練的主要指標(biāo)(而不是交叉熵)。另一個(gè)有用的做法是在每一個(gè)時(shí)期(Epoch)展示一些模型的預(yù)測(cè)結(jié)果。這個(gè)帖子很好地介紹了如何調(diào)試機(jī)器學(xué)習(xí)模型。另外請(qǐng)注意IoU在keras中并不是標(biāo)準(zhǔn)的損失函數(shù),但是可以很容易在網(wǎng)上找到現(xiàn)成的,比如這個(gè)。我們也利用這個(gè)Gist來(lái)繪制每個(gè)時(shí)期的損失和預(yù)測(cè)結(jié)果。
機(jī)器學(xué)習(xí)的版本控制——通常一個(gè)模型都會(huì)具有許多參數(shù),有些參數(shù)比較難以跟蹤。我必須說(shuō)明我們還沒(méi)找到完美的方法解決這個(gè)問(wèn)題,除了比較頻繁地寫(xiě)出配置信息(并使用keras回調(diào)自動(dòng)保存最佳模型,參見(jiàn)下文)。
調(diào)試工具——在完成了以上所有措施后,我們將能夠在每一個(gè)步驟檢驗(yàn)我們工作,但是依然無(wú)法做到無(wú)縫檢測(cè)。因此,最重要的一步是將上述步驟結(jié)合起來(lái),并創(chuàng)建一個(gè)Jupyter筆記本,我么能夠借助它實(shí)現(xiàn)無(wú)縫地加載每個(gè)模型和每個(gè)圖像,并且能夠快速檢測(cè)它的結(jié)果。這樣我們可以很容易發(fā)現(xiàn)模型之間的差異、模型的缺陷以及其它問(wèn)題。
以下是我們模型的改進(jìn)示例,以及參數(shù)調(diào)整和額外的訓(xùn)練。
保存在驗(yàn)證集上取得最好IoU成績(jī)的模型(Keras提供了一個(gè)非常棒的回調(diào)函數(shù),使得這件事變得非常簡(jiǎn)單):
callbacks = [keras.callbacks.ModelCheckpoint(hist_model, verbose=1,save_best_only =True, monitor= ’val_IOU_calc_loss’), plot_losses]
除了可能的代碼錯(cuò)誤的正常調(diào)試之外,我們還注意到,模型的錯(cuò)誤是“可預(yù)測(cè)的”。如“切割”身體部分超出了正常的軀干范圍,沒(méi)必要的軀干延伸,光照不足,照片質(zhì)量低和照片中細(xì)節(jié)過(guò)多等。其中一些在添加不同數(shù)據(jù)集中特定圖像時(shí)被處理掉了,但是其它的一些則依然是一項(xiàng)還有待處理的挑戰(zhàn)。為了在下個(gè)版本能夠提升結(jié)果,我們將使用專(zhuān)門(mén)針對(duì)“硬”圖像的擴(kuò)充進(jìn)行訓(xùn)練模型。
數(shù)據(jù)集問(wèn)題我們?cè)谥耙呀?jīng)談到過(guò)了?,F(xiàn)在來(lái)看看模型面臨的一些挑戰(zhàn):
衣服——非常亮或者非常黑的衣服有時(shí)會(huì)被當(dāng)成背景
“挖洞”——有些本應(yīng)該不錯(cuò)的結(jié)果卻有出現(xiàn)類(lèi)似于被挖了一個(gè)洞情況
衣服和“挖洞”
3. 燈光——雖然光照不足和圖像模糊的情況在照片中很常見(jiàn),但是COCO數(shù)據(jù)集卻不常見(jiàn)這類(lèi)情況。因此,除了使用標(biāo)準(zhǔn)難度的模型來(lái)處理之外,我們還沒(méi)有為那些富有挑戰(zhàn)的圖像做好準(zhǔn)備。這一問(wèn)題可以通過(guò)獲取更多數(shù)據(jù),或者增強(qiáng)數(shù)據(jù)(Data augmentation)來(lái)解決。
光照不足的樣例
我們的訓(xùn)練數(shù)據(jù)訓(xùn)練了300多個(gè)時(shí)期,在這之后,模型開(kāi)始變得過(guò)擬合。由于我們的結(jié)果已經(jīng)非常接近于發(fā)布的成績(jī),因此我們沒(méi)有機(jī)會(huì)應(yīng)用數(shù)據(jù)增強(qiáng)的基本做法。
訓(xùn)練所用的輸入圖像統(tǒng)一被調(diào)整為224*224大小。更進(jìn)一步地,采用更多的數(shù)據(jù)和更大分辨率的圖像(COCO圖像的原始大小約為600*1000)進(jìn)行訓(xùn)練模型也對(duì)提高最終的結(jié)果有幫助。
在某些階段,我們發(fā)現(xiàn)有些結(jié)果的邊緣存在噪點(diǎn)。可以采用CRF模型來(lái)改善這一問(wèn)題。在這個(gè)博客中,作者展示了CRF的簡(jiǎn)單使用樣例。
但是該方法對(duì)我們的工作來(lái)說(shuō)還不是很有幫助,也許是因?yàn)橹挥挟?dāng)結(jié)果比較粗糙的時(shí)候該方法才會(huì)有所幫助。
即使我們目前取得了這樣的結(jié)果,但是在實(shí)際的分割中還是不夠完美。諸如頭發(fā)、細(xì)膩的衣服、樹(shù)枝和其它精美的物品永遠(yuǎn)無(wú)法被完美分割。事實(shí)上,這種非常精細(xì)的分割任務(wù)被稱(chēng)為摳圖(Matting),它定義了一種不同的挑戰(zhàn)。這里展示了一個(gè)當(dāng)前最先進(jìn)的摳圖樣例,該項(xiàng)工作是在今年早些時(shí)候的NVIDIA大會(huì)上發(fā)表的。
摳圖樣例,輸入包含了Trimap
摳圖任務(wù)與其它圖像相關(guān)的任務(wù)不太一樣,因?yàn)樗妮斎胫胁粌H有原始圖像還有三分圖(Trimap)。三分圖指的是圖像邊緣的輪廓,這也使得它成了“半監(jiān)督”問(wèn)題。
我們使用摳圖進(jìn)行了一些實(shí)驗(yàn),就是將我們的分割圖像作為三分圖使用,但是卻沒(méi)有取得任何有意義的結(jié)果。
還有一個(gè)問(wèn)題就是缺乏使用的訓(xùn)練數(shù)據(jù)集。
正如一開(kāi)始所說(shuō)的,我們的目標(biāo)是開(kāi)發(fā)出一款具有意義的深度學(xué)習(xí)產(chǎn)品。正如你可以在Alon的貼子里看到的那樣,部署相對(duì)而言更加容易和快速。另一方面,模型的訓(xùn)練才是最棘手的——特別是需要花上一晚的時(shí)間進(jìn)行訓(xùn)練,此時(shí)你就需要進(jìn)行仔細(xì)規(guī)劃、調(diào)試和記錄結(jié)果。
事實(shí)證明,要在研究和嘗試新事物以及訓(xùn)練和改進(jìn)模型之間取得平衡是一件不容易的事情。由于使用了深度學(xué)習(xí),我們總是覺(jué)得最好的模型或者最適合我們的模型就躲在某個(gè)角落,只需要多進(jìn)行一次Google搜索或者多閱讀一篇論文就將會(huì)引導(dǎo)我們發(fā)現(xiàn)它。但是在實(shí)踐中,我們實(shí)際的改進(jìn)來(lái)自于從原始的模型中一點(diǎn)點(diǎn)地“擠壓”。而且如上所述,我們?nèi)匀挥X(jué)得有更多的地方可以繼續(xù)改進(jìn)。
總而言之,我們?cè)谶@個(gè)工作中收獲了許多樂(lè)趣,這幾個(gè)月的日子過(guò)得就像科幻小說(shuō)一般。我們很樂(lè)意同大家討論和回答任何問(wèn)題,期待在我們的網(wǎng)站上遇見(jiàn)您。
Via Background removal with deep learning,雷鋒網(wǎng)AI科技評(píng)論編譯
雷峰網(wǎng)版權(quán)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見(jiàn)轉(zhuǎn)載須知。