使用u^2net打造屬於自己的remove-the-background

使用u^2net打造屬於自己的remove-the-background

本文由小肉包老師原創,轉載請註明出處,來自騰訊、阿里等一線AI算法工程師組成的QQ交流羣歡迎你的加入: 1037662480

不久之前有一篇叫做u^2net的論文刷爆reddit和twitter,號稱是2020年最強的靜態背景分割算法。但科研歸科研,我們更關心的是它能用來做什麼有趣的東西。既然它能做靜態物體分割,那爲何不能用它來打造一個屬於我們的自己的remove the background呢?

說道remove the background我第一個想到的商業應用場景就是… 證件照,曾幾何時我們有一張還不錯的證件照結果某某機構就需要某個顏色的底照,那麼我們有辦法解決嗎?作爲AI算法工程師的我們,秒天秒地秒空氣,是否可以秒換證件照背景呢?

咳咳,先來一張小姐姐鎮樓,我們今天的任務就是用u2net這個模型,來給小姐姐換個證件照背景:

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-9mr7Bhxr-1590112510410)(https://i.loli.net/2020/05/15/GD3ENiuHT9OVKpc.jpg)]

等等,這好像不是小姐姐…

男的也能分的,又不是不能分。還是用小姐姐把:

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-VUMvf3Gx-1590112510416)(https://i.loli.net/2020/05/15/sDumAWYwPyRS3I8.jpg)]

emmm, 順眼了許多。

大家可以注意到,實際上當你i用一些分割模型,比如deeplabv3,或者ENet,ESPNet,PSPNet去分割的時候,你會發現很多細節是無法得到有效處理的。這在論文裏面可以很清晰的看到。在一些細節裏面這個分割模型很難處理。

u2net完成的任務和分割還不太一樣,去除背景沒有對前景具有明確的類別定義,也就是說它可以去掉一切的背景物體。並且只保留前景物體。我們先來看看它的一個效果:

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-lNDCVElj-1590112510418)(https://i.loli.net/2020/05/15/cr2jnCZYoxkM7f3.jpg)]

我們可以看到分割圖mask的非常犀利的,甚至可以看到頭髮絲!!

我們在u2net原始代碼上做了一下事情:

  • 支持mask後處理contour(角點);
  • 支持從原圖根據角點扣除前景物體;
  • 支持去除背景,並且更換背景;
  • 支持證件照背景替換。

什麼?你想看證件照的效果?來了,繼續上小姐姐!

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-SHfh8Oly-1590112510421)(https://i.loli.net/2020/05/15/ZtcWG3EYRkPfeqi.jpg)]

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-GNNCYkwF-1590112510422)(https://i.loli.net/2020/05/15/jkZ26JPCm3v1YyK.jpg)]

可以看到,效果非常的驚豔!!

上圖中前面兩個顏色都是我們更換背景之後的證件照,可以看到在頭髮和頸部包圍的部分,也可以看好的被替換!本偏博客教程的所有代碼都將在末尾提供,請大家細心看完我們的教程,重要的是學到一些東西,讓我們開始吧!

u2net在分割中優越性

我們在一張圖上把u2net的結構畫出來,一目瞭然,事實上在cv領域最簡單的無外乎就是語義分割,因爲它沒有太複雜的座標換算,有的就是一整張圖的輸入與輸出,讓我們來看看這個神奇網絡的神祕面紗。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-v2adlwcH-1590112510424)(https://i.loli.net/2020/05/15/xT1eJXRoN5PDIwL.png)]

從這個結構大家應該可以看到,這有點Transformer的思想啊!通過堆疊更多的sequence2sequence (在這裏是encodeer和decoder)來獲取儘可能多的語義信息。

從網絡結構裏面我們能學習到一些比較有意思的思想:

  • 堆疊work的block來暴力獲取更大的gain;
  • 使用大的空洞卷積因子來獲取更大的感受野,整體的視覺信息更加豐富;
  • 通過不同level的輸出來fuse最終的輸出。

其實同樣的idea也可以用在目標檢測,實例分割等方面。。只是看你有沒有足夠的運氣在有限的時間內找到一個work的方法。

u2net的應用

我們自始至終都倡導學以致用,即便是最fancy的模型,我們也會挖掘它的應用點。對於這個模型來說,毫無疑問,用來去除背景是最好的應用。

來在一些範例的圖片上看看效果, 先來一直草擬馬:

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-98Zx7YzA-1590112510425)(https://i.loli.net/2020/05/15/HZcUy9I7TJQolqs.jpg)]

大家可以看到最後一張圖,這隻羊駝的毛髮都清晰可見!

再來看看馬的效果:

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-wXtWVGKp-1590112510426)(https://i.loli.net/2020/05/15/ZUpfM8uJHdl1GRr.jpg)]

這是馬的分割同樣很不錯了,連馬的鬃毛都可以區分出來。如果換做是傳統的分割算法,可能連馬腿都漏掉了。

我們要做自己的證件照!

對於一個技術宅來說,最大的好處莫過於可以用技術「爲所欲爲」,下次大家拍了一個證件照,想更換背景,也別去下載廣告滿天飛的app了,點擊下面的鏈接,只要你會python,自己DIY一個:

http://manaai.cn/aicodes_detail3.html?id=59

我們來看看最終效果怎麼樣:

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-gpvKZ7O8-1590112510427)(https://i.loli.net/2020/05/15/9x1NPqp5jkAbOrU.jpg)]

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-0J9AZd9u-1590112510428)(https://i.loli.net/2020/05/15/fmW9l2SjgbyxoGO.jpg)]

整體來說效果還不錯。

更換的背景可以很好的fit。

代碼

我們所有的代碼託管在MANA AI,如果你還不是神力會員,快來加入百萬AI社區,找到屬於你的Spark!!如果你看完本文覺得不錯,一定記得三聯啊老鐵!!

我們的AI交流社區:

http://t.manaai.cn

MANA平臺:

http://manaai.cn

廣告時間

接下來是廣告時間。如果你想學習人工智能,對前沿的AI技術比較感興趣,可以假如我們的知識星球,獲取第一時間資訊,前沿學術動態,業界新聞等等!你的支持將會鼓勵我們更頻繁的創作,我們也會幫助你開啓更深入的深度學習之旅!

image-20200515153654923

下篇預告

下一個推送中,我們將帶大家體驗一下如何用efficientdet構建可部署可訓練的高精度且快速的目標檢測器。歡迎加入我們的星球或者QQ羣交流探討。