当前位置: 首页 > web >正文

【图像分割】记录1:unet, yolov8_seg

图像分割笔记

  • 1、数据部分
  • 2、模型部分
    • 2.1 Unet模型复现记录
      • 2.1.1 代码和数据获取
      • 2.1.2 环境配置
      • 2.1.3 参数修改
      • 2.1.4 bug解决
      • 2.1.5 模型推理部分
  • 3、部署部分
    • 3.1 android-yolov8-seg-onnx部署
      • 3.1.1 软件和配置
        • 3.1.1.1安装andorid_studio
        • 3.1.1.2 安装jdk
        • 3.1.1.3 项目结构配置
        • 3.1.1.4 文件内参数设置(参考)
      • 3.1.2 参考链接

1、数据部分

图像分割任务通常涉及两种不同级别的标注方式,在精细度和应用场景上有明显区别:

1.1 像素级分割(Pixel-level Segmentation)

  • 最精细的标注级别,每个像素都被分类
  • 主要类型:
    • 语义分割(Semantic Segmentation):为每个像素分配类别标签(如"人"、“车”),不区分同类实例
    • 实例分割(Instance Segmentation):区分同类物体的不同实例(如区分多个人)
    • 全景分割(Panoptic Segmentation):结合语义和实例分割,标注所有像素且区分实例

1.2 检测框级分割(Bounding Box-level)

  • 用矩形框标注物体大致范围
  • 常见变体:
    • 常规检测框(Axis-aligned Bounding Box)
    • 旋转检测框(Rotated Bounding Box)
    • 多边形近似(Polygon Annotation):用多边形逼近物体轮廓

关键区别:

特征像素级分割检测框级分割
精度亚像素级物体级
标注成本高(需逐像素标注)较低(框选即可)
适用场景医疗影像、自动驾驶等精细场景通用物体检测
计算复杂度较低
输出结果精确轮廓大致位置和范围

混合应用场景:

  1. 一些框架(如Mask R-CNN)会同时输出检测框和像素级掩码
  2. 弱监督学习中常用检测框作为初始标注,再生成像素级标签
  3. 工业界常用检测框预标注+人工像素级修正的工作流程

最新趋势:

  • 交互式分割(如点击引导的GrabCut算法)
  • 基于SAM等大模型的零样本分割
  • 点标注、涂鸦标注等弱监督方式

选择建议:

  • 需要精确形状分析(如医学肿瘤分割)必须用像素级
  • 只需物体定位和计数的场景(如零售货架检测)可用检测框
  • 资源有限时可考虑检测框标注配合分割算法生成伪标签

2、模型部分

2.1 Unet模型复现记录

2.1.1 代码和数据获取

git clone https://github.com/milesial/Pytorch-UNet.git

数据获取:
(1) 汽车分割:https://blog.csdn.net/shinuone/article/details/143382947
(2) unet分割数据集: https://zhuanlan.zhihu.com/p/664377728

2.1.2 环境配置

conda create -n unet python=3.8 -y
conda activate unet
pip install -r requirements.txt
pip install torch==2.2.0 torchvision==0.17.0 torchaudio==2.2.0 --index-url https://download.pytorch.org/whl/cu118
conda install cudatoolkit=11.8.0
cudnn安装路径修改:E:\software_install\miniconda\envs\unet\Library; 文件夹替换

2.1.3 参数修改

(1)train.py中训练文件夹路径
在这里插入图片描述
修改成对应文件夹下的路径

2.1.4 bug解决

1、问题1:数据处理过程中存在的问题
C:\actions-runner_work\pytorch\pytorch\builder\windows\pytorch\aten\src\ATen\native\cuda\NLLLoss2d.cu:104: block: [1,0,0], thread: [127,0,0] Assertion t >= 0 && t < n_classes failed.
在这里插入图片描述
解决方案,修改data_loading.py中,img数组的值判定结果

    @staticmethoddef preprocess(mask_values, pil_img, scale, is_mask):w, h = pil_img.sizenewW, newH = int(scale * w), int(scale * h)assert newW > 0 and newH > 0, 'Scale is too small, resized images would have no pixel'pil_img = pil_img.resize((newW, newH), resample=Image.NEAREST if is_mask else Image.BICUBIC)img = np.asarray(pil_img)if is_mask:img = np.asarray(pil_img).copy()  # 加 .copy() 变成可写img[img > 0] = 1  # 所有非0都设为1(仅二分类)mask = np.zeros((newH, newW), dtype=np.int64)for i, v in enumerate(mask_values):if img.ndim == 2:mask[img == v] = ielse:mask[(img == v).all(-1)] = ireturn mask

2.1.5 模型推理部分

参数修改

3、部署部分

3.1 android-yolov8-seg-onnx部署

3.1.1 软件和配置

3.1.1.1安装andorid_studio

(1) SDK Platforms
在这里插入图片描述
(2) SDK Tools
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.1.1.2 安装jdk

