🧠 MTCNN网络结构记忆卡片

�� 基础概念速查

🔤 库引入:import torchimport torch.nn as nn

import torch          # PyTorch深度学习框架
import torch.nn as nn # nn = Neural Networks (神经网络)

🏗️ 网络基类:class PNet(nn.Module) 继承关系

class PNet(nn.Module):  # 继承nn.Module基类def __init__(self):super(PNet, self).__init__()  # 调用父类初始化

🔍 全卷积网络 vs 混合网络概念澄清P-Net全卷积 + R-Net/O-Net混合网络

P-Net: 全卷积网络 (无全连接层)
├── 可以处理任意尺寸输入
├── 输出尺寸与输入相关
└── 真正的全卷积网络R-Net: 混合网络 (卷积+全连接)
├── 固定输入尺寸 (24×24)
├── 有全连接层
└── 不是全卷积网络O-Net: 混合网络 (卷积+全连接)
├── 固定输入尺寸 (48×48)
├── 有全连接层
└── 不是全卷积网络

🔴 重要概念澄清:

  • 全卷积网络: 不包含全连接层的网络,可以处理任意尺寸输入
  • 混合网络: 包含卷积层和全连接层的网络,通常需要固定输入尺寸
  • 老师说的"全卷积": 可能指1×1卷积或特定语境下的理解

🎯 P-Net 网络结构:12×12输入1×1×32特征分支输出1通道+4通道

📊 完整网络流程图:3→10→16→32通道变化

输入图像 (12×12×3)↓
┌─────────────────────────────────────┐
│           pre_layer 流水线           │
├─────────────────────────────────────┤
│ 卷积层1: 3→10通道 (10×10×10)        │
│ 批归一化: 10通道                    │
│ PReLU激活: 10通道                   │
│ 最大池化: 2×2 → (5×5×10)           │
├─────────────────────────────────────┤
│ 卷积层2: 10→16通道 (3×3×16)        │
│ 批归一化: 16通道                    │
│ PReLU激活: 16通道                   │
├─────────────────────────────────────┤
│ 卷积层3: 16→32通道 (1×1×32)        │
│ 批归一化: 32通道                    │
│ PReLU激活: 32通道                   │
└─────────────────────────────────────┘↓
┌─────────────────────────────────────┐
│           分支输出层                 │
├─────────────────────────────────────┤
│ 分类分支: 32→1通道 (1×1×1)         │
│ 偏移分支: 32→4通道 (1×1×4)         │
└─────────────────────────────────────┘↓输出: [置信度, 偏移量]

🔍 关键参数解释:nn.Conv2d(3, 10, kernel_size=3, stride=1, padding=0)

nn.Conv2d(3, 10, kernel_size=3, stride=1, padding=0)
#    ↑    ↑      ↑           ↑        ↑
#  输入  输出   卷积核大小   步长     填充
#  通道  通道   3×3像素     1像素    0像素
#  数量  数量
#  (决定  (决定
#  卷积核 卷积核
#  的深度) 的数量)

🚨 重要公式说明:输出特征图尺寸 = [(H+2P-F)/S]+1 × [(H+2P-F)/S]+1 × 通道数

输出特征图尺寸 = `[(H + 2P - F) / S] + 1` × `[(H + 2P - F) / S] + 1` × 通道数其中:
H = 输入特征图的高度/宽度
P = 填充大小 (padding)
F = 卷积核大小 (kernel_size)
S = 步长 (stride)例如:12×12输入,3×3卷积核,步长1,无填充
输出尺寸 = [(12 + 2×0 - 3) / 1] + 1 = 10×10🔴 关键理解:
- 输入通道数 = 输入特征图的通道数
- 输出通道数 = 卷积核的数量 = 提取的特征数量

🚀 R-Net 网络结构:24×24输入3×3×64特征全连接576→128分支输出1通道+4通道

📊 与P-Net的区别:新增全连接层 + 无BatchNorm + 3×3池化核

