自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何使用深度學(xué)習(xí)去除人物圖像背景

開(kāi)發(fā) 開(kāi)發(fā)工具
近日,Medium 上出現(xiàn)了一篇題為《Background removal with deep learning》的文章,講述的是 greenScreen AI 在利用深度學(xué)習(xí)去除圖像人物背景方面的工作與研究。

近日,Medium 上出現(xiàn)了一篇題為《Background removal with deep learning》的文章,講述的是 greenScreen AI 在利用深度學(xué)習(xí)去除圖像人物背景方面的工作與研究。本著開(kāi)發(fā)一個(gè)有意義的深度學(xué)習(xí)產(chǎn)品的初衷,他們把任務(wù)鎖定在了自拍和人物肖像上,并最終在已稀釋的 COCO 數(shù)據(jù)集上取得了 84.6 的 IoU,而當(dāng)下最佳水平是 85。

用深度學(xué)習(xí)去除人物圖像背景

簡(jiǎn)介

在研究機(jī)器學(xué)習(xí)的最近幾年里,我一直想著打造真正的機(jī)器學(xué)習(xí)產(chǎn)品。數(shù)月之前,在學(xué)習(xí)完 Fast.AI 上的深度學(xué)習(xí)課程之后,我清晰地意識(shí)到機(jī)會(huì)來(lái)了:深度學(xué)習(xí)技術(shù)的進(jìn)步可以使很多之前不可能的事情變成現(xiàn)實(shí),新工具被開(kāi)發(fā)出來(lái),它們可以讓部署變的比以前更便捷。在前面提到的課程中,我結(jié)識(shí)了 Alon Burg,他是一位很有經(jīng)驗(yàn)的網(wǎng)頁(yè)開(kāi)發(fā)者,我們達(dá)成一致來(lái)共同完成這個(gè)目標(biāo)。我們一起設(shè)定了以下目標(biāo):

  1. 提升我們的深度學(xué)習(xí)技巧
  2. 提升我們的人工智能產(chǎn)品部署技巧
  3. 開(kāi)發(fā)一款有用的、具有市場(chǎng)需求的產(chǎn)品
  4. 有趣(不僅對(duì)我們而言,也對(duì)用戶而言)
  5. 分享我們的經(jīng)驗(yàn)

基于以上目標(biāo),我們探索了一些想法:

  1. 之前沒(méi)有被做過(guò)的(或是沒(méi)有被正確做過(guò))
  2. 規(guī)劃和實(shí)現(xiàn)的難度不大——我們計(jì)劃兩到三個(gè)月完成,每周一個(gè)工作日。
  3. 具有簡(jiǎn)單并且吸引人的用戶接口——我們旨在做出人們能夠使用的產(chǎn)品,而不僅僅停留在演示的目標(biāo)上。
  4. 要有方便獲取的訓(xùn)練數(shù)據(jù)——眾所周知,有時(shí)候數(shù)據(jù)比算法更加昂貴
  5. 使用到前沿的深度學(xué)習(xí)技術(shù)(要是那種還未被 Google Allo、亞馬遜以及其云平臺(tái)上的合作者商業(yè)化的技術(shù)),但是也不能太前沿(這樣的話我們可以在網(wǎng)絡(luò)上找到一些例子)
  6. 要擁有實(shí)現(xiàn)「生產(chǎn)就緒」(production ready)結(jié)果的潛力

我們的前期想法是做一些醫(yī)療項(xiàng)目,因?yàn)檫@個(gè)領(lǐng)域與我們內(nèi)心所設(shè)想、所感受的東西更相近,醫(yī)療領(lǐng)域還有著大量唾手可得的成果。然而,我們意識(shí)到我們可能會(huì)在收集數(shù)據(jù)上碰到一些問(wèn)題,也有可能會(huì)觸及到法律,這是我們最后放棄醫(yī)療項(xiàng)目的原因。我們的第二個(gè)選擇就是圖像背景去除。

背景去除是一個(gè)很容易手動(dòng)或者半手動(dòng)實(shí)現(xiàn)的任務(wù)(Photoshop,甚至 Power Point 都有這類(lèi)工具),如果你使用某種「標(biāo)記」或者邊緣檢測(cè),這里有一個(gè)實(shí)例

