飛槳PaddleSeg新升級!帶來187K超輕量級人像分割模型,視頻級光流後處理方案

圖像分割技術,現如今已經有非常廣泛的應用,比如視頻監控場景的車輛人體分析、無人駕駛場景的車道線分割等;還有一些專業領域的應用,比如醫療影像分析場景的腫瘤分割、遙感影像分析場景的地塊分割、工業商業質檢場景中的受損部位分析應用。

另外在現在非常火的短視頻領域,對圖像分割,尤其是人像分割技術,有着非常廣泛的需求,比如可用於背景風格替換、影視特效等。將人像分割出來後和背景疊加產生新的效果,比如這個彈幕人像分離的應用。

在將人像分割技術應用到實際業務場景時,經常會面臨一些挑戰,很難達到理想的效果和商用級別的要求,比如下面這些問題:

  1. 由於拍攝情況複雜多樣,圖像數據組成往往很複雜,比如存在多尺度、圖像疊加、多姿態等情況,這對訓練模型前的數據處理環節帶來很大的挑戰。

  2. 人像分割技術在很多場景有實時分析需求,比如手機APP上的實時特效需求,這對模型大小和推理速度有更高的要求。

  3. 視頻級人像分割場景下,還會遇到幀間過度不夠穩定,邊緣部分閃爍的問題,影響最終的分割效果。

針對上面這些應用問題,飛槳圖像分割套件PaddleSeg再度重磅出擊,隨最新發布的飛槳開源框架1.8版本,推出了更強大的功能以支持人像分割技術的產業應用,讓開發者更順暢地完成人像分割任務,包括三大亮點特性:

  1. 全面提升對人像分割場景的全流程支持。針對人像分割場景提供了從數據增強處理、模型訓練、在線離線量化、視頻分割推理部署、替換背景等全流程配套工具。

  2. 最新發布HumanSeglite模型超輕量級人像分割模型,可支持移動端場景的實時分割,最小隻有187K

  3. 發佈基於光流算法的視頻級別的分割後處理方案,針對移動端小模型分割效果不理想的問題,有顯著效果。


全面提升對人像分割場景

的全流程支持

新版PaddleSeg提供針對人像分割場景從數據增強處理、模型訓練、在線離線量化、視頻分割推理部署、替換背景等全流程應用指南。

提供豐富的圖像增強策略

針對目標圖像多樣性問題,提供了10+種數據增強策略,可結合實際業務場景進行定製組合,提升模型泛化能力和魯棒性。

提供簡潔的模型訓練、量化和預測API

(1)通過train.py實現模型訓練:

python train.py --model_type HumanSegMobile \
--save_dir output/ \
--data_dir data/mini_supervisely \
--train_list data/mini_supervisely/train.txt \
--val_list data/mini_supervisely/val.txt \
--pretrained_weights pretrained_weights/humanseg_mobile_ckpt \
--batch_size 8 \
--learning_rate 0.001 \
--num_epochs 10 \
--image_shape 192 192

其中參數含義如下:

  • --model_type: 模型類型,可選項爲:HumanSegServer、HumanSegMobile和HumanSegLite

  • --save_dir: 模型保存路徑

  • --data_dir: 數據集路徑

  • --train_list: 訓練集列表路徑

  • --val_list: 驗證集列表路徑

  • --pretrained_weights: 預訓練模型路徑

  • --batch_size: 批大小

  • --learning_rate: 初始學習率

  • --num_epochs: 訓練輪數

  • --image_shape: 網絡輸入圖像大小(w, h)

(2)通過quant_offline.py實現離線量化(quant_online.py可實現在線量化):

python quant_offline.py --model_dir output/best_model \
--data_dir data/mini_supervisely \
--quant_list data/mini_supervisely/val.txt \
--save_dir output/quant_offline \
--image_shape 192 192

其中參數含義如下:

  • --model_dir: 待量化模型路徑

  • --data_dir: 數據集路徑

  • --quant_list: 量化數據集列表路徑,一般直接選擇訓練集或驗證集

  • --save_dir: 量化模型保存路徑

  • --image_shape: 網絡輸入圖像大小(w, h)

(3)通過export.py實現模型導出:

python export.py --model_dir output/best_model \
--save_dir output/export

其中參數含義如下:

  • --model_dir: 模型路徑

  • --save_dir: 導出模型保存路徑

(4)通過infer.py實現模型預測

