基于C#winform部署软前景分割DAViD算法的onnx模型实现前景分割源码

作品简介

 提供百度云盘地址下载


基于C#winform部署软前景分割DAViD算法的onnx模型实现前景分割基于 DAViD 算法的前景分割效果展示



项目简介

本项目是一个基于 DAViD (Denoising Aggregation for Vision and Depth) 算法的图像前景分割工具,使用ONNX模型进行推理,支持 CPU 和 CUDA 加速。项目采用 C# WinForms 开发,提供友好的图形界面,可以实时显示原始图像和分割后的透明背景结果。

算法原理

DAViD 前景分割算法

DAViD 是一种先进的视觉前景分割算法,其核心原理如下:

  1. 1. 输入处理 :接收 RGB 三通道图像,缩放到模型固定输入尺寸(512×512)
  2. 2. 特征提取 :通过 ViT (Vision Transformer) 骨干网络提取多层次视觉特征
  3. 3. 前景预测 :输出单通道掩膜(Mask),每个像素值范围 [0, 1],表示该像素属于前景的概率
  4. 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. 1. NVIDIA 显卡驱动 :最新版本
  2. 2. CUDA Toolkit 12.x :从 NVIDIA 官网 下载
  3. 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. 1. 使用 Visual Studio 2019 打开 FIRC.sln
  2. 2. 选择配置: Release | x64
  3. 3. 生成解决方案: 生成 → 生成解决方案 (Ctrl+Shift+B)
  4. 4. 编译成功后,可执行文件位于 bin\x64\Release\FIRC.exe

运行步骤

方式一:Visual Studio 运行

  1. 1. 在 Visual Studio 中打开项目
  2. 2. 设置启动项目为 FIRC
  3. 3. 按 F5 或点击 开始调试 运行

方式二:直接运行可执行文件

  1. 1. 进入 bin\x64\Release\ 目录
  2. 2. 双击 FIRC.exe 运行程序


使用流程

  1. 1. 选择推理设备 (可选):
  • • 默认使用 CPU
  • • 勾选 “CUDA 加速” 使用 GPU(需提前安装 CUDA)
  1. 2. 加载模型 :
  • • 点击 “加载模型” 按钮
  • • 等待状态栏显示 “状态:模型已加载 [CPU]” 或 “[CUDA]”
  1. 3. 上传图片 :
  • • 点击 “上传图片” 按钮
  • • 选择要处理的图像文件(支持 BMP、JPG、JPEG、TIFF、PNG)
  1. 4. 开始推理 :
  • • 点击 “开始推理” 按钮
  • • 等待推理完成,右侧显示分割结果
  • • 底部显示推理耗时
  1. 5. 查看结果 :
  • • 左侧显示原始图像
  • • 右侧显示带透明背景的前景分割结果
  • • 支持右键保存为 PNG 格式(保留透明通道)

注意事项

模型相关

  1. 1. 模型路径 :确保 ONNX 模型文件位于正确路径,默认路径为:
bin\x64\Release\weights\foreground-segmentation-model-vitb16_384.onnx
  1. 2. 模型输入尺寸 :DAViD 模型固定输入为 512×512,程序会自动缩放图像
  2. 3. 模型输出 :模型输出单通道掩膜,形状为 [1, 1, 512, 512],值域 [0, 1]

CUDA 加速

  1. 1. DLL 依赖 :使用 CUDA 模式时,必须确保所有 CUDA/cuDNN DLL 文件存在于运行目录
  2. 2. 版本匹配 :CUDA、cuDNN 版本必须与 ONNX Runtime 编译版本匹配(CUDA 12.x, cuDNN 9.x)
  3. 3. 显存不足 :如果 GPU 显存不足,程序可能崩溃或回退到 CPU
  4. 4. 首次运行 :首次使用 CUDA 可能有初始化延迟

图像处理

  1. 1. 支持格式 :BMP、JPG、JPEG、TIFF、PNG
  2. 2. 输出格式 :建议保存为 PNG 格式以保留透明通道
  3. 3. 内存管理 :程序会自动释放 OpenCV Mat 对象,但处理超大图像时可能占用较多内存
  4. 4. 性能优化 :CPU 模式下,处理 1080p 图像约需 100-500ms(取决于 CPU 性能)

开发相关

  1. 1. C# 版本 :项目使用 C# 5.0 语法,不要使用 C# 6.0+ 特性(如属性初始化器、空值条件运算符等)
  2. 2. 平台目标 :必须使用 x64 平台编译,因为 ONNX Runtime 和 OpenCvSharp 的 native DLL 均为 64 位
  3. 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)。

 

创作时间: