提供百度云盘地址下载
基于C#winform部署软前景分割DAViD算法的onnx模型实现前景分割基于 DAViD 算法的前景分割效果展示
项目简介
本项目是一个基于 DAViD (Denoising Aggregation for Vision and Depth) 算法的图像前景分割工具,使用ONNX模型进行推理,支持 CPU 和 CUDA 加速。项目采用 C# WinForms 开发,提供友好的图形界面,可以实时显示原始图像和分割后的透明背景结果。
算法原理
DAViD 前景分割算法
DAViD 是一种先进的视觉前景分割算法,其核心原理如下:
- 1. 输入处理 :接收 RGB 三通道图像,缩放到模型固定输入尺寸(512×512)
- 2. 特征提取 :通过 ViT (Vision Transformer) 骨干网络提取多层次视觉特征
- 3. 前景预测 :输出单通道掩膜(Mask),每个像素值范围 [0, 1],表示该像素属于前景的概率
- 4. 后处理 :
- • 将 512×512 的预测掩膜双线性插值回原始图像尺寸
- • 将浮点掩膜转换为 8 位 Alpha 通道(0-255)
- • 将 Alpha 通道与原始 BGR 图像合并,生成 BGRA 四通道透明背景图像
技术特点
- • 软掩膜输出 :默认输出软掩膜(Soft Mask),保留边缘过渡的半透明效果
- • 二值化支持 :可配置阈值进行二值化处理,适用于需要硬边界的场景
- • 高效推理 :基于 ONNX Runtime,支持 CPU 和 CUDA GPU 加速
环境要求
开发环境
- • IDE :Visual Studio 2019 或更高版本
- • .NET Framework :4.7.2
- • C# 语言版本 :5.0
- • 操作系统 :Windows 10/11 (x64)
依赖库
依赖库版本用途OpenCvSharp4.13.0图像处理(缩放、颜色转换、矩阵运算)ONNX Runtime1.20.1ONNX 模型推理引擎System.Drawing.Common-图像格式转换
硬件要求
- • CPU 模式 :任意 x64 处理器
- • CUDA 模式 (可选):
- • NVIDIA GPU(支持 CUDA 12.x)
- • 已安装 CUDA Toolkit 12.x
- • 已安装 cuDNN 9.x
- • 足够的显存(建议 ≥ 4GB)
安装步骤
1. 克隆或下载项目
# 如果从 Git 仓库获取
git clone
cd FIRC
2. 准备 ONNX模型
将 DAViD 前景分割 ONNX 模型文件放置在 weights 文件夹中:
bin\x64\Release\weights\foreground-segmentation-model-vitb16_384.onnx
注意 :模型文件名必须与代码中的路径一致,或修改 Form1.cs 中的 modelPath 变量。
3. 安装CUDA(可选,仅GPU加速需要)
如果使用 CUDA加速,需要安装以下组件:
- 1. NVIDIA 显卡驱动 :最新版本
- 2. CUDA Toolkit 12.x :从 NVIDIA 官网 下载
- 3. cuDNN 9.x :从 NVIDIA cuDNN 下载
确保以下 DLL 文件存在于 bin\x64\Release\ 目录:
- •
cudart64_12.dll - •
cublas64_12.dll - •
cublasLt64_12.dll - •
cudnn64_9.dll - • 其他
cudnn_*.dll文件
4. 编译项目
- 1. 使用 Visual Studio 2019 打开
FIRC.sln - 2. 选择配置: Release | x64
- 3. 生成解决方案:
生成→生成解决方案(Ctrl+Shift+B) - 4. 编译成功后,可执行文件位于
bin\x64\Release\FIRC.exe
运行步骤
方式一:Visual Studio 运行
- 1. 在 Visual Studio 中打开项目
- 2. 设置启动项目为
FIRC - 3. 按
F5或点击开始调试运行
方式二:直接运行可执行文件
- 1. 进入
bin\x64\Release\目录 - 2. 双击
FIRC.exe运行程序
使用流程
- 1. 选择推理设备 (可选):
- • 默认使用 CPU
- • 勾选 “CUDA 加速” 使用 GPU(需提前安装 CUDA)
- 2. 加载模型 :
- • 点击 “加载模型” 按钮
- • 等待状态栏显示 “状态:模型已加载 [CPU]” 或 “[CUDA]”
- 3. 上传图片 :
- • 点击 “上传图片” 按钮
- • 选择要处理的图像文件(支持 BMP、JPG、JPEG、TIFF、PNG)
- 4. 开始推理 :
- • 点击 “开始推理” 按钮
- • 等待推理完成,右侧显示分割结果
- • 底部显示推理耗时
- 5. 查看结果 :
- • 左侧显示原始图像
- • 右侧显示带透明背景的前景分割结果
- • 支持右键保存为 PNG 格式(保留透明通道)
注意事项
模型相关
- 1. 模型路径 :确保 ONNX 模型文件位于正确路径,默认路径为:
bin\x64\Release\weights\foreground-segmentation-model-vitb16_384.onnx
- 2. 模型输入尺寸 :DAViD 模型固定输入为 512×512,程序会自动缩放图像
- 3. 模型输出 :模型输出单通道掩膜,形状为 [1, 1, 512, 512],值域 [0, 1]
CUDA 加速
- 1. DLL 依赖 :使用 CUDA 模式时,必须确保所有 CUDA/cuDNN DLL 文件存在于运行目录
- 2. 版本匹配 :CUDA、cuDNN 版本必须与 ONNX Runtime 编译版本匹配(CUDA 12.x, cuDNN 9.x)
- 3. 显存不足 :如果 GPU 显存不足,程序可能崩溃或回退到 CPU
- 4. 首次运行 :首次使用 CUDA 可能有初始化延迟
图像处理
- 1. 支持格式 :BMP、JPG、JPEG、TIFF、PNG
- 2. 输出格式 :建议保存为 PNG 格式以保留透明通道
- 3. 内存管理 :程序会自动释放 OpenCV Mat 对象,但处理超大图像时可能占用较多内存
- 4. 性能优化 :CPU 模式下,处理 1080p 图像约需 100-500ms(取决于 CPU 性能)
开发相关
- 1. C# 版本 :项目使用 C# 5.0 语法,不要使用 C# 6.0+ 特性(如属性初始化器、空值条件运算符等)
- 2. 平台目标 :必须使用 x64 平台编译,因为 ONNX Runtime 和 OpenCvSharp 的 native DLL 均为 64 位
- 3. 资源释放 :所有
Mat对象和 ONNX 推理对象都实现了IDisposable,使用完毕后会自动释放
文件夹结构
FIRC/
├── Properties/ # 项目属性配置
│ ├── AssemblyInfo.cs # 程序集信息
│ ├── Resources.Designer.cs # 资源文件设计器
│ ├── Resources.resx # 资源文件
│ ├── Settings.Designer.cs # 设置文件设计器
│ └── Settings.settings # 应用程序设置
├── bin/ # 编译输出目录
│ └── x64/
│ └── Release/
│ ├── FIRC.exe # 主程序
│ ├── FIRC.pdb # 调试符号
│ ├── FIRC.exe.config # 配置文件
│ ├── weights/ # 模型权重目录
│ │ └── foreground-segmentation-model-vitb16_384.onnx
│ ├── dll/
│ │ └── x64/ # Native DLL 目录
│ │ ├── OpenCvSharpExtern.dll
│ │ └── opencv_videoio_ffmpeg4130_64.dll
│ ├── Microsoft.ML.OnnxRuntime.dll
│ ├── onnxruntime.dll
│ ├── onnxruntime_providers_cuda.dll # CUDA 支持
│ ├── onnxruntime_providers_tensorrt.dll # TensorRT 支持
│ ├── OpenCvSharp.dll # OpenCV C# 绑定
│ ├── OpenCvSharp.Extensions.dll
│ ├── cudart64_12.dll # CUDA Runtime
│ ├── cublas64_12.dll # CUDA BLAS
│ ├── cudnn64_9.dll # cuDNN
│ └── ...(其他 CUDA/cuDNN DLL)
├── images/ # 示例图像目录
│ ├── *.jpg # 历史照片示例
│ └── ...
├── ForegroundSegmentation.cs # 前景分割推理类(核心)
├── Form1.cs # 主窗体逻辑
├── Form1.Designer.cs # 主窗体设计器代码
├── Form1.resx # 主窗体资源文件
├── Program.cs # 程序入口
├── App.config # 应用程序配置
├── FIRC.sln # Visual Studio 解决方案
├── FIRC.csproj # 项目文件
├── FIRC.csproj.user # 用户项目设置
└── README.md # 项目说明文档
核心代码说明
ForegroundSegmentation.cs
推理封装类,提供以下功能:
- •
LoadModel(string modelPath, bool useCuda):加载 ONNX 模型 - •
Segment(Mat inputImage, float binarizationThreshold):执行前景分割 - •
Dispose():释放资源
推理流程
输入图像 (BGR) ↓ 缩放到 512×512 ↓ 归一化到 [0, 1] ↓ 转换为 CHW 格式 ↓ ONNX 模型推理 ↓ 输出掩膜 [1, 1, 512, 512] ↓ 双线性插值到原始尺寸 ↓ 生成 Alpha 通道 (0-255) ↓ 合并为 BGRA 图像 ↓ 输出透明背景结果
常见问题
支持哪些显卡
不直接支持RTX50显卡,可以使用RTX40,30,20,1660系列显卡,也支持CPU运行
Q1: 提示 “模型文件不存在”
A : 检查 weights 文件夹中是否有 ONNX 模型文件,文件名是否正确。
Q2: 勾选 CUDA 后程序崩溃
A : 确保已安装 CUDA 12.x 和 cuDNN 9.x,且所有 DLL 文件在运行目录。
Q3: 推理速度很慢
A : CPU 模式下速度取决于处理器性能,可尝试勾选 CUDA 加速使用 GPU。
Q4: 分割边缘不够精细
A : 默认使用软掩膜保留过渡效果,如需硬边界可调整二值化阈值(当前代码固定为 0)。