谷歌釋出人體影像分割工具BodyPix 2.0,可在iPhone上流暢執行

AIBigbull2050發表於2019-11-20

今天,Google官方推出了使用TensorFlow.js的人體影像分割工具 BodyPix 2.0,對該工具進行了一次重大升級,加入多人支援,並提高了準確率。

谷歌釋出人體影像分割工具BodyPix 2.0,可在iPhone上流暢執行

BodyPix能將影像分割為屬於人的和不屬於人的畫素,屬於人的部分可以進一步分類為二十四個身體部位之一。

BodyPix可以直接在瀏覽器中執行,開發者只需加入幾行程式碼,即可與電腦或手機的攝像頭配合使用。

在使用預設設定的情況下,BodyPix可以在15寸MacBook Pro上以 25 fps的速度估計,並渲染人和身體部位的分割。而在iPhone X上,BodyPix能以 21 fps的速度進行估計。

谷歌釋出人體影像分割工具BodyPix 2.0,可在iPhone上流暢執行

BodyPix於今年2月推出,本次2.0版的主要更新有:對多人影像的支援、增加基於ResNet-50的模型、新的API、權重量化以及對不同尺寸影像的支援。

功能演示

在專案的GitHub主頁上,TensorFlow給出了BodyPix 2.0軟體的一些基本用法演示,還有網頁版Demo供使用者體驗。

人像分割

對於給定具有一個或多個人的影像,人像分割可預測所有人的分割。 segmentPerson返回PersonSegmentation,對應於影像中人物分割的物件。

谷歌釋出人體影像分割工具BodyPix 2.0,可在iPhone上流暢執行

segmentPerson預設不會在不同的個人之間消歧義。因此如果您需要對不同的人進行區分,請使用segmentMultiPerson,不過引入此方法會導致執行速度變慢。

以上結果返回的是一組0和1的陣列,用於表示該畫素點是否屬於人。

身體部位細分

BodyPix的 segmentPersonParts方法可以預測所有人的24個身體部位分割。

谷歌釋出人體影像分割工具BodyPix 2.0,可在iPhone上流暢執行

PartSegmentation會所有合併的人,返回值是每個畫素與身體部位相對應的編碼。同樣的,如果需要區分多人,請使用segmentMultiPersonParts。

身體不同部位對應的編碼如下表所示:

谷歌釋出人體影像分割工具BodyPix 2.0,可在iPhone上流暢執行

把結果輸出到影像上

BodyPix還包含其他實用程式功能,可以將輸出結果與原始影像合成,得到你所需的渲染影像。

bodyPix.toMask可以給人和背景加上一層蒙版,指定渲染畫素的顏色和不透明度。

谷歌釋出人體影像分割工具BodyPix 2.0,可在iPhone上流暢執行

bodyPix.toColoredPartMask可以給人體部位分割加上一個24色的顏色陣列,每個身體部位都對應著陣列中的一個顏色。

谷歌釋出人體影像分割工具BodyPix 2.0,可在iPhone上流暢執行

以上是BodyPix的基礎功能的用法。

既然BodyPix可以區分出人體和背景 ,我們就可以用它實現實時的背景虛化,呼叫的API方法是 bodyPix.drawBokehEffect

谷歌釋出人體影像分割工具BodyPix 2.0,可在iPhone上流暢執行

利用BodyPix識別出身體不同部位的功能,可以呼叫 bodyPix.blurBodyPart給人臉打上馬賽克。

谷歌釋出人體影像分割工具BodyPix 2.0,可在iPhone上流暢執行

此外還有更多的影像繪製API,在此就不一一列舉了。

安裝方法

BodyPix使用非常簡便,使用者可以將其與指令碼標籤一起嵌入HTML使用:

<html> 

<body>
<!-- Load TensorFlow.js -->
<script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@0.13.3"></script>
<!-- Load BodyPix -->
<script src="https://cdn.jsdelivr.net/npm/@tensorflow-models/body-pix"></script>
bodypix.load().then(function(net) {
// BodyPix model loaded
});
</script>
</body>
</html>

或者通過npm方式安裝:

npm install @tensorflow-models/body-pix

然後使用es6模組匯入:

import * as bodyPix from '@tensorflow-models/body-pix'; 


async function loadAndUseBodyPix() {
const net = await bodyPix.load();
// BodyPix model loaded
}

如何讓BodyPix執行更快

BodyPix帶有不同尺寸的模型,具有不同的效能。通過設定模型的大小和輸出步長,可以在執行速度和準確性之間進行權衡。

預設情況下,BodyPix載入的是0.75倍的 MobileNetV1架構,適合中低端GPU的計算機使用,而匯入0.50倍的模型可以用於移動裝置。

const net = await bodyPix.load({

architecture: 'MobileNetV1',
outputStride: 16,
multiplier: 0.75,
quantBytes: 2
});

倍率的數值越大,神經網路中層的尺寸也越大,準確率更高、推理速度更慢。不同倍率模型的效能對比如下:

谷歌釋出人體影像分割工具BodyPix 2.0,可在iPhone上流暢執行

對於具有更強大GPU的計算機,官方建議使用 ResNet架構, 這一部分也是2.0版加入的新功能

const net = await bodyPix.load({

architecture: 'ResNet50',
outputStride: 32,
quantBytes: 2
});

原理簡介

BodyPix的核心是執行人體分割的演算法,對輸入影像的每個畫素執行二進位制決策,以估計該畫素是否屬於某個人。

影像通過MobileNet網路饋送,並且使用S型啟用函式將輸出轉換為0到1之間的值。

谷歌釋出人體影像分割工具BodyPix 2.0,可在iPhone上流暢執行

為了估計身體部位的分割,BodyPix使用相同的MobileNet表示,但是這次通過預測額外的24個通道輸出張量P來重複上述過程,其中二十四是身體部位的數量。每個通道編碼身體某部位是否存在的概率。

輸出張量P中有24個通道,因此需要在24個通道中找到最佳部分。在推斷期間,對於輸出身體部位張量P的每個畫素位置(u,v),body_part_id使用以下公式選擇屬於第i個部位概率最高的畫素:

谷歌釋出人體影像分割工具BodyPix 2.0,可在iPhone上流暢執行

這將產生一個二維影像,每個畫素都包含一個整數,該整數表示該畫素屬於哪個身體部位。通過將值設定為-1,可以把不屬於人體的部分剔除掉。

谷歌釋出人體影像分割工具BodyPix 2.0,可在iPhone上流暢執行

傳送門

試玩Demo:
https://storage.googleapis.com/tfjs-models/demos/body-pix/index.html

官方部落格:
https://blog.tensorflow.org/2019/11/updated-bodypix-2.html

GitHub地址:
https://github.com/tensorflow/tfjs-models/tree/master/body-pix

—   —


https://www.toutiao.com/i6760881651133186563/


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69946223/viewspace-2664942/,如需轉載,請註明出處,否則將追究法律責任。

相關文章