OpenMMLab【超级视客营】——把类别信息加入可视化结果中(MMSegmentation的第二个PR)

news2025/1/15 20:46:38

文章目录

  • 1. 任务说明
    • 1.0 新手指引
    • 1.1 任务目标
    • 1.2 提交格式
  • 2. 实施
    • 2.1 可视化的形式
    • 2.2 拉分支和提交PR
      • 2.2.1 拉分支
      • 2.2.2 提交PR
    • 2.3 MMSegmentation中关于可视化的内容
      • 2.3.1 文档说明
      • 2.3.2 相关PR(确定要修改的文件)
      • 2.3.3 提交时的代码测试
    • 2.4 发现的其他问题
  • 3. 代码里的一些问题
    • 3.1 如果imshow和show混用,注意坐标系问题
    • 3.2 opencv显示
    • 3.3 matplotlib显示
    • 3.4 集成后显示
  • 4. 其他
    • 4.1 mmcv安装(走编译模式)
    • 4.2 代码里的@ master_only
    • 4.3 下一个PR

1. 任务说明

1.0 新手指引

第一次提交PR的时候没有看到这些帮助文档,其实很多同类型的PR,比如:支持新的数据集,支持单元测试等,是有一些现成的范例了,
可以看: OpenMMLab 贡献者成长地图
在这里插入图片描述
这里对怎么提交PR,代码格式那些的都有很好的指引。。。如果我提交第一个PR的时候看到这个,应该能少走不少弯路吧

1.1 任务目标

这个任务一开始属于MMSIG,后来又变成超级视课营了,就很曲折。关于这个超级视课营,有个微信文章:超级视客营再度启航,展现编程实力,共同塑造开源未来!。

内容:
>

其实和分割可视化结果中加上语义信息 #154中的内容一致。。

1.2 提交格式

在超级视课营页面
在这里插入图片描述
开发阶段 2023.07.20 – 2023.10.08

  • 入选选手根据任务要求完成相应的开发与优化工作,在截止时间前于 GitHub 对应算法库提交成果
  • 成果提交的 PR Title 请遵循以下格式 ‘[CodeCamp2023-TaskID] xxx’(例如:TaskID为 325 的任务 Find the proper learning rate,PR 的 Title 应为 ‘[CodeCamp2023-325] Find the proper learning rate’)
  • 本次视客营任务均基于 OpenMMLab 2.0

2. 实施

2.1 可视化的形式

分割可视化结果中加上语义信息,即在分割结果的对应颜色区域添加对应的语义标签

大致可以有以下两种形式:

  1. 箭头,类似这样:
    在这里插入图片描述
    • Show image with annotation and boxes
    • keras_ocr-drawAnnotations
  2. 为PatchCollection添加text,类似这样:
    在这里插入图片描述
    • https://matplotlib.org/stable/gallery/misc/packed_bubbles.html#sphx-glr-gallery-misc-packed-bubbles-py
    • https://stackoverflow.com/questions/32785705/how-to-label-patch-in-matplotlib
    • https://matplotlib.org/stable/api/_as_gen/matplotlib.patches.Patch.html#matplotlib.patches.Patch

结论:

  • 看过当前库的可视化代码之后,方法二比较合适,因为库里函数之间是以image/array形式来传递可视化结果的,所以最好不要修改图像的尺寸。
  • 所以采用方法二,即Patch的方法来进行可视化

2.2 拉分支和提交PR

2.2.1 拉分支

  1. 如果之前有提交过旧的PR的分支,可以删掉
    # 删除remote的分支
    git push -d <remote_name> <branchname>
    
    >git push -d origin CastleDream/support_BDD100K
    To github.com:CastleDream/mmsegmentation.git
     - [deleted]         CastleDream/support_BDD100K
    
    # 删除本地的分支,-d是delete,-D是delete force,都可以
    git branch -d <branchname>
    > git branch -D CastleDream/support_BDD100K
    Deleted branch CastleDream/support_BDD100K (was 221ac91).
    
  2. 根据PR名字新建分支
    # 0. 把upstream上最新的所有内容都拉到本地
    git fetch upstream
    
    # 1. 查看upstream现有分支
    git remote show upstream
    >Remote branches:
    0.x                            tracked
    1.x                            tracked
    circleci-project-setup         tracked
    dev-1.x                        tracked ⬅️ 要基于这个分支进行开发
    main                           tracked
    master                         tracked
    masterbak                      tracked
    refs/remotes/upstream/test-1.1 stale (use 'git remote prune' to remove)
    test-1.x                       tracked
    # 2. 分支的名字是:AddLabel2Visualize,基于dev-1.x创建新分支
    git checkout -b AddLabel2Visualize upstream/dev-1.x
    
    # 3. 切换到新建的这个分支
    git checkout AddLabel2Visualize
    # 类似的,也可以切换会默认的main分支 git checkout main
    