(https://clippingmagic.com/)。然而,全自動(dòng)化的背景去除是一個(gè)相當(dāng)有挑戰(zhàn)性的任務(wù),據(jù)我們所知,目前還沒(méi)有一個(gè)產(chǎn)品具有令人滿意的效果,盡管有人在嘗試。

我們要去除什么背景呢?這是一個(gè)重要的問(wèn)題,因?yàn)榫蛯?duì)象、角度而言,一個(gè)模型越是具體,分離的質(zhì)量就會(huì)越高。我們的工作開(kāi)始時(shí),想法很龐大:就是要做一個(gè)通用的能夠識(shí)別所有類(lèi)型的圖像中的前景和背景的背景去除器。但是當(dāng)我們訓(xùn)練完第一個(gè)模型之后,我們明白了,集中力量在某類(lèi)特定的圖像集上會(huì)更好一些。所以,我們決定集中在自拍和人物肖像上。

人物(類(lèi)人)肖像的背景去除

人物(類(lèi)人)肖像的背景去除

自拍有明顯的和更為集中的前景(一個(gè)或者多個(gè)人物),這使得我們能夠很好地將對(duì)象(人臉+上身)與背景分離,同時(shí)還有一個(gè)相對(duì)固定的角度,以及總是同一個(gè)對(duì)象(人物)。

有了這些假設(shè)之后,我們踏上了研究、實(shí)現(xiàn)以及花數(shù)小時(shí)訓(xùn)練得到一個(gè)簡(jiǎn)便易用的背景去除產(chǎn)品的旅程。

我們的主要工作是訓(xùn)練模型,但是我們不能低估正確部署的重要性。好的分割模型仍然不如分類(lèi)模型那么緊密(例如 SqueezeNet),我們主動(dòng)地檢查了服務(wù)器模型和瀏覽器模型的部署選擇。

如果你想閱讀關(guān)于我們產(chǎn)品的部署過(guò)程的諸多細(xì)節(jié),你可以去瀏覽我們關(guān)于服務(wù)器端和客戶端的博文。

如果你想讀到更多關(guān)于模型和訓(xùn)練的東西,那就繼續(xù)吧。

語(yǔ)義分割

我們查看了和我們的任務(wù)類(lèi)似的深度學(xué)習(xí)和計(jì)算機(jī)視覺(jué)任務(wù),不難發(fā)現(xiàn),我們的最佳選擇就是語(yǔ)義分割任務(wù)。

其他策略,比如通過(guò)深度檢測(cè)來(lái)做分割也存在,但是對(duì)我們的目標(biāo)而言并不成熟。

語(yǔ)義分割是一個(gè)計(jì)算機(jī)視覺(jué)經(jīng)典任務(wù),它是計(jì)算機(jī)視覺(jué)領(lǐng)域的三大主題之一,其他兩個(gè)分別是分類(lèi)和目標(biāo)檢測(cè)。從將每一個(gè)像素歸為一個(gè)類(lèi)別來(lái)講,分割實(shí)際上也是一個(gè)分類(lèi)任務(wù)。然而與圖像分類(lèi)和目標(biāo)檢測(cè)不一樣的是,分割模型事實(shí)上表現(xiàn)出了某種對(duì)圖像的「理解」,在像素層面上不僅能區(qū)分「這張圖像上有一只貓」,還能指出這是什么貓。

所以,分割是如何工作的呢?為了更好地理解它,我們必須梳理一下這個(gè)領(lǐng)域的一些早期工作。

最早的想法是采用一些早期的分類(lèi)神經(jīng)網(wǎng)絡(luò),例如 VGG、Alexnet?;厮莸?2014 年,VGG 是圖像分類(lèi)任務(wù)中最領(lǐng)先的網(wǎng)絡(luò),它在今天也相當(dāng)有用,因?yàn)樗兄?jiǎn)單直接的結(jié)構(gòu)。在查看 VGG 的前幾層的時(shí)候,你可能會(huì)注意到從每一條目到類(lèi)別都有高激活值。更深的層甚至還有更高的激活值,但是由于其重復(fù)池化動(dòng)作,本質(zhì)上它們是很粗糙的。有了這些理解之后,可以假定,在經(jīng)過(guò)一些處理之后,分類(lèi)訓(xùn)練也能用在尋找/分割對(duì)象的任務(wù)中。

早期的語(yǔ)義分割結(jié)果是和分類(lèi)算法一起出現(xiàn)的。在本文中,你可以看到我們使用 VGG 得出的一些簡(jiǎn)單的分割結(jié)果:

[[202938]]

后邊層的結(jié)果:

VGG

對(duì) buss 圖像的分割,淺紫色區(qū)域(29)代表校巴類(lèi)別

雙線性上采樣之后:

這些結(jié)果僅來(lái)自于簡(jiǎn)單地將全連接層轉(zhuǎn)換(或者修改)為它最初的形態(tài),修改它的空間特征,得到一個(gè)全連接的卷積神經(jīng)網(wǎng)絡(luò)。在上面的例子中,我們把一張 768*1024 的圖像輸入到 VGG,然后就得到了 24*32*1000 的一個(gè)層,24*32 是圖像的池化版本,1000 是 image-net 的類(lèi)別數(shù)目,從這里我們能夠得到上述的分割結(jié)果。

為了使預(yù)測(cè)結(jié)果更加平滑,研究者還使用了簡(jiǎn)單的雙線性上采樣層。

在全連接神經(jīng)網(wǎng)絡(luò)的論文中

(Fully Convolutional Networks for Semantic Segmentation,https://arxiv.org/abs/1411.4038),研究者提升了上述的想法。為了具有更加豐富的解釋?zhuān)麄儼岩恍舆B接在一起,根據(jù)上采樣的比例,它們被命名為 FCN-32、FCN-16 和 FCN-8。

在層之間添加一些跳躍連接使得從原始圖像到編碼的預(yù)測(cè)更加精細(xì)。進(jìn)一步訓(xùn)練模型會(huì)讓結(jié)果更好。

這個(gè)技術(shù)表現(xiàn)出的效果并不像預(yù)料中的那么差勁,并且證明利用深度學(xué)習(xí)進(jìn)行語(yǔ)義分割確實(shí)是有潛力的。

FCN 論文中全連接神經(jīng)網(wǎng)絡(luò)的結(jié)果

FCN 論文中全連接神經(jīng)網(wǎng)絡(luò)的結(jié)果

全連接神經(jīng)網(wǎng)絡(luò)開(kāi)啟了分割的概念,研究者為這個(gè)任務(wù)嘗試了不同的架構(gòu)。主要思想是類(lèi)似的:使用已知的架構(gòu)、上采樣以及使用跳躍連接,這些仍然在新模型中占據(jù)主要部分。

回到我們的項(xiàng)目

經(jīng)過(guò)調(diào)研之后,我們選擇了三個(gè)合適的模型開(kāi)始研究:FCN、Unet 以及 Tiramisu——這是一個(gè)非常深層的編碼器-解碼器架構(gòu)。我們還在 mask-RCNN 上有一些想法,但是實(shí)現(xiàn)這個(gè)似乎不在我們這個(gè)項(xiàng)目的范圍之內(nèi)。

FCN 看上去并不相關(guān),因?yàn)樗慕Y(jié)果和我們想要的結(jié)果(即便是初始點(diǎn)的結(jié)果)不一樣,但是我們提到的其他兩個(gè)模型卻表現(xiàn)出了不錯(cuò)的結(jié)果:CamVid 數(shù)據(jù)集上的 tiramisu 模型和 Unet 模型主要的優(yōu)點(diǎn)是緊湊性和速度。在實(shí)現(xiàn)方面,Unet 是相當(dāng)直接的(使用 keras),并且 Tiramisu 也是可實(shí)現(xiàn)的。我們使用 Jeremy Howard 上一次的深度學(xué)習(xí)課程中對(duì) Tiramisu 較好的實(shí)現(xiàn)來(lái)開(kāi)始我們的項(xiàng)目。

我們使用這兩個(gè)模型開(kāi)始在一些數(shù)據(jù)集上訓(xùn)練。不得不說(shuō)的是,當(dāng)我第一次訓(xùn)練完 Tiramisu 之后,發(fā)現(xiàn)它的結(jié)果對(duì)我們而言更有優(yōu)勢(shì),因?yàn)樗心芰Σ蹲綀D像中的尖銳邊緣,然而,Unet 看上去并不是那么好,甚至有一點(diǎn)搞笑。

Unet 的結(jié)果稍有遜色

Unet 的結(jié)果稍有遜色

數(shù)據(jù)