在这里插入图片描述

3.1.1.3 项目结构配置

AGP和Gradle的版本设置为8.2.1
在这里插入图片描述

3.1.1.4 文件内参数设置(参考)
文件名层级职责
build.gradle (Project)项目级配置项目全局构建,如仓库、Gradle 插件版本
build.gradle (Module: app)模块级配置 app 模块构建,如编译版本、依赖、签名、混淆等
gradle-wrapper.properties项目级指定 Gradle 版本及下载路径,实现 Gradle 版本统一管理
local.properties本地级配置本地环境路径(如 SDK 路径),不提交版本控制
settings.gradle项目级声明项目包含的模块,定义项目结构范围

build.gradle (Project)

// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {repositories {google()mavenCentral()}dependencies {classpath 'com.android.tools.build:gradle:8.2.1' // 使用最新的稳定版本}
}allprojects {repositories {google()mavenCentral()}
}

build.gradle (Module: app)

apply plugin: 'com.android.application'android {compileSdkVersion 24// buildToolsVersion "29.0.2"defaultConfig {applicationId "com.tencent.yolov8ncnn"archivesBaseName = "$applicationId"minSdkVersion 24testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"// 添加abiFiltersexternalNativeBuild {cmake {cppFlags "-std=c++11 -frtti -fexceptions"abiFilters 'arm64-v8a'//arguments "-DANDROID_STL=c++_shared"}}    // 添加abiFiltersndk {abiFilters 'arm64-v8a'}}// 设置jniLibs// sourceSets {//     main {//         jniLibs.srcDirs = ['src/main/jniLibs']//     }// }externalNativeBuild {cmake {version "3.10.2"path file('src/main/jni/CMakeLists.txt')}}dependencies {implementation 'com.android.support:support-v4:24.0.0'}ndkVersion '24.0.8215888'namespace "com.tencent.yolov8ncnn"
}

gradle-wrapper.properties

#Fri Jul 25 08:37:19 CST 2025
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.2.1-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

local.properties

## This file must *NOT* be checked into Version Control Systems,
# as it contains information specific to your local configuration.
#
# Location of the SDK. This is only used by Gradle.
# For customization when using a Version Control System, please read the
# header note.
#Thu Jul 24 13:39:13 CST 2025
sdk.dir=C\:\\Users\\Administrator\\AppData\\Local\\Android\\Sdk
ndk.dir=C\:\\Users\\Administrator\\AppData\\Local\\Android\\Sdk\\ndk\\24.0.8215888
cmake.dir=C\:\\Users\\Administrator\\AppData\\Local\\Android\\Sdk\\cmake\\3.10.2.4988404

settings.gradle

include ':app'

3.1.2 参考链接

(1)android_yolov8_seg:
https://www.bilibili.com/video/BV1u1421Q7xZ?spm_id_from=333.788.videopod.episodes&vd_source=8d7b08caa2ce5bc9e61e3d1e486ddca5&p=2
(2)https://github.com/Digital2Slave/ncnn-android-yolov8-seg.git

http://www.xdnf.cn/news/16490.html

相关文章:

  • 基于springboot的在线数码商城/在线电子产品商品销售系统的设计与实现
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘ipython’问题
  • 【iOS】网易云仿写
  • 【守护】同为科技SPD:AP-20D/4P产品解析
  • 【leetGPU】1. Vector Addition
  • 其他世界的自来水
  • 统计与大数据分析与数学金融课程解析
  • ThreadLocal--ThreadLocal介绍
  • 技术 — 资本双螺旋:AI 时代的投资浪潮与技术突破
  • vulhub-earth靶机攻略
  • Mixture-of-Recursions: 混合递归模型,通过学习动态递归深度,以实现对自适应Token级计算的有效适配
  • 什么是缓存雪崩?缓存击穿?缓存穿透?分别如何解决?什么是缓存预热?
  • QT中启用VIM后粘贴复制快捷键失效
  • SQL Developer Data Modeler:一款免费跨平台的数据库建模工具
  • Linux c++ CMake常用操作
  • 数字迷雾中的安全锚点:解码匿名化与假名化的法律边界与商业价值
  • 融合为体,AI为用:数据库在智能时代的破局之道
  • petalinux配置总结
  • 卫星通信终端天线对星之:参考星对星
  • SSE (Server-Sent Events) 服务出现连接卡在 pending 状态的原因
  • 数据库HB OB mysql ck startrocks, ES存储特点,以及应用场景
  • 树上倍增和LCA问题
  • 【Zephyr】Window下的Zephyr编译和使用
  • 数学建模国赛历年赛题与优秀论文学习思路
  • 考研复习-数据结构-第八章-排序
  • 洛谷 P1217:[USACO1.5] 回文质数 Prime Palindromes
  • Android开发中线上crash问题解决流程
  • [spring6: Mvc-函数式编程]-源码解析
  • 栈----2.最小栈
  • 单元测试、系统测试、集成测试知识详解