python infer.py --model_dir output/best_model \
--data_dir data/mini_supervisely \
--test_list data/mini_supervisely/test.txt \
--image_shape 192 192

其中參數含義如下:

  • --model_dir: 模型路徑

  • --data_dir: 數據集路徑

  • --test_list: 測試集列表路徑

  • --image_shape: 網絡輸入圖像大小(w, h)


人像分割和背景替換快速體驗

PaddleSeg可實現對圖像、視頻的人像分割和背景替換。這裏以視頻爲例,代碼已經內置在video_infer.py(視頻分割),bg_replace.py(背景替換)中,簡單兩行命令即可快速體驗人像分割和背景替換效果。

# 對人像視頻進行分割處理
python video_infer.py --model_dir pretrained_weights/humanseg_lite_inference --video_path data/video_test.mp4

# 對人像視頻進行背景替換處理, 可通過'--background_video_path'傳入背景視頻
python bg_replace.py --model_dir pretrained_weights/humanseg_lite_inference --video_path data/video_test.mp4 --background_image_path data/background.jpg

效果如下:

          視頻                 背景        背景替換效果    

PaddleSeg新版本同步發佈了人像分割教程,方便在線體驗。

https://aistudio.baidu.com/aistudio/projectdetail/475345

超輕量級人像分割模型Human

-Seglite,最小隻有187k!

PaddleSeg開源了在大規模人像數據上訓練過的5個預訓練模型,滿足多種使用場景的需求,這些模型簡單經過Fine-tune即可訓練出自己的人像分割模型。

計算耗時運行環境:cpu:驍龍855, 內存:6GB, 圖片大小:192*192。

從上表可以看到,PaddleSeg不僅推出了服務端應用的預訓練模型,還提供了專門針對移動端實時分割場景的模型,例如手機自拍人像的實時處理。

該場景下由於移動設備算力、內存受限,所以需要更輕量級的模型,而且通常要求處理效率是30FPS,對應的預測時間需要在33ms以下。

本次PaddleSeg提供的HumanSegLite模型,採用更輕量的網絡結構- 優化後的ShuffleNetV2,並採用飛槳模型壓縮工具PaddleSlim的量化技術進一步壓縮模型的體積,達到速度和精度的平衡,最終生成的預訓練模型大小僅187K!預測時間11.8ms,爲開發者實現移動端實時分割任務提供有利武器。

執行以下腳本即可下載HumanSeg預訓練模型:

python pretrained_weights/download_pretrained_weights.py

視頻光流後處理方案,視頻

級別實時分割處理的利器!


針對移動端視頻的圖像分割效果往往不太理想的問題,可利用時序信息結合光流法,對分割結果進行優化,即視頻光流後處理方案。

什麼是光流後處理?

下面先簡單看一下光流(optical flow)的概念:運動物體在觀察成像平面上的像素運動的瞬時速度。包括稀疏光流和稠密光流。

稀疏光流: 計算部分像素的光流,速度快,效果差。

稠密光流:計算每個像素的光流,速度慢,效果好。

