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

弱监督语义分割学习计划(2)-使用CoT进行Open Vocabulary Label简单实现类激活图

零: 项目说明

是这样的一个事情,经过与deepseek的一番讨论和交流,DeepSeek为我设计了一个30天高强度学习计划,重点聚焦弱监督/无监督语义分割在野外场景的应用,结合理论与实践,并最终导向可落地的开源项目。目前开始了计划学习的第一天:

主要想法是做基于大模型的弱监督语义分割,主要步骤如下:

  • 自动生成标注:大模型生成图像级标签边框涂鸦点标注等几种弱监督标注类型的标注:
  • 生成伪标签:采用基于类激活图(CAM, Class Activation Mapping)的方法 + CRF后处理,利用分类网络生成伪标签pseudo
  • 训练分割模型:将伪标签作为监督信号,训练U-NetDeepLabv3+等分割网络。

代码在这里:不断改进中:
https://github.com/Tipriest/30Days-for-segmentation


参考引用:

https://zhuanlan.zhihu.com/p/29567314

一: 采用思维链Cot优化大模型的image label效果:

在上一篇文章中,主要采用了直接通过CLIP模型+阈值判断的方法和通过VLM模型:llava两种方法来对地形数据集的图片进行Image Level标注,如下图所示:
在这里插入图片描述

主要发现了如下问题:

  • CLIP模型对于主体的要求很高,当一个场景具有多个主体的时候,CLIP模型会拉低每一个图片中存在的物体的分类判断阈值。

  • 直接使用llava模型在召回率上甚至不如CLIP,对于很多特殊的地形场景如curd往往没有输出,导致某一些召回率可能很低。

  • 尝试采用思维链的方式进行优化:
    在这里插入图片描述
    比如,对于下面的这张图片
    在这里插入图片描述
    使用如上述所示的思维链的方式进行输出的结果如下所示:

Processing 4/60: ./steps/1_preprocess/key_frames/000202.jpg
 The image shows a patch of land with various elements that could be described from the perspective of the terrain. 
 There is no concrete road or paved paths visible in this particular section of the image. Instead, there appears 
 to be bare soil with some patches of grass and weeds growing on it. The color of the soil is a mix of brown and 
 gray, indicating it might be compacted dirt or soil that has been disturbed or left untended for some time.

There are no visible curbs or other distinctive features that would suggest a paved path or road nearby. In terms 
of colors, the soil predominantly appears in shades of brown and gray, while the patches of grass and weeds have 
varying tones of green. The image does not show any water bodies, nor is there any indication of yellow or 
red paved paths that might be adjacent to this area.

The perspective of the photo seems to be taken from a low angle looking up at the terrain, which gives an 
impression of the ground being uneven and unkempt. The overall scene suggests an outdoor setting with 
natural elements rather than urban infrastructure.
{"annotations": ["soil", "curb"]}

翻一下,大致是这样的结果:

处理4/60:./steps/1_preprocess/key_frames/000202.jpg
图像显示了一块土地,带有各种元素,可以从地形的角度描述。 图像的这一特定部分中没有可见的混凝土路或铺路路径。
取而代之的是,似乎有一些裸露的土壤,其中有一些草和杂草在上面生长。土壤的颜色是棕色和灰色的混合物,表明它可能是压实的污垢或土壤,
这些污垢或土壤已被打扰或没有一段时间。在颜色方面,土壤主要出现在棕色和灰色的阴影中,而草和杂草的斑块则具有不同的绿色色调。
该图像没有显示任何水体,也没有任何迹象表明可能与该区域相邻的黄色或红色铺路路径。整个场景表明,室外设置具有自然要素,而不是城市基础设施。

{"annotations": ["soil", "curb"]}

目前使用思维链的方式确实有了一定召回率上的提示,相比于原来的直接用VLM输出结果,但是结果还不够好,这个后续再继续优化…

二: 关于类激活图:

Michael Yuan佬在自己的知乎上发表过一个非常易懂的关于类激活图的科普文章,这里借用一下佬的两张动图来直观说明一下:
CAM 指的是经过加权的特征图集重叠而成的一个特征图。它可以显示模型做出分类决策的依据主要来自于特征图集中的哪些特征图。(可以结合下面这张Michael Yuan佬画的图来理解)
在这里插入图片描述
由于采用迁移学习策略,因而整个模型在训练时,会发生变化的参数只有分类器的权重矩阵 ,因此对于同一张图片,卷积层输出的特征图集始终不变,但分类概率会随着权重矩阵的变化而不断改变。这也就是模型学习的过程,即:到底哪些特征图对于提高分类准确率最有帮助?