输入图像 (24×24×3)↓
┌─────────────────────────────────────┐
│           pre_layer 流水线           │
├─────────────────────────────────────┤
│ 卷积层1: 3→28通道 (22×22×28)       │
│ PReLU激活: 28通道                   │
│ 最大池化: 3×3, 步长2 → (11×11×28)  │
├─────────────────────────────────────┤
│ 卷积层2: 28→48通道 (9×9×48)        │
│ PReLU激活: 48通道                   │
│ 最大池化: 3×3, 步长2 → (4×4×48)    │
├─────────────────────────────────────┤
│ 卷积层3: 48→64通道 (3×3×64)        │
│ PReLU激活: 64通道                   │
└─────────────────────────────────────┘↓
┌─────────────────────────────────────┐
│           全连接层 (新增)            │
├─────────────────────────────────────┤
│ 展平: (3×3×64) → 576               │
│ 全连接: 576 → 128                   │
│ PReLU激活: 128                      │
├─────────────────────────────────────┤
│ 分类分支: 128 → 1                   │
│ 偏移分支: 128 → 4                   │
└─────────────────────────────────────┘↓输出: [置信度, 偏移量]

🔍 R-Net与P-Net的主要差异:输入尺寸 + 通道数变化 + 新增全连接层

  1. 输入尺寸: 24×24 (vs P-Net的12×12)
  2. 通道数变化: 3→28→48→64 (vs P-Net的3→10→16→32)
  3. 新增全连接层: 576→128维特征
  4. 无BatchNorm: 注释掉了批归一化层
  5. 输出层: 从卷积层改为全连接层

🔍 576→128的详细过程3×3×64展平全连接降维

# 最后一层卷积输出: 3×3×64 = 576维
nn.Conv2d(48, 64, kernel_size=2, stride=1)  # 4×4×48 → 3×3×64# 展平操作
x = x.view(x.size(0), -1)  # (batch_size, 3, 3, 64) → (batch_size, 576)# 全连接层降维
self.conv4 = nn.Linear(64 * 3 * 3, 128)  # 576 → 128

🔴 关键差异:两次下采样22×22→11×11→4×4 感受野增大

P-Net: 1次下采样 (10×10 → 5×5)
R-Net: 2次下采样 (22×22 → 11×11 → 4×4)影响:
├── 感受野更大:能看到更多上下文信息
├── 精度更高:但速度更慢
└── 特征更丰富:适合中等精度检测🔴 关键原理:下采样越狠,感受野越大

🌟 O-Net 网络结构:48×48输入3×3×128特征全连接1152→256分支输出1通道+4通道

📊 与P-Net的区别:最多下采样 + 最大全连接层 + 最高精度

输入图像 (48×48×3)↓
┌─────────────────────────────────────┐
│           pre_layer 流水线           │
├─────────────────────────────────────┤
│ 卷积层1: 3→32通道 (46×46×32)       │
│ PReLU激活: 32通道                   │
│ 最大池化: 3×3, 步长2 → (23×23×32)  │
├─────────────────────────────────────┤
│ 卷积层2: 32→64通道 (21×21×64)      │
│ PReLU激活: 64通道                   │
│ 最大池化: 3×3, 步长2 → (10×10×64)  │
├─────────────────────────────────────┤
│ 卷积层3: 64→64通道 (8×8×64)        │
│ PReLU激活: 64通道                   │
│ 最大池化: 2×2, 步长2 → (4×4×64)    │
├─────────────────────────────────────┤
│ 卷积层4: 64→128通道 (3×3×128)      │
│ PReLU激活: 128通道                  │
└─────────────────────────────────────┘↓
┌─────────────────────────────────────┐
│           全连接层 (新增)            │
├─────────────────────────────────────┤
│ 展平: (3×3×128) → 1152             │
│ 全连接: 1152 → 256                  │
│ PReLU激活: 256                      │
├─────────────────────────────────────┤
│ 分类分支: 256 → 1                   │
│ 偏移分支: 256 → 4                   │
└─────────────────────────────────────┘↓输出: [置信度, 偏移量]

🔍 O-Net与P-Net的主要差异:最大输入尺寸 + 最多卷积层 + 最大全连接层

  1. 输入尺寸: 48×48 (vs P-Net的12×12)
  2. 通道数变化: 3→32→64→64→128 (vs P-Net的3→10→16→32)
  3. 新增全连接层: 1152→256维特征
  4. 无BatchNorm: 注释掉了批归一化层
  5. 输出层: 从卷积层改为全连接层

🔍 1152→256的详细过程3×3×128展平全连接降维

# 最后一层卷积输出: 3×3×128 = 1152维
nn.Conv2d(64, 128, kernel_size=2, stride=1)  # 4×4×64 → 3×3×128# 展平操作
x = x.view(x.size(0), -1)  # (batch_size, 3, 3, 128) → (batch_size, 1152)# 全连接层降维
self.conv5 = nn.Linear(128 * 3 * 3, 256)  # 1152 → 256

为什么这样设计?

  • 维度压缩: 1152维过于冗余,256维是精华特征
  • 计算效率: 256维特征计算速度快,内存占用合理
  • 特征融合: 全连接层组合不同位置的信息

🔴 关键差异:三次下采样最多下采样次数最高精度定位

P-Net: 1次下采样
R-Net: 2次下采样  
O-Net: 3次下采样规律:下采样次数越多,精度越高,速度越慢🔴 关键原理:下采样越狠,感受野越大,精度越高

🔍 池化核大小变化规律输入尺寸越大池化核越大下采样越激进

P-Net: 2×2池化核 (温和下采样)
R-Net: 3×3池化核 (中等下采样)  
O-Net: 3×3池化核 + 2×2池化核 (激进下采样)为什么后面用3×3池化核?
├── 输入尺寸越大,越需要激进下采样
├── 3×3池化核感受野更大,下采样更快
└── 符合网络设计规律:输入越大,下采样越激进🔴 核心原理:下采样越狠,感受野越大,精度越高,速度越慢

🔍 池化核代码对比不同网络不同池化策略

# P-Net: 2×2池化核
MaxPool2d(kernel_size=2, stride=2)  # 10×10 → 5×5# R-Net: 3×3池化核
MaxPool2d(kernel_size=3, stride=2, padding=1)  # 22×22 → 11×11
MaxPool2d(kernel_size=3, stride=2)              # 9×9 → 4×4# O-Net: 3×3池化核 + 2×2池化核
MaxPool2d(kernel_size=3, stride=2, padding=1)  # 46×46 → 23×23
MaxPool2d(kernel_size=3, stride=2)              # 21×21 → 10×10
MaxPool2d(kernel_size=2, stride=2)              # 8×8 → 4×4

🔧 关键概念解释

1. nn.Sequential 流水线按顺序依次通过工厂流水线模式

self.pre_layer = nn.Sequential(1,2,3, ...  # 数据按顺序依次通过
)
# 就像工厂流水线,产品依次经过每个工序

2. Conv2d 卷积层提取图像特征不同滤镜看图片

nn.Conv2d(输入通道, 输出通道, 卷积核大小, 步长, 填充)
# 作用:提取图像特征,就像用不同滤镜看图片
# 输入通道:RGB图像是3,灰度图像是1
# 输出通道:提取的特征数量,越多特征越丰富

3. BatchNorm2d 批量归一化稳定训练过程加速收敛

nn.BatchNorm2d(通道数)
# 作用:稳定训练过程,加速收敛
# 2D:专门用于2D图像数据
# 为什么手动填写:PyTorch不知道您的数据形状

4. 通道数变化规律通道数逐渐增加提取更多特征

P-Net:  3 → 10 → 16 → 32 → 1/4
R-Net:  3 → 28 → 48 → 64 → 128 → 1/4  
O-Net:  3 → 32 → 64 → 64 → 128 → 256 → 1/4🔴 规律:通道数逐渐增加,提取更多特征

🎯 分支输出层详解

🔍 为什么32变成1和4?:任务需求决定通道数 + 人为设计

分类分支 (32→1):二分类任务1通道足够
self.conv4_1 = nn.Conv2d(32, 1, kernel_size=1, stride=1)
# 输入:32通道特征图
# 输出:1通道 (二分类:是人脸的概率)
# 作用:预测每个位置包含人脸的概率
# 注意:1通道对应sigmoid激活,非人脸概率 = 1 - 人脸概率
偏移分支 (32→4):4个坐标偏移4通道对应
self.conv4_2 = nn.Conv2d(32, 4, kernel_size=1, stride=1)
# 输入:32通道特征图
# 输出:4通道 [x1偏移, y1偏移, x2偏移, y2偏移]
# 作用:预测人脸框相对于当前位置的偏移量

🎭 解耦图 (Decoupled Output) 设计:共享特征提取分支任务分离

┌─────────────────────────────────────────────────────────────┐
│                    解耦图设计原理                           │
├─────────────────────────────────────────────────────────────┤
│  共享特征提取层 (pre_layer)                                │
│  ↓                                                         │
│  32通道特征图 (高维特征表示)                               │
│  ↓                                                         │
│  ┌─────────────┐  ┌─────────────┐                          │
│  │ 分类分支    │  │ 偏移分支    │                          │
│  │ 32→1通道    │  │ 32→4通道    │                          │
│  │ Sigmoid     │  │ 无激活函数  │                          │
│  └─────────────┘  └─────────────┘                          │
│  ↓                 ↓                                        │
│  置信度输出        位置偏移输出                              │
└─────────────────────────────────────────────────────────────┘

🔍 解耦图的优势:任务分离 + 特征共享 + 训练稳定

  1. 任务分离: 分类和回归任务独立训练
  2. 特征共享: 32通道特征被两个分支共享使用
  3. 训练稳定: 不同任务不会相互干扰
  4. 推理高效: 可以单独使用某个分支的输出

💡 置信度 (Confidence) 解释:32通道特征1通道概率[0,1]范围

┌─────────────────────────────────────────────────────────────┐
│                    置信度机制                               │
├─────────────────────────────────────────────────────────────┤
│  32通道特征图 → 1×1卷积 → 1通道 → Sigmoid → [0,1]概率      │
│                                                           │
│  输出含义:                                                │
│  - 0.0: 绝对不是人脸                                      │
│  - 0.5: 50%可能是人脸                                     │
│  - 1.0: 100%是人脸                                        │
│                                                           │
│  阈值判断:                                                │
│  - 置信度 > 0.5: 认为是人脸                               │
│  - 置信度 < 0.5: 认为不是人脸                             │
└─────────────────────────────────────────────────────────────┘

🔍 偏移分支 (无激活函数):4通道输出任意实数范围正负偏移量

┌─────────────────────────────────────────────────────────────┐
│                    偏移分支机制                             │
├─────────────────────────────────────────────────────────────┤
│  32通道特征图 → 1×1卷积 → 4通道 → 无激活函数 → 任意实数    │
│                                                           │
│  输出含义:                                                │
│  - 4个通道分别对应 [x1偏移, y1偏移, x2偏移, y2偏移]       │
│  - 输出范围: 任意实数 (正数或负数)                        │
│  - 作用: 预测人脸框相对于当前位置的精确偏移量              │
│                                                           │
│  为什么不用激活函数?                                      │
│  - 偏移量可以是正数(向右/向下)或负数(向左/向上)           │
│  - 激活函数会限制输出范围,不适合回归任务                 │
└─────────────────────────────────────────────────────────────┘

🎯 为什么32通道表示置信度?:32通道≠置信度32通道特征→1通道置信度

32通道 ≠ 置信度!

┌─────────────────────────────────────────────────────────────┐
│                    正确理解                                │
├─────────────────────────────────────────────────────────────┤
│  32通道: 提取的高级特征 (形状、纹理、结构等)               │
│  ↓                                                         │
│  1×1卷积: 将32维特征压缩到1维                            │
│  ↓                                                         │
│  1通道: 经过sigmoid激活后,输出[0,1]的置信度              │
│                                                           │
│  关系: 32通道特征 → 1通道置信度                           │
│  不是: 32通道 = 置信度                                    │
└─────────────────────────────────────────────────────────────┘

📊 1×1卷积核的作用:点卷积降维 + 非线性 + 特征融合

1×1卷积核 = 点卷积
作用:
1. 降维:减少通道数
2. 非线性:增加激活函数
3. 特征融合:组合不同通道的信息

🎯 记忆口诀

📝 P-Net (12×12):3→10→16→32分支1、4通道

"3→10→16→32,层层提取特征强最后分支1、4,置信度偏移双任务"

📝 R-Net (24×24):3→28→48→64全连接576→128分支1、4通道

"3→28→48→64,特征越来越丰富全连接层来帮忙,128维特征强输出1、4,置信度偏移双任务"

📝 O-Net (48×48):3→32→64→64→128全连接1152→256分支1、4通道

"3→32→64→64→128,特征提取最全面256维全连接,最终输出最精确1、4通道,人脸定位最准确"

🚀 为什么这样设计?

1. 三阶段级联P-Net快速检测R-Net中等精度O-Net高精度定位

  • P-Net: 快速粗检测,生成候选区域
  • R-Net: 中等精度,过滤候选区域
  • O-Net: 高精度,最终人脸定位

2. 通道数递增浅层基础特征深层高级特征

  • 浅层:提取基础特征(边缘、纹理)
  • 深层:提取高级特征(形状、结构)

3. 多尺度输入12×12快速24×24中等48×48高精度

  • 12×12:快速检测
  • 24×24:中等精度
  • 48×48:高精度定位

4. 双任务输出设计分类分支1通道 + 偏移分支4通道

  • 分类分支: 判断是否是人脸 (1通道,sigmoid置信度)
  • 偏移分支: 预测人脸框位置 (4通道,x1,y1,x2,y2)

5. 解耦图设计优势任务分离 + 特征共享 + 训练稳定

  • 任务分离: 分类和回归任务独立训练,互不干扰
  • 特征共享: 32通道特征被两个分支共享使用,提高效率
  • 训练稳定: 不同任务不会相互影响,收敛更快
  • 推理灵活: 可以单独使用置信度或偏移量输出

🔴 核心总结

下采样次数对比次数越多感受野越大精度越高速度越慢

P-Net: 1次下采样 → 小感受野 → 快速检测
R-Net: 2次下采样 → 中等感受野 → 中等精度  
O-Net: 3次下采样 → 大感受野 → 高精度定位🔴 核心原理:下采样越狠,感受野越大,精度越高,速度越慢

设计原则通道数=任务需求 + 激活函数=输出特性 + 下采样次数=精度vs速度权衡

通道数 = 任务需求
激活函数 = 输出特性
下采样次数 = 精度vs速度权衡
池化核大小 = 输入尺寸 (越大输入,越大池化核)
全连接层 = 特征压缩 (高维→低维,提取精华特征)

关键记忆点分类1通道+sigmoid + 偏移4通道+无激活 + 下采样感受野关系

1. 分类:1通道 + sigmoid
2. 偏移:4通道 + 无激活
3. 下采样:次数越多,感受野越大,精度越高,速度越慢
4. 通道数:人为设计,对应任务需求
5. 池化核:输入越大,池化核越大,下采样越激进
6. 全连接:高维压缩,提取精华特征
7. 感受野:下采样越狠,感受野越大,精度越高

这就是MTCNN网络的完整结构!感谢老师的正确教导!🎯

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/94417.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/94417.shtml
英文地址,请注明出处:http://en.pswp.cn/web/94417.shtml

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

相关文章

可视化-模块1-HTML-03

1.发现问题<p>大数据可视化技术及应用课程</p> <img src"pic/图片2.png" width"300" height"300"/><p></p><img />HTML 标签按闭合方式只分两类&#xff1a;双标签&#xff08;paired / container&#xff…

