实时语义分割网络 BiSeNet 训练自定义数据集

news2025/1/12 18:51:21

在这里插入图片描述


语义分割是一种将标签分配给每个像素的技术,广泛应用于场景理解、自动驾驶、人机交互、视频监控等领域。随着卷积神经网络的不断发展,研究人员提出了基于全卷积网络的语义分割算法,这些算法在语义分割任务中表现出良好的性能。

在这里插入图片描述

在这里插入图片描述

论文地址:BiSeNet: Bilateral Segmentation Network for Real-time Semantic Segmentation (arxiv.org)
Github: https://github.com/CoinCheung/BiSeNet


Get Start

python tools/demo.py --config configs/bisenetv2_city.py --weight-path ./checkpoints/model_final_v2_city.pth --img-path ./456.png

在这里插入图片描述

训练自定义数据集

  1. 参考作者给的自定义数据格式, 生成自定义数据集.
    Each line is a pair of training sample and ground truth image path, which are separated by a single comma ,

    munster_000002_000019_leftImg8bit.png,munster_000002_000019_gtFine_labelIds.png
    frankfurt_000001_07206_leftImg8bit.png,frankfurt_000001_079206_gtFine_labelIds.png
    
  2. configs 中创建 bisenetv2_test.py ( 我的数据集其实是一个类别,加上背景是两个类别. )

    cfg = dict(
        model_type='bisenetv2',
        n_cats=2, # 加背景
        num_aux_heads=4,
        lr_start=5e-3,
        weight_decay=1e-4,
        warmup_iters=1000,
        max_iter=80000,
        dataset='TestDataset', # 关联 lib/data/
        im_root='./datasets/test',
        train_im_anns='./datasets/test/train.txt',
        val_im_anns='./datasets/test/val.txt',
        scales=[0.75, 2.],
        cropsize=[640, 640],
        eval_crop=[640, 640],
        eval_scales=[0.5, 0.75, 1.0, 1.25, 1.5, 1.75],
        ims_per_gpu=8,
        eval_ims_per_gpu=2,
        use_fp16=True,
        use_sync_bn=False,
        respth='./res',
    )
    
  3. 创建 lib/data/railway_dataset.py , TestData 关联 config dataset , 运行 check_dataset_info.py 可以得到 meanstdignore value

    import lib.data.transform_cv2 as T
    from lib.data.base_dataset import BaseDataset
    import numpy as np
    
    class TestDataset(BaseDataset):
        def __init__(self, dataroot, annpath, trans_func=None, mode='train'):
            super(TestDataset, self).__init__(
                    dataroot, annpath, trans_func, mode)        
            self.lb_ignore = 255
            self.n_cats = 2 # + 背景
            self.lb_map = np.arange(256).astype(np.uint8)
            for i in range(256):
                if i == 0:
                   self.lb_map[i] = 0 
                elif i == 229:
                   self.lb_map[i] = 1
                else:
                   self.lb_map[i] = 255
            #  check_dataset.py 中计算     
            self.to_tensor = T.ToTensor(
                mean=(0.3974, 0.3863, 0.3898), # city, rgb
                std=(0.2112, 0.2148, 0.2115),
            )
    
  4. get_dataloader.py 中添加 from lib.data.test_dataset import TestDataset

    from lib.data.cityscapes_cv2 import CityScapes
    from lib.data.coco import CocoStuff
    from lib.data.ade20k import ADE20k
    from lib.data.customer_dataset import CustomerDataset
    from lib.data.test_dataset import TestDataset
    ...
    
  5. Train 自定义数据集

    export CUDA_VISIBLE_DEVICES=0,1,2,3
    torchrun --nproc_per_node=4 tools/train_amp.py --config ./configs/bisenetv2_test.py
    
    export CUDA_VISIBLE_DEVICES=0
    torchrun --nproc_per_node=1 tools/train_amp.py --config ./configs/bisenetv2_test.py
    

END

以上差不多就是我训练全部过程了,如有不对,欢迎指正 , 最后感谢大佬的无私奉献。

Git: https://github.com/CoinCheung/BiSeNet

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/870248.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IDEA设置Maven自动编译model

IDEA设置Maven自动编译model 项目工程结构IDEA maven设置 项目工程结构 假设我们的项目结构是下图这样,也就是一个父工程下包含多个子模块,其中dubbo-01-api是公共模块,其它两个模块要想使用必须在pom文件中引入。 本地开发要想不会报错&am…

T113-S3-调试debug串口修改

目录 前言 一、原理图示意 二、设备树文件配置 三、系统配置文件修改 四、调试问题 总结 前言 在嵌入式系统开发过程中,Debug串口是一个不可或缺的工具,用于输出调试信息、观察系统运行状态以及进行错误排查。T113-S3开发板作为一款功能强大的嵌入式…

51单片机(普中HC6800-EM3 V3.0)实验例程软件分析 实验五 继电器

目录 前言 一、原理图及知识点介绍 1.1、继电器原理图: 二、代码分析 前言 第一个实验: 51单片机(普中HC6800-EM3 V3.0)实验例程软件分析 实验一 点亮第一个LED_ManGo CHEN的博客-CSDN博客 第二个实验:51单片机&am…

软件测试基础篇——Shell

1、 shell概述 脚本:也是属于文本文件/文本文档,除了读和写之外,还可以直接被执行/运行,一句话总结:一个可以直接被执行(运行)的文件/文档,被称为“脚本” shell脚本:利用shell技术编写出来的一…

ThinkPHP8命名规范-ThinkPHP8知识详解

