1 Star 0 Fork 0

Lindsay.Lu丶 / PaddleSeg

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
Apache-2.0

PaddleSeg

Build Status License Version python version support os

简介

PaddleSeg是基于PaddlePaddle开发的端到端图像分割开发套件,覆盖了DeepLabv3+, U-Net, ICNet, PSPNet, HRNet, Fast-SCNN等主流分割网络。通过模块化的设计,以配置化方式驱动模型组合,帮助开发者更便捷地完成从训练到部署的全流程图像分割应用。

特点

  • 丰富的数据增强

基于百度视觉技术部的实际业务经验,内置10+种数据增强策略,可结合实际业务场景进行定制组合,提升模型泛化能力和鲁棒性。

  • 模块化设计

支持U-Net, DeepLabv3+, ICNet, PSPNet, HRNet, Fast-SCNN六种主流分割网络,结合预训练模型和可调节的骨干网络,满足不同性能和精度的要求;选择不同的损失函数如Dice Loss, Lovasz Loss等方式可以强化小目标和不均衡样本场景下的分割精度。

  • 高性能

PaddleSeg支持多进程I/O、多卡并行等训练加速策略,结合飞桨核心框架的显存优化功能,可大幅度减少分割模型的显存开销,让开发者更低成本、更高效地完成图像分割训练。

  • 工业级部署

全面提供服务端移动端的工业级部署能力,依托飞桨高性能推理引擎和高性能图像处理实现,开发者可以轻松完成高性能的分割模型部署和集成。通过Paddle-Lite,可以在移动设备或者嵌入式设备上完成轻量级、高性能的人像分割模型部署。

  • 产业实践案例

PaddleSeg提供丰富地产业实践案例,如人像分割工业表计检测遥感分割人体解析工业质检等产业实践案例,助力开发者更便捷地落地图像分割技术。

安装

1. 安装PaddlePaddle

版本要求

  • PaddlePaddle >= 1.7.0
  • Python >= 3.5+

由于图像分割模型计算开销大,推荐在GPU版本的PaddlePaddle下使用PaddleSeg.

pip install -U paddlepaddle-gpu

同时请保证您参考NVIDIA官网,已经正确配置和安装了显卡驱动,CUDA 9,cuDNN 7.3,NCCL2等依赖,其他更加详细的安装信息请参考:PaddlePaddle安装说明

2. 下载PaddleSeg代码

git clone https://github.com/PaddlePaddle/PaddleSeg

3. 安装PaddleSeg依赖

通过以下命令安装python包依赖,请确保在该分支上至少执行过一次以下命令:

cd PaddleSeg
pip install -r requirements.txt

使用教程

我们提供了一系列的使用教程,来说明如何使用PaddleSeg完成语义分割模型的训练、评估、部署。

这一系列的文档被分为快速入门基础功能预测部署高级功能四个部分,四个教程由浅至深地介绍PaddleSeg的设计思路和使用方法。

快速入门

基础功能

预测部署

高级功能

在线体验

我们在AI Studio平台上提供了在线体验的教程,欢迎体验:

在线教程 链接
快速开始 点击体验
U-Net图像分割 点击体验
DeepLabv3+图像分割 点击体验
工业质检(零件瑕疵检测) 点击体验
人像分割 点击体验
PaddleSeg特色垂类模型 点击体验

FAQ

Q: 安装requirements.txt指定的依赖包时,部分包提示找不到?

A: 可能是pip源的问题,这种情况下建议切换为官方源,或者通过pip install -r requirements.txt -i 指定其他源地址。

Q:图像分割的数据增强如何配置,Unpadding, StepScaling, RangeScaling的原理是什么?

A: 更详细数据增强文档可以参考数据增强

Q: 训练时因为某些原因中断了,如何恢复训练?

A: 启动训练脚本时通过命令行覆盖TRAIN.RESUME_MODEL_DIR配置为模型checkpoint目录即可, 以下代码示例第100轮重新恢复训练:

python pdseg/train.py --cfg xxx.yaml TRAIN.RESUME_MODEL_DIR /PATH/TO/MODEL_CKPT/100

Q: 预测时图片过大,导致显存不足如何处理?

A: 降低Batch size,使用Group Norm策略;请注意训练过程中当DEFAULT_NORM_TYPE选择bn时,为了Batch Norm计算稳定性,batch size需要满足>=2

交流与反馈

  • 欢迎您通过Github Issues来提交问题、报告与建议
  • 微信公众号:飞桨PaddlePaddle
  • QQ群: 703252161

     

   微信公众号                官方技术交流QQ群

