一鍵智能摳圖-原理與實(shí)現(xiàn)
點(diǎn)擊上方“AI算法與圖像處理”,選擇加"星標(biāo)"或“置頂”
重磅干貨,第一時間送達(dá)
來源:CVPy

一鍵智能摳圖-原理實(shí)現(xiàn)
1. 效果秀
有些朋友已經(jīng)體驗過了cvpy.net最近新上的一鍵智能摳圖和換背景的功能,智能判斷前景并自動摳圖,效果還是挺驚艷的,放幾張圖看看效果:

請注意看這位喵星人右側(cè)性感的胡須,摳的可謂是非常精細(xì)了。
有人說了,這張圖片的的背景是簡單的純色背景,體現(xiàn)不出難度來。
那我換一張我在路邊拍的一朵不知名的花(恕我孤陋寡聞...)的圖片,看看摳圖的效果,順便換個藍(lán)色的背景:

可以看到,模型成功識別出了前景區(qū)域,而且邊緣等細(xì)節(jié)識別的非常好。
再來看一張人物照的摳圖效果:

注意看左手指縫和肩膀后面的那一縷頭發(fā),稱得上絲絲入扣了吧。
2. 體驗途徑
看到效果想要體驗一把的小伙伴可以通過網(wǎng)址https://cvpy.net/studio/cv/func/DeepLearning/matting/matting/page/前往體驗區(qū)體驗。
3. U^2-Net (U square net)
上述一鍵智能摳圖的所用的模型是Pattern Recognition 2020論文《U^2-Net: Going Deeper with Nested U-Structure for Salient Object Detection》提出的U^2-Net。
值得一提的是,最近外網(wǎng)很火的增強(qiáng)現(xiàn)實(shí)應(yīng)用【隔空移物(AR Cut & Paste)】和 Object CutAPI都是基于CVPR2019的BASNet。而U^2-Net和BASNet的作者為同一位大佬-秦雪彬。
作者認(rèn)為,目前顯著性目標(biāo)檢測有兩種主流思路,一為多層次深層特征集成(multi-level deep feature integration),一為多尺度特征提?。∕ulti-scale feature extraction)。多層次深層特征集成方法主要集中在開發(fā)更好的多層次特征聚合策略上。而多尺度特征提取這一類方法旨在設(shè)計更新的模塊,從主干網(wǎng)獲取的特征中同時提取局部和全局信息。而幾乎所有上述方法,都是為了更好地利用現(xiàn)有的圖像分類的Backbones生成的特征映射。而作者另辟蹊徑,提出了一種新穎而簡單的結(jié)構(gòu),它直接逐級提取多尺度特征,用于顯著目標(biāo)檢測,而不是利用這些主干的特征來開發(fā)和添加更復(fù)雜的模塊和策略。
作者首先介紹了提出的Residual U-blocks,然后介紹了基于Residual U-blocks構(gòu)建的嵌套U型網(wǎng)絡(luò)結(jié)構(gòu)。
3.1 Residual U-blocks

上圖為普通卷積block,Res-like block,Inception-like block,Dense-like block和Residual U-blocks的對比圖,明顯可以看出Residual U-blocks是受了U-Net的啟發(fā)。
Residual U-blocks由以下三部分組成:
一個輸入卷積層,它將輸入的 feature map x (H × W × C_in)轉(zhuǎn)換成中間feature map F_1(x),F_1(x)通道數(shù)為C_out。這是一個用于局部特征提取的普通卷積層。一個 U-like的對稱的encoder-decoder結(jié)構(gòu),高度為L,以中間feature map F_1(x)為輸入,去學(xué)習(xí)提取和編碼多尺度文本信息U(F_1(x))。U表示類U-Net結(jié)構(gòu)。更大L會得到更深層的U-block(RSU),更多的池操作,更大的感受野和更豐富的局部和全局特征。配置此參數(shù)允許從具有任意空間分辨率的輸入特征圖中提取多尺度特征。從逐漸降采樣特征映射中提取多尺度特征,并通過漸進(jìn)上采樣、合并和卷積等方法將其編碼到高分辨率的特征圖中。這一過程減少了大尺度直接上采樣造成的細(xì)節(jié)損失。一種殘差連接,它通過求和來融合局部特征和多尺度特征: F_1(x) + U(F_1(x))。

RSU與Res block的主要設(shè)計區(qū)別在于RSU用U-Net結(jié)構(gòu)代替了普通的單流卷積,用一個權(quán)重層(weight layer)形成的局部特征來代替原始特征。這種設(shè)計的變更使網(wǎng)絡(luò)能夠從多個尺度直接從每個殘差塊提取特征。更值得注意的是,U結(jié)構(gòu)的計算開銷很小,因為大多數(shù)操作都是在下采樣的特征映射上進(jìn)行的。
3.2 U^2-Net的結(jié)構(gòu)
U^2-Net的網(wǎng)絡(luò)結(jié)構(gòu)如下:

與U-Net的網(wǎng)絡(luò)結(jié)構(gòu)做一個對比:

直觀上可以發(fā)現(xiàn),U^2-Net的每一個Block都是一個U-Net結(jié)構(gòu)的模塊,即上述Residual U-blocks。當(dāng)然,你也可以繼續(xù)Going Deeper, 每個Block里面的U-Net的子Block仍然可以是一個U-Net結(jié)構(gòu),命名為U^3-Net。然后同理繼續(xù)...,正所謂:子又生孫,孫又生子;子又有子,子又有孫;子子孫孫無窮匱也!
4. 性能表現(xiàn)
作者所提出的模型是使用DUTS-TR數(shù)據(jù)集進(jìn)行訓(xùn)練,該數(shù)據(jù)集包含大約10000個樣本圖像,并使用標(biāo)準(zhǔn)數(shù)據(jù)增強(qiáng)技術(shù)進(jìn)行擴(kuò)充。研究人員在6個用于突出目標(biāo)檢測的基準(zhǔn)數(shù)據(jù)集上評估了該模型:DUT-OMRON、DUTS-TE、HKU-IS、ECSSD、PASCAL-S和SOD。評價結(jié)果表明,在這6個基準(zhǔn)點(diǎn)上,新模型與現(xiàn)有方法具有相當(dāng)好的性能。
U^2-Net的實(shí)現(xiàn)是開源的,并為兩種不同的方法提供了預(yù)訓(xùn)練的模型:U^2-Net(176.3M的較大模型,在GTX 1080Ti GPU上為30 FPS)和一個僅為4.7mb的較小的U^2-Net版本,最高可達(dá)到40 FPS。
代碼和預(yù)訓(xùn)練模型都可以在Github找到:
https://github.com/NathanUA/U-2-Net。下載1:動手學(xué)深度學(xué)習(xí)
在「AI算法與圖像處理」公眾號后臺回復(fù):動手學(xué)深度學(xué)習(xí),即可下載547頁《動手學(xué)深度學(xué)習(xí)》電子書和源碼。該書是面向中文讀者的能運(yùn)行、可討論的深度學(xué)習(xí)教科書,它將文字、公式、圖像、代碼和運(yùn)行結(jié)果結(jié)合在一起。本書將全面介紹深度學(xué)習(xí)從模型構(gòu)造到模型訓(xùn)練,以及它們在計算機(jī)視覺和自然語言處理中的應(yīng)用。
個人微信(如果沒有備注不拉群!) 請注明:地區(qū)+學(xué)校/企業(yè)+研究方向+昵稱