本文主要讲解thinkphp8的命名规范,主要包括:遵循PHP自身的PSR-2命名规范和PSR-4自动加载规范、目录和文件命名规范、函数和类、属性命名规范、常量和配置命名规范、数据表和字段命名规范、不能使用PHP保留字。 在使用thinkphp8开发项目之前,…

Python pycparser(c文件解析)模块使用教程

文章目录 安装 pycparser 模块模块开发者网址获取抽象语法树1. 需要导入的模块2. 获取 不关注预处理相关 c语言文件的抽象语法树ast3. 获取 预处理后的c语言文件的抽象语法树ast 语法树组成1. 数据类型定义 Typedef2. 类型声明 TypeDecl3. 标识符类型 IdentifierType4. 变量声明…

人工智能原理概述 - ChatGPT 背后的故事

大家好,我是比特桃。如果说 2023 年最火的事情是什么,毫无疑问就是由 ChatGPT 所引领的AI浪潮。今年无论是平日的各种媒体、工作中接触到的项目还是生活中大家讨论的热点,都离不开AI。其实对于互联网行业来说,自从深度学习出来后就…

(7)原神各属性角色的max与min

在对全部角色进行分析之后,还有必要对各属性角色的生命值/防御力/攻击力进行max与min显示: 话不多说,上货! from pyecharts.charts import Radar from pyecharts import options as opts import pandas as pd from pyecharts.ch…

Openlayers实战:选择feature,列表滑动,定位到相应的列表位置

在Openlayers的实际项目中,点击某个图层的feature,在左侧的列表中显示出来,滚动条滑动,能显示在视觉区内,具体的方法请参考源代码。 效果图 数据 guangdong.json https://geo.datav.aliyun.com/areas_v3/bound/440000_full.json 源代码 /* * @Author: 大剑师兰特(xia…

系统架构设计专业技能 · 软件工程之软件测试与维护(六)【系统架构设计师】

系列文章目录 系统架构设计专业技能 网络规划与设计(三)【系统架构设计师】 系统架构设计专业技能 系统安全分析与设计(四)【系统架构设计师】 系统架构设计高级技能 软件架构设计(一)【系统架构设计师…

在CMamke生成的VS项目中插入程序

在主文件夹的CMakeLists.tex中加入SET(COMPILE_WITH_LSVM OFF CACHE BOOL "Compile with LSVM") 再添加IF(COMPILE_WITH_LSVM) MESSAGE("Compiling with: LSVM") ADD_DEFINITIONS(-DCOMPILE_WITH_LSVM) ADD_SUBDIRECTORY(LSVM) LIST(APPEND SRC LSVM_wrap…

华为网络篇 RIPv2的基础配置-25

难度 1复杂度1 目录 一、实验原理 1.1 RIP的版本 1.2 RIP的路由更新方式 1.3 RIP的计时器 1.4 RIP的防环机制 二、实验拓扑 三、实验步骤 四、实验过程 总结 一、实验原理 RIP(Routing Information Protocol,路由信息协议)&am…

strlen和sizeof的区别

大家好,我是苏貝,本篇博客带大家了解C语言中的sizeof和strlen(仅此一篇让你明白它们两的差别),如果大家觉得我写的不错的话,可以给我一个赞👍吗,感谢❤️ 文章目录 strlensizeof 在…

基于python+MobileNetV2算法模型实现一个图像识别分类系统

一、目录 算法模型介绍模型使用训练模型评估项目扩展 二、算法模型介绍 图像识别是计算机视觉领域的重要研究方向,它在人脸识别、物体检测、图像分类等领域有着广泛的应用。随着移动设备的普及和计算资源的限制,设计高效的图像识别算法变得尤为重要。…

Patch SCN一键解决ORA-600 2662故障---惜分飞

客户强制重启库之后,数据库启动报ORA-600 2037,ORA-745 kcbs_reset_pool/kcbzre1等错误 Wed Aug 09 13:25:38 2023 alter database mount exclusive Successful mount of redo thread 1, with mount id 1672229586 Database mounted in Exclusive Mode Lost write protection d…

const和指针的结合

易错知识点 1、常量不能作为左值,防止直接修改常量的值 2、不能将常量的地址泄露给普通指针或普通引用变量,防止间接修改常量的值 // 关于易错知识点第2点 // 不能将常量的地址泄露给普通指针或普通引用变量,防止间接修改常量的值 const int …

Spannable配合AnimationDrawable实现TextView中展示Gif图片

辣的原理解释,反正大家也不爱看,所以直接上代码了 长这样,下面两个图是gif,会动的。 package com.example.myapplication;import android.content.Context; import android.graphics.Bitmap; import android.graphics.drawable…

SpringMVC注解开发

1. 构建流程 1&#xff09;IDEA创建一个Maven项目。配置所需依赖 <dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope></depe…

198、仿真-基于51单片机函数波形发生器调幅度频率波形Proteus仿真(程序+Proteus仿真+原理图+流程图+元器件清单+配套资料等)

毕设帮助、开题指导、技术解答(有偿)见文未 目录 一、硬件设计 二、设计功能 三、Proteus仿真图 四、原理图 五、程序源码 资料包括&#xff1a; 需要完整的资料可以点击下面的名片加下我&#xff0c;找我要资源压缩包的百度网盘下载地址及提取码。 方案选择 单片机的选…

MySQL数据库表的增删查改 - 进阶

一&#xff0c;数据库约束 1.1 约束对象 not null - 该列不能为空unique - 保证该列的每一行都不一样default - 规定没有给列赋值时的默认值&#xff08;自定义&#xff09;primary key - not null 和 unique 的结合&#xff0c;会给该列添加一个索引&#xff0…