在利用模型設(shè)定好我們的基礎(chǔ)目標(biāo)之后,我們就開(kāi)始尋找合適的數(shù)據(jù)集。分割數(shù)據(jù)并不像分類(lèi)和檢測(cè)那樣常見(jiàn)。此外,人工標(biāo)注也不現(xiàn)實(shí)。最常用于分割的數(shù)據(jù)集是 COCO(http://mscoco.org/),這個(gè)數(shù)據(jù)集大約包括 8 萬(wàn)張圖像(有 90 類(lèi)),VOC pascal 數(shù)據(jù)集有 1.1 萬(wàn)張圖像(有 20 類(lèi)),以及更新的數(shù)據(jù)集 ADE20K。

我們選擇使用 COCO 數(shù)據(jù)集,因?yàn)槠渲小溉恕诡?lèi)的圖像更多,這恰好是我們的興趣所在。

考慮到我們的任務(wù),我們思考是否僅僅使用和我們的任務(wù)超級(jí)相關(guān)的圖像,或者使用更加通用的數(shù)據(jù)集。一方面,一個(gè)更通用的數(shù)據(jù)集擁有更多的圖像和類(lèi)別,這使得我們能夠應(yīng)付更多的場(chǎng)景和挑戰(zhàn)。另一方面,一次徹夜不歇的訓(xùn)練可以處理大約 15w 張的圖像。如果我們?cè)谡麄€(gè) COCO 數(shù)據(jù)集上引入模型的話,結(jié)果會(huì)是,模型處理每張圖像的平均次數(shù)是 2 次,所以稍作修改是有益處的。此外,這會(huì)使得模型更聚焦于我們的目標(biāo)。

另一件值得提及的事情是 Tiramisu 模型最初是在 CamVid 數(shù)據(jù)集上訓(xùn)練的,它有一些缺陷,但最重要的是其圖像很單調(diào):所有圖像都是道路上的車(chē)輛。你不難理解,從這樣的數(shù)據(jù)集中學(xué)習(xí)對(duì)我們的任務(wù)并沒(méi)有好處(即使圖像中包含了人物),所以在短暫的實(shí)驗(yàn)之后,我們便改變了數(shù)據(jù)集。

CamVid 數(shù)據(jù)集中的圖像

CamVid 數(shù)據(jù)集中的圖像

 

COCO 數(shù)據(jù)集附帶相當(dāng)直接的 API,這些 API 可以讓我們知道每一張圖像中是哪種類(lèi)型的對(duì)象。

在一些實(shí)驗(yàn)之后,我們決定稀釋一下數(shù)據(jù)集:首先我們過(guò)濾出其中有人的圖像,最終得到了 4 萬(wàn)張。然后,丟棄了有很多人在里面的圖像,留下了只有一個(gè)或者兩個(gè)人的圖像,因?yàn)檫@是產(chǎn)品所需要的。最后,我們留下了 20%-70% 被標(biāo)注為人的圖像,去掉那些在背景中有一小部分是人的圖像,還有那些具有奇怪的建筑的圖像也一并去掉了(不過(guò)不是所有的都去掉)。我們最終得到的數(shù)據(jù)集只有 1.1 萬(wàn)張圖像,我們覺(jué)得在目前這個(gè)階段已經(jīng)夠用了。

[[202942]]

左:正常圖像;中:有太多東西的圖像;右:目標(biāo)太小了

Tiramisu 模型

之前說(shuō)過(guò),我們使用了 Jeremy Howard 的課程中講述的 Tiramisu 模型。盡管它的名字「100 層 Tiramsiu」顯得它很龐大,但是實(shí)際上它卻是一個(gè)相當(dāng)經(jīng)濟(jì)的模型,僅僅有 900 萬(wàn)個(gè)參數(shù)。相比之下,VGG-16 有 130M 個(gè)參數(shù)。

Tiramisu 模型是基于 DensNet 的,DensNet 是一個(gè)最新的圖像分類(lèi)模型,所有的層都是相互連接的。此外,與 Unet 類(lèi)似,Tiramisu 模型在上采樣層上添加了跳躍連接。

回想一下前文你就會(huì)發(fā)現(xiàn),這個(gè)架構(gòu)和 FCN 中呈現(xiàn)的思想是一致的:使用分類(lèi)架構(gòu)、上采樣并且為精調(diào)添加跳躍連接。

通用的 Tiramisu 架構(gòu)

通用的 Tiramisu 架構(gòu)

