基于C#winform部署BEN2的onnx模型实现前景分割,注意源码支持CPU+GPU推理,显卡需要RTX20-40显卡,RTX50系列显卡不支持
BEN2 前景分割工具
这是一个基于 BEN2(Bidirectional EncoderNetwork)深度学习模型的 Windows 桌面应用程序,专门用于图像前景分割处理。本项目使用 C# WinForms 开发,通过 ONNX Runtime 加载 BEN2 模型,实现高质量的前景提取与透明背景生成。
效果展示
算法原理
BEN2 简介
BEN2(Bidirectional Encoder Networkversion2)是一种高效的显著性目标检测网络:
- • 双向编码器架构 :采用独特的双向编码结构,同时捕捉局部细节和全局语义信息
- • 显著性检测 :自动识别图像中最显著的前景目标
- • 高分辨率支持 :原生支持 1024x1024 输入分辨率,保持精细边缘
- • 实时推理 :优化的网络结构,在 CPU 上也能实现快速推理
技术特点
- • 输入尺寸 :1024x1024
- • 输出格式 :单通道浮点掩码(归一化到 [0,1])
- • 后处理 :Min-Max 归一化 + 双线性插值
- • 适用场景 :通用物体前景提取、人像抠图、产品图片处理等
处理流程
- 1. 图像读取 :加载输入图像(BGR 格式)
- 2. 颜色转换 :BGR → RGB 转换
- 3. 尺寸调整 :缩放到 1024x1024 输入尺寸
- 4. 归一化 :像素值归一化到 [0, 1] 范围
- 5. 维度转换 :HWC(高×宽×通道)→ CHW(通道×高×宽)
- 6. 模型推理 :ONNX Runtime 执行 BEN2 网络前向传播
- 7. Min-Max 归一化 :将输出映射到 [0, 1] 范围
- 8. 尺寸恢复 :双线性插值到原始图像尺寸
- 9. Alpha 合成 :将掩码作为 Alpha 通道,生成 BGRA 图像
- 10. 结果保存 :输出 PNG 透明背景图像
环境要求
系统要求
- • 操作系统 :Windows 10/11 (x64)
- • 开发环境 :Visual Studio 2019 或更高版本
- • 目标框架 :.NET Framework 4.7.2
硬件要求
- • 最低配置 :
- • CPU:支持 x64 指令集的处理器
- • 内存:4GB RAM
- • 显卡:集成显卡(CPU 推理模式)
- • 推荐配置 :
- • CPU:多核处理器
- • 内存:8GB RAM 或更高
- • 显卡:NVIDIA GPU(支持 CUDA,用于 GPU 加速推理)
依赖库
包名版本说明OpenCvSharp44.13.0OpenCV 的 .NET 封装,用于图像处理Microsoft.ML.OnnxRuntime1.20.1ONNX 模型推理运行时System.Drawing.Common10.0.3图像绘制支持
安装步骤
1. 克隆或下载项目
git clone <项目仓库地址>
或直接下载项目压缩包并解压。
2. 准备 BEN2 模型文件
重要 :需要将 BEN2 模型文件放置在 model 文件夹中:
FIRC/
└── model/
└── BEN2_Base.onnx # BEN2 基础模型(1024x1024 输入)
3. 安装Visual Studio
确保已安装 Visual Studio 2019 或更高版本,并包含以下工作负载:
- • .NET 桌面开发
4. 还原NuGet包
打开项目后,Visual Studio 会自动还原 NuGet 包。
运行步骤
编译运行
- 1. 使用 Visual Studio 打开
FIRC.sln解决方案文件 - 2. 选择配置为 Release ,平台为 x64
- 3. 按
F5或点击"开始"按钮运行程序
使用说明
- 1. 选择图像 :点击"选择图像"按钮,选择要处理的图像文件
- • 支持格式:BMP、JPG、JPEG、TIFF、PNG
- 2. 前景分割 :点击"前景分割"按钮
- • 程序自动调用 BEN2 模型进行推理
- • 显示推理耗时(毫秒)
- • 生成带透明背景的图像
- 3. 查看状态 :顶部状态栏显示当前处理状态
- • 模型加载中…
- • 图像已加载
- • 正在处理…
- • 处理完成
- 4. 保存结果 :点击"保存结果"按钮
- • 默认保存为 PNG 格式(保留透明通道)
- • 也支持 JPG 和 BMP 格式
性能参考
- • CPU 推理 :约 200-500ms(取决于 CPU 性能)
- • GPU 加速 :可进一步提升速度(需配置 CUDA)
- • 内存占用 :约 200-300MB
注意事项
- 1. 模型文件 :首次使用前请确保已下载 BEN2_Base.onnx 模型文件并放置在
model文件夹中 - 2. 内存占用 :处理高分辨率图像时需要较大内存,建议关闭其他占用内存的程序
- 3. 图像格式 :
- • 输入支持:BMP、JPG、JPEG、TIFF、PNG
- • 输出格式:PNG(带 Alpha 透明通道)、JPG、BMP
- 4. 处理时间 :
- • 首次推理包含模型加载时间
- • 后续推理速度更快(模型已缓存)
- • 推理时间显示在右上角文本框
- 5. 适用场景 :
- • ✅ 通用物体前景提取
- • ✅ 人像摄影抠图
- • ✅ 电商产品图片处理
- • ✅ 医学图像分割
- • ❌ 不适合视频实时处理(延迟较高)
- 6. 异常处理 :如遇到错误,请检查:
- • 模型文件是否完整(BEN2_Base.onnx)
- • 是否选择了 x64 平台配置
- • 系统内存是否充足
- • 图像文件是否损坏
文件夹结构
FIRC/
├── Properties/ # 项目属性文件
│ ├── AssemblyInfo.cs # 程序集信息
│ └── Resources.resx # 资源文件
├── bin/
│ └── x64/
│ ├── Debug/ # 调试输出目录
│ └── Release/ # 发布输出目录
│ └── FIRC.exe # 可执行文件
├── model/ # BEN2 模型目录(重要!)
│ └── BEN2_Base.onnx # BEN2 基础模型(1024x1024)
├── packages/ # NuGet 包缓存目录
├── App.config # 应用程序配置文件
├── FIRC.csproj # 项目文件
├── FIRC.sln # 解决方案文件
├── Form1.cs # 主窗体逻辑代码(BEN2 分割实现)
├── Form1.Designer.cs # 窗体设计器代码
├── Form1.resx # 窗体资源文件
└── Program.cs # 程序入口点
参考项目
本项目参考了以下开源项目:
- • BEN2 Official : https://github.com/pq-yang/BEN2
- • Bidirectional Encoder Network for Salient Object Detection