基於PaddlePadlle的影像分割の新手入門
課程連結:https://aistudio.baidu.com/aistudio/education/group/info/1767.
第五課 PaddleSeg快速體驗
本課提要:
- 學習使用預訓練好的影像分割模型進行預測
- 初步瞭解PaddleSeg語義分割庫的使用
- 本教程以常見的人像分割任務為例
一、什麼是人像分割
人像分割任務旨在識別影像中的人體輪廓,與背景進行分離,返回分割後的二值圖、灰度圖、前景人像圖,適應多個人體、複雜背景、各類人體姿態。可應用於人像扣圖、人體特效和影視後期處理等場景。
常用資料庫
Pascal VOC的三個主要物體識別競賽是:分類,檢測和分割(classification, detection, and segmentation)。
對於分割任務, VOC2012的trainval包含2007-2011年的所有對應圖片, test只包含2008-2011。trainval有 2913張圖片共6929個物體。
模型網路
介紹: DeepLabv3+是DeepLab語義分割系列網路的最新作,其前作有 DeepLabv1,DeepLabv2, DeepLabv3, 在最新作中。
Xception是DeepLabv3+原始實現的backbone網路,兼顧了精度和效能,適用於服務端部署。
方法: DeepLab的作者通過encoder-decoder進行多尺度資訊的融合,同時保留了原來的空洞卷積和ASSP層, 其骨幹網路使用了Xception模型,提高了語義分割的健壯性和執行速率。
實驗: 在 PASCAL VOC 2012 dataset取得新的state-of-art performance,89.0mIOU。
二、在PaddleSeg上實現人像分割
第一步:PaddleSeg安裝
下載,解壓
第二步:預訓練模型下載
下載預訓練好的DeeplebV3+ xception65模型。
NOTE: ./pretrained_model為PaddleSeg預設的預訓練模型儲存目錄,因此這裡將模型放入該目錄下。
第三步:資料準備
本教程掛載了一個小型的資料集,包含少量人像分割圖片用於測試,資料集位於./data/data10908/humanseg.zip。
NOTE: ./dataset 為PaddleSeg預設的資料集儲存目錄,因此這裡將測試集放入該目錄下。
第四步:模型預測與視覺化
pdseg/vis.py是模型預測和視覺化的指令碼。
PaddleSeg中關於模型的配置記錄在configs目錄 下的 yaml檔案裡。
三、實現步驟&程式碼
實現思路
安裝PaddleSeg
程式碼
# 從PaddleSeg的github倉庫下載程式碼
git clone https://github.com/PaddlePaddle/PaddleSeg.git
# 解壓從PaddleSeg Github倉庫下載好的壓縮包
!unzip -o PaddleSeg.zip
# 執行指令碼需在PaddleSeg目錄下
%cd
# 安裝所需依賴項
!pip install -r requirement.txt
# 下載預訓練模型並放入./pretrained_model目錄下
%cd /home/aistudio/PaddleSeg/pretrained_model/
!wget https://paddleseg.bj.bcebos.com/models/deeplabv3p_xception65_humanseg.tgz
!tar -xf deeplabv3p_xception65_humanseg.tgz
%cd ..
# 將測試資料集放入./dataset目錄下
!cp ~/data/data10908/humanseg.zip dataset/
!unzip -o humanseg.zip -d dataset/
# 將配置檔案humanseg.yaml複製到configs目錄下
!cp ~/work/humanseg.yaml configs/
# 模型預測
!phthon ./pdseg/vis.py --cfg ./configs/humanseg.yaml \
--vis_dir ./visual \
--use_gpu \
DATASET.DATA_DIR "dataset/humanseg" \
DATASET.VIS_FILE_LIST "dataset/humanseg/test_list.txt"
TEST.TEST_MODEL "pretrained_model/deeplabv3_xception65_humanseg"
# 顯示最終的分割效果
import matplotlib.pyplot as plt
from PIL import Image
# 定義顯示函式
def display(img_dir):
plt.figure(figsize=(15, 15))
title = ['Input Image', 'Predicted Mask']
for i in range(len(title)):
plt.subplot(1, len(img_dir), i+1)
plt.title(title[i])
img = plt.imread(img_dir[i])
plt.imshow(img)
plt.axis('off')
plt.show()
# 顯示分割效果
# 注:僅顯示其中一張圖片的效果。
#image_dir = "dataset/humanseg/aa6b34b24414bafa7fab8393239c793587513ce6.jpg"
#mask_dir = "visual/aa6b34b24414bafa7fab8393239c793587513ce6.png"
# image_dir = "dataset/humanseg/aa6ff076c7360b8dabc30edd05ebafb65bba9343.jpg"
# mask_dir = "visual/aa6ff076c7360b8dabc30edd05ebafb65bba9343.png"
image_dir = "dataset/humanseg/56173ddd1ccb419e1efdeb5f5cb242ab160142cb.jpg"
mask_dir = "visual/56173ddd1ccb419e1efdeb5f5cb242ab160142cb.png"
imgs = [image_dir, mask_dir]
display(imgs)
im = Image.open(image_dir)#返回一個Image物件
print('image寬:%d,image高:%d'%(im.size[0],im.size[1]))
ma = Image.open(image_dir)#返回一個Image物件
print('mask寬:%d,mask高:%d'%(ma.size[0],ma.size[1]))
一些術語
- 語義分割庫
相關文章
- 【影像分割】基於四叉樹影像分割matlabMatlab
- [beego新手入門]基於web框架-beego的RESTful API的構建之旅GoWeb框架RESTAPI
- 基於深度學習的影像分割在高德的實踐深度學習
- 影像的入門
- 基於百度飛漿PaddlePaddle的影像分割學習心得
- opencv 影像的入門OpenCV
- openCV入門 核心操作 1 影像的基礎操作OpenCV
- 使用LabVIEW實現基於pytorch的DeepLabv3影像語義分割ViewPyTorch
- Jwt的新手入門教程JWT
- 新手入門前端,需要學習的基礎內容。前端
- **Git新手入門**Git
- typer 新手入門
- Mac新手的入門教程(一)Mac
- 新手入門,webpack入門詳細教程Web
- Linux 學習基礎入門之Linux分割槽Linux
- React新手入門 教程React
- MongoDB 新手入門 - AggregationMongoDB
- MongoDB 新手入門 - CRUDMongoDB
- Android新手入門1Android
- Windows Terminal 新手入門Windows
- Jmeter新手入門必看JMeter
- Linux新手如何入門?給新手的四點建議!Linux
- 寫給新手的MySQL入門指南MySql
- 新手必看的iShowU Instant入門教程
- SVG 影像入門教程SVG
- JSON.stringify 新手入門JSON
- JSON.parse 新手入門JSON
- mysql新手入門隨筆MySql
- 新手入門 Git 開發Git
- 給0基礎入門Linux運維新手的五個建議!Linux運維
- ES 入門 - 基於詞項的查詢
- 【Python入門】新手學Python可行嗎?需要什麼基礎?Python
- 新手入門SLAM必收藏的資料SLAM
- MyBatis基於Maven入門例項MyBatisMaven
- 推薦:一個適合於Python新手的入門練手專案Python
- 醫學影像分析入門
- Golang 新手教程:入門速成指南Golang
- PHP 之 Composer 新手入門指南PHP