更新日志

  • 2020.05.12

    v0.5.0

    • 全面升级HumanSeg人像分割模型,新增超轻量级人像分割模型HumanSeg-lite支持移动端实时人像分割处理,并提供基于光流的视频分割后处理提升分割流畅性。
    • 新增气象遥感分割方案,支持积雪识别、云检测等气象遥感场景。
    • 新增Lovasz Loss,解决数据类别不均衡问题。
    • 使用VisualDL 2.0作为训练可视化工具
  • 2020.02.25

    v0.4.0

    • 新增适用于实时场景且不需要预训练模型的分割网络Fast-SCNN,提供基于Cityscapes的预训练模型1个
    • 新增LaneNet车道线检测网络,提供预训练模型一个
    • 新增基于PaddleSlim的分割库压缩策略(量化, 蒸馏, 剪枝, 搜索)
  • 2019.12.15

    v0.3.0

    • 新增HRNet分割网络,提供基于cityscapes和ImageNet的预训练模型8个
    • 支持使用伪彩色标签进行训练/评估/预测,提升训练体验,并提供将灰度标注图转为伪彩色标注图的脚本
    • 新增学习率warmup功能,支持与不同的学习率Decay策略配合使用
    • 新增图像归一化操作的GPU化实现,进一步提升预测速度。
    • 新增Python部署方案,更低成本完成工业级部署。
    • 新增Paddle-Lite移动端部署方案,支持人像分割模型的移动端部署。
    • 新增不同分割模型的预测性能数据Benchmark, 便于开发者提供模型选型性能参考。
  • 2019.11.04

    v0.2.0

  • 2019.09.10

    v0.1.0

    • PaddleSeg分割库初始版本发布,包含DeepLabv3+, U-Net, ICNet三类分割模型, 其中DeepLabv3+支持Xception, MobileNet v2两种可调节的骨干网络。
    • CVPR19 LIP人体部件分割比赛冠军预测模型发布ACE2P
    • 预置基于DeepLabv3+网络的人像分割车道线分割预测模型发布。

贡献代码

我们非常欢迎您为PaddleSeg贡献代码或者提供使用建议。如果您可以修复某个issue或者增加一个新功能,欢迎给我们提交Pull Requests.

from __future__ import absolute_import from __future__ import print_function from __future__ import unicode_literals import argparse import io, re import sys, os import subprocess import platform COPYRIGHT = ''' Copyright (c) 2019 PaddlePaddle Authors. All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ''' LANG_COMMENT_MARK = None NEW_LINE_MARK = None COPYRIGHT_HEADER = None if platform.system() == "Windows": NEW_LINE_MARK = "\r\n" else: NEW_LINE_MARK = '\n' COPYRIGHT_HEADER = COPYRIGHT.split(NEW_LINE_MARK)[1] p = re.search('(\d{4})', COPYRIGHT_HEADER).group(0) process = subprocess.Popen(["date", "+%Y"], stdout=subprocess.PIPE) date, err = process.communicate() date = date.decode("utf-8").rstrip("\n") COPYRIGHT_HEADER = COPYRIGHT_HEADER.replace(p, date) def generate_copyright(template, lang='C'): if lang == 'Python': LANG_COMMENT_MARK = '#' else: LANG_COMMENT_MARK = "//" lines = template.split(NEW_LINE_MARK) BLANK = " " ans = LANG_COMMENT_MARK + BLANK + COPYRIGHT_HEADER + NEW_LINE_MARK for lino, line in enumerate(lines): if lino == 0 or lino == 1 or lino == len(lines) - 1: continue if len(line) == 0: BLANK = "" else: BLANK = " " ans += LANG_COMMENT_MARK + BLANK + line + NEW_LINE_MARK return ans + "\n" def lang_type(filename): if filename.endswith(".py"): return "Python" elif filename.endswith(".h"): return "C" elif filename.endswith(".c"): return "C" elif filename.endswith(".hpp"): return "C" elif filename.endswith(".cc"): return "C" elif filename.endswith(".cpp"): return "C" elif filename.endswith(".cu"): return "C" elif filename.endswith(".cuh"): return "C" elif filename.endswith(".go"): return "C" elif filename.endswith(".proto"): return "C" else: print("Unsupported filetype %s", filename) exit(0) PYTHON_ENCODE = re.compile("^[ \t\v]*#.*?coding[:=][ \t]*([-_.a-zA-Z0-9]+)") def main(argv=None): parser = argparse.ArgumentParser( description='Checker for copyright declaration.') parser.add_argument('filenames', nargs='*', help='Filenames to check') args = parser.parse_args(argv) retv = 0 for filename in args.filenames: fd = io.open(filename, encoding="utf-8") first_line = fd.readline() second_line = fd.readline() if "COPYRIGHT (C)" in first_line.upper(): continue if first_line.startswith("#!") or PYTHON_ENCODE.match( second_line) != None or PYTHON_ENCODE.match(first_line) != None: continue original_contents = io.open(filename, encoding="utf-8").read() new_contents = generate_copyright( COPYRIGHT, lang_type(filename)) + original_contents print('Auto Insert Copyright Header {}'.format(filename)) retv = 1 with io.open(filename, 'w') as output_file: output_file.write(new_contents) return retv if __name__ == '__main__': exit(main())

简介

End-to-End Image Segmentation Kits Based on PaddlePaddle. (『飞桨』图像分割开发套件) 展开 收起
Apache-2.0
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/lindsaylu/PaddleSeg.git
git@gitee.com:lindsaylu/PaddleSeg.git
lindsaylu
PaddleSeg
PaddleSeg
develop

搜索帮助

344bd9b3 5694891 D2dac590 5694891