前端开发:详细介绍npm、pnpm和cnpm分别是什么,使用方法以及之间有哪些关系

目录 npm、pnpm和cnpm分别是什么 npm pnpm cnpm NPM包管理器 使用npm管理&#xff0c;创建/初始化项目 修改npm镜像&#xff08;npm源设置&#xff09; 基本命令 安装依赖项 下载特定版本的依赖 下载开发依赖 下载全局依赖&#xff08;全局安装&#xff09; 升级依赖项 根据依赖…

我们为你连接网络,安装驱动程序

Windows 11 家庭版/专业版在安装时默认要求联网&#xff0c;其实可以跳过。在这个联网界面按下 Shift F10 打开命令行。输入以下命令并回车&#xff1a;OOBE\BYPASSNRO系统会自动重启&#xff0c;回到联网界面。这时会多出一个 “我没有 Internet” 选项&#xff0c;点它&…

智慧交通夜间逆光误检率↓81.4%!陌讯多模态融合算法在主干道监测的落地优化

一、智慧交通视觉检测的行业痛点智慧交通作为城市基建的核心环节&#xff0c;其视觉检测系统&#xff08;车辆识别、车牌匹配、交通事件预警&#xff09;的可靠性直接影响通行效率与交通安全。但根据《2023 年中国智慧交通发展报告》数据&#xff0c;当前主流方案仍面临三大核心…

Java和数据库的关系

数据库本身是一个独立的、巨大的知识领域&#xff0c;但“数据库的使用、优化和深度理解”绝对是Java后端工程师进阶的核心组成部分。 它们不是分开的&#xff0c;而是紧密耦合、相辅相成的关系。你可以这样理解&#xff1a; 数据库&#xff08;MySQL, Oracle等&#xff09; 就…

Socket some functions

setsockopt 简介setsockopt 是用于设置套接字&#xff08;socket&#xff09;选项的系统调用函数&#xff0c;允许用户对套接字的行为进行精细控制。通过调整选项参数&#xff0c;可以优化网络通信性能、修改超时设置、启用特殊功能等。该函数在 POSIX 系统和 Windows 平台均有…

玩转深度学习数据填补!CNN-GRU组合模型数据填补(四个案例数据)

这两段MATLAB代码&#xff08;BABJ.m 和 CNN_GRUQSTB.m&#xff09;分别完成数据预处理与缺失值标识和基于CNN-GRU混合神经网络的缺失值预测填补任务。以下是详细分析&#xff1a; 一、主要功能 BABJ.m • 功能&#xff1a;从多个Excel文件中读取数据&#xff0c;匹配并合并多个…

基于开源AI智能名片链动2+1模式S2B2C商城小程序的营销创新研究——以“种草”实践践行“以人为本”理念

摘要&#xff1a;本文聚焦于营销本质&#xff0c;强调创造和维护与消费者有价值关系的重要性&#xff0c;指出企业需回归消费者视角提供有价值产品和服务。深入探讨“种草”作为科特勒“以人为本”理念在中国市场的最佳实践&#xff0c;分析其意义与价值。同时&#xff0c;引入…

基于SpringBoot+Vue的智能停车场管理系统 停车管理小程序

&#x1f525;作者&#xff1a;it毕设实战小研&#x1f525; &#x1f496;简介&#xff1a;java、微信小程序、安卓&#xff1b;定制开发&#xff0c;远程调试 代码讲解&#xff0c;文档指导&#xff0c;ppt制作&#x1f496; 精彩专栏推荐订阅&#xff1a;在下方专栏&#x1…

01数据结构-归并排序和计数排序

01数据结构-归并排序和计数排序1.归并排序1.1归并排序概述1.2归并排序的执行流程1.2.1递(分裂)的过程1.2.2归(合并)的过程1.3归并排序的代码实现2.计数排序2.1算法思想2.2计数排序的改进2.2.1优化12.2.2优化21.归并排序 1.1归并排序概述 归并排序&#xff0c;其排序的实现思想…

