论文阅读笔记——STDC-Seg

本文介绍了作者在BiSeNet基础上改进的STDC网络,该网络优化了架构,实现了更快的运算速度和更高的语义分割精度。作者针对BiSeNet中spatialpath的效率问题,设计了两种不同尺度的STDC模块,其中一个进行下采样。网络分为6个stage,早期stage用于特征提取,后期stage采用STDC模块。训练时通过SegHead和DetailHead两个head计算损失,DetailHead专门处理边缘信息,使用dice loss和binary cross-entropy结合来解决样本不平衡问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 作者参考了BiSeNet,并在其基础上对模型的架构进行了改进,达到了取得了更快的速度和更高的精度(没有提到显存占用,经测试,STDC2_50在转为trt后,显存占用大致在900M左右)
  • BiSeNet的设计是一个双流网络,spatial path用于提取图像的细节信息,semantic path用于提取语义信息
  • 作者认为额外的spatial path会消耗更多的时间,而且是从其他预训练任务(如图像分类)中“借”来的backbone,并不是针对于语义分割任务设计的。
  • 作者设计了两种STDC模块,一种保持输入尺寸不变,另一种则利用了一个stride为2的conv进行了一次下采样,使输出尺寸是输入尺寸的1/2。
  • 整个网络分为6个stage
    • 第1、2个stage中利用“卷积-BN-RELU”提取细节特征,第6个stage中是全连接层。
    • 第3~5个stage中分别包含了若干个STDC模块(数量不一定相同),但每个stage中只有第一个STDC模块进行了下采样,其余STDC模块均保持尺寸不变。每个stage中STDC模块的数量也是一个可调节的超参数。
  • 训练时通过两个head的输出计算损失
    • Seg Head:计算seg loss
    • Detail Head:对第3个stage输出的feature map,通过Detail Guidance模块计算detail loss。此处的Ground-truth是从原始的语义分割GT中提取出的“边缘”信息。
      • 提取GT的方法:分别以stride = 1、2、4的Laplacian Conv对原GT图进行卷积,再对后两者的结果进行上采样使其与stride = 1的尺寸一致,然后利用一个可学习的1 * 1卷积核对三个结果进行融合,得到一个单通道的GT图,再以0.1为阈值,将其转化为一个二值图。
      • detail loss:由于所提取的是物体边缘的轮廓信息,因此前景(边缘)与背景(非边缘)的像素数相差极大,因此采用了dice loss和binary cross-entropy的和作为detail loss,以缓解样本不均衡的问题。