(圖片來源:https://zhuanlan.zhihu.com/p/74460341)

如何平衡光流效果與速度?

可採用DIS光流算法(Dense Inverse Search-basedmethod),屬於快速稠密光流,是一種在光流質量和計算時間中取得平衡的算法。優點是運算速度快的稠密光流,可達到實時要求。

DIS光流算法示意圖(速度越慢,效果越精細)

如何用光流算法改善視頻分割結果?

將分割的結果和DIS光流算法的預測結果融合,即可得到改善後的結果。

  • 具體方案:

  1. 根據時序圖像,計算相鄰兩幀的DIS光流(對應像素的位置關係)

  2. 根據DIS光流找到前一幀融合結果Flast的運動預測結果P

  3. 根據光流大小判斷融合權重W

  4. 融合結果  F = S*W + P*(1-W),其中S爲當前幀分割結果,P爲上一幀的運動預測結果


對比光流後處理的視頻分割效果

光流後處理的代碼已內置在video_infer.py中,可快速體驗效果。

# 人像視頻分割,自帶光流後處理效果
python video_infer.py --model_dir pretrained_weights/humanseg_lite_inference --video_path data/video_test.mp4

左(原圖)、中(無光流後處理的分割效果)、右(含光流後處理的分割效果)

對比上圖可以看出,進行光流後處理後,消除了人像邊緣閃爍的問題,在人物頭頂處尤爲明顯,另外減輕了人像邊緣的鋸齒效應,使得邊緣更平滑。

PaddleSeg更多升級動態

除了人像分割場景的升級支持以外,PaddleSeg本次還帶來一項利器,針對圖像分割任務中,經常出現類別分佈不均勻的情況,例如:工業產品的瑕疵檢測、道路提取及病變區域提取等,提供了損失函數Lovasz Loss的支持,解決類別不均衡問題。

lovasz loss損失函數簡介

Lovasz loss基於子模損失(submodular losses)的凸Lovasz擴展,對神經網絡的mean IoU損失進行優化。Lovasz loss根據分割目標的類別數量可分爲兩種:lovasz hinge loss和lovasz softmax loss. 其中lovasz hinge loss適用於二分類問題。在僅有兩個像素預測的情形下,lovasz hinge loss的函數曲面圖如下所示:

lovasz softmax loss適用於多分類問題。同樣在僅有兩個像素預測的情形下,lovasz softmax loss的函數曲面圖如下所示:

該內容發表在CVPR 2018上,可參考如下文獻了解具體原理。

http://openaccess.thecvf.com/content_cvpr_2018/html/Berman_The_LovaSz-Softmax_Loss_CVPR_2018_paper.html

一堆數學概念沒看懂?沒關係,不妨礙我們使用lovasz loss來解決類別不平衡問題,提升分割效果。

lovasz loss損失函數使用指南

接下來介紹如何在PaddleSeg中使用lovasz loss進行訓練。需要注意的是,通常的直接訓練方式並一定管用,我們推薦另外2種訓練方式:

(1)與softmax loss或bce loss(binary cross-entropy loss)加權結合使用。

(2)先使用softmax loss或bec loss進行訓練,再使用lovasz softmax loss或lovasz hinge loss進行finetuning.

配置lovasz loss僅需要設定2個參數:

首先通過cfg.SOLVER.LOSS參數選擇訓練時的損失函數, 例如cfg.SOLVER.LOSS=['lovasz_hinge_loss','bce_loss']將指定訓練loss爲lovasz hinge loss與bce loss的組合。cfg.SOLVER.LOSS=['lovasz_softmax_loss','softmax_loss']將指定訓練loss爲lovasz softmax loss與softmax loss的組合。

其次,也可以通過cfg.SOLVER.LOSS_WEIGHT參數對不同loss進行權重配比,從而靈活地進行訓練調參(方便小夥伴們進行“煉丹”)。Lovasz hinge loss配置位於PaddleSeg/configs/lovasz_hinge_deeplabv3p_mobilenet_road.yaml,如下所示:

SOLVER:
LOSS: ["lovasz_hinge_loss","bce_loss"]
LOSS_WEIGHT:
LOVASZ_HINGE_LOSS: 0.5
BCE_LOSS: 0.5

Lovasz softmax loss配置位於PaddleSeg/configs/lovasz_softmax_deeplabv3p_mobilenet_pascal.yaml,如下所示:

SOLVER:
LOSS: ["lovasz_softmax_loss","softmax_loss"]
LOSS_WEIGHT:
LOVASZ_SOFTMAX_LOSS: 0.2
SOFTMAX_LOSS: 0.8

實際效果

來看看lovasz loss的實際效果。在道路提取任務中,道路在圖片中所佔比例往往很小,是典型的類別不均衡場景。

我們使用lovasz loss和softmax loss分別進行訓練,分割效果如下:

可以看出,softmax loss訓練的結果中道路並不連續,主幹道部分缺失尤爲嚴重。而lovasz loss訓練的結果提升顯著,主幹道並無缺失,連小路也基本連續。

Lovasz loss具體使用教程請參見:

https://github.com/PaddlePaddle/PaddleSeg/blob/develop/docs/lovasz_loss.md

如在使用過程中有問題,可加入飛槳官方QQ羣進行交流:703252161

如果您想詳細瞭解更多飛槳的相關內容,請參閱以下文檔。

更多PaddleSeg的應用方法,歡迎訪問項目地址:

GitHub: 

https://github.com/PaddlePaddle/PaddleSeg

Gitee: 

https://gitee.com/paddlepaddle/PaddleSeg

官網地址:

https://www.paddlepaddle.org.cn

飛槳開源框架項目地址:

GitHub:

https://github.com/PaddlePaddle/Paddle

Gitee: 

https://gitee.com/paddlepaddle/Paddle

END

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章