image-segmentation-keras
image-segmentation-keras 是一个基于 Keras 框架开发的深度学习工具库,专注于实现多种主流图像语义分割模型。它旨在解决将图像中的每个像素精准分类的技术难题,帮助计算机“看懂”图片中不同物体的轮廓与区域,广泛应用于自动驾驶、医疗影像分析及卫星地图处理等领域。
该工具特别适合 AI 开发者、研究人员以及希望快速验证算法的学生使用。其核心优势在于集成了 SegNet、FCN、U-Net、PSPNet 等经典架构,并支持 VGG、ResNet、MobileNet 等多种骨干网络作为基础,用户可根据实际需求灵活选择模型组合。除了提供标准的 Python 编程接口和命令行工具外,它还拥有完善的教程与 Google Colab 示例,大幅降低了上手门槛。此外,部分功能已与 Liner.ai 平台整合,提供了可视化的图形界面,让用户无需编写代码即可进行模型训练与推理导出。作为一个开源项目,image-segmentation-keras 以简洁的代码结构和丰富的预训练模型,成为进入图像分割领域的实用起点。
使用场景
某智慧农业团队正致力于开发一套无人机作物病害监测系统,需要快速从航拍图中精准提取病斑区域以评估受灾面积。
没有 image-segmentation-keras 时
- 模型复现成本极高:团队成员需手动查阅 FCN、U-Net 等论文的数学公式,从零搭建复杂的编码器 - 解码器架构,耗时数周且极易出错。
- 基线对比困难:想要验证哪种主干网络(如 VGG16 或 ResNet50)更适合当前数据集,必须为每种组合单独编写训练代码,实验迭代周期长达数月。
- 数据预处理繁琐:缺乏统一的接口来处理标注掩码(Mask)和图像增强,导致数据加载逻辑与模型训练逻辑强耦合,代码维护性差。
- 部署门槛高:将训练好的模型导出并集成到边缘设备(如无人机机载电脑)时,因缺乏标准的推理脚本,往往需要重新重写后端逻辑。
使用 image-segmentation-keras 后
- 开箱即用的模型库:直接调用
unet、pspnet或segnet等预置模型,一行代码即可切换不同架构,将模型搭建时间从数周缩短至几分钟。 - 灵活的实验配置:通过简单的参数修改,就能快速尝试 "ResNet50 + U-Net" 或 "MobileNet + SegNet" 等多种组合,迅速锁定精度与速度最优的平衡点。
- 标准化的工作流:利用内置的数据生成器和 CLI 工具,统一了数据读取、增强及训练流程,让团队能专注于病害特征分析而非底层代码调试。
- 便捷的推理与导出:直接使用提供的预训练权重进行预测,并支持一键导出模型,轻松将算法部署到田间地头的移动设备上实时运行。
image-segmentation-keras 通过提供标准化、模块化的深度学习分割方案,让农业团队得以跳过重复造轮子的过程,将研发重心完全回归到解决实际的作物病害问题上。
运行环境要求
- Linux
- macOS
- Windows
未说明(基于 TensorFlow/Keras,支持 CPU 和 GPU,具体取决于安装的 TensorFlow 版本)
未说明