2.2.2 提交PR

在新建的AddLabel2Visualize分支上进行任务修改并上传至github后。

git add *
git commit -m "add semantic label to visualize"
> # 由于之前配置了pre-commit,所以这里会自动检查

git push -u origin AddLabel2Visualize
# 第一次推送,可以在 git push 后加上 -u 参数以关联远程分支,
> To github.com:CastleDream/mmsegmentation.git
 * [new branch]      AddLabel2Visualize -> AddLabel2Visualize
Branch 'AddLabel2Visualize' set up to track remote branch 'AddLabel2Visualize' from 'origin'.

注意,

  • 提交PR的时候提交到的分支是dev-1.x
  • 如果有对应的issue,可以在描述中添加对应的issue编号

2.3 MMSegmentation中关于可视化的内容

2.3.1 文档说明

  • https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/docs/zh_cn/user_guides/visualization.md
  • https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/docs/zh_cn/user_guides/visualization_feature_map.md
  • ✅https://mmengine.readthedocs.io/zh_CN/latest/advanced_tutorials/visualization.html, 比较关键的应该就是SegLocalVisualizer是继承自mmengine中的Visualizer

2.3.2 相关PR(确定要修改的文件)

可以看看之前可视化相关的PR会进行哪些改动,就知道从哪里开始下手,修改代码了

根据:https://github.com/open-mmlab/mmsegmentation/pull/3154/files,应该就是这三个:

|--demo
	|-- inference_demo.ipynb
|mmseg
	|--apis
		|--inference.py
	|--visualization
		|-- local_visualizer.py

主要改的是local_visualizer.py文件。

附加任务:

  1. 测试tensorboard中的显示:https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/docs/zh_cn/user_guides/visualization.md
  2. 测试wandb记录特征图可视化的显示:https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/docs/zh_cn/user_guides/visualization_feature_map.md
  3. 有需要的话可能也要改改上面两个文档

这是关于SegVisualizer所用的所有文件了,[Feature] Add SegVisualizer #1792


2.3.3 提交时的代码测试

这个也有相关的PR,由于在BDD100K时吃过单元测试的亏,所以这里稍微留个心:

  • https://github.com/MeowZheng/mmsegmentation/blob/dev-1.x/tests/test_visualization/test_local_visualizer.py
  • https://github.com/open-mmlab/mmsegmentation/pull/1851/files

2.4 发现的其他问题

  1. https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/mmseg/utils/__init__.py,很多后添加的数据集都没有在这里加入palatte和classes
  2. https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/mmseg/visualization/local_visualizer.py注释里给的示例过期了,库的接口变了,修改

3. 代码里的一些问题

还有一些结果图片放在PR里了,https://github.com/open-mmlab/mmsegmentation/pull/3229

3.1 如果imshow和show混用,注意坐标系问题

在这里插入图片描述

在这里插入图片描述

3.2 opencv显示

opencv显示

  • 即便获取到每个标注类别的x和y中心的坐标,其实也不是这个物体的几何中心(质心),不太行的感觉。
  • 同时对于比较小的物体,这种显示还是很糟糕
    在这里插入图片描述

在这里插入图片描述
调节之后是这样。。。


3.3 matplotlib显示

matplotlib显示:
+
但是没法获取ax的image,把带有annotate的imshow结果作为image进行传递。

3.4 集成后显示

透明度调节,另外加了个框,来区分语义标签和seg结果
在这里插入图片描述

存储和显示测试正常。

如果有预测结果,拼接显示正常
在这里插入图片描述

4. 其他

4.1 mmcv安装(走编译模式)

ImportError: dlopen(~/mmcv/_ext.cpython-37m-darwin.so, 0x0002): Symbol not found: __Z16THPVariable_WrapN2at6TensorE
  Referenced from: <4A5BF6D7-5700-3E99-BE86-F6A605E8425D> ~/mmcv/_ext.cpython-37m-darwin.so
  Expected in:     <AA69D6A3-7D5A-3F97-B7B9-F6F15CFF01B4> ~/torch/lib/libtorch_python.dylib

反正mmcv和torch强相关,最好不要走wheel去安装,直接编译吧,这个mmcv经常出问题