SQL注入2----(sql注入数据类型分类)

一.前言本章节我们来讲解一下sql注入的分类&#xff0c;主要分为四类&#xff0c;数字型、字符型、搜索型、xx型。二.数字型数字型注入的时候&#xff0c;是不需要考虑单\双引号闭合问题的&#xff0c;因为sql语句中的数字是不需要用引号括起来的&#xff0c;如下mysql> sel…

Elasticsearch Rails 实战全指南(elasticsearch-rails / elasticsearch-model)

一、背景与生态总览 elasticsearch-rails&#xff1a;面向 Rails 的“伴生库”&#xff0c;为 Rails 项目带来 Rake 任务、日志埋点、模板等特性。elasticsearch-model&#xff1a;把 ES 能力“混入”到 Ruby 模型&#xff08;ActiveRecord/Mongoid&#xff09;&#xff0c;提供…

第三阶段数据库-2:数据库中的sql语句

1_数据库操作&#xff08;1&#xff09;注释&#xff1a;-- 单行注释 /**/ 多行注释&#xff08;2&#xff09;创建数据库&#xff1a;create database 数据库名-- create database 数据库名 create database db_first;(3&#xff09;查询数据库&#xff1a;if exsists(select…

python中的filter函数

目录 定义与参数说明 特点 使用场景 常用操作 筛选偶数 去除空字符串 筛选正数 筛选字典 配合集合与元组 注意事项 定义与参数说明 filter函数是Python内置的高阶函数之一&#xff0c;用于筛选可迭代对象中的元素&#xff0c;根据返回值的布尔结果&#xff08;True 或…

BERT(Bidirectional Encoder Representations from Transformers)模型详解

一、BERT 简介BERT&#xff08;Bidirectional Encoder Representations from Transformers&#xff09;是由 Google 在 2018 年提出的一种预训练语言表示模型。它基于 Transformer 编码器结构&#xff0c;首次提出了 双向上下文建模 的方法&#xff0c;大幅度提升了自然语言处理…

【开题答辩全过程】以 基于Springboot+微信小程序的网上家教预约系统的设计与实现-开题为例,包含答辩的问题和答案

个人简介&#xff1a;一名14年经验的资深毕设内行人&#xff0c;语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧…

课小悦系列智能耳机上市,用硬核科技为教育赋能

在人工智能与教育深度融合的浪潮中&#xff0c;深圳课小悦科技有限公司以“智慧教育专家”的姿态崭露头角。这家深耕智能教育硬件的创新企业&#xff0c;于2025年8月正式推出革命性产品H360PRO系列教考耳机&#xff0c;为语言学习场景提供颠覆性解决方案。创新基因&#xff1a;…

[react] class Component and function Component

我对react的用法理解还一直停留在多年以前&#xff0c;说明这段时间我没有更新react的知识。我大脑中记得还是使用Class Component this.setState&#xff0c;可是今天看了看react的文档&#xff0c;发现怎么不一样了&#xff0c;用的都是function useState的方式了。你知道这…

以太坊智能合约地址派生方式:EOA、CREATE 和 CREATE2

1. 引言 在以太坊上&#xff0c;智能合约可以通过以下三种方式之一进行部署&#xff1a; 1&#xff09;由外部账户&#xff08;Externally Owned Account, EOA&#xff09;发起交易&#xff0c;其中 to 字段设为 null&#xff0c;而 data 字段包含合约的初始化代码。2&#x…

基于RISC-V架构的国产MCU在eVTOL领域的应用研究与挑战分析

摘要电动垂直起降飞行器&#xff08;eVTOL&#xff09;作为未来城市空中交通的重要组成部分&#xff0c;对嵌入式控制系统的性能、可靠性和安全性提出了极高的要求。RISC-V作为一种新兴的开源指令集架构&#xff0c;为国产微控制器&#xff08;MCU&#xff09;的研发和应用带来…