DenseNet 模型可以看作是一個(gè)自然進(jìn)化的 Reset 模型,但是,DenseNet 不是簡(jiǎn)單地把一層的信息「記憶到」下一層,而是在整個(gè)模型中記憶所有層。這些連接被稱作高速連接。它造成了過(guò)濾器數(shù)目的膨脹,這被定義為「增長(zhǎng)率」。Tiramisu 的增長(zhǎng)率是 16,所以我們會(huì)給每一層添加 16 個(gè)過(guò)濾器,直至到達(dá)具有 1072 個(gè)過(guò)濾器的那一層。你也許期望著具有 1600 個(gè)過(guò)濾器的那一層,因?yàn)檫@是 100 層的 Tiranisu,然而,上采樣會(huì)舍棄一些過(guò)濾器。

DenseNet 模型框架——在整個(gè)模型中,前邊層的過(guò)濾器是堆疊的

訓(xùn)練

我們遵循原始論文中的計(jì)劃來(lái)訓(xùn)練模型:標(biāo)準(zhǔn)交叉熵?fù)p失,學(xué)習(xí)率為 0.001 的 RMSProp 優(yōu)化器,較小的衰減。我們將數(shù)據(jù)的 70% 用來(lái)訓(xùn)練,20% 用來(lái)驗(yàn)證,10% 用來(lái)測(cè)試。下面的所有圖像都來(lái)自我們的測(cè)試集。

為了讓我們的訓(xùn)練過(guò)程與原始論文一致,我們把 epoch 大小設(shè)置為 500 張圖像。這也使得我們能夠在結(jié)果中的每一次進(jìn)展中周期地保存模型,因?yàn)槲覀兪窃诤艽蟮臄?shù)據(jù)上訓(xùn)練模型的(那篇文章中用到的 CamVid 數(shù)據(jù)集僅有不到 1000 張圖像)。

此外,我們訓(xùn)練的模型只有兩個(gè)類(lèi):背景和人物,然而那篇論文中的模型有 12 個(gè)類(lèi)。我們首先嘗試著在部分 COCO 類(lèi)上訓(xùn)練,但是我們隨后就發(fā)現(xiàn)這對(duì)我們的訓(xùn)練沒(méi)多大作用。

1. 數(shù)據(jù)問(wèn)題

一些數(shù)據(jù)集的缺陷阻礙了我們模型的評(píng)分:

  • 動(dòng)物—我們的模型有時(shí)候會(huì)分割動(dòng)物,這也自然導(dǎo)致了較低的 IOU,會(huì)將動(dòng)物添加到我們的主要分類(lèi)中。
  • 身體部分—由于我們有計(jì)劃地過(guò)濾了我們的數(shù)據(jù)集,所以沒(méi)辦法區(qū)分圖像中的人是一個(gè)真實(shí)的人還是某個(gè)身體部位,例如手、腳。這些圖像雖然不在我們的考慮范圍之內(nèi),但是還是會(huì)處處出現(xiàn)。

[[202944]]

動(dòng)物、身體部分以及手持物體

手持物體——數(shù)據(jù)集中的很多圖像都是和運(yùn)動(dòng)相關(guān)的。到處都是棒球拍、羽毛球拍以及滑雪板。從某種程度來(lái)說(shuō),我們的模型已經(jīng)困惑于應(yīng)該如何分割它們。與動(dòng)物的例子一樣,我們認(rèn)為將它們添加到主分類(lèi)或者獨(dú)立的分類(lèi)中會(huì)對(duì)模型的性能有所幫助。

[[202945]]

有一個(gè)物體的運(yùn)動(dòng)圖像

粗糙的真實(shí)情況——COCO 數(shù)據(jù)集中的很多圖像都不是按照像素標(biāo)注的,而是用多邊形標(biāo)注的。有時(shí)候這很好,但是其余時(shí)候真實(shí)情況過(guò)于粗糙,這可能會(huì)阻礙模型學(xué)習(xí)一些微妙的細(xì)節(jié)。

真實(shí)情況很粗糙的圖像

真實(shí)情況很粗糙的圖像

2. 結(jié)果