根据BUILD MMCV FROM SOURCE,macOS和linux的其实差不多

git clone https://github.com/open-mmlab/mmcv.git
cd mmcv
pip install -r requirements/optional.txt
MMCV_WITH_OPS=1 pip install -e .

# 验证安装是否正确
python .dev_scripts/check_installation.py

4.2 代码里的@ master_only

来自:https://github.com/open-mmlab/mmengine/blob/main/mmengine/dist/utils.py#L387

def master_only(func: Callable) -> Callable:
    """Decorate those methods which should be executed in master process.
	装饰那些只在主进程中运行的方法
    Args:
        func (callable): Function to be decorated.

    Returns:
        callable: Return decorated function.
    """

    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        if is_main_process():
            return func(*args, **kwargs)

    return wrapper

4.3 下一个PR

看了看,感觉这个挺有意思: https://openmmlab.com/activity/codecamp

mmengine的高级任务,好像还没人被人领走的样子。
在这里插入图片描述

  • https://detectron2.readthedocs.io/en/latest/modules/data_transforms.html#detectron2.data.transforms.Transform.inverse
  • https://github.com/Project-MONAI/tutorials/blob/main/modules/inverse_transforms_and_test_time_augmentations.ipynb

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

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

相关文章

java实现5种不同的验证码图片,包括中文、算式等,并返回前端

导入以下依赖 <!--图片验证码--><dependency><groupId>com.github.whvcse</groupId><artifactId>easy-captcha</artifactId><version>1.6.2</version></dependency> 编写controller package com.anXin.user.controlle…

Tessy 4.3.18

Tessy 4.3.18 windows 2692407267qq.com&#xff0c;更多内容请见http://user.qzone.qq.com/2692407267/

【无标题】uniapp引入萤石云 真机无法运行 踩坑集合

Uniapp 接入萤石云 踩坑 1.先用了 UIKit Javascript 就是在 pc端 那套流程 npm install ezuikit-jsimport EZUIKit from ezuikit-js;这套流程貌似只适用于pc端&#xff0c;我在接入uniapp的时候没看官网 以为都是一套流程&#xff0c;然后就在uniapp中也来了这一套&#xff0…

vue+neo4j(neo4j desktop安装和使用)

vueneo4j&#xff08;neo4j desktop安装和使用&#xff09; 本文目录 vueneo4j&#xff08;neo4j desktop安装和使用&#xff09;官网下载安装基本使用创建项目新增数据库连接数据库 使用cypher构建简单知识图谱创建节点创建关系删除节点及关系查询节点和关系 数据导出为json文…

分布式锁(Redis分布式锁)

Redis分布式锁原理及应用 前言一、基本原理1.1 什么是分布式锁1.2 分布式锁满足的条件1.3 常见的分布式锁 二、Redis分布式锁的实现核心思路2.1 实现分布式锁时需要实现的两个基本方法2.2 核心思路 三、实现分布式锁版本四、Redis分布式锁误删情况说明4.1 逻辑说明4.2 解决方案…

FreeRTOS(4):软件定时器、中断管理

目录 一、延时函数 延时函数分类 vTaskDelay 与 HAL_Delay 的区别 二、软件定时器 什么是定时器&#xff1f; 软件定时器优缺点 软件定时器原理 软件定时器相关配置 单次定时器和周期定时器 1. 创建软件定时器 2. 开启软件定时器 3. 停止软件定时器 4. 复位软件定时…

【剑指 Offer 27】二叉树的镜像

题目&#xff1a; 请完成一个函数&#xff0c;输入一个二叉树&#xff0c;该函数输出它的镜像。 输入&#xff1a;root [4,2,7,1,3,6,9] 输出&#xff1a;[4,7,2,9,6,3,1] 输入输出样例 思考1&#xff1a; 二叉树的镜像&#xff0c;就是交换二叉树的每个节点的左右结点 所…

应用在多媒体手机中的低功率立体声编解码器

多媒体手机一般是指可以录制或播放视频的手机。多媒体的定义是多种媒体的综合&#xff0c;一般是图像、文字、声音等多种结合&#xff0c;所以多媒体手机是可以处理和使用图像文字声音相结合的移动设备。目前流行的多媒体概念&#xff0c;主要是指文字、图形、图像、声音等多种…

【数据结构】图文并茂,通过逻辑图带你轻松拿捏链表,实现各种接口功能(2)

