SCNN(Spatial CNN) 模型学习记录

article/2025/8/14 20:59:41

目录

1.模型架构

2.核心模块SCNN_*分析


       SCNN(Spatial As Deep: Spatial CNN for Traffic Lane Detection)是一种专为交通车道线检测任务设计的深度神经网络架构,由中国科学院计算技术研究所提出,旨在在语义分割框架中增强空间信息的传播能力,特别适用于车道线这样细长、连续目标的检测。

论文连接:[1712.06080] Spatial As Deep: Spatial CNN for Traffic Scene Understanding

代码连接:

    • GitHub - XingangPan/SCNN: Spatial CNN for traffic lane detection (AAAI2018)   (作者官方实现)
    • GitHub - cardwing/Codes-for-Lane-Detection: Learning Lightweight Lane Detection CNNs by Self Attention Distillation (ICCV 2019)   (包含多种 lane detection 方法)

核心思想

      传统的卷积神经网络(CNN)主要处理局部感受野,难以捕捉长距离的空间依赖,而车道线具有连续性强、形状细长的特点。SCNN 提出在 feature map 的空间维度上进行类似“层间传播”的处理,增强特征图在水平方向、垂直方向上的信息流动。

1.模型架构

SCNN模型架构整体结构:

Input Image↓
Backbone CNN(如 VGG16)↓
Feature Map [C × H × W]↓
SCNN Module(四方向空间传播)↓
Feature Enhancement↓
Output Layer(如分割、分类)

Backbone CNN:

  • 一般使用标准的 CNN,如 VGG16、ResNet-18/34 等;

  • 主要负责提取基础的图像特征;

  • 输出 shape: [B, C, H, W]

SCNN 模块

       在特征图上沿某个方向逐行/逐列地信息传播,类似 RNN。

       共有四个方向的传播模块:Downward(D)、Upward(U)、Rightward(R)、Leftward(L)

输出层:

  • 通过 1x1 卷积 将增强后的特征图降维;

  • 若为二分类(如车道线 vs 非车道线),输出通道为 1;

  • 通常带有:

    • BatchNorm

    • 激活函数(如 ReLU)

    • 上采样(恢复到原图大小)

2.核心模块SCNN_*分析

        SCNN的核心是在特征图的垂直方向上(从上到下)进行跨行的信息传播,使得像素点在竖直方向上可以感受到更大的上下文区域。处理方式并不是完全替代卷积层,而是在已有的 CNN 结构中嵌入一个“空间卷积”模块,其操作流程如下:

  1. 沿某个空间维度(例如从上到下)逐行传播;
  2. 当前行的特征受到上一行的影响;
  3. 以残差连接的形式完成传播;
  4. 对上下左右四个方向分别做一次 SCNN;
  5. 最终实现信息在空间域上的深层传递。

这类似于将一维的 RNN 沿空间维度展开,但效率更高、计算复杂度更低。

(Top→Bottom、Bottom→Top、Left→Right、Right→Left)

模块儿输入 & 输出形状

  • 输入特征图:形状为 C × H × W
  • 输出特征图:形状仍为 C × H × W

SCNN 不改变特征图尺寸,只增加其空间上下文建模能力。

以SCNN_D层为例了解处理步骤:(向下传播的空间卷积)

  1. 沿 Height 方向拆分
    • 将特征图拆成 H 个 slice(每一行,shape 为 C × W)。
  2. 逐行传播(从第2行到最后一行)
    • 从第2行开始,每一行与上一行进行融合。
    • 融合方式:
      • 将前一行的输出通过一层带偏置的一维卷积(跨通道)处理;
      • 加到当前行的特征上(残差连接);
      • 通常再经过非线性激活(如 ReLU)。
  3. 用共享卷积核进行空间信息传播
    • 卷积核大小:C × w,其中 w 是横向(一维)卷积宽度;
    • 用 C 个核对每一行做一维卷积,融合上一行的信息。

第一层slice做的事情:

  • 原始 feature map 是 C × H × W(通道数 × 高 × 宽);
  • 拆成 H 个 slice,意味着每个 slice 是 C × W(固定某一行);
  • 现在拿一个 C × W 的 slice,去做一个卷积;
  • 卷积核是 C × w,总共有 C 个卷积核(输出C个通道);

这里需要注意每个卷积核是 C × w,长度是C,宽度w。对slice做卷积得到是一维特征图。一共有C个卷积核(等于有C个输出通道)。

伪代码:

for i in range(1, H):msg = Conv1D(slice[i - 1])        # C个卷积核,核大小 C × wslice[i] = slice[i] + msg         # 残差加法融合slice[i] = ReLU(slice[i])         # 非线性激活(可选)

其余方向的处理:

模块名称

英文方向

中文含义

数据遍历方向

