news 2026/4/16 10:48:24

深度学习FCN代码查漏补缺笔记(一)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
深度学习FCN代码查漏补缺笔记(一)
  • torch.rand() 是均匀采样,采样范围为0~1,torhc.randn是正太分布,均值为0,方差为1

函数分布均值方差取值范围
torch.rand均匀分布 U(0,1)0.51/12 ≈ 0.083[0, 1)
torch.randn标准正态分布 N(0,1)01(−∞, +∞)
X=torch.rand(size=(1,3,320,480))

✅ 正确的部分:

  • 形状解释是对的:
    • 1:batch size(批量大小)
    • 3:通道数(例如 RGB 图像的 3 个通道)
    • 320:高度(height)
    • 480:宽度(width)
      所以这是一个典型的 单张彩色图像 的张量表示(batch=1)。

X = torch.rand(size=(1, 3, 320, 480)) 创建了一个形状为 (1, 3, 320, 480) 的张量,其中每个元素是独立地从 [0, 1) 区间上的均匀分布 中随机采样的。它常用于模拟一张 batch size 为 1、3 通道、高 320、宽 480 的图像数据,但像素值范围是 [0,1),而非标准正态分布。

  • 降低通道数量,不改变高宽的代码(增加1x1卷积网络层,)

net.add_module('final_conv',nn.Conv2d(512,num_classes,kernel_size=1))
  • 向网络 net 中添加了一个名为 ‘final_conv’ 的 1×1 卷积层。
  • 该层将 输入的 512 个通道 映射为 21 个输出通道(对应 21 个类别)。
  • 空间分辨率(H × W)保持不变,因为卷积核大小为 1×1 且默认无 padding/stride 改变尺寸。
  • 批量大小(batch size)由输入数据决定,不是卷积层的参数。

补充说明(应用场景):
这种结构常见于全卷积网络(FCN)用于语义分割:

  • 主干网络(如 ResNet)提取出 (B, 512, H, W) 的高层特征;

  • 最后的 1×1 卷积将通道数变为类别数,得到 logits (B, 21, H, W);

  • 后续通常接 softmax 或 cross_entropy_loss 进行像素级分类。

  • 转置卷积的代码

net.add_module('transpose_conv', nn.ConvTranspose2d(num_classes, num_classes, kernel_size=64, padding=16, stride=32))

nn.ConvTranspose2d(num_classes, num_classes, kernel_size=64, padding=16, stride=32)

  • 是一个通道数保持不变(in=out=num_classes)的转置卷积层;
  • 用于将空间分辨率放大 32 倍(高和宽都 ×32);
  • 参数经过精心设计,使得输出尺寸恰好为输入的 32 倍,常用于语义分割模型的最后一层上采样(如 FCN-32s);
  • 批量大小(batch size)仍然由输入决定,不是该层的参数。

📝 补充建议:
虽然这种大核转置卷积在早期 FCN 中使用,但现代方法(如 DeepLab、U-Net)更倾向于使用:

  • 双线性插值 + 小卷积

  • 或多个小步长转置卷积堆叠(如 stride=2 多次)
    以减少计算量和伪影。

  • 双线性插值核(初始化转置卷积核权重,节省训练时间)

这是一个 用于初始化转置卷积(ConvTranspose2d)权重的双线性插值核(bilinear upsampling kernel),常用于语义分割中替代随机初始化的上采样层,以实现平滑、可学习但初始为插值行为的上采样。

defbilinear_kernel(in_channels,out_channels,kernel_size):factor=(kernel_size+1)//2ifkernel_size%2==1:center=factor-1else:center=factor-0.5og=(torch.arange(kernel_size).reshape(-1,1),torch.arange(kernel_size).reshape(1,-1))filt=(1-torch.abs(og[0]-center)/factor)*\(1-torch.abs(og[1]-center)/factor)weight=torch.zeros((in_channels,out_channels,kernel_size,kernel_size))weight[range(in_channels),range(out_channels),:,:]=filtreturnweight
  • 这个函数生成一个双线性插值上采样核,用于初始化 ConvTranspose2d 的权重。
  • og 是坐标网格的行/列索引(用于构建二维位置)。
  • filt 是一个非负的、中心对称的、峰值在中心的二维核,值域为 [0, 1]。
  • 没有负数,不是 -1 到 1,也不是“先正后负”。因为先算括号里面的,再计算除法,再计算减法
  • 当用作转置卷积权重时,它能实现近似双线性插值的上采样效果(尤其当 stride = kernel_size / 2 时)。

📌 应用场景示例:
假设我们有一个 1/8 下采样的特征图,想上采样回原图尺寸

conv_trans = nn.ConvTranspose2d(21, 21, kernel_size=16, stride=8, padding=4, bias=False) conv_trans.weight.data = bilinear_kernel(21, 21, 16)

这样初始化后,该层初始行为就是双线性插值,训练时还可微调。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/11 21:38:06

Linux进程与服务管理

Linux进程与服务管理 文章目录Linux进程与服务管理一、前言二、进程与服务管理2.1 进程的基本概述2.1.1 定义2.1.2 分类2.2 Linux进程相关指令详解2.2.1 查看进程:ps2.2.2 终止进程:kill2.2.3 案例2.3 查看进程树指令2.4 Linux服务器管理之service指令2.…

作者头像 李华
网站建设 2026/4/16 9:03:44

基于django的汽车试驾预约服务网站设计与实现

目录 汽车试驾预约服务网站设计与实现摘要 关于博主开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式! 汽车试驾预约服务网站设计与实现摘要 该设计基于Django框架开发,旨在为用户…

作者头像 李华
网站建设 2026/4/16 9:04:17

书匠策AI:文献综述不是“抄摘要”,而是搭建你的学术对话舞台

大家好,我是专注论文写作科普的教育博主。在日常答疑中,我常常看到学生把文献综述写成“文献清单”——每段开头都是“某某(年份)认为……”,结尾却没有任何连接、比较或反思。导师批语往往是:“缺乏逻辑主…

作者头像 李华
网站建设 2026/4/16 9:04:11

学术航海新伙伴:书匠策AI如何重塑文献综述写作图景

在学术研究的汪洋大海中,文献综述如同一张精准的航海图,指引研究者穿越知识的迷雾,发现未知的领域。然而,传统文献综述写作往往耗时费力,如同手工绘制地图般繁琐。今天,我们迎来了一位革命性的学术伙伴——…

作者头像 李华
网站建设 2026/4/16 0:50:14

基于.NET和C#构建光伏IoT物模型方案

一、目前国内接入最常见、最有代表性的 4 类光伏设备二、华为 SUN2000 逆变器通讯报文示例 这是一个标准 Modbus TCP 请求报文: 00 01 00 00 00 06 01 03 75 30 00 06 含义: Modbus TCP 报文由两部分组成: MBAP Header(7字节&…

作者头像 李华
网站建设 2026/4/16 9:05:26

React Native for OpenHarmony 实战:Sound 音频播放详解

React Native for OpenHarmony 实战:Sound 音频播放详解 摘要 本文深入探讨React Native在OpenHarmony平台上的音频播放实现方案。通过对比主流音频库react-native-sound和expo-av的适配表现,结合OpenHarmony音频子系统的特性,提供完整的音…

作者头像 李华