君兮_的个人主页 勤时当勉励 岁月不待人 C/C 游戏开发 Hello,米娜桑们&#xff0c;这里是君兮_&#xff0c;我们接着之前讲过的顺序表来继续介绍初阶数据结构的内容&#xff0c;今天给大家带来的是有关链表的基本知识和各种接口功能的实现的第二部分。 好了&#xff0c;废话不…

Gitignore忽略文件

默认情况下&#xff0c;Git会监视我们项目中的所有内容&#xff0c;但是有些内容比如mode_modules中的内容&#xff0c;我们不希望他被Git所管理。 我们可以在我们项目目录中添加一个 .gitignore 文件来设置那些需要git忽略的文件。

Burpxss自动化测试工具validator配置和使用教程

一、配置教程 下载Phantomjs&#xff1a; http://phantomjs.org/download.html 下载xss.js https://github.com/nVisium/xssValidator 将xss.js和phantomjs.exe放在一起 利用phantomjs运行xss.js C:\xss>phantomjs.exe xss.js Bapp store里搜索xss validator,然后安装它 安…

基于jeecg-boot的flowable流程提供一种动态设置发起人部门负责人的方式

更多功能看演示系统 gitee源代码地址 后端代码&#xff1a; https://gitee.com/nbacheng/nbcio-boot 前端代码&#xff1a;https://gitee.com/nbacheng/nbcio-vue.git 在线演示&#xff08;包括H5&#xff09; &#xff1a; http://122.227.135.243:9888 这里给大家提供一种…

node.js系列-常见问题处理方案(持续更新)

问题1&#xff1a;nodejs 如何使用 atob、btoa 解决方案&#xff08;base64与uint8array转换&#xff09;&#xff0c;btoa和atob在nodejs中应该怎么写&#xff1f; 浏览器中我们可以这样使用&#xff1a; btoa(123456) MTIzNDU2 atob(MTIzNDU2) 123456node.js中实现方案 con…

国内GitHub加速访问工具-Fetch GitHub Hosts

一、工具介绍 Fetch GitHub Hosts是一款开源跨平台的国内GitHub加速访问工具&#xff0c;主要为解决研究及学习人员访问 Github 过慢或其他问题而提供的 Github Hosts 同步工具。 项目原理&#xff1a;是通过部署此项目本身的服务器来获取 github.com 的 hosts&#xff0c;而…

LeetCode //C - 289. Game of Life

289. Game of Life According to Wikipedia’s article: “The Game of Life, also known simply as Life, is a cellular automaton devised by the British mathematician John Horton Conway in 1970.” The board is made up of an m x n grid of cells, where each cell…

【雕爷学编程】MicroPython动手做(33)——物联网之天气预报

天气&#xff08;自然现象&#xff09; 是指某一个地区距离地表较近的大气层在短时间内的具体状态。而天气现象则是指发生在大气中的各种自然现象&#xff0c;即某瞬时内大气中各种气象要素&#xff08;如气温、气压、湿度、风、云、雾、雨、闪、雪、霜、雷、雹、霾等&#xff…

Prometheus + Grafana安装

Prometheus是一款基于时序数据库的开源监控告警系统&#xff0c;非常适合Kubernetes集群的监控。Prometheus的基本原理是通过HTTP协议周期性抓取被监控组件的状态&#xff0c;任意组件只要提供对应的HTTP接口就可以接入监控。不需要任何SDK或者其他的集成过程。这样做非常适合做…

Gogs Git windos服务搭建指南

Gogs Git服务器搭建指南 背景&#xff1a; 近期在Linux 麒麟 v10 系统上开发&#xff1b;为了团队协同编程&#xff1b;选用了Git服务器&#xff1b;之前在windos开始时候使用的visualSVN server; visualSVN server从4.x.x.x开始收费&#xff1b;限制15个开发者用户&#xff…

带头循环双向链表详解

目录 一、什么是带头循环双向链表&#xff1f; 1.特点&#xff1a; 2.优点&#xff1a; 二、实现接口 1.前置准备 1.1需要的三个文件 1.2结构体的创建和头文件的引用 2.接口实现 2.1函数创建新节点 2.2打印链表内容 2.3尾插新节点 2.4头插新节点 2.5头删节点 2.6尾删…

Vue3_04_ref 函数和 reactive 函数

ref 函数 声明变量时&#xff0c;赋值的值要写在 ref() 函数中修改变量时&#xff0c;变量名.value xxx在模板中使用时可以省略掉 .value&#xff0c;直接使用变量名即可 <template><h1>一个人的信息</h1><h2>姓名&#xff1a;{{name}}</h2><…