可以看到,模型做出分类决策的依据来源于权重矩阵。那么如何进行可视化呢?
矩阵本身只是一堆大小不一的权值而已,并不直观。不过我们可以注意到,权重矩阵对图像的理解基于对特征向量的加权,而特征向量背后是一个个特征图,因此可以跳过特征向量,直接将这些特征图用权重矩阵加权,再重叠合成为一张特征图,就可以很直观的看到到底模型是通过看哪片区域来做出判断的。
我在我的野外环境的数据集上,根据图像级标注生成的类激活图的效果,可以看到类激活图关注的主要是一个点而非全部,类似的类激活图也比较难用在我的语义分割伪标签生成任务中,后面的CRF过程会很麻烦。
在这里插入图片描述
在这里插入图片描述
目前我的类激活图的效果还并不好,理想的状态应该是如下的:

类别激活图示意图(文字描述)合理性判断标准
马路左侧大面积均匀暖色区域,渐冷至右侧边缘覆盖真实马路区域,无侵入其他类别
车道线中间细长亮黄色线条,周围马路区域为冷色线状激活宽度与实际车道线匹配
马路牙子右侧边缘窄条状高激活,分隔马路与红砖地严格沿垂直方向分布,无横向扩散
红砖地右侧斑块状/网格状激活,与马路牙子激活相邻纹理匹配,不污染左侧马路区域

因为类激活图做的人还是很多的,所以一些可能的改进方案如下:

  • 分辨率限制:传统CAM基于最后一个卷积层,可能导致激活图粗糙(如车道线变粗)。可尝试:

    • Grad-CAM++:增强细粒度结构的激活灵敏度

    • HiResCAM:保留更高空间分辨率

  • 多类别混淆:若多个类别同时高激活(如红砖地与马路牙子重叠),可能需要:

    • 逐类别生成CAM(每个类别单独可视化)

    • 结合注意力机制可视化(如Transformer-based模型的Attention Rollout)

  • 语义分割专用CAM:对于分割模型(如DeepLab、UNet),建议:

    • 使用SegCAM或Pixel-wise CAM直接关联像素级预测

    • 可视化中间层特征图(观察低级边缘/纹理特征)

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

相关文章:

  • 【AD】3-10 原理图PDF导出
  • 【多模态大模型论文精读】MOSHI:双工实时语音对话大模型
  • java之运算符
  • 大白话TypeScript 第九章:TypeScript 项目的优化、测试与发布
  • 计算机网络概述
  • Apache IoTDB 树表双模型直播回顾(下)
  • 专线物流公共服务平台:全面提升专线物流效率
  • 【linux】详谈 环境变量
  • 基于Transformers的文本相似度
  • 小红书自动评论
  • 大模型—如何从huggingface上下载并调用模型
  • 每天一个Flutter开发小项目 (8) : 掌握Flutter网络请求 - 构建每日名言应用
  • RuoYi框架介绍,以及如何基于Python使用RuoYi框架
  • DeepSeek 使用窍门与提示词写法指南
  • Spark基础篇 RDD、DataFrame与DataSet的关系、适用场景与演进趋势
  • 聊聊Java的SPI机制
  • SocketCAN(linux中启用CAN)
  • fs 文件系统模块
  • linux-docker及docker-compose相关命令
  • 驱动开发系列40 - Linux 显卡驱动KMD代码分析(一) - 设备初始化过程
  • langchain4j+local-ai小试牛刀
  • 辛格迪客户案例 | 鼎康生物电子合约系统(eSign)项目
  • 基于Kerberos认证对接华为云Elasticsearch
  • 【时序预测】在线学习:算法选择(从线性模型到深度学习解析)
  • (南京观海微电子)——倍压设计与应用
  • Python----数据分析(Numpy:安装,数组创建,切片和索引,数组的属性,数据类型,数组形状,数组的运算,基本函数)
  • 【大模型】fp32 和 fp16 的区别,混合精度的原理。
  • 中科大计算机网络原理 1.5 Internt结构和ISP
  • OSI七层模型:从入门到精通的全面解析
  • ES from size聚合查询10000聚合查询,是每个分片先聚合,再统计。还是所有节点查询1万条后,再聚合