简体中文 | English
Matting(精细化分割/影像去背/抠图)是指借由计算前景的颜色和透明度,将前景从影像中撷取出来的技术,可用于替换背景、影像合成、视觉特效,在电影工业中被广泛地使用。影像中的每个像素会有代表其前景透明度的值,称作阿法值(Alpha),一张影像中所有阿法值的集合称作阿法遮罩(Alpha Matte),将影像被遮罩所涵盖的部分取出即可完成前景的分离。
2021.11 Matting项目开源, 实现图像抠图功能。 【1】支持Matting模型:DIM, MODNet。 【2】支持模型导出及Python部署。 【3】支持背景替换功能。 【4】支持人像抠图Android部署
版本要求
-
PaddlePaddle >= 2.0.2
-
Python >= 3.7+
由于图像分割模型计算开销大,推荐在GPU版本的PaddlePaddle下使用PaddleSeg。推荐安装10.0以上的CUDA环境。安装教程请见PaddlePaddle官网。
git clone https://github.com/PaddlePaddle/PaddleSeg
cd PaddleSeg
pip install -e .
pip install scikit-image
cd contrib/Matting
MODNet在PPM-100数据集上的性能
Backbone | SAD | MSE | Params(M) | FLOPs(G) | FPS | Link |
---|---|---|---|---|---|---|
MobileNetV2 | 112.73 | 0.0098 | 6.5 | 15.7 | 67.5 | model |
ResNet50_vd | 104.14 | 0.0090 | 92.2 | 151.6 | 28.6 | model |
HRNet_W18 | 77.96 | 0.0054 | 10.2 | 28.5 | 10.9 | model |
注意:模型输入大小为(512, 512), GPU为Tesla V100 32G。
利用MODNet开源的PPM-100数据集作为我们教程的示例数据集
将数据集整理为如下结构, 并将数据集置于data目录下。
PPM-100/
|--train/
| |--fg/
| |--alpha/
|
|--val/
| |--fg/
| |--alpha
|
|--train.txt
|
|--val.txt
其中,fg目录下的图象名称需和alpha目录下的名称一一对应
train.txt和val.txt的内容如下
train/fg/14299313536_ea3e61076c_o.jpg
train/fg/14429083354_23c8fddff5_o.jpg
train/fg/14559969490_d33552a324_o.jpg
...
可直接下载整理后的PPM-100数据进行后续教程
如果完整图象需由前景和背景进行合成的数据集,类似Deep Image Matting论文里使用的数据集Composition-1k,则数据集应整理成如下结构:
Composition-1k/
|--bg/
|
|--train/
| |--fg/
| |--alpha/
|
|--val/
| |--fg/
| |--alpha/
| |--trimap/ (如果存在)
|
|--train.txt
|
|--val.txt
train.txt的内容如下:
train/fg/fg1.jpg bg/bg1.jpg
train/fg/fg2.jpg bg/bg2.jpg
train/fg/fg3.jpg bg/bg3.jpg
...
val.txt的内容如下, 如果不存在对应的trimap,则第三列可不提供,代码将会自动生成。
val/fg/fg1.jpg bg/bg1.jpg val/trimap/trimap1.jpg
val/fg/fg2.jpg bg/bg2.jpg val/trimap/trimap2.jpg
val/fg/fg3.jpg bg/bg3.jpg val/trimap/trimap3.jpg
...
export CUDA_VISIBLE_DEVICES=0
python train.py \
--config configs/modnet/modnet_mobilenetv2.yml \
--do_eval \
--use_vdl \
--save_interval 5000 \
--num_workers 5 \
--save_dir output
note: 使用--do_eval会影响训练速度及增加显存消耗,根据需求进行开闭。
--num_workers
多进程数据读取,加快数据预处理速度
更多参数信息请运行如下命令进行查看:
python train.py --help
如需使用多卡,请用python -m paddle.distributed.launch
进行启动
export CUDA_VISIBLE_DEVICES=0
python val.py \
--config configs/modnet/modnet_mobilenetv2.yml \
--model_path output/best_model/model.pdparams \
--save_dir ./output/results \
--save_results
--save_result
开启会保留图片的预测结果,可选择关闭以加快评估速度。
你可以直接下载我们提供的模型进行评估。
更多参数信息请运行如下命令进行查看:
python val.py --help
export CUDA_VISIBLE_DEVICES=0
python predict.py \
--config configs/modnet/modnet_mobilenetv2.yml \
--model_path output/best_model/model.pdparams \
--image_path data/PPM-100/val/fg/ \
--save_dir ./output/results
如模型需要trimap信息,需要通过--trimap_path
传入trimap路径。
你可以直接下载我们提供的模型进行预测。
更多参数信息请运行如下命令进行查看:
python predict.py --help
export CUDA_VISIBLE_DEVICES=0
python bg_replace.py \
--config configs/modnet/modnet_mobilenetv2.yml \
--model_path output/best_model/model.pdparams \
--image_path path/to/your/image \
--bg_path path/to/your/background/image \
--save_dir ./output/results
如模型需要trimap信息,需要通过--trimap_path
传入trimap路径。
若不提供--bg_path
, 则采用绿色作为背景。
你可以直接下载我们提供的模型进行背景替换。
更多参数信息请运行如下命令进行查看:
python bg_replace.py --help
python export.py \
--config configs/modnet/modnet_mobilenetv2.yml \
--model_path output/best_model/model.pdparams \
--save_dir output/export
如果模型(比如:DIM)需要trimap的输入,需要增加参数--trimap
更多参数信息请运行如下命令进行查看:
python export.py --help
python deploy/python/infer.py \
--config output/export/deploy.yaml \
--image_path data/PPM-100/val/fg/ \
--save_dir ouput/results
如模型需要trimap信息,需要通过--trimap_path
传入trimap路径。
更多参数信息请运行如下命令进行查看:
python deploy/python/infer.py --help
感谢 wuyefeilin、 钱彬(Qianbin)、 yzl19940819 等开发者的贡献