我們的結(jié)果是令人滿意的,盡管不太完美:我們?cè)跍y(cè)試集上達(dá)到了 84.6 的 IoU,而當(dāng)下最佳水平是 85。但是這個(gè)數(shù)字是微妙的:它會(huì)隨著不同的數(shù)據(jù)集和類(lèi)別浮動(dòng),有的類(lèi)別本身就很容易分割,例如房屋、道路,在這些例子中很多模型都能很容易地達(dá)到 90 的 IoU。其他的更具挑戰(zhàn)性的類(lèi)別是樹(shù)和人物,在這些類(lèi)別中很多模型只能達(dá)到大約 60 的 IoU。為了克服這個(gè)困難,我們幫助我們的網(wǎng)絡(luò)集中在某個(gè)單獨(dú)的類(lèi)別上,并且在有限種類(lèi)型的圖像中。

我們?nèi)匀粵](méi)有覺(jué)得我們的工作是「產(chǎn)品就緒」的,就像我們當(dāng)初想讓它成為的樣子一樣,但是現(xiàn)在恰恰是停下來(lái)討論我們的結(jié)果的時(shí)間,因?yàn)樵诖蠹s 50% 的圖像上都能給出較好的結(jié)果。

下面是一些很好的實(shí)例,給人的感覺(jué)就是一個(gè)不錯(cuò)的應(yīng)用。

圖像、真實(shí)數(shù)據(jù)、我們的結(jié)果(來(lái)自我們的測(cè)試集)

圖像、真實(shí)數(shù)據(jù)、我們的結(jié)果(來(lái)自我們的測(cè)試集)

調(diào)試和日志

訓(xùn)練神經(jīng)網(wǎng)絡(luò)時(shí)非常重要的一部分就是調(diào)試。立馬開(kāi)始是很吸引人的,得到數(shù)據(jù)和網(wǎng)絡(luò),開(kāi)始訓(xùn)練,看一下會(huì)得到什么結(jié)果。然而我們會(huì)發(fā)現(xiàn),追蹤每一個(gè)動(dòng)作是非常重要的,這樣就能夠?yàn)槲覀冏约簞?chuàng)建能夠檢查每一步的結(jié)果的工具。

這里是一些常見(jiàn)的挑戰(zhàn)以及我們的應(yīng)對(duì)方法:

  1. 前期問(wèn)題—模型可能不能訓(xùn)練。有可能是因?yàn)橐恍┍举|(zhì)原因,或者是一些預(yù)處理的錯(cuò)誤,例如忘記了標(biāo)準(zhǔn)化某些數(shù)據(jù)塊。無(wú)論如何,對(duì)結(jié)果的簡(jiǎn)單可視化是很有幫助的。關(guān)于這個(gè)主題,這里有一篇博客(https://blog.slavv.com/37-reasons-why-your-neural-network-is-not-working-4020854bd607)。
  2. 調(diào)試網(wǎng)絡(luò)本身—在確定沒(méi)有關(guān)鍵問(wèn)題之后,訓(xùn)練通過(guò)預(yù)定義損失和指標(biāo)開(kāi)始。在分割中,主要舉措是 IoU——在聯(lián)合中交叉。把 IoU 作為模型(而不是交叉熵?fù)p失)的主要手段確實(shí)花了一些時(shí)間。另一個(gè)有幫助的實(shí)踐是在每個(gè) epoch 展示一些模型的預(yù)測(cè)。這里有一篇調(diào)試機(jī)器學(xué)習(xí)模型的好文章(https://hackernoon.com/how-to-debug-neural-networks-manual-dc2a200f10f2)。注意,IoU 并不是 keras 中標(biāo)準(zhǔn)的指標(biāo)/損失,但是你可以輕易在網(wǎng)上找到,比如這里(https://github.com/udacity/self-driving-car/blob/master/vehicle-detection/u-net/README.md)。我們還使用這個(gè)要點(diǎn)繪制損失和每個(gè) epoch 的預(yù)測(cè)。
  3. 機(jī)器學(xué)習(xí)版本控制—在訓(xùn)練一個(gè)模型的時(shí)候,會(huì)面臨很多參數(shù),其中的一些是很微妙的。不得不說(shuō)的是,除了熱切地寫(xiě)下我們的配置(如下,使用 keras 的 callback 寫(xiě)下最佳模型),我們?nèi)匀粵](méi)有發(fā)現(xiàn)完美的方法。
  4. 調(diào)試工具—在做完上述所有步驟之后,我們就可以逐步檢查我們的工作了,然而并不是無(wú)縫的,所以,最重要的就是把上述所有步驟結(jié)合在一起,創(chuàng)建一個(gè) jupyter notebook 會(huì)讓我們無(wú)縫地加載每一個(gè)模型和每一張圖片,并且快速檢查結(jié)果。這樣的話我們就能容易地發(fā)現(xiàn)模型之間的不同、陷阱以及其他問(wèn)題。