03-11
<think>好的,用户之前询问了OpenLayers中Attribution控件的target属性,现在又问了“render”。我需要先确定他们指的是OpenLayers中的哪个render,因为可能有不同的上下文。根据之前的对话,用户可能是在问Attribution控件的render函数,或者是更通用的渲染概念。 首先,查看OpenLayers文档,Attribution控件确实有一个render方法,但用户可能是指控件配置中的render选项。在之前的回答中,我提到过可以结合target和render函数来自定义内容,所以用户可能对此感兴趣。 用户可能在使用Attribution控件时想要自定义版权的显示方式,比如修改HTML结构或样式。需要确认render的具体用法和参数,以及如何与现有配置结合。另外,用户可能遇到默认渲染不符合需求的问题,需要通过render来自定义。 接下来,要组织回答的结构。先介绍render的作用,再详细说明参数和使用方法,提供示例代码,特别是结合target的例子,并指出注意事项,比如性能问题和版本兼容性。还要比较默认渲染和自定义渲染的区别,帮助用户理解何时需要用到这个函数。 需要确保回答清晰,步骤明确,覆盖基本用法、高级定制和常见问题。同时,检查之前的回答是否有提到过render,避免重复,但需要深入展开。可能用户在使用target后,发现内容样式不符合,所以想通过render进一步调整,这时候需要展示如何两者结合使用。 另外,考虑用户可能的框架环境,比如Vue或React,是否需要提供框架中的示例?在之前的回答中有过Vue和React的例子,这里可能也需要提及,但重点还是在render函数本身。 最后,总结使用场景和注意事项,确保用户明白如何正确应用render函数,避免常见错误,比如修改DOM结构导致控件功能异常。</think>### **OpenLayers 控件中的 `render` 函数详解** 在 OpenLayers 中,`render` 是控件(如 `Attribution`、`ScaleLine` 等)的核心渲染函数,用于**控制控件内容的生成与更新逻辑**。通过自定义 `render` 函数,开发者可以完全掌控控件的 DOM 结构、样式和交互行为。 --- #### **一、`render` 函数的核心作用** | 特性 | 描述 | |-----------------------|----------------------------------------------------------------------| | **内容生成** | 定义控件初始化时的 HTML 结构 | | **动态更新** | 响应地图状态变化(如缩放、图层切换)时更新内容 | | **完全控制权** | 覆盖默认渲染逻辑,实现高度定制化 | | **性能优化** | 可选择性更新部分内容(通过事件对象控制) | --- #### **二、函数参数解析** `render` 函数的参数是一个事件对象,包含以下关键属性: ```javascript render(event) { // 事件对象结构 const { element, // 控件根元素(DOM 节点) frameState, // 地图当前帧状态(分辨率、范围等) map, // 关联的地图实例 size, // 地图容器尺寸 {width, height} ... // 其他控件特有属性(如 Attribution 的 attributions) } = event; } ``` --- #### **三、基础用法示例** ##### 1. **自定义 Attribution 内容** ```javascript import Attribution from &#39;ol/control/Attribution&#39;; const customAttribution = new Attribution({ // 覆盖默认渲染逻辑 render: (event) => { const attributions = Array.from(event.attributions) .map(attr => `<li>${attr}</li>`) .join(&#39;&#39;); event.element.innerHTML = ` <div class="custom-attribution-box"> <h4>数据来源</h4> <ul>${attributions}</ul> </div> `; } }); ``` ##### 2. **动态更新示例(随缩放级别变化)** ```javascript new ScaleLine({ render: (event) => { const zoom = event.frameState.viewState.zoom; event.element.innerHTML = `当前级别: ${zoom.toFixed(2)}`; } }); ``` --- #### **四、高级定制技巧** ##### 1. **与 `target` 属性协同使用** ```javascript // HTML 中定义容器 <div id="custom-container"></div> // 配置控件 new Attribution({ target: document.getElementById(&#39;custom-container&#39;), render: (event) => { event.element.style.backgroundColor = &#39;rgba(255,0,0,0.3)&#39;; event.element.innerHTML = event.attributions.join(&#39; | &#39;); } }); ``` ##### 2. **条件渲染优化性能** ```javascript let lastUpdate = 0; new Attribution({ render: (event) => { // 每 500ms 更新一次 if (Date.now() - lastUpdate > 500) { event.element.textContent = event.attributions.join(&#39;, &#39;); lastUpdate = Date.now(); } } }); ``` --- #### **五、关键注意事项** | 场景 | 处理方案 | |-----------------------|--------------------------------------------------------------------------| | **DOM 操作冲突** | 避免直接操作非 `event.element` 的 DOM 节点 | | **性能消耗** | 复杂渲染逻辑建议配合 `requestAnimationFrame` 使用 | | **默认样式丢失** | 手动添加必要 CSS 类(如 `ol-attribution`)以保持基础样式 | | **控件交互** | 自定义内容时需重新实现折叠/展开等交互逻辑(如需要) | --- #### **六、与默认渲染的对比** | 特性 | 默认渲染 | 自定义 `render` | |---------------------|-----------------------------------|---------------------------------------| | **内容结构** | 固定模板 | 完全自由定义 | | **更新频率** | 地图状态变化时自动更新 | 可手动控制更新时机 | | **样式控制** | 依赖 OpenLayers 主题 | 完全自主控制 | | **交互复杂度** | 内置交互逻辑 | 需手动实现交互功能 | --- ### **总结** - **核心价值**:`render` 函数是 OpenLayers 控件系统的底层扩展点,适用于: - 需要完全自定义控件外观 - 实现动态数据绑定 - 优化高频更新的性能 - **典型场景**: - 创建品牌化信息框 - 开发数据仪表盘控件 - 实现动画效果 - 集成第三方 UI 库 - **版本兼容性**:适用于 OpenLayers v4+(不同版本的事件对象属性可能略有差异)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王大梨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值