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

文章目录

  • 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_WrapN2at6TensorEReferenced from: <4A5BF6D7-5700-3E99-BE86-F6A605E8425D> ~/mmcv/_ext.cpython-37m-darwin.soExpected 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.rhkb.cn/news/73301.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

item_get-小红薯-商品详情

一、接口参数说明&#xff1a; item_get-获得小红薯商品详情&#xff0c;点击更多API调试&#xff0c;请移步注册API账号点击获取测试key和secret 公共参数 名称类型必须描述keyString是调用key&#xff08;http://o0b.cn/iimiya&#xff09;secretString是调用密钥api_nameS…

中国农村程序员学习此【ES6】购买大平层,开上帕拉梅拉,迎娶白富美出任CEO走上人生巅峰

注&#xff1a;最后有面试挑战&#xff0c;看看自己掌握了吗 文章目录 比较 var 和 let 关键字的作用域--var可能被随时覆盖-全局变量for循环全局作用域函数作用域块作用域循环作用域HTML 中的全局变量提升改变一个用 const 声明的数组防止对象改变使用箭头函数编写简洁的匿名函…

CPU密集型和IO密集型任务的权衡:如何找到最佳平衡点

关于作者&#xff1a;CSDN内容合伙人、技术专家&#xff0c; 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 &#xff0c;擅长java后端、移动开发、人工智能等&#xff0c;希望大家多多支持。 目录 一、导读二、概览三、CPU密集型与IO密集型3.1、CPU密集型3.2、I/O密…

list遍历添加条件同时修改元素

list遍历添加条件同时修改元素 方式一 // 遍历list同时修改元素List<Person> list new ArrayList(16);list.add(new Person("小王", 18));list.add(new Person("小三", 17));list.stream().filter(item -> item.getAge() > 17).forEach(item…

Linux系统使用(超详细)

目录 Linux操作系统简介 Linux和windows区别 Linux常见命令 Linux目录结构 Linux命令提示符 常用命令 ls cd pwd touch cat echo mkdir rm cp mv vim vim的基本使用 grep netstat Linux面试题 Linux操作系统简介 Linux操作系统是和windows操作系统是并列…

docker 安装 字体文件

先说一下我当前的 场景 及 环境&#xff0c;这样同学们可以先评估本篇文章是否有帮助。 环境&#xff1a; dockerphp8.1-fpmwindows 之所以有 php&#xff0c;是因为这个功能是使用 php 开发的&#xff0c;其他语言的同学&#xff0c;如果也有使用到 字体文件&#xff0c;那么…

uniapp echarts 点击失效

这个问题网上搜了一堆&#xff0c;有的让你降版本&#xff0c;有的让你改源码。。。都不太符合预期&#xff0c;目前我的方法可以用最新的echarts。 这个方法就是由npm安装转为CDN&#xff0c;当然你可能会质疑用CDN这样会不稳定&#xff0c;那如果CDN的地址是本地呢&#xff1…

Stable Diffusion - Stable Diffusion WebUI 支持 SDXL 1.0 模型的环境配置

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/132056980 SDXL 1.0 版本 是 Stable Diffusion 的最新版本&#xff0c;是基于潜在扩散模型的文本到图像生成技术&#xff0c;能够根据输入的任何文…

uniapp小程序自定义loding,通过状态管理配置全局使用

一、在项目中创建loding组件 在uniapp的components文件夹下创建loding组件&#xff0c;如图&#xff1a; 示例代码&#xff1a; <template><view class"loginLoading"><image src"../../static/loading.gif" class"loading-img&q…

《ChatGPT原理最佳解释,从根上理解ChatGPT》

【热点】 2022年11月30日&#xff0c;OpenAI发布ChatGPT&#xff08;全名&#xff1a;Chat Generative Pre-trained Transformer&#xff09;&#xff0c; 即聊天机器人程序 &#xff0c;开启AIGC的研究热潮。 ChatGPT是人工智能技术驱动的自然语言处理工具&#xff0c;它能够…

make/makefile的使用

make/makefile 文章目录 make/makefile初步认识makefile的工作流程依赖关系和依赖方法make的使用 总结 make是一个命令&#xff0c;是一个解释makefile中指令的命令工具&#xff0c;makefile是一个文件&#xff0c;当前目录下的文件&#xff0c;两者搭配使用&#xff0c;完成项…

6.物联网操作系统信号量

一。信号量的概念与应用 信号量定义 FreeRTOS信号量介绍 FreeRTOS信号量工作原理 1.信号量的定义 多任务环境下使用&#xff0c;用来协调多个任务正确合理使用临界资源。 2.FreeRTOS信号量介绍 Semaphore包括Binary&#xff0c;Count&#xff0c;Mutex&#xff1b; Mutex包…

【Spring Boot】单元测试

单元测试 单元测试在日常项目开发中必不可少&#xff0c;Spring Boot提供了完善的单元测试框架和工具用于测试开发的应用。接下来介绍Spring Boot为单元测试提供了哪些支持&#xff0c;以及如何在Spring Boot项目中进行单元测试。 1.Spring Boot集成单元测试 单元测试主要用…

【Python小笔记】零碎同步

1.多字段连接&#xff0c;连接字段名不一致–left_on\right_on对应列示后可匹配 import pandas as pd df_A1pd.read_excel(E:\Mercy\data\mytest\A.xlsx,sheet_name0) df_A2pd.read_excel(E:\Mercy\data\mytest\A.xlsx,sheet_name1)df_Adf_A1.merge(rightdf_A2,howleft,left_o…

spring-cache框架使用笔记

spring-cache框架使用笔记 什么是spring-cache框架 spring-cache是spring框架中的一个缓存抽象层&#xff0c; 它提供了一种简便的方式来集成不同的底层缓存实现&#xff0c; 如内存缓存(concurrentMap/ehcache/caffeine)/分布式缓存(redis/couchbase)等 它简化了在app中使用…

哈工大计算机网络课程网络安全基本原理之:身份认证

哈工大计算机网络课程网络安全基本原理之&#xff1a;身份认证 在日常生活中&#xff0c;在很多场景下我们都需要对当前身份做认证&#xff0c;比如使用密码、人脸识别、指纹识别等&#xff0c;这些都是身份认证的常用方式。本节介绍的身份认证&#xff0c;是在计算机网络安全…

【机器学习】分类算法 - KNN算法(K-近邻算法)KNeighborsClassifier

「作者主页」&#xff1a;士别三日wyx 「作者简介」&#xff1a;CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」&#xff1a;零基础快速入门人工智能《机器学习入门到精通》 K-近邻算法 1、什么是K-近邻算法&#xff1f;2、K-近邻算法API3、…

Tessy 4.3.18

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

使用GGML和LangChain在CPU上运行量化的llama2

Meta AI 在本周二发布了最新一代开源大模型 Llama 2。对比于今年 2 月发布的 Llama 1&#xff0c;训练所用的 token 翻了一倍&#xff0c;已经达到了 2 万亿&#xff0c;对于使用大模型最重要的上下文长度限制&#xff0c;Llama 2 也翻了一倍。 在本文&#xff0c;我们将紧跟趋…