医学图像语义分割:前列腺肿瘤、颅脑肿瘤、腹部多脏器 MRI、肝脏 CT、3D肝脏、心室
医学图像语义分割:前列腺肿瘤、颅脑肿瘤、腹部多脏器 MRI、肝脏 CT、3D肝脏、心室
- 语义分割网络
- FCN:通过将全连接层替换为卷积层并使用反卷积上采样,实现了第一个端到端的像素级分割网络
- U-Net:采用对称的U形编解码器结构,并通过跳跃连接融合不同层级特征,在保留细节的同时获取语义信息。
- DeepLab:使用空洞卷积和ASPP模块高效扩大感受野,并结合CRF后处理优化边界,实现多尺度特征提取。
- PSPNet:引入金字塔池化模块聚合多尺度全局上下文信息,通过特征融合提升场景理解能力。
- SegNet:基于对称编解码器结构,利用最大池化索引进行高效上采样,实现内存友好的实时分割。
- DeconvNet:采用深度编码器和分阶段反卷积解码,通过非对称上采样路径精确重建目标形状细节。
- RefineNet:设计多路径精炼结构和级联残差连接,通过自适应特征融合模块整合多层级信息。
- P-Seg:金字塔特征提取(多尺度特征) + 特征融合网络(特征连接) + 分割头设计(边界优化)
- nnU-Net:一个自适应的医学图像分割框架,通过自动分析数据特征来优化网络架构和训练策略,实现"即插即用"的通用分割方案
- TransUNet:结合Transformer的全局建模能力和CNN的局部特征提取优势,在保持精细结构的同时获得更好的长程依赖关系理解。
- BOWDA-Net:专注于前列腺分割的双向域适应网络,通过边界感知和域适应机制解决边界模糊和设备差异问题。
- Attention U-Net:在U-Net基础上引入注意力机制,通过学习空间注意力权重来突出关键区域特征,提升分割精度。
- 对比
- 医学影像
- 前列腺肿瘤 MRI
- 分治
- 颅脑肿瘤 MRI
- 肝脏
- 心室
- 腹部多脏器 MRI
语义分割网络
图像语义分割 = 对每个像素点分类。
只需要把传统神经网络,最后全连接层变成全卷积网络(得到 2 维特征图),再接 softmax 获取每个像素点的分类信息。
输出:从一维类别分类,变成二维像素点分类。
FCN:通过将全连接层替换为卷积层并使用反卷积上采样,实现了第一个端到端的像素级分割网络
FCN (全卷积网络)
- 目的:实现端到端的像素级分类
- 问题:如何将分类网络转换为分割网络
- 解法:
- 全连接层转换为卷积层(因为需要保持空间信息)
- 上采样恢复分辨率(因为需要与原图尺寸对应)
- 之所以用反卷积上采样,是因为需要学习如何恢复分辨率
- 例如:将16x16特征图上采样到32x32,每个点扩展为2x2区域
U-Net:采用对称的U形编解码器结构,并通过跳跃连接融合不同层级特征,在保留细节的同时获取语义信息。
U-Net
- 目的:提高分割精度,尤其是边缘细节
- 问题:如何在上采样过程中减少信息损失
- 解法:
- 对称编码器-解码器结构(因为需要逐层还原特征)
- 跳跃连接(因为需要融合低层次和高层次特征)
- 之所以用跳跃连接,是因为需要保留早期层的细节信息
- 例如:在医学图像分割中,细胞边界信息在浅层网络中保留得更好
DeepLab:使用空洞卷积和ASPP模块高效扩大感受野,并结合CRF后处理优化边界,实现多尺度特征提取。
DeepLab系列
- 目的:扩大感受野,获取多尺度特征
- 问题:如何在不增加参数量的情况下扩大感受野
- 解法:
- 空洞卷积(因为需要以较小的计算代价获得更大的感受野)
- ASPP模块(因为需要捕获多尺度上下文信息)
- CRF后处理(因为需要优化分割边界)
- 之所以用空洞卷积,是因为可以在不增加参数量的情况下扩大感受野
- 例如:检测不同大小的物体时,需要不同尺度的感受野
PSPNet:引入金字塔池化模块聚合多尺度全局上下文信息,通过特征融合提升场景理解能力。
PSPNet
- 目的:整合全局场景信息
- 问题:如何有效融合不同尺度的上下文信息
- 解法:
- 金字塔池化模块(因为需要获取多尺度全局信息)
- 特征融合(因为需要组合局部和全局信息)
- 之所以用金字塔池化,是因为可以获取不同尺度的上下文信息
- 例如:理解道路场景时,需要同时考虑车辆细节和整体路况
SegNet:基于对称编解码器结构,利用最大池化索引进行高效上采样,实现内存友好的实时分割。
SegNet
- 目的:实现高效的实时语义分割
- 问题:如何在保持准确率的同时降低内存消耗
- 解法:
- 对称编码器-解码器结构(因为需要逐步恢复空间信息)
- 最大池化索引上采样(因为需要节省内存同时保留位置信息)
- 之所以用最大池化索引,是因为可以精确还原特征位置而无需存储完整特征图
- 例如:在自动驾驶场景中,需要实时分割道路和障碍物,同时内存受限
DeconvNet:采用深度编码器和分阶段反卷积解码,通过非对称上采样路径精确重建目标形状细节。
DeconvNet
- 目的:提高分割的细节准确度
- 问题:如何更好地恢复目标的形状细节
- 解法:
- 深度编码器(因为需要提取丰富的语义特征)
- 分阶段反卷积解码(因为需要渐进式恢复空间细节)
- 非对称上采样路径(因为需要灵活处理不同尺度的特征)
- 之所以用分阶段反卷积,是因为可以更细致地控制特征重建过程
- 例如:分割人体轮廓时,需要逐步恢复从大体轮廓到细节纹理
RefineNet:设计多路径精炼结构和级联残差连接,通过自适应特征融合模块整合多层级信息。
RefineNet
- 目的:融合多尺度特征以提高分割精度
- 问题:如何有效利用不同层级的特征信息
- 解法:
- 多路径精炼(因为需要处理不同分辨率的特征)
- 级联残差连接(因为需要保证信息流动和梯度传播)
- 自适应融合模块(因为需要动态调整不同特征的权重)
- 之所以用级联残差连接,是因为可以在长距离特征传递中保持信息完整性
- 例如:分割复杂场景时,需要同时利用浅层的边缘信息和深层的语义信息
P-Seg:金字塔特征提取(多尺度特征) + 特征融合网络(特征连接) + 分割头设计(边界优化)
(1) 金字塔特征提取
- 子解法1.1:自底向上的主干网络提取 (ResNet/ResNeXt)
- 因为:图像包含多层次语义信息,需要逐层提取
- 子解法1.2:多尺度特征图构建
- 因为:不同尺度目标需要不同感受野
(2) 特征融合网络
- 子解法2.1:横向连接
- 因为:需要融合相同分辨率的特征
- 子解法2.2:自顶向下路径增强
- 因为:高层语义信息需要传递给低层特征
(3) 分割头设计
- 子解法3.1:多层特征聚合
- 因为:需要综合不同层级的特征信息
- 子解法3.2:边界细化模块
- 因为:提高分割边界的准确性
例子:
在自动驾驶场景中分割道路、车辆、行人等目标:
- 道路是大尺度目标,主要利用深层特征
- 远处的行人是小尺度目标,主要利用浅层特征
- 通过特征融合实现不同目标的精确分割
- 逻辑链分析:
P-Seg
├── 特征提取(Backbone)
│ ├── 浅层特征提取
│ └── 深层特征提取
├── 特征融合(FPN)
│ ├── 横向连接
│ │ └── 同分辨率特征融合
│ └── 自顶向下融合
│ └── 高层语义增强
└── 分割预测(Head)├── 特征聚合└── 边界优化
这是一个混合型的逻辑网络,既有链式结构(特征提取→融合→预测),也有并行结构(多尺度特征的同时处理)。
nnU-Net:一个自适应的医学图像分割框架,通过自动分析数据特征来优化网络架构和训练策略,实现"即插即用"的通用分割方案
- nnU-Net (no-new-U-Net)
目的:实现医学图像分割的自动化适应性优化
问题:不同医学数据集特征差异大,难以用单一固定架构获得最佳效果
解法:自适应优化方案
-
子解法1(数据特征自适应)
- 自动数据分析和预处理
- 根据数据特征选择2D/3D架构
- 动态patch大小选择
因为:医学数据分辨率、维度、组织对比度差异大
-
子解法2(训练策略自适应)
- 自动学习率调整
- 动态损失函数选择
- 自适应优化器配置
因为:不同任务对训练参数敏感度不同
示例:脑肿瘤分割任务中,自动选择3D架构并调整patch size适应肿瘤大小
TransUNet:结合Transformer的全局建模能力和CNN的局部特征提取优势,在保持精细结构的同时获得更好的长程依赖关系理解。
- TransUNet
目的:提升医学图像分割的全局信息获取能力
问题:传统CNN难以捕获长距离依赖关系
解法:Transformer与CNN结合
-
子解法1(全局特征提取)
- Transformer编码器捕获长程依赖
- 多头自注意力机制
因为:医学图像中器官位置和形状关系复杂
-
子解法2(局部细节优化)
- CNN处理局部特征
- Skip connection保留细节
因为:医学图像需要同时保证全局准确性和局部精细度
示例:前列腺MRI分割中,可以同时关注整体形状和局部边界细节
BOWDA-Net:专注于前列腺分割的双向域适应网络,通过边界感知和域适应机制解决边界模糊和设备差异问题。
- BOWDA-Net
目的:提升前列腺分割的边界准确性和域适应能力
问题:前列腺边界模糊,不同设备间图像差异大
解法:边界感知与域适应结合
-
子解法1(边界增强)
- 多尺度边界特征提取
- 边界注意力机制
因为:前列腺边界与周围组织对比度低
-
子解法2(域适应)
- 双向特征对齐
- 对抗学习策略
因为:不同设备、不同医院的图像存在域差异
示例:在不同机构获取的前列腺MRI数据上保持稳定性能
Attention U-Net:在U-Net基础上引入注意力机制,通过学习空间注意力权重来突出关键区域特征,提升分割精度。
- Attention U-Net
目的:提升分割模型对关键区域的注意力
问题:传统U-Net对所有区域权重相同,忽视重要性差异
解法:注意力机制增强
- 子解法(空间注意力)
- 门控注意力单元
- 多层级注意力特征融合
因为:医学图像中目标区域与背景重要性差异大
示例:前列腺癌灶分割中,重点关注异常区域
医学图像分割
├── 数据特征处理
│ ├── 自适应优化 (nnU-Net)
│ └── 域适应对齐 (BOWDA-Net)
├── 特征提取策略
│ ├── 全局信息获取 (TransUNet)
│ └── 局部细节优化 (TransUNet, Attention U-Net)
└── 目标区域定位├── 边界增强 (BOWDA-Net)└── 注意力机制 (Attention U-Net)
对比
A. 叠加形态 (从基础到高级的演进):
第一层(把分类变成分割):
- FCN:全卷积+反卷积的基础架构
- SegNet:对称编解码器架构第二层(解决细节丢失问题):
- U-Net:跳跃连接增强细节
- DeconvNet:分阶段反卷积精细形状重建第三层(解决上下文信息缺失):
- DeepLab:空洞卷积扩大感受野
- PSPNet:多尺度上下文聚合第四层(解决全局场景理解):
- RefineNet:多路径精炼和级联融合
- P-Seg:金字塔特征提取和融合第五层(智能适应):
- nnU-Net:自适应优化
- TransUNet:Transformer全局建模
- BOWDA-Net:域适应和边界感知
- Attention U-Net:注意力增强
局部特征 全局特征 边界处理 适应性
传统模型 强 弱 中 弱
注意力模型 强 中 强 中
自适应模型 强 强 强 强
B. 构成形态 (小部件组成大系统):
输入图像 → [特征提取] → [特征融合] → [上采样] → 输出分割图
完整分割系统
├── 特征提取子系统
│ ├── 基础特征模块 (卷积层)
│ ├── 中层特征模块 (池化层)
│ └── 高层语义模块 (深层网络)
├── 特征融合子系统
│ ├── 跳跃连接 (U-Net)
│ ├── 金字塔池化 (PSPNet)
│ └── 多路径精炼 (RefineNet)
└── 上采样子系统├── 反卷积 (FCN, DeconvNet)├── 最大池化索引 (SegNet)└── 渐进式重建 (RefineNet)
特征提取:学习图像特征
├── 浅层:边缘、纹理(卷积层)
├── 中层:形状、部件(池化层)
└── 深层:语义、类别(深层网络)特征融合:综合各层信息
├── 简单跳跃连接(U-Net)
├── 多尺度融合(PSPNet)
└── 多路径融合(RefineNet)上采样:还原分辨率
├── 简单反卷积(FCN)
├── 索引上采样(SegNet,省内存)
└── 渐进式还原(RefineNet,更精细)
C. 分化形态 (功能特化):
最初目标:把图像分割成不同区域分化方向1:追求精度
├── 做细节
│ ├── U-Net:医学图像(细胞、器官)
│ └── RefineNet:复杂场景(多个目标)
└── 做语义├── DeepLab:不同尺度目标└── PSPNet:整体场景关系分化方向2:追求效率
├── 算得快:SegNet(实时处理)
└── 内存少:SegNet(存储效率)
语义分割
├── 精度导向
│ ├── 边缘细节优化
│ │ ├── U-Net (医学图像)
│ │ └── RefineNet (复杂场景)
│ └── 语义理解优化
│ ├── DeepLab (场景分割)
│ └── PSPNet (场景解析)
└── 效率导向├── 计算效率│ ├── SegNet (实时处理)│ └── FCN (基础架构)└── 内存效率└── SegNet (索引上采样)
- 原始问题:把图像每个像素都分类(FCN)
- 遇到的挑战:
- 细节模糊 → U-Net解决
- 目标大小不一 → DeepLab解决
- 场景关系复杂 → PSPNet解决
- 计算资源受限 → SegNet解决
- 最终形成:
- 高精度流派:U-Net、RefineNet(精细分割)
- 场景理解流派:DeepLab、PSPNet(复杂场景)
- 效率流派:SegNet(实时应用)
- 线性结构分析 (发展趋势):
FCN (2015) → U-Net (2015) → SegNet (2016) → DeconvNet (2016) → DeepLab (2017) → PSPNet (2017) → RefineNet (2017)演进特征:
- 结构:简单结构 → 对称结构 → 多分支结构
- 特征融合:无融合 → 简单融合 → 多尺度融合
- 上下文信息:局部信息 → 多尺度信息 → 全局信息
- 计算效率:未优化 → 部分优化 → 高效设计
- 矩阵结构分析:
精度 速度 内存 易用性 适应性
FCN 中 快 中 高 中
U-Net 高 中 中 中 中
SegNet 中 快 低 高 中
DeconvNet 高 慢 高 低 中
DeepLab 高 慢 高 低 高
PSPNet 高 慢 高 低 高
RefineNet 高 慢 高 低 高
- 系统动力学分析:
关键变量:
- 输入:图像分辨率、场景复杂度
- 内部状态:特征图大小、参数量
- 输出:分割精度、推理速度
反馈循环:
正向循环:
特征提取深度 ↑ → 语义理解能力 ↑ → 分割精度 ↑ → 模型复杂度 ↑负向循环:
模型复杂度 ↑ → 计算开销 ↑ → 处理速度 ↓ → 实用性 ↓
不同网络针对不同问题域进行了特化:
- FCN:通用基础架构
- U-Net:医学图像精细分割
- SegNet:实时应用场景
- DeepLab/PSPNet:复杂场景理解
- RefineNet:高精度要求场景
语义分割任务
├── 是否有实时性要求?
│ ├── 是 ──┐
│ │ ├── 内存是否受限?
│ │ │ ├── 是 → SegNet
│ │ │ └── 否 → 简化版FCN
│ │
│ └── 否 ──┐
│ ├── 场景复杂度高?
│ │ ├── 是 ──┐
│ │ │ ├── 计算资源充足?
│ │ │ │ ├── 是 ──┐
│ │ │ │ │ ├── 多尺度目标为主 → DeepLab
│ │ │ │ │ └── 需要全局场景理解 → PSPNet
│ │ │ │ └── 否 → 简化版DeepLab
│ │ │ │
│ │ │ └── 需要精细结构?
│ │ │ ├── 是 → RefineNet
│ │ │ └── 否 → DeepLab/PSPNet
│ │ │
│ │ └── 否 ──┐
│ │ ├── 需要精确边界?
│ │ │ ├── 是 ──┐
│ │ │ │ ├── 医学图像类任务 → U-Net
│ │ │ │ └── 普通场景 → DeconvNet
│ │ │ └── 否 → FCN
│ │ │
│ │ └── 资源受限?
│ │ ├── 是 → FCN
│ │ └── 否 → U-Net
关键决策点说明:
-
实时性 + 内存限制:
- 严格限制 → SegNet(最大池化索引上采样更节省内存)
- 较松限制 → 简化FCN
-
复杂场景 + 充足资源:
- 多尺度目标 → DeepLab(空洞卷积优势)
- 全局场景理解 → PSPNet(金字塔池化优势)
- 精细结构需求 → RefineNet(多路径精炼优势)
-
简单场景:
- 医学图像 → U-Net(跳跃连接保留细节)
- 普通精确边界需求 → DeconvNet
- 基础分割需求 → FCN
医学影像
医学影像数据集搜索:
- 飞桨 AI Studio :搜索医学影像
- CANCER:需要自己标注
- Kaggle:搜索英文关键词
- 吴恩达网站:注册一下
- 阿里天池:搜索医学影像
前列腺肿瘤 MRI
- 前列腺MRI图像特征:
A. 图像特点
- 组织对比度低(前列腺与周围软组织区分度不高)
- 边界模糊(特别是基底部和尖部)
- 形状变化大(个体差异、病变影响)
- 多序列特征(T1WI、T2WI、DWI等)
B. 分割难点
- 边界识别困难(与周围组织界限不清)
- 内部结构复杂(中央腺体、外周区等)
- 尺度变化(不同切片上前列腺大小不同)
- 病变影响(如肿瘤导致的形态改变)
- 需要解决的关键问题:
A. 精确度要求
- 边缘精确定位(手术规划需要)
- 内部分区识别(癌症诊断需要)
- 体积准确计算(病情评估需要)
B. 特征提取需求
- 局部细节(边界信息)
- 区域特征(内部结构)
- 空间关系(与周围器官位置关系)
- 最佳网络选择:
综合分析,适合采用 U-Net 架构为基础,结合DeepLab的特性:
A. 为什么选U-Net为基础:
优势匹配:
1. 跳跃连接保留边界细节- 有助于精确定位前列腺边界- 保留内部结构细节信息2. 对称编解码结构- 适合处理医学图像- 特征提取和重建平衡3. 在小数据集上表现好- 医学数据集通常较小- 减少过拟合风险
B. 为什么需要DeepLab特性:
互补优势:
1. 空洞卷积- 扩大感受野,看到更多上下文- 有助于理解前列腺与周围组织关系2. ASPP模块- 捕获多尺度特征- 适应不同切片上前列腺大小变化
- 具体架构建议:
改进的U-Net架构:
1. 编码器部分:- 加入空洞卷积- 增加感受野2. 解码器部分:- 保持原始U-Net结构- 保证细节重建3. 跳跃连接:- 多尺度特征融合- 注意力机制选择关键信息4. 输出层:- 多任务输出(分割+分区)- 边界增强约束
- 可能的改进方向:
A. 数据层面
- 多序列融合(T1、T2、DWI)
- 数据增强(形状变化、强度变化)
- 边界增强(手动标注重点关注)
不同模态优势互补:
- T2序列:提供最佳的解剖结构细节
- ADC序列:反映组织扩散特性,有助于区分良恶性病变
- DWI序列:对肿瘤组织高度敏感
单一模态局限性:
- 仅依赖单一模态容易出现假阳性/假阴性
- 难以准确判断病变边界和性质
B. 网络层面
- 注意力机制(关注关键区域)
- 边界增强模块(提高边界准确性)
- 3D信息利用(考虑切片间关系)
C. 损失函数
- 边界感知损失
- 形状先验约束
- 区域特异性权重
- 实践建议:
A. 基础版本
标准U-Net + 空洞卷积
- 适合数据集较小
- 计算资源有限
- 快速实现验证
B. 进阶版本
U-Net + DeepLab特性 + 注意力机制
- 数据集充足
- 有较强算力
- 追求更高精度
C. 完整版本
多模态融合 + 3D信息 + 多任务学习
- 临床应用要求高
- 资源充足
- 长期优化方案
这个方案特别适合前列腺MRI分割任务,因为它:
- 保持了边界精确性(U-Net优势)
- 提供了足够的感受野(DeepLab特性)
- 平衡了精度和复杂度
- 留有优化和扩展空间
分治
医学影像的特殊性(图像特征模糊、区域边界不清晰、组织结构复杂、病变形态多样)决定了直接检测准确率低,而分步处理既能通过逐步细化提高精度,又能满足医疗实践中对诊断过程可解释、可干预、可验证的刚性需求。
就像医生看片子一样,先找到前列腺在哪里,再仔细看是否有病变,每一步都通过多种影像互相印证,确保诊断准确性。
一、预处理阶段(数据准备)
想象您在拍照前的准备工作:
-
中央区域切割
- 就像裁剪照片,只保留重要部分
- 去掉周围无关的区域,只关注前列腺区域
-
统一尺寸
- 就像把所有照片都调整成相同大小
- 确保所有图像尺寸一致,便于后续处理
-
正规化处理
- 就像调整照片的亮度对比度
- 使不同设备拍摄的图像达到相同标准
-
数据增强
- 就像用一张照片生成多个角度的照片
- 解决医学数据样本少的问题
-
去噪处理
- 就像给照片去除杂点
- 提高图像清晰度
就像使用望远镜,先粗调(大致范围),再精调(模糊图像变清晰)。
二、粗调(找到目标)
就像在整张照片中找人脸的位置:
- 使用 YOLO 快速定位前列腺区域位置
- 只需要知道大致在哪里
三、精细分割阶段(精确描绘)
就像给人脸画轮廓:
- 先精确划分前列腺中央区域
- 再精确标出可疑病变部位
- 使用多种MRI图像确保准确性
四、结果融合阶段(综合判断)
就像医生看多张检查结果做诊断:
- 综合分析多种MRI图像的结果
- 让专家确认结果是否准确
- 生成最终的诊断建议报告
为什么要分这么多步骤?
-
降低难度:
- 把复杂问题拆分成简单步骤
- 每个步骤专注解决一个问题
-
提高准确性:
- 从粗到细逐步提高精度
- 多重验证减少错误
-
实用性强:
- 每个步骤都可以单独优化
- 出问题容易定位和修复
颅脑肿瘤 MRI
肝脏
心室
腹部多脏器 MRI
相关文章:
医学图像语义分割:前列腺肿瘤、颅脑肿瘤、腹部多脏器 MRI、肝脏 CT、3D肝脏、心室
医学图像语义分割:前列腺肿瘤、颅脑肿瘤、腹部多脏器 MRI、肝脏 CT、3D肝脏、心室 语义分割网络FCN:通过将全连接层替换为卷积层并使用反卷积上采样,实现了第一个端到端的像素级分割网络U-Net:采用对称的U形编解码器结构ÿ…...
16. 指针类型和步长概念问题
1. 项目场景: ➣ Jack Qiao对米粒说:“今天有道友遇到一个问题,举个栗子数组 arr[5] { 0 };道友发现&arr[0] 1与&arr 1打印出来的地址竟然不同。”米粒测试后果然是这样。 2. 问题描述 ☑ 举个栗子:数组 arr[5] { 0…...
【电路笔记】-布尔逻辑AND函数
逻辑AND函数 文章目录 逻辑AND函数1、概述2、逻辑 AND 函数 仅当所有输入均为 true 时,逻辑与函数输出才为 true,否则输出为 false。 1、概述 布尔代数基于逻辑函数,其中每个布尔函数(例如逻辑 AND 函数)通常具有一个…...
数据结构C语言描述3(图文结合)--双链表、循环链表、约瑟夫环问题
前言 这个专栏将会用纯C实现常用的数据结构和简单的算法;有C基础即可跟着学习,代码均可运行;准备考研的也可跟着写,个人感觉,如果时间充裕,手写一遍比看书、刷题管用很多,这也是本人采用纯C语言…...
wend看源码-APISJON
项目地址 腾讯APIJSON官方网站 定义 APIJSON 可以定义为一个面向HTTP 协议的JSON 规范,一个面向数据访问层的ORM 框架。其主要工作流程包括:前端按照既定格式组装 JSON 请求报文,通过 APIJSON-ORM 将这些报文直接转换为 SQL 语句,…...
CSS(8):盒子阴影与文字阴影
一:盒子阴影text-shadow属性 1.box-shadow:h-shadow v-shadow blur spread color inset; 默认的是外部阴影outset,不能写在代码上 2.鼠标经过盒子后的阴影 rgba透明度 3.文字阴影 text-shadow:水平偏移 垂直偏移 模糊度 阴影颜色; 注意点…...
Hadoop 系列 MapReduce:Map、Shuffle、Reduce
文章目录 前言MapReduce 基本流程概述MapReduce 三个核心阶段详解Map 阶段工作原理 Shuffle 阶段具体步骤分区(Partition)排序(Sort)分组(Combine 和 Grouping) Reduce 阶段工作原理 MapReduce 应用场景Map…...
web——sqliabs靶场——第十三关——报错注入+布尔盲注
发现是单引号加括号闭合的 尝试联合注入 发现不太行,那尝试报错注入。 测试报错注入 unameadmin) and updatexml(1,0x7e,3) -- &passwdadmin&submitSubmit 爆数据库 unameadmin) and updatexml(1,concat(0x7e,database(),0x7e),3) -- &passwdadmin&a…...
调大Vscode资源管理器字体
对于调整资源管理器字体大小(也就是下图红框),查找了网上很多方法。要么介绍的方法是调整了代码字体,要么是调节了终端字体,要么是通过整体放缩实现的调整,总之都不合适。 唯一的调整方法是在几篇CSDN里看到…...
【新人系列】Python 入门(十一):控制结构
✍ 个人博客:https://blog.csdn.net/Newin2020?typeblog 📝 专栏地址:https://blog.csdn.net/newin2020/category_12801353.html 📣 专栏定位:为 0 基础刚入门 Python 的小伙伴提供详细的讲解,也欢迎大佬们…...
后端开发详细学习框架与路线
🚀 作者 :“码上有前” 🚀 文章简介 :后端开发 🚀 欢迎小伙伴们 点赞👍、收藏⭐、留言💬 为帮助你合理安排时间,以下是结合上述学习内容的阶段划分与时间分配建议。时间安排灵活&a…...
类文件结构详解.上
字节码 在 Java 中,JVM 可以理解的代码就叫做字节码(即扩展名为 .class 的文件),它不面向任何特定的处理器,只面向虚拟机。Java 语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题&…...
【K8S问题系列 |18 】如何解决 imagePullSecrets配置正确,但docker pull仍然失败问题
如果 imagePullSecrets 配置正确,但在执行 docker pull 命令时仍然失败,可能存在以下几种原因。以下是详细的排查步骤和解决方案。 1. 检查 Docker 登录凭证 确保你使用的是与 imagePullSecrets 中相同的凭证进行 Docker 登录: 1.1 直接登录…...
Vue+Springboot用Websocket实现协同编辑
1. 项目介绍 在本文中,我们将介绍如何使用Vue.js和Spring Boot实现一个支持多人实时协同编辑的Web应用。通过WebSocket技术,我们可以实现文档的实时同步,让多个用户同时编辑同一份文档。 2. 技术栈 前端:Vue.js 3 Vuex后端&am…...
高阶C语言补充:柔性数组
C99中,结构体中最后一个元素允许时未知大小的数组,这就叫做柔性数组成员。 vs编译器也支持柔性数组。 之所以把柔性数组单独列出,是因为: 1、柔性数组是建立在结构体的基础上的。 2、柔性数组的使用用到了动态内存分配。 这使得柔…...
MYSQL——多表查询、事务和索引
概括 出现查询结果个数为笛卡尔积的原因是sql语句: select * from tb_emp,tb_dept; 没有加上where tb_emp.dept_id tb_dept.id;(where条件可以消除笛卡尔积) select * from tb_emp,tb_dept where tb_emp.dept_id tb_dept.id; 查询类型 …...
在 Swift 中实现字符串分割问题:以字典中的单词构造句子
文章目录 前言摘要描述题解答案题解代码题解代码分析示例测试及结果时间复杂度空间复杂度总结 前言 本题由于没有合适答案为以往遗留问题,最近有时间将以往遗留问题一一完善。 LeetCode - #140 单词拆分 II 不积跬步,无以至千里;不积小流&…...
Unity类银河战士恶魔城学习总结(P132 Merge skill tree with skill Manager 把技能树和冲刺技能相组合)
【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili 教程源地址:https://www.udemy.com/course/2d-rpg-alexdev/ 本章节实现了解锁技能后才可以使用技能,先完成了冲刺技能的锁定解锁 Dash_Skill.cs using System.Collections; using System…...
JavaScript 中 arguments、类数组与数组的深入解析
博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: 前端 文章目录 💯前言💯什么是 arguments 对象2.1 arguments 的定义2.2 arguments 的特性2.3 使用场景 💯深入了解 arguments 的结构3.1 arguments 的内部结构arguments 的关键属性…...
【java-Neo4j 5开发入门篇】-最新Java开发Neo4j
系列文章目录 前言 上一篇文章讲解了Neo4j的基本使用,本篇文章对Java操作Neo4j进行入门级别的阐述,方便读者快速上手对Neo4j的开发。 一、开发环境与代码 1.docker 部署Neo4j #这里使用docker部署Neo4j,需要镜像加速的需要自行配置 docker run --name…...
摄影:相机控色
摄影:相机控色 白平衡(White Balance)白平衡的作用: 白平衡的使用环境色温下相机色温下总结 白平衡偏移与包围白平衡包围 影调 白平衡(White Balance) 人眼看到的白色:会自动适应环境光线。 相…...
UI自动化测试中公认最佳的设计模式-POM
一、概念 什么是POM? POM是PageObjectModule(页面对象模式)的缩写,其目的是为了Web UI测试创建对象库。在这种模式下,应用涉及的每一个页面应该定义为一个单独的类。类中应该包含此页面上的页面元素对象和处理这些元…...
数字图像处理(2):Verilog基础语法
(1)Verilog常见数据类型: reg型、wire型、integer型、parameter型 (2)Verilog 常见进制:二进制(b或B)、十进制(d或D)、八进制(o或O)、…...
大公司如何实现打印机共享的?如何对打印机进行管控或者工号登录后进行打印?异地打印机共享的如何实现可以帮助用户在不同地理位置使用同一台打印机完成打印任务?
大公司如何实现打印机共享的?如何对打印机进行管控或者工号登录后进行打印?异地打印机共享的如何实现可以帮助用户在不同地理位置使用同一台打印机完成打印任务? 如果在局域网内,可以不需要进行二次开发,通过对打印机进…...
解决前端页面报错:Not allowed to load local resource
在前后端分离项目中,在前端页面里使用file://的绝对路径访问本地图片,在加载图片的 时候会报出Not allowed to load local resource 的错误。 这是因为浏览器出于安全因素,禁止通过绝对路径访问图片,需要通过虚拟路径进行访问。 …...
Qt 实现网络数据报文大小端数据的收发
1.大小端数据简介 大小端(Endianness)是计算机体系结构的一个术语,它描述了多字节数据在内存中的存储顺序。以下是大小端的定义和它们的特点: 大端(Big-Endian) 在大端模式中,一个字的最高有效…...
2024年11月21日Github流行趋势
项目名称:twenty 项目维护者:charlesBochet, lucasbordeau, Weiko, FelixMalfait, bosiraphael项目介绍:正在构建一个由社区支持的现代化Salesforce替代品。项目star数:21,798项目fork数:2,347 项目名称:p…...
Java的方法、基本和引用数据类型
个人的黑马程序员java笔记 目录 方法 例:方法定义和调用 方法的重载 对于byte, short, int, long类型 方法的内存 基本数据类型 引用数据类型 方法的值的传递的内存原理 方法 方法(method)是程序中最小的执行单元格式 方法定义&a…...
Spark分布式计算中Shuffle Read 和 Shuffle Write的职责和区别
在 Spark 的分布式计算中,Shuffle Read 和 Shuffle Write 是两个与数据重新分区和分发相关的重要阶段。它们的主要职责和区别如下: 1. Shuffle Write Shuffle Write 发生在上游的任务执行阶段,其作用是: 分区数据准备࿱…...
【成品文章+四小问代码更新】2024亚太杯国际赛B题基于有限差分格式的空调形状优化模型
这里仅展示部分内容,完整内容获取在文末! 基于有限差分格式的空调形状优化模型 摘 要 随着科技进步,多功能环境调节设备成为市场趋势,集成了空调、加湿器和空气 净化器功能的三合一设备能提供更舒适健康的室内环境。我们需要分析…...
实验三:构建园区网(静态路由)
目录 一、实验简介 二、实验目的 三、实验需求 四、实验拓扑 五、实验任务及要求 1、任务 1:完成网络部署 2、任务 2:设计全网 IP 地址 3、任务 3:实现全网各主机之间的互访 六、实验步骤 1、在 eNSP 中部署网络 2、配置各主机 IP …...
MySQL 三大日志详解
在 MySQL 数据库中,binlog(二进制日志)、redo log(重做日志)和 undo log(回滚日志)起着至关重要的作用。它们共同保障了数据库的高可用性、数据一致性和事务的可靠性。下面将对这三大日志进行详…...
vscode使用ssh配置docker容器环境
1 创建容器,并映射主机和容器的指定ssh服务端口 2 进入容器 docker exec -it <容器ID> /bin/bash 3在容器中安装ssh服务 apt-get update apt-get install openssh-server 接着修改ssh文件信息,将容器的10008端口暴露出来允许root用户使用ssh登录 vim /…...
Python设计模式详解之10 —— 外观模式
引言 Facade设计模式(外观模式)是一种软件设计模式,它提供了一个统一的接口来访问子系统中的一组接口。Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。当一个系统的内部实现非常复杂,或者需要与…...
[服务器] 腾讯云服务器免费体验,成功部署网站
文章目录 概要整体架构流程概要 腾讯云服务器免费体验一个月。 整体架构流程 腾讯云服务器体验一个月, 选择预装 CentOS 7.5 首要最重要的是: 添加阿里云镜像。 不然国外源速度慢, 且容易失败。 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/li…...
低速接口项目之串口Uart开发(四)——UART串口实现FPGA内部AXILITE寄存器的读写控制
本节目录 一、设计背景 二、设计思路 三、逻辑设计框架 四、仿真验证 五、上板验证 六、往期文章链接本节内容 一、设计背景 通常,芯片手册或者IP都会提供一系列的用户寄存器以及相关的定义,用于软件开发人员进行控制底层硬件来调试,或封装…...
【Datawhale组队学习】模型减肥秘籍:模型压缩技术4——神经网络架构搜索
神经网络架构搜索是通过自动化方法来设计神经网络架构的一种技术,与传统手工设计网络结构相比,NAS能够在大量可能的架构中进行搜索,找到最优的神经网络架构,从而减少人工调参和设计的时间。学习这章时,重点在于理解NAS…...
用el-scrollbar实现滚动条,拖动滚动条可以滚动,但是通过鼠标滑轮却无效
问题: 用elementplus实现的滚动条的页面中,滑动滚动条可以滚动,但是通过鼠标滑轮却无效,鼠标没有问题。 解决: 在开发者工具中, 元素->时间监听器中发现当我移除网页中祖先元素的滚动事件,该…...
windows下,用CMake编译qt项目,出现错误By not providing “FindQt5.cmake“...
开发环境:windows10 qt5.14, 编译器msvc2017x64,CMake3.30; 现象: CMakeList文件里,如有find_package(Qt5 COMPONENTS Widgets REQUIRED) target_link_libraries(dis_lib PRIVATE Qt5::Widgets) 用CMak…...
windows实现VNC连接ubuntu22.04服务器
最近弄了一个700块钱的mini主机,刷了ubuntu22.04系统,然后想要在笔记本上通过VNC连接,这样就有了一个linux的开发环境。最后实现的过程为: 安装vnc服务器 安装 VNC 服务器软件: sudo apt update sudo apt install t…...
SQL注入--联合注入--理论
什么是SQL注入? SQL注入(SQL Injection)是一种常见的Web安全漏洞。 形成的主要原因是web应用程序在接收相关数据参数时未做好过滤,将其直接带入到数据库中查询,导致攻击者可以拼接执行构造的SQL语句,从而获…...
LaTeX 利用注销 ccmap 宏包实现降重功能
在中文LaTeX中,ccmap 宏包的主要作用是支持复制和粘贴时正确处理中文字符的编码。它的功能对于生成的PDF文档尤其有用,使得PDF中的中文字符在被复制到其他地方时能够以正确的编码显示,而不是乱码或其他不正确的字符。 以下是ccmap的详细功能…...
NVR接入录像回放平台EasyCVR视频融合平台加油站监控应用场景与实际功能
在现代社会中,加油站作为重要的能源供应点,面临着安全监管与风险管理的双重挑战。为应对这些问题,安防监控平台EasyCVR推出了一套全面的加油站监控方案。该方案结合了智能分析网关V4的先进识别技术和EasyCVR视频监控平台的强大监控功能&#…...
经验笔记:远端仓库和本地仓库之间的连接(以Gitee为例)
经验笔记:远端仓库和本地仓库之间的连接 方法一:先创建远端仓库,再克隆到本地 创建远端仓库 登录到你的Git托管平台(如Gitee、GitHub、GitLab、Bitbucket等)。点击“New Repository”或类似按钮,创建一个新…...
趋势洞察|AI 能否带动裸金属 K8s 强势崛起?
随着容器技术的不断成熟,不少企业在开展私有化容器平台建设时,首要考虑的问题就是容器的部署环境——是采用虚拟机还是物理机运行容器?在往期“虚拟化 vs. 裸金属*”系列文章中,我们分别对比了容器部署在虚拟化平台和物理机上的架…...
数据科学与SQL:组距分组分析 | 区间分布问题
目录 0 问题描述 1 数据准备 2 问题分析 3 小结 0 问题描述 绝对值分布分析也可以理解为组距分组分析。对于某个指标而言,一个记录对应的指标值的绝对值,肯定落在所有指标值的绝对值的最小值和最大值构成的区间内,根据一定的算法&#x…...
Cesium的ClearCommand的流程
ClearCommand是在每帧渲染前可以将显存的一些状态置为初始值,就如同把擦黑板。当然也包括在绘制过程中擦掉部分的数据,就如同画家在开始绘制的时候会画导览线(如透视线),轮廓出来后这些导览线就会被擦除。 我画了一个…...
DBeaver错误:Public Key Retrieval is not allowed
问题原因 MySQL 8.0 默认使用 caching_sha2_password 认证插件,并要求客户端能够使用 RSA 公钥进行加密操作。如果客户端无法正确处理 RSA 公钥检索,就会触发这个错误。 解决方案 右键编辑连接-连接设置-属性驱动-修改allowPublicKeyRetrieval属性的值…...
slice介绍slice查看器
Android Jetpack架构组件(十)之Slices - 阅读清单 - 腾讯云开发者社区-腾讯云 slice 查看器apk 用adb intall 安装 Releases android/user-interface-samples GitHubMultiple samples showing the best practices in the user interface on Android. - Releases android/u…...
Vue移动端网页(H5)预览pdf文件(pdfh5和vue-pdf)(很详细)
我试了似乎不支持vue3 原文链接:Vue移动端网页(H5)预览pdf文件(pdfh5和vue-pdf)-阿里云开发者社区...