快速开始
Keras图像分割:在Keras中实现SegNet、FCN、U-Net、PSPNet等模型。
在Keras中实现多种深度图像分割模型。
新闻:该仓库的部分功能已集成到https://liner.ai。快去看看吧!!
完整博客文章及教程链接:https://divamgupta.com/image-segmentation/2019/06/06/deep-learning-semantic-segmentation-keras.html
可运行的Google Colab示例:
- Python接口:https://colab.research.google.com/drive/1q_eCYEzKxixpCKH1YDsLnsvgxl92ORcv?usp=sharing
- CLI接口:https://colab.research.google.com/drive/1Kpy4QGFZ2ZHm69mPfkmLSUes8kj6Bjyi?usp=sharing
使用GUI界面进行训练
您也可以通过https://liner.ai在您的计算机上训练分割模型。
| 训练 | 推理 / 导出 |
|---|---|
![]() |
![]() |
![]() |
![]() |
模型
支持以下模型:
| model_name | 基础模型 | 分割模型 |
|---|---|---|
| fcn_8 | 原生CNN | FCN8 |
| fcn_32 | 原生CNN | FCN8 |
| fcn_8_vgg | VGG 16 | FCN8 |
| fcn_32_vgg | VGG 16 | FCN32 |
| fcn_8_resnet50 | Resnet-50 | FCN32 |
| fcn_32_resnet50 | Resnet-50 | FCN32 |
| fcn_8_mobilenet | MobileNet | FCN32 |
| fcn_32_mobilenet | MobileNet | FCN32 |
| pspnet | 原生CNN | PSPNet |
| pspnet_50 | 原生CNN | PSPNet |
| pspnet_101 | 原生CNN | PSPNet |
| vgg_pspnet | VGG 16 | PSPNet |
| resnet50_pspnet | Resnet-50 | PSPNet |
| unet_mini | 原生Mini CNN | U-Net |
| unet | 原生CNN | U-Net |
| vgg_unet | VGG 16 | U-Net |
| resnet50_unet | Resnet-50 | U-Net |
| mobilenet_unet | MobileNet | U-Net |
| segnet | 原生CNN | Segnet |
| vgg_segnet | VGG 16 | Segnet |
| resnet50_segnet | Resnet-50 | Segnet |
| mobilenet_segnet | MobileNet | Segnet |
提供的预训练模型示例结果:
| 输入图像 | 输出分割图像 |
|---|---|
![]() |
![]() |
![]() |
![]() |
如何引用
如果您使用此库,请使用以下方式引用:
@article{gupta2023image,
title={Image segmentation keras: Implementation of segnet, fcn, unet, pspnet and other models in keras},
author={Gupta, Divam},
journal={arXiv preprint arXiv:2307.13215},
year={2023}
}
入门指南
先决条件
- Keras(推荐版本:2.4.3)
- OpenCV for Python
- Tensorflow(推荐版本:2.4.1)
apt-get install -y libsm6 libxext6 libxrender-dev
pip install opencv-python
安装
安装模块
推荐方式:
pip install --upgrade git+https://github.com/divamgupta/image-segmentation-keras
或者
pip install keras-segmentation
或者
git clone https://github.com/divamgupta/image-segmentation-keras
cd image-segmentation-keras
python setup.py install
预训练模型:
from keras_segmentation.pretrained import pspnet_50_ADE_20K , pspnet_101_cityscapes, pspnet_101_voc12
model = pspnet_50_ADE_20K() # 加载在ADE20k数据集上训练的预训练模型
model = pspnet_101_cityscapes() # 加载在Cityscapes数据集上训练的预训练模型
model = pspnet_101_voc12() # 加载在Pascal VOC 2012数据集上训练的预训练模型
# 加载以上任意一个预训练模型
out = model.predict_segmentation(
inp="input_image.jpg",
out_fname="out.png"
)
准备训练数据
您需要创建两个文件夹:
- 图像文件夹——用于所有训练图像
- 标注文件夹——用于对应的真值分割图像
标注图像的文件名应与RGB图像的文件名相同。
标注图像的尺寸应与对应RGB图像的尺寸一致。
对于RGB图像中的每个像素,其在标注图像中的类别标签即为该像素的蓝色通道值。
生成标注图像的示例代码:
import cv2
import numpy as np
ann_img = np.zeros((30,30,3)).astype('uint8')
ann_img[ 3 , 4 ] = 1 # 这会将像素3,4的标签设置为1
cv2.imwrite( "ann_1.png" ,ann_img )
标注图像仅支持bmp或png格式。
下载示例准备好的数据集
下载并解压以下文件:
https://drive.google.com/file/d/0B0d9ZiqAgFkiOHR1NTJhWVJMNEU/view?usp=sharing
您将得到一个名为dataset1/的文件夹。
使用Python模块
您可以在Python脚本中导入keras_segmentation并使用API。
from keras_segmentation.models.unet import vgg_unet
model = vgg_unet(n_classes=51 , input_height=416, input_width=608 )
model.train(
train_images = "dataset1/images_prepped_train/",
train_annotations = "dataset1/annotations_prepped_train/",
checkpoints_path = "/tmp/vgg_unet_1" , epochs=5
)
out = model.predict_segmentation(
inp="dataset1/images_prepped_test/0016E5_07965.png",
out_fname="/tmp/out.png"
)
import matplotlib.pyplot as plt
plt.imshow(out)
# 评估模型
print(model.evaluate_segmentation( inp_images_dir="dataset1/images_prepped_test/" , annotations_dir="dataset1/annotations_prepped_test/" ) )
通过命令行使用
您也可以仅使用命令行来使用该工具。
可视化准备好的数据
你还可以可视化准备好的标注数据,以验证数据是否正确准备。
python -m keras_segmentation verify_dataset \
--images_path="dataset1/images_prepped_train/" \
--segs_path="dataset1/annotations_prepped_train/" \
--n_classes=50
python -m keras_segmentation visualize_dataset \
--images_path="dataset1/images_prepped_train/" \
--segs_path="dataset1/annotations_prepped_train/" \
--n_classes=50
训练模型
要训练模型,请运行以下命令:
python -m keras_segmentation train \
--checkpoints_path="path_to_checkpoints" \
--train_images="dataset1/images_prepped_train/" \
--train_annotations="dataset1/annotations_prepped_train/" \
--val_images="dataset1/images_prepped_test/" \
--val_annotations="dataset1/annotations_prepped_test/" \
--n_classes=50 \
--input_height=320 \
--input_width=640 \
--model_name="vgg_unet"
请从上表中选择 model_name。
获取预测结果
要获取已训练模型的预测结果:
python -m keras_segmentation predict \
--checkpoints_path="path_to_checkpoints" \
--input_path="dataset1/images_prepped_test/" \
--output_path="path_to_predictions"
视频推理
要对视频进行预测:
python -m keras_segmentation predict_video \
--checkpoints_path="path_to_checkpoints" \
--input="path_to_video" \
--output_file="path_for_save_inferenced_video" \
--display
如果你想对网络摄像头进行预测,不要使用 --input 参数,或者直接传入设备编号:--input 0。--display 参数会打开一个窗口显示预测后的视频。在无头系统中,请移除此参数。
模型评估
要获取 IoU 分数:
python -m keras_segmentation evaluate_model \
--checkpoints_path="path_to_checkpoints" \
--images_path="dataset1/images_prepped_test/" \
--segs_path="dataset1/annotations_prepped_test/"
从现有分割模型进行微调
以下示例展示了如何对一个具有 10 个类别的模型进行微调。
from keras_segmentation.models.model_utils import transfer_weights
from keras_segmentation.pretrained import pspnet_50_ADE_20K
from keras_segmentation.models.pspnet import pspnet_50
pretrained_model = pspnet_50_ADE_20K()
new_model = pspnet_50( n_classes=51 )
transfer_weights( pretrained_model , new_model ) # 将预训练模型的权重迁移到你的模型
new_model.train(
train_images = "dataset1/images_prepped_train/",
train_annotations = "dataset1/annotations_prepped_train/",
checkpoints_path = "/tmp/vgg_unet_1" , epochs=5
)
知识蒸馏压缩模型
以下示例展示了如何将知识从较大的(且更精确的)模型迁移到较小的模型中。在大多数情况下,通过知识蒸馏训练的小模型比使用普通监督学习训练的相同模型更加精确。
from keras_segmentation.predict import model_from_checkpoint_path
from keras_segmentation.models.unet import unet_mini
from keras_segmentation.model_compression import perform_distilation
model_large = model_from_checkpoint_path( "/checkpoints/path/of/trained/model" )
model_small = unet_mini( n_classes=51, input_height=300, input_width=400 )
perform_distilation ( data_path="/path/to/large_image_set/" , checkpoints_path="path/to/save/checkpoints" ,
teacher_model=model_large , student_model=model_small , distilation_loss='kl' , feats_distilation_loss='pa' )
在训练中添加自定义增强函数
以下示例展示了如何定义一个用于训练的自定义增强函数。
from keras_segmentation.models.unet import vgg_unet
from imgaug import augmenters as iaa
def custom_augmentation():
return iaa.Sequential(
[
# 对大多数图像应用以下增强操作
iaa.Fliplr(0.5), // 水平翻转 50% 的图像
iaa.Flipud(0.5), // 垂直翻转 50% 的图像
])
model = vgg_unet(n_classes=51 , input_height=416, input_width=608)
model.train(
train_images = "dataset1/images_prepped_train/",
train_annotations = "dataset1/annotations_prepped_train/",
checkpoints_path = "/tmp/vgg_unet_1" , epochs=5,
do_augment=True, // 启用数据增强
custom_augmentation=custom_augmentation // 设置使用的增强函数
)
自定义输入通道数
以下示例展示了如何设置输入通道数。
from keras_segmentation.models.unet import vgg_unet
model = vgg_unet(n_classes=51 , input_height=416, input_width=608,
channels=1 // 设置输入通道数
)
model.train(
train_images = "dataset1/images_prepped_train/",
train_annotations = "dataset1/annotations_prepped_train/",
checkpoints_path = "/tmp/vgg_unet_1" , epochs=5,
read_image_type=0 // 设置 OpenCV 读取图像的方式
// cv2.IMREAD_COLOR = 1 (RGB),
// cv2.IMREAD_GRAYSCALE = 0,
// cv2.IMREAD_UNCHANGED = -1 (RGBA 四通道)
)
自定义预处理
以下示例展示了如何设置自定义的图像预处理函数。
from keras_segmentation.models.unet import vgg_unet
def image_preprocessing(image):
return image + 1
model = vgg_unet(n_classes=51 , input_height=416, input_width=608)
model.train(
train_images = "dataset1/images_prepped_train/",
train_annotations = "dataset1/annotations_prepped_train/",
checkpoints_path = "/tmp/vgg_unet_1" , epochs=5,
preprocessing=image_preprocessing // 设置预处理函数
)
自定义回调函数
以下示例展示了如何为模型训练设置自定义回调函数。
from keras_segmentation.models.unet import vgg_unet
from keras.callbacks import ModelCheckpoint, EarlyStopping
model = vgg_unet(n_classes=51 , input_height=416, input_width=608 )
// 使用自定义回调时,会移除默认的检查点保存器
callbacks = [
ModelCheckpoint(
filepath="checkpoints/" + model.name + ".{epoch:05d}",
save_weights_only=True,
verbose=True
),
EarlyStopping()
]
model.train(
train_images = "dataset1/images_prepped_train/",
train_annotations = "dataset1/annotations_prepped_train/",
checkpoints_path = "/tmp/vgg_unet_1" , epochs=5,
callbacks=callbacks
)
多输入图像输入
以下示例展示了如何为模型添加额外的图像输入。
from keras_segmentation.models.unet import vgg_unet
model = vgg_unet(n_classes=51 , input_height=416, input_width=608)
model.train(
train_images = "dataset1/images_prepped_train/",
train_annotations = "dataset1/annotations_prepped_train/",
checkpoints_path = "/tmp/vgg_unet_1" , epochs=5,
other_inputs_paths=[
"/path/to/other/directory"
],
# 可以添加预处理
preprocessing=[lambda x: x+1, lambda x: x+2, lambda x: x+3], # 每个输入使用不同的预处理
# 或者
preprocessing=lambda x: x+1, # 所有输入使用相同的预处理
)
使用 keras-segmentation 的项目
以下是一些正在使用我们库的项目:
- https://github.com/SteliosTsop/QF-image-segmentation-keras 论文
- https://github.com/willembressers/bouquet_quality
- https://github.com/jqueguiner/image-segmentation
- https://github.com/pan0rama/CS230-Microcrystal-Facet-Segmentation
- https://github.com/theerawatramchuen/Keras_Segmentation
- https://github.com/neheller/labels18
- https://github.com/Divyam10/Face-Matting-using-Unet
- https://github.com/shsh-a/segmentation-over-web
- https://github.com/chenwe73/deep_active_learning_segmentation
- https://github.com/vigneshrajap/vision-based-navigation-agri-fields
- https://github.com/ronalddas/Pneumonia-Detection
- https://github.com/Aiwiscal/ECG_UNet
- https://github.com/TianzhongSong/Unet-for-Person-Segmentation
- https://github.com/Guyanqi/GMDNN
- https://github.com/kozemzak/prostate-lesion-segmentation
- https://github.com/lixiaoyu12138/fcn-date
- https://github.com/sagarbhokre/LyftChallenge
- https://github.com/TianzhongSong/Person-Segmentation-Keras
- https://github.com/divyanshpuri02/COCO_2018-Stuff-Segmentation-Challenge
- https://github.com/XiangbingJi/Stanford-cs230-final-project
- https://github.com/lsh1994/keras-segmentation
- https://github.com/SpirinEgor/mobile_semantic_segmentation
- https://github.com/LeadingIndiaAI/COCO-DATASET-STUFF-SEGMENTATION-CHALLENGE
- https://github.com/lidongyue12138/Image-Segmentation-by-Keras
- https://github.com/laoj2/segnet_crfasrnn
- https://github.com/rancheng/AirSimProjects
- https://github.com/RadiumScriptTang/cartoon_segmentation
- https://github.com/dquail/NerveSegmentation
- https://github.com/Bhomik/SemanticHumanMatting
- https://github.com/Symefa/FP-Biomedik-Breast-Cancer
- https://github.com/Alpha-Monocerotis/PDF_FigureTable_Extraction
- https://github.com/rusito-23/mobile_unet_segmentation
- https://github.com/Philliec459/ThinSection-image-segmentation-keras
- https://github.com/imsadia/cv-assignment-three.git
- https://github.com/kejitan/ESVGscale
如果您在公开可用的项目中使用了我们的代码,请在此处添加链接(通过提交 issue 或创建 PR)。
版本历史
pretrained_model_12019/04/26常见问题
相似工具推荐
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
NextChat
NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。
ML-For-Beginners
ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。
ragflow
RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。