這里是我們通過(guò)調(diào)整參數(shù)和額外訓(xùn)練之后得到的模型性能提升的例子:

通過(guò)調(diào)整參數(shù)和額外訓(xùn)練之后得到的模型性能提升的例子

保存目前驗(yàn)證過(guò)程中的最佳模型:(keras 提供了一個(gè)非常好的 callback 函數(shù),讓這一步驟變得容易多了)

  1. callbacks = [keras.callbacks.ModelCheckpoint(hist_model, verbose=1,save_best_only =Truemonitor= ’val_IOU_calc_loss’), plot_losses] 

除了對(duì)可能出現(xiàn)的代碼錯(cuò)誤的正常調(diào)試之外,我們還注意到模型的錯(cuò)誤是「可預(yù)測(cè)的」,就像把看似在正常身體之外的身體部分切掉一樣,大型分段上的「缺口」,非必要的擴(kuò)展身體部分,糟糕的光照,低質(zhì)量圖像,以及很多細(xì)節(jié)。其中的一些注意事項(xiàng)在從數(shù)據(jù)集中添加具體的圖片的時(shí)候就已經(jīng)被處理了,但是其他的仍然是有待解決的難題。為了提升下一個(gè)版本的結(jié)果,我們會(huì)在「硬」圖像上為我們的模型使用具體的擴(kuò)展。

我們?cè)谇懊娴臄?shù)據(jù)集問(wèn)題早就提到過(guò)這個(gè)問(wèn)題?,F(xiàn)在讓我們來(lái)了解一下我們模型中的困難吧:

1. 衣服—非常深色或者淺色的衣服容易被解釋為背景

2. 「缺口」—即使是好的結(jié)果,里面也會(huì)有缺口

衣服和缺口

衣服和缺口

3. 光照——較差的光照條件和模糊在圖像中是很常見(jiàn)的,然而 COCO 數(shù)據(jù)集中并不是這樣的,所以,除了模型要處理的這些事情中的正常困難以外,我們的模型甚至還沒(méi)有為更硬的圖像做準(zhǔn)備。這可以通過(guò)得到更多的數(shù)據(jù)來(lái)解決,此外,最好不要在晚上使用我們的應(yīng)用。

較差的光照條件的實(shí)例

較差的光照條件的實(shí)例

進(jìn)一步處理的選項(xiàng)

1. 進(jìn)一步的訓(xùn)練

我們的產(chǎn)品結(jié)果來(lái)自 300 個(gè) epoch 的訓(xùn)練。在這一階段之后,這個(gè)模型開(kāi)始過(guò)擬合了。我們的這些結(jié)果已經(jīng)非常接近發(fā)布的版本了,所以也不可能再去做數(shù)據(jù)擴(kuò)增了。

在將圖像調(diào)整到 224*224 之后,我們開(kāi)始訓(xùn)練模型。使用更多更大的數(shù)據(jù)集進(jìn)行進(jìn)一步的訓(xùn)練也有希望提升結(jié)果(原始尺寸是 COCO 數(shù)據(jù)集上的 600*1000 的圖像)。

2. CRF 和其他的增強(qiáng)

在某些階段,我們發(fā)現(xiàn)我們的結(jié)果在邊緣有一些噪聲。能夠精調(diào)這種問(wèn)題的一個(gè)模型就是 CRF。在下面這篇博客中,作者展示了使用 CRF 的一個(gè)實(shí)例

(http://warmspringwinds.github.io/tensorflow/tf-slim/2016/12/18/image-segmentation-with-tensorflow-using-cnns-and-conditional-random-fields/)。

然而,這對(duì)我們的工作并不是很有用,也許是因?yàn)樗ǔT诮Y(jié)果比較粗糙的時(shí)候才會(huì)奏效。

3. 摳圖

即便是我們現(xiàn)在的結(jié)果中,分割也不是完美的。頭發(fā)、衣服、樹(shù)枝和其他物體都不可能被完美地分割,甚至是因?yàn)閷?shí)況中也沒(méi)有包含這些細(xì)節(jié)的標(biāo)注。對(duì)這些片段的分割任務(wù)被稱作摳圖,這又是一個(gè)新的挑戰(zhàn)。這里是一個(gè)今年年初在 NVIDIA 的會(huì)議上發(fā)表的最先進(jìn)的摳圖技術(shù)的例子

