1. PaddleSeg 重磅釋出
飛槳的新産品 PaddleSeg 全新上線,重點針對圖像分割領域,面向開發者提供了完備且易用的工業級分割模型庫。
是的,你沒有看錯,真正經得起考驗的【真. 工業級】的分割模型庫。
據介紹,PaddleSeg 已經在百度無人車、AI 開放平台人像分割、小度 P 圖和百度地圖等多個産品線上應用或實踐,在工業質檢行業也已經取得了很好的效果。
飛槳官方提供的 PaddleSeg 全景圖如下圖所示:

2. 圖像分割是什麼?
圖像語義分割通過給出每一個圖像中像素點的标簽,實作圖像中像素級别的語義分割,它是由圖像處理到圖像分析的關鍵步驟。
就像下圖中所看到的那樣,可以對車輛、馬路、人行道等執行個體進行分割和标記!
相比于傳統的圖像分類任務,圖像分割顯然更難更複雜,
但是,圖像分割是圖像了解的重要基石,在自動駕駛、無人機、工業質檢等應用中都有着舉足輕重的地位。
3. PaddleSeg 三重驚喜
3.1. 一次性開源 15 個圖像分割領域主流模型,大禮包帶來大滿足
PaddleSeg 對所有内置的分割模型都提供了公開資料集下的預訓練模型,全面覆寫了 DeepLabv3+、ICNet、U-Net 等圖像分割領域的主流模型實作,并且内置了 ImageNet、COCO、CityScapes 等資料集下的 15 個預訓練模型,滿足不同場景下的不同精度需求和性能需求!
15 個預訓練模型,請參考
https://github.com/PaddlePaddle/PaddleSeg/blob/master/docs/model_zoo.md其中,最重要的三種模型介紹如下:
(1)支援 U-Net 模型:輕量級模型,參數少,計算快
U-Net 起源于醫療圖像分割,整個網絡是标準的 Encoder-Decoder 網絡,特點是參數少,計算快,應用性強,對于一般場景的适應度很高。U-Net 的網絡結構如下:
(2)支援 DeepLabv3+模型 :PASCAL VOC SOTA 效果,支援多種 Backbone
DeepLabv3+是 DeepLab 系列的最後一篇文章,其前作有 DeepLabv1,DeepLabv2, DeepLabv3。在最新作中,DeepLab 的作者通過 Encoder-Decoder 進行多尺度資訊的融合,同時保留了原來的空洞卷積和 ASSP 層,其骨幹網絡使用了 Xception 模型,提高了語義分割的健壯性和運作速率,在 PASCAL VOC 2012 dataset 取得新的 state-of-art performance,即 89.0mIOU。DeepLabv3+的網絡結構如下:
-
MobileNetv2:
适用于移動端部署或者對分割預測速度有較高要求的場景,PaddleSeg 還提供從 0.5x 到 2.0x 不同 DepthMultiplier 的模型。
-
Xception:
DeepLabv3+原始實作的 backbone 網絡,兼顧了精度和性能,适用于服務端部署。PaddleSeg 提供了 41/65/71 三種不同深度的預訓練模型。
(3)支援 ICNet 模型:實時語義分割,适用于高性能預測場景
ICNet(Image Cascade Network)主要用于圖像實時語義分割。相較于其它壓縮計算的方法,ICNet 既考慮了速度,也考慮了準确性。ICNet 的主要思想是将輸入圖像變換為不同的分辨率,然後用不同計算複雜度的子網絡計算不同分辨率的輸入,然後将結果合并。ICNet 由三個子網絡組成,計算複雜度高的網絡處理低分辨率輸入,計算複雜度低的網絡處理分辨率高的網絡,通過這種方式在高分辨率圖像的準确性和低複雜度網絡的效率之間獲得平衡。ICNet 的網絡結構如下:
3.2. 多卡訓練速度比對标産品快兩倍,工業級部署能力,時間節省超痛快
在速度方面,PaddleSeg 也提供了多程序的 I/O、優秀的顯存優化政策,性能方面得以大大提升。
PaddleSeg 的單卡訓練速度是對标産品的 2.3 倍,多卡訓練速度是對标産品的 3.1 倍。
與對标産品相比,PaddleSeg 在訓練速度、GPU 使用率、顯存開銷和 Max Batch Size 等方面都有着非常顯著的優勢。詳細的對比資料如下圖:
測試環境與模型:
- GPU: Nvidia Tesla V100 16G * 8
- CPU: Intel(R) Xeon(R) Gold 6148
- Model: DeepLabv3+ with Xception65 backbone
配套的,PaddleSeg 提供了優秀的工業級部署,包括:
-
高性能 C++預測庫:
支援 Windows 跨平台相容,支援 Operator 算子融合、TensorRT 加速、MKL-DNN 等計算圖優化。
-
Paddle Serving 服務化部署:
支援高并發預測,支援單服務多模型,還支援模型熱更新和 A/B Test。
Paddle Serving 的架構圖如下:
不僅在 Paddle Serving 上可以應用,PaddleSeg 提供的模型還可以通過 Paddle Lite 完成移動端部署,可以很好的适配企業級的業務應用。
特别值得一提的是,考慮到在實際的企業場景中(如互娛場景等),往往存在标注成本高、标注資料少的問題,訓練資料相對于整個樣本空間的占比是非常小的。此時就很有必要采取資料增強政策,對訓練集進行擴充。
PaddleSeg 内置了 10 餘種資料增強政策,可以有效地幫助企業進行資料集擴充,顯著提升模型的魯棒性。
使用 PaddleSeg 進行資料增強的流程如下:
3.3. 提供包攬 CVPR2019 LIP 挑戰賽人體解析任務大滿貫三冠王 ACE2P 模型,帶你一步體驗世界領先水準效果。
CVPR2019 LIP 挑戰賽中,百度公司實力爆棚,提出的 ACE2P 模型,包攬全部三個人體解析任務的第一名,實至名歸的大滿貫三冠王。
看完感覺不明覺厲,帶你了解一下:
LIP 是什麼:
LIP(Look Into Person) 是人體解析領域重要的 benchmark,其中人體解析 (Human Parsing) 是細粒度的語義分割任務,旨在将圖像中的人體分割為多個區域,每個區域對應指定的類别,如面部等身體部位或上衣等服裝類别。由于類别的多樣性與複雜性,比單純的人體分割更具有挑戰性。
具體的 LIP 又分為三個方向,分别是:
- Single-Person Human Parsing Track
- Multi-Person Human Parsing Track
- Video Multi-Person Human Parsing Track
ACE2P 是什麼
全稱是 Augmented Context Embedding with Edge Perceiving。
ACE2P 為人體部件分割模型,目的在于分割出圖像中的人體部件和服裝等部位。該模型通過融合底層特征、全局上下文資訊和邊緣細節,端到端訓練學習人體解析任務。本次釋出的模型為 backbone 為 ResNet101 的單一模型,
網絡結構圖如下:
CVPR2019 LIP Parsing 的三項榜單全部被百度的 ACE2P 霸榜。
ACE2P 冠軍預測模型在 PaddleHub 版本的快速體驗指令行直接使用:
更多内容:
https://paddlepaddle.org.cn/hubdetail?name=ace2p&en_category=ImageSegmentation4. 實際應用效果怎麼樣?
說了這麼多,PaddleSeg 實際效果怎麼樣,我們用案例說話。
4.1. 應用場景一:工業質檢
飛槳與國内稀土永磁零件質檢領軍企業合作,基于 PaddleSeg 模型庫,對精密零件的質檢工作進行了 AI 賦能更新。
傳統的工作方式下,質檢勞工每天需要 8~12 小時在亮光下目視檢查直徑 45mm 以内零件的品質,工作強度非常大,對視力也有很大的損害。
目前,基于 PaddleSeg 内置 ICNet 模型實作的精密零件智能分揀系統,誤收率已低于 0.1%。對于 1K*1K 分辨率的彩色圖像,預測速度在 1080Ti 上達到了 25ms,單零件的分揀速度比用其他架構實作的快 20%。PaddleSeg 已幫助工廠達到:生産成本平均降低 15%,工廠效益平均提升 15%。同時,傳遞品質也大幅提升,投訴率平均降低 30%
4.2. 應用場景二:地塊分割
分割技術在農業領域也有着廣泛的應用,地塊分割便是其中一個場景。
傳統的地塊分割方法,是基于衛星拍攝的遙感影像,依賴于大量擁有遙感專業背景的技術人員使用專業軟體來進行分析的。
衛星遙感影像資料存在畫幅巨大、肉眼分辨率低的問題,對技術人員的專業要求能力很高,并且人工标注需要大量的重複勞動,非常費時費力和枯燥無味。
如果基于圖像分割技術,開發一款地塊智能分割系統,快速自動地獲知農耕用地邊境及面積,就可以更加有效地進行農作物産量預估和農作物分類,輔助農業決策。
目前,基于 PaddleSeg 内置模型 DeepLabv3 實作的地塊智能分割系統,面積提取準确率已達到了 80% 以上,這對作物長勢、作物分類、成熟期預測、災害監測、估産等工作都起到了高效的輔助作用,大大節省了人力成本。
4.3. 應用場景三:車道線分割
車道線分割,是圖像分割在自動駕駛領域的一個重要應用。
車道線分割的難點主要有兩個:
- 一個是準确度。由于涉及到車輛行駛的安全性,車道線分割對準确度的要求非常非常高的。
- 另一個是實時性。在車輛高速行駛的過程中,必須快速地、實時地提供車道線分割結果。
準确而快速的車道線分割,能夠實時地為車輛提供導航和車道定位指引,提高車輛行駛的安全性,目前正在百度無人車應用實踐。
PaddleSeg 實測效果:
4.4. 應用場景四:人像分割
不僅在工業場景下,在 C 端互娛領域,短視訊人像特效、證件照智能摳圖、影視後期處理等場景下,都需要對人像進行分割。
有了這個技術,一寸照片換底色,藍色、白色、紅色輕松切換。
基于 PaddleSeg 實作的人像分割模型,mIoU 名額已經達到了 0.93 以上,并且已經在百度 AI 開放平台上線,合作企業高達 60 餘家,是真正的産業利器。
5. 技術幹貨:LIP 人體部件分割關鍵技術點揭秘
5.1. 修改網絡結構,引入擴張卷積(Dilation convolution),提升 1.7 個點
- 将 ResNet 的 7x7 的卷積層換成了 3 個 3x3 的卷積層,增加網絡深度,加強網絡的底層特征。
- 使用 stride=2 的卷積層替換掉網絡中所有的池化層,讓下采樣過程變得可學習
- 在 Renset 結構的 stage=5 中加入了 dilation,擴大網絡的感受野,增加網絡的有效作用區域,使得模型特征更加魯棒
- 加入了 pyramid pooling 結構,保證了一個全局的 context 資訊的提取。
5.2. 引入了 Lovasz loss,提升 1.3 個點
- Lovasz loss 是一個多類的 IOU loss,是針對分割的評價名額 IOU 專門設計的 loss,更加适合分割任務
- Lovasz loss 配合 cross entroy loss 使用,整體的效果提升了 1.3 個點
5.3. 定制化的學習方式,提升 0.8 個點
在實踐的過程中我們發現學習方法對最終的效果影響也比較大,是以我們針對任務定制化了學習的方法。
- 在開始學習的時候我們先使用 warmup 的學習政策,使得一開始時模型的優化更加容易收斂,替換掉常用的 poly 學習政策,引入 cosine decay 的方法,使得在訓練快結束時學習率不至于過小,而導緻網絡不能收斂到最佳值。
- 整個過程學習率曲線可視化如下:
5.4. 加入 edge 子產品,提升 1.4 個點
- 加入 edge detection 子產品,加深不同 part 之間的骨架特征,減少類間誤分割.
- 将 edge 子產品的特征與 seg 的特征融合,使得不同任務之間的效果能夠互相提升。具體如下:
6. 代碼實戰體驗
為了更好的體驗分割庫的效果,避免因為軟硬體環境導緻的各種問題,我們采用了 AIStudio 一站式實訓開發平台作為體驗環境,通過完整的人像分割的執行個體教程來熟悉 PaddleSeg 的使用
本教程使用 DeepLabv3+ xception 的網絡結構進行人像分割。
DeepLabv3+是 DeepLab 語義分割系列網絡的最新作,其前作有 DeepLabv1,DeepLabv2, DeepLabv3, 在最新作中,DeepLab 的作者通過 encoder-decoder 進行多尺度資訊的融合,同時保留了原來的空洞卷積和 ASSP 層,其骨幹網絡使用了 Xception 模型,提高了語義分割的健壯性和運作速率,在 PASCAL VOC 2012 dataset 取得新的 state-of-art performance,89.0mIOU。
整個網絡結構如下:
Xception 是 DeepLabv3+原始實作的 backbone 網絡,兼顧了精度和性能,适用于服務端部署。
- 傳送門: https://aistudio.baidu.com/aistudio/projectdetail/110669
- 關于 AIStudio 的使用可以參考: https://aistudio.baidu.com/aistudio/projectdetail/39212
項目代碼内容都是經過研發人員細心優化并封裝好頂層邏輯,可以讓開發者最快方式體驗 PaddleSeg 的效果,以下代碼内容供參考核心流程及思路,實際體驗建議開發者完整 Fork 項目并點選全部運作即可。
6.1. 模型訓練
第一步:解壓預訓練模型
%cd ~/PaddleSeg/
!mkdir pretrain
!unzip -q -o ~/data/data11874/xception65_pretrained.zip -d pretrain
第二步:解壓訓練資料,
%cd ~/PaddleSeg/
!mkdir data
!unzip -q -o ~/data/data11874/humanseg_train.zip -d data
第三步:開始訓練,其中配置參數「cfg」用于 指定 yaml 配置檔案路徑, 模型的配置檔案位于 configs 檔案夾下的.yaml 檔案,「use_gpu」用于是否啟用 gpu, 由于 cpu 訓練過慢,不建議使用 cpu 進行訓練
%cd ~/PaddleSeg/
!cp ~/work/humanseg.yml configs/
!python ./pdseg/train.py --cfg ./configs/humanseg.yml --use_gpu
6.2. 模型預測和可視化
預測可視化 參數「--vis_dir」用于指定預測結果圖檔存放位置
%cd ~/PaddleSeg/
!python ./pdseg/vis.py --cfg ./configs/humanseg.yml --vis_dir ./visual --
use_gpu
6.3. 實際效果
将分割前後的資料顯示出來
這裡,可以任選測試集的資料也可以自己上傳資料來測試實際的分割結果。
image_path = "./data/humanseg/test_images/f4963c23694e919b153546c95e3479675a5a13bd.jpg"
mask_path =
"./visual/visual_results/f4963c23694e919b153546c95e3479675a5a13bd.png"
display([image_path, mask_path], 0)
效果不錯呦,趕快用起來吧
更多詳情
- 歡迎加入官方 qq 群:796771754
- 官網位址: https://www.paddlepaddle.org.cn
- 項目位址: https://github.com/PaddlePaddle/PaddleSeg
本文為機器之心釋出,轉載請聯系本公衆号獲得授權。