每步计算来源

SCNN_D

Downward

向下传播

从第 1 行 → 第 H 行

来自上一行(i−1)

SCNN_U

Upward

向上传播

从第 H 行 → 第 1 行

来自下一行(i+1)

SCNN_R

Rightward

向右传播

从第 1 列 → 第 W 列

来自左侧列(j−1)

SCNN_L

Leftward

向左传播

从第 W 列 → 第 1 列

来自右侧列(j+1)

各方向的具体流程(类比 SCNN_D)

1. SCNN_D(Downward)

  • 拆分为 H 个 C × W 的 slices(按行划分);
  • 从上往下(1 → H)遍历;
  • 每一行接收上一行的信息;
  • 用 1D 卷积 + 残差加法融合。

2. SCNN_U(Upward)

  • 同样拆分为 H 个 C × W 的 slices;
  • 但从下往上(H → 1)遍历;
  • 每一行接收下一行的信息;
  • 卷积方向相同(都是横向做一维卷积),只是遍历方向相反(即处理的行顺序反了过来(D 从上往下,U 从下往上)。

它与 SCNN_D 是对称操作。

3. SCNN_R(Rightward)

  • 拆分为 W 个 C × H 的 slices(按列划分);
  • 从左往右(1 → W)遍历;
  • 每一列接收左边一列的信息;
  • 使用 C × h 的卷积核(h 是竖直方向核高);
  • 融合后仍保留输出为 C × H × W。

4. SCNN_L(Leftward)

  • 同样拆成 W 个 C × H 的 slices;
  • 从右往左(W → 1)遍历;
  • 每一列接收右边列的信息;
  • 卷积和融合方式类似于 SCNN_R。

模块效果直观解释

场景

传统 CNN

SCNN

车道线很长(上下方向延展)

感受野不够

SCNN_D/U 可以让上下文关联

车道线并行(左右方向延展)

空间关系弱

SCNN_L/R 可以增强列之间的联系

弯道或遮挡

难以识别连续结构

SCNN 传播机制可以传递线索,从未遮挡区域“推理”出被遮挡部分


http://www.hkcw.cn/article/cNWcHsoRWS.shtml

相关文章

Lerobot框架使用(含本地数据训练)

本文包含从安装环境到完整使用Lerobot框架进行算法复现全流程。 A Install LeRobot 安装miniconda管理python环境 Linux mkdir -p ~/miniconda3 wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda3/miniconda.sh bash ~/minicon…

小红书 web x-s x-t X-Mns 分析

声明: 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 逆向分析 cp execjs.compile(open(v…

国产化中间件基本使用_东方通(TongWeb7.0.E.6_P2)

tongweb开发操作文档 1、前期准备 进入官网申请使用,官网地址:https://www.tongtech.com 若提供的安装程序的授权文件已过期,请去官方网站重新申请。 2、安装部署 2.1、下载安装Tongweb 进入官网申请试用,官方会提供响应的嵌入式安装包及试用授权证书(3个月) 申请…

010302-oss_反向代理_负载均衡-web扩展2-基础入门-网络安全

文章目录 1 OSS1.1 什么是 OSS 存储?1.2 OSS 核心功能1.3 OSS 的优势1.4 典型使用场景1.5 如何接入 OSS?1.6 注意事项1.7 cloudreve实战演示1.7.1 配置cloudreve连接阿里云oss1.7.2 常见错误1.7.3 安全测试影响 2 反向代理2.1 正向代理和反向代理2.2 演示…

FREERTOS+LWIP+IAP实现TCP、HTTP、网页访问并固件升级、更新配置 (三)lwip实现httpd服务并在web访问

前言 在前两篇文章中配置freeRTOS和,并实现了TCP、UDP的通信协议,现在终于轮到重头戏lwip的httpd服务,LWIP官方例程中是有很多自带的网页的,但是远远不够满足实际项目的使用需求,因此我也是踩了很多坑,从前…

lighthouse(灯塔)前端性能测试工具

前端性能测试工具之lighthouse灯塔 介绍下载链接使用方法前端性能指标解读 介绍 Lighthouse 是一个开源的自动化工具,用来测试前端页面性能,反馈页面问题以提升页面体验。可以联合谷歌浏览器,作为插件导入,开启后可测试页面性能 …

Ai智能体四:互动式 AI 聊天助手:前端实现

在现代 web 应用中,集成智能对话功能已经成为提升用户体验的重要手段之一。本文将介绍如何通过 Vue 3 和 Element Plus 构建一个高效的 AI 聊天助手界面,并详细讲解其实现原理和功能。 1. 整体架构 该聊天界面分为 左侧边栏 和 右侧内容区域,实现了清晰的布局结构,左侧边…

Spring Boot 3.x 引入springdoc-openapi (内置Swagger UI、webmvc-api)

接触的原因 因开发自己的项目时,写接口文档很繁琐,查到后端都在用swagger等接口工具来记录接口文档,于是学习了一下,本文记录个人配置过程,有问题欢迎指正交流😁 Swagger: Swagger是一种Rest AP…

OpenWebUI配置异常的外部模型导致页面无法打开

一、使用Ollama关闭OpenAI OpenWebUI自带OpenAI的API设置,且默认是打开的,默认情况下,启动后,会不断的去连https://api.openai.com/v1,但是无法连上,会报错,但是不会影响页面,能正常…

Postman(Apifox)调用WebServicer接口

postman调用WebServicer接口 前言 Postman使用方法Apifox使用方法参数与配置请求代码(当然一般开发会给一个样例)步骤 前言 之前都是使用SoapUI测试WebServicer接口,由于工作所需,需要使用Postman测试工具 Postman使用方法 可以直接在请求里写全部的wsdl地址 ,参数会自动带进…

DeepSeek本地化部署实践:Xinference框架+OpenWebUI实现DeepSeek-r1推理跑在国产GPU之上

近日,我部门从供应商那儿借来一台高算力服务器,用来尝试本地化部署DeepSeek。该服务器型号为ASUS ESC8000A-E11,具体配置如下: CPU:AMD EPYC 7702(64核)* 2 GPU:(天数智…

Android WebRTC集成及JNI性能优化实战指南

本文还有配套的精品资源,点击获取 简介:WebRTC是一个开源项目,旨在实现浏览器间无需插件的实时通信,包括音频、视频通话及数据共享。在Android平台上,其实施涉及使用JNI接口进行Java与C/C代码的交互。本压缩包内容预…

【前端】超链接标签(a标签)之href属性、target属性

文章目录 一、a标签1、href属性(1)跳转至网络链接页面(2)跳转至其它工程页面(3)跳转至本界面 2、target属性 二、感谢观看! 一、a标签 a标签即超链接标签,根据名字我们就能知道它是…

【前端开发】一文带你快速入门JavaScript(下)Web 前端必备程序语言 | 条件语句与循环结构

💯 欢迎光临清流君的博客小天地,这里是我分享技术与心得的温馨角落 💯 🔥 个人主页:【清流君】🔥 📚 系列专栏: 运动控制 | 决策规划 | 机器人数值优化 📚 🌟始终保持好奇心&…

教你在.Net8.0的WinForm中使用WebView2,实现C#和JavaScript的实时双向互操作

1. 前言 随着 Web 技术的发展,使用网页内容(HTML、JavaScript、CSS 等)作为桌面应用程序的一部分变得越来越常见。在 C# WinForm 中,Microsoft 提供的 WebView2 控件让我们可以轻松地嵌入 Chromium 浏览器,并实现 C# …

【多线程初阶】synchronized锁

文章目录 🌅synchronized关键字🌊 synchronized 的互斥🌊 synchronized 的变种写法🏄‍♂️synchronized 修饰代码块 :明确指定锁哪个对象🏄‍♂️synchronized 修饰方法 🌊 synchronized 的可重入性&#…

使用 Cython 编译将.py文件加密成.so文件

文章目录 1. .so文件的核心意义和优势2. 使用 Cython 编译,将.py文件加密成.so文件 最近在学习在服务器上如何部署Python模型,不学不知道,一学吓一跳,要学好多啊,最近看到什么就记录一下什么吧。 1. .so文件的核心意义…

环赛里木湖公路自行车赛开赛 速度与激情点燃丝路热土

5月31日上午10时,中国新疆第十七届环赛里木湖(国际)公路自行车赛在精河县鸣枪开赛。首段比赛全长83.1公里,以速度与激情点燃了“中国枸杞之乡”精河县的丝路热土。骑手们从精河县出发,沿精阿高速疾驰,穿越艾比湖湿地和甘家湖梭梭林国家级自然保护区。开赛后仅10分钟,在顺…

南京大学通报施工方偷窃物品 施工单位被罚2000元

5月29日,南京大学基本建设处发布了一份关于对南京诚善科技有限公司执行合同违约金的通报。通报指出,南京大学三校区公共区域饮水机采购及安装项目的施工单位南京诚善科技有限公司的一名员工于5月13日在学校宿舍楼内偷窃学生物品。根据施工合同相关规定并经处办公会研究确认,…

java 反射 枚举与lambda表达式

目录 一.反射 1.概念:在运⾏时检查、访问和修改类、接⼝、字段和⽅法的机制 2.Class类 3.反射相关的类型 4.各类型对应的方法 ​编辑 5.代码示例 (1).class类方法 (2).Field类方法 (3).Constructor类方法 (4).Method类方法 6.总结 二.枚举 1.概念&#x…