(https://news.developer.nvidia.com/ai-software-automatically-removes-the-background-from-images/)。

摳圖實(shí)例——輸入也包含 trimap

摳圖實(shí)例——輸入也包含 trimap

摳圖任務(wù)和其余圖像相關(guān)的任務(wù)是不一樣的,因?yàn)樗妮斎氩粌H僅包含圖片,還有 trimap——也就是圖像邊緣的輪廓,這使得這個(gè)任務(wù)成為了一個(gè)「半監(jiān)督」問(wèn)題。

我們用摳圖做了一小部分實(shí)驗(yàn),使用我們的分割作為 trimap,然而并沒(méi)有得到顯著的結(jié)果。

另一個(gè)問(wèn)題就是缺少一個(gè)用于訓(xùn)練的合適的數(shù)據(jù)庫(kù)。

總結(jié)

正如剛開(kāi)始的時(shí)候說(shuō)到的一樣,我們的目標(biāo)是開(kāi)發(fā)一個(gè)有意義的深度學(xué)習(xí)產(chǎn)品。正如你在 Alon 的博客

(https://medium.com/@burgalon)中看到的一樣,部署總是快速且容易的。然而,訓(xùn)練一個(gè)模型確實(shí)困難,尤其是在進(jìn)行整夜的訓(xùn)練時(shí),需要仔細(xì)地計(jì)劃、調(diào)試和記錄結(jié)果。

做好調(diào)研、嘗試新事物以及平常的訓(xùn)練和改進(jìn)之間的平衡也是不容易的。因?yàn)槲覀兪褂蒙疃葘W(xué)習(xí),所以我們總是覺(jué)得最佳的模型或者是最準(zhǔn)確的模型離我們很近,并且還覺(jué)得谷歌搜索或者論文會(huì)指引我們。但是,實(shí)際上,我們的實(shí)際提升僅僅來(lái)自于更多地壓榨原始模型。如上所述,我們?nèi)耘f覺(jué)得可以從原始模型中壓榨出更多的提升空間。

原文:

https://medium.com/towards-data-science/background-removal-with-deep-learning-c4f2104b3157

【本文是51CTO專(zhuān)欄機(jī)構(gòu)“機(jī)器之心”的原創(chuàng)譯文,微信公眾號(hào)“機(jī)器之心( id: almosthuman2014)”】

 

戳這里,看該作者更多好文

責(zé)任編輯:趙寧寧 來(lái)源: 51CTO專(zhuān)欄
相關(guān)推薦

2025-01-20 08:35:53

2017-08-03 11:00:20

2017-05-12 16:25:44

深度學(xué)習(xí)圖像補(bǔ)全tensorflow

2018-07-19 15:13:15

深度學(xué)習(xí)圖像

2018-01-03 10:00:39

深度學(xué)習(xí)摳圖消除背景

2018-08-03 09:42:01

人工智能深度學(xué)習(xí)人臉識(shí)別

2025-01-20 08:00:00

圖像增強(qiáng)深度學(xué)習(xí)AI

2023-04-28 10:31:54

Linux命令圖像

2021-07-23 08:00:00

深度學(xué)習(xí)框架模型

2017-05-22 13:15:45

TensorFlow深度學(xué)習(xí)

2020-10-16 14:59:32

機(jī)器學(xué)習(xí)人工智能神經(jīng)網(wǎng)絡(luò)

2022-04-02 21:46:27

深度學(xué)習(xí)編碼器圖像修復(fù)

2021-05-12 08:00:00

深度學(xué)習(xí)人工智能設(shè)備

2019-05-24 10:30:38

2021-10-28 09:00:00

深度學(xué)習(xí)人工智能技術(shù)

2021-04-25 16:21:32

機(jī)器學(xué)習(xí)圖像程序

2021-01-06 13:50:19

人工智能深度學(xué)習(xí)人臉識(shí)別

2022-12-30 08:00:00

深度學(xué)習(xí)集成模型

2024-10-08 08:19:19

2016-12-06 08:51:48

深度學(xué)習(xí)TensorFlow機(jī)器學(xué)習(xí)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)