RingMo:基于掩码图像建模的遥感基础模型实战解析
1. 从“看图说话”到“猜图补全”为什么遥感需要自己的基础模型如果你玩过“看图说话”的游戏大概能理解传统计算机视觉模型的工作方式给它一张图它告诉你图里有什么。但遥感图像处理很多时候更像是在玩一个超高难度的“猜图补全”游戏。想象一下你拿到一张从几百公里高空拍下来的城市照片上面密密麻麻布满了成千上万个像素点你的任务是不仅要认出哪些是房子、哪些是路还得在房子被云遮住一部分、车子小得像蚂蚁、农田纹理复杂多变的情况下依然能准确判断。过去十年我们做遥感分析有个“捷径”直接用那些在ImageNet一个包含上千万张日常照片的数据集上预训练好的模型比如ResNet、VGG然后在自己的遥感数据上微调一下。这招早期挺管用毕竟省时省力。但干久了就会发现不对劲就像用识别猫猫狗狗的模型去分析卫星影像总有点“水土不服”。我遇到过不少这样的坑。比如模型在识别自然场景里的大目标一辆车、一个人时很准但一到遥感图像里那些密集排列的小型储油罐、整齐停放的车辆或者被阴影遮挡了一半的建筑物准确率就直线下降。问题出在哪领域鸿沟。自然照片和遥感影像根本就是两个世界视角不同我们平时拍的照片多是水平视角而遥感是“上帝视角”物体没有固定的朝向一个长方形可能是房子也可能是操场。目标尺度差异巨大一张图里可能同时存在横跨数公里的山脉和只有几个像素的汽车。背景极其复杂地物与背景常常交融信噪比低还有云、雾、光照变化等各种干扰。所以我们需要一个从海量遥感数据本身“土生土长”出来的大脑一个专为遥感打造的基础模型。这就是RingMo要解决的核心问题。它不再依赖自然图像的“经验”而是直接让模型从200万张真实的、未标注的遥感图像中通过“自监督学习”的方式自己去发现和总结遥感世界的通用规律。这就像是给AI专门报了一个“遥感图像解读”的强化训练营而不是让它泛泛地学习“看图识字”。2. RingMo的核心绝招PIMask策略如何“看见”微小目标RingMo框架的精髓在于它采用了一种叫做掩码图像建模的自监督学习方法。这个方法听起来高大上其实原理很直观把一张图的一部分随机遮住掩码然后让模型根据剩下的部分去猜被遮住的部分原来长什么样。通过这个“猜谜”游戏模型被迫去深入理解图像的内部结构和上下文关系从而学到强大的特征表示能力。但是直接把自然图像上成功的掩码策略比如ViT用的随机块掩码照搬到遥感图像上会出大问题。这就是RingMo团队发现的第一个关键痛点也是他们提出PIMask策略的动机。2.1 随机掩码的“盲区”小目标的灾难在自然图像里目标通常比较大且突出比如一只占据画面中央的猫。随机遮挡一些图像块模型还能从周围块推断出猫的大致轮廓。但在遥感图像里很多关键目标比如船舶、车辆、小型建筑本身可能就只有几个像素大小恰好分布在一个图像块里。如果采用传统的随机掩码一旦这个包含小目标的整块被完全遮住对于模型来说这个小目标就相当于“凭空消失”了。模型在重建时根本没有关于它的任何像素信息作为线索自然无法学会如何表征它。这会导致预训练出的模型对这类密集小目标极不敏感在下游的目标检测、实例分割等任务中表现乏力。2.2 PIMask局部不完全掩码的智慧RingMo提出的Patch Incomplete Mask策略巧妙地解决了这个问题。它的核心思想是不把一个图像块“一棍子打死”式地完全掩码而是在每个被选中的掩码块内部随机保留一部分像素。我打个比方传统的随机掩码像是用整块的黑色贴纸把拼图的一部分完全盖住而PIMask则是用一张带有很多随机小孔的黑色贴纸去盖虽然大部分遮住了但还能透过小孔看到底下的一星半点颜色和纹理。这样做的好处立竿见影保留关键线索即使一个包含小汽车的图像块被标记为“掩码块”由于块内随机的像素被保留模型依然有机会“瞥见”车轮或车顶的一角。这一点点信息对于重建整个目标至关重要。维持掩码率为了保持预训练任务的难度不能太简单PIMask会相应增加掩码块的数量确保总体被掩码的像素比例和传统方法保持一致。这样模型既学习了全局上下文又没有丢失局部细节。适配复杂背景遥感图像背景复杂PIMask保留的像素点可能来自地物也可能来自背景。这反而迫使模型更仔细地分析像素间的关联区分什么是“目标”什么是“背景噪声”从而学到更鲁棒的特征。在实际的代码实现中PIMask策略会先通过一个随机标签生成器确定哪些块需要被掩码然后为每个掩码块生成一个二值的掩码张量其中0代表掩码1代表保留。最后图像块与这个掩码张量进行逐元素相乘就得到了部分掩码后的结果。这个设计非常简洁但效果显著。3. 手把手实战搭建你的第一个RingMo预训练环境理论说得再多不如动手跑一遍。下面我就以最常用的ViT-Base架构为例带你一步步搭建RingMo的预训练环境。这里假设你已经有基本的Python和深度学习框架使用经验。3.1 环境配置与依赖安装RingMo官方提供了PyTorch和MindSpore两个版本的代码。为了更广泛的适用性我们以PyTorch版本为例。首先克隆代码仓库并安装依赖。# 克隆RingMo官方仓库 git clone https://github.com/comeony/RingMo.git cd RingMo # 创建并激活Python虚拟环境推荐 python -m venv ringmo_env source ringmo_env/bin/activate # Linux/Mac # ringmo_env\Scripts\activate # Windows # 安装PyTorch请根据你的CUDA版本选择合适的命令 pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 # 以CUDA 11.8为例 # 安装其他依赖 pip install -r requirements.txtrequirements.txt通常包含timm,einops,opencv-python,scikit-image等库。如果遇到问题可以逐个手动安装。3.2 准备你的遥感数据集RingMo论文使用了200万张图像的自建数据集但对于我们个人研究或小规模实验完全可以从公开数据集入手。关键是要构建一个无标签的大规模图像集合用于预训练。这里推荐几个常用的公开遥感数据集你可以将它们合并使用Million-AID: 一个包含100万张场景分类图像的大型数据集。BigEarthNet: 欧洲地区的大量多光谱遥感图像块。UC Merced Land Use: 虽然小但图像质量高可作为补充。从Google Earth Engine或Sentinel Hub批量下载你可以编写脚本在全球范围内随机采样不同季节、不同地貌的RGB图像。你需要将所有这些图像统一处理为固定的尺寸如224x224或448x448并整理成一个简单的文件列表记录每张图片的路径。数据加载器会从这个列表读取。3.3 配置模型与PIMask策略RingMo的核心模型定义在ringmo_framework/arch/ringmo.py中。我们主要关注如何构建模型并应用PIMask。import torch from ringmo_framework.arch.ringmo import ringmo_vit_base_p16 from ringmo_framework.datasets.mim_dataset import build_loader from ringmo_framework.engine.pretrain_engine import PretrainEngine from ringmo_framework.models.pimask import PIMaskGenerator # 1. 初始化模型 model ringmo_vit_base_p16(img_size224, in_chans3) print(fModel created with {sum(p.numel() for p in model.parameters())/1e6:.2f}M parameters) # 2. 初始化PIMask生成器 # mask_ratio: 总体掩码比例例如0.75 # mask_patch_size: 对应ViT的patch大小这里是16 # incomplete_ratio: 每个掩码块内保留像素的比例例如0.2保留20% mask_generator PIMaskGenerator( input_size(224, 224), mask_patch_size16, model_patch_size16, mask_ratio0.75, incomplete_ratio0.2 ) # 3. 构建数据加载器 # 假设你有一个文本文件train_list.txt里面每行是一张图片的路径 data_loader build_loader( data_pathpath/to/your/train_list.txt, batch_size64, num_workers8, is_trainTrue, mask_generatormask_generator ) # 4. 定义优化器和损失函数 optimizer torch.optim.AdamW(model.parameters(), lr1.5e-4, weight_decay0.05) criterion torch.nn.L1Loss(reductionnone) # RingMo使用L1重建损失关键参数解析mask_ratio (0.75): 这是MIM的经典高掩码比例旨在增加任务难度迫使模型学习更强表征。incomplete_ratio (0.2): 这是PIMask的灵魂参数。它控制每个掩码块内保留多少比例的像素。论文中通过实验发现这个值在0.1到0.3之间效果较好既能保留信息又不让重建任务过于简单。model_patch_size: 必须与ViT的patch_size一致这里是16。3.4 运行预训练循环配置好一切后就可以开始漫长的预训练过程了。这里给出一个简化的训练循环核心逻辑model.train() model.cuda() # 假设使用GPU for epoch in range(total_epochs): # 通常需要几百个epoch for batch_idx, (images, masks, _) in enumerate(data_loader): # masks由PIMask生成器产生 images images.cuda() masks masks.cuda() # 前向传播模型根据掩码后的图像预测原始图像 reconstructed model(images, masks) # 计算损失仅计算被掩码区域的L1损失 loss criterion(reconstructed, images) loss (loss * masks).sum() / (masks.sum() 1e-5) # 按掩码区域平均 # 反向传播与优化 optimizer.zero_grad() loss.backward() optimizer.step() if batch_idx % 100 0: print(fEpoch [{epoch}/{total_epochs}], Step [{batch_idx}/{len(data_loader)}], Loss: {loss.item():.4f}) # 每个epoch结束后可以保存一次检查点 torch.save({ epoch: epoch, model_state_dict: model.state_dict(), optimizer_state_dict: optimizer.state_dict(), loss: loss.item(), }, fcheckpoint_ringmo_vit_base_epoch_{epoch}.pth)预训练非常消耗计算资源和时间。在8张V100 GPU上用200万张图训练300个epoch可能需要数周。对于个人实验可以大幅减少数据量、图像尺寸或模型规模来验证流程。4. 下游任务微调让RingMo模型真正为你所用预训练得到一个“通才”模型后我们就要把它变成某个具体任务的“专家”。这个过程叫微调。RingMo论文在场景分类、目标检测、语义分割和变化检测四个经典任务上验证了其有效性。这里我以场景分类和目标检测为例展示如何操作。4.1 场景分类微调以NWPU-RESISC45数据集为例场景分类任务相对直接。我们只需要在预训练好的RingMo编码器ViT后面接上一个简单的分类头通常是全局平均池化全连接层然后在有标签的分类数据集上训练所有参数。import torch.nn as nn from ringmo_framework.arch.ringmo import ringmo_vit_base_p16 # 1. 加载预训练权重 pretrained_model ringmo_vit_base_p16(img_size224) checkpoint torch.load(path/to/your/pretrained_checkpoint.pth, map_locationcpu) # 注意预训练模型输出是重建后的图像我们需要的是编码器的权重 # 通常需要根据键名匹配加载encoder部分的权重 pretrained_dict {k.replace(encoder., ): v for k, v in checkpoint[model_state_dict].items() if encoder in k} model.encoder.load_state_dict(pretrained_dict, strictFalse) # strictFalse允许部分加载 # 2. 为分类任务改造模型 class RingMoForSceneClassification(nn.Module): def __init__(self, pretrained_encoder, num_classes45): # NWPU有45类 super().__init__() self.encoder pretrained_encoder.encoder # 提取出ViT编码器 self.encoder.num_classes num_classes # 临时修改适应部分ViT结构 # 添加分类头 self.global_pool nn.AdaptiveAvgPool1d(1) self.head nn.Linear(self.encoder.embed_dim, num_classes) def forward(self, x): # 提取特征 [B, L, C] features self.encoder(x, maskNone) # 微调时不需要掩码 # 取[CLS] token的特征或对所有token特征做平均 cls_token features[:, 0] # 假设使用ViT的[CLS] token # 或者: pooled features.mean(dim1) out self.head(cls_token) return out model_cls RingMoForSceneClassification(pretrained_model) model_cls.train() # 3. 使用分类数据集如NWPU进行微调 # 使用交叉熵损失和较小的学习率例如预训练的1/10 criterion_cls nn.CrossEntropyLoss() optimizer_cls torch.optim.AdamW(model_cls.parameters(), lr1.5e-5) # ... 正常的分类训练循环4.2 目标检测微调以DOTA数据集为例目标检测任务更复杂通常需要将RingMo作为特征提取骨干网络集成到像Faster R-CNN、RetinaNet或DETR这样的检测框架中。以MMDetection框架集成RingMo-ViT为例注册新的骨干网络你需要编写一个继承自BaseModule的类将RingMo的ViT编码器包装成MMDetection能识别的骨干网络。特征金字塔网络ViT是单尺度输出而检测需要多尺度特征。一种常见做法是使用ViT的最后几个Transformer块的输出通过卷积或上采样构建简单的特征金字塔。修改配置文件在MMDetection的配置文件中将骨干网络替换为你新注册的RingMoViT并冻结部分底层参数可选以防止过拟合。# 示例一个简化的RingMo-ViT骨干网络包装器 from mmdet.registry import MODELS from mmengine.model import BaseModule import torch.nn as nn MODELS.register_module() class RingMoViT(BaseModule): def __init__(self, pretrained_path, out_indices(3, 6, 9, 12), **kwargs): # 选择不同深度的层输出 super().__init__() # 加载RingMo模型并提取编码器 from ringmo_framework.arch.ringmo import ringmo_vit_base_p16 backbone ringmo_vit_base_p16(img_size224) checkpoint torch.load(pretrained_path, map_locationcpu) state_dict {k.replace(encoder., ): v for k, v in checkpoint[model_state_dict].items() if encoder in k} backbone.encoder.load_state_dict(state_dict, strictFalse) self.vit backbone.encoder self.out_indices out_indices self.num_features [self.vit.embed_dim] * len(out_indices) # 可能需要的额外层用于将ViT输出适配到CNN特征图格式 self.norms nn.ModuleList([nn.LayerNorm(self.vit.embed_dim) for _ in out_indices]) self.projs nn.ModuleList([nn.Conv2d(self.vit.embed_dim, 256, kernel_size1) for _ in out_indices]) def forward(self, x): B, C, H, W x.shape # ViT需要将图像分割成patch序列 x self.vit.patch_embed(x) # [B, L, C] cls_token self.vit.cls_token.expand(B, -1, -1) x torch.cat((cls_token, x), dim1) x x self.vit.pos_embed outs [] for i, blk in enumerate(self.vit.blocks): x blk(x) if i in self.out_indices: # 取出特征去掉cls_token并reshape回空间格式 feat x[:, 1:].permute(0, 2, 1).reshape(B, -1, H//16, W//16) # 假设patch_size16 feat self.norms[self.out_indices.index(i)](feat.permute(0,2,3,1)).permute(0,3,1,2) feat self.projs[self.out_indices.index(i)](feat) outs.append(feat) return tuple(outs)然后在MMDetection的配置文件中你就可以像使用ResNet一样使用RingMoViT作为骨干网络了。微调时使用目标检测数据如DOTA需处理成COCO格式进行训练。由于预训练模型已经学到了强大的特征通常微调几十个epoch就能达到甚至超过从零训练或ImageNet预训练的效果。5. 避坑指南与效果优化我踩过的那些雷在实际复现和应用RingMo的过程中我总结了一些容易出问题的地方和优化技巧希望能帮你少走弯路。5.1 数据准备的陷阱图像尺寸不一致RingMo的ViT要求输入尺寸固定且能被patch_size整除如224/1614。务必在预处理阶段将所有图像统一缩放或中心裁剪到标准尺寸。直接丢入不同尺寸的图会导致位置编码错乱。数据量不足自监督学习非常依赖数据量。如果只有几万张图效果可能不明显。尽量扩充数据源甚至可以考虑使用数据增强来“创造”更多样本如随机裁剪、颜色抖动、旋转等但要注意遥感图像的旋转对称性例如建筑物旋转后可能不真实。波段问题RingMo论文主要针对RGB三通道图像。如果你有多光谱数据如4波段RGBN需要修改模型输入通道数in_chans和第一层卷积并考虑是否需要对不同波段进行归一化。5.2 训练过程的调参经验学习率设置预训练阶段使用类似AdamW的优化器学习率可以设得稍高如1.5e-4。微调阶段学习率一定要调小通常是预训练的1/10到1/100防止破坏已经学到的良好特征。掩码比例与不完全比例mask_ratio0.75是经过验证的较优值不建议轻易调低。incomplete_ratio是PIMask的关键在0.15到0.25之间多尝试。比例太低如0.05保留信息太少比例太高如0.5则任务太简单模型学不到深层特征。长训练周期自监督预训练收敛慢不要指望几十个epoch就出好结果。论文中训练了300甚至800个epoch。如果资源有限可以尝试在更大的批次大小和更长的训练时间之间做权衡。使用梯度累积可以模拟大批次。损失不下降如果重建损失L1 Loss一直很高或波动大检查数据预处理像素值是否归一化到[0,1]或[-1,1]、掩码生成是否正确、模型结构是否有误。可以可视化一下掩码后的输入和模型的初步重建输出看是否合理。5.3 模型架构的选择RingMo支持ViT和Swin Transformer两种编码器。ViT结构简单全局注意力对长距离依赖建模好但计算量大尤其对高分辨率图像。适合计算资源充足且任务需要全局信息的场景如场景分类。Swin Transformer引入滑动窗口和分层设计计算复杂度与图像大小呈线性关系效率更高并且能像CNN一样输出多尺度特征图非常适合需要密集预测的下游任务如目标检测和语义分割。如果你的主要任务是检测或分割我强烈建议从Swin版本开始。5.4 下游任务适配技巧分层特征提取对于检测和分割不要只用ViT最后一层的输出。像前面示例那样提取中间多层的特征构建特征金字塔能显著提升对小目标的检测能力。部分冻结在数据量较小的下游任务上微调时可以冻结骨干网络RingMo编码器的前几层只训练后面的层和任务头。这能防止过拟合并加快训练速度。学习率分层衰减对骨干网络设置更小的学习率对随机初始化的分类头或检测头设置更大的学习率。这可以通过优化器的参数组来实现。最后效果验证不要只看准确率。多做一些可视化分析比如在目标检测任务中看看模型在那些过去容易漏检的密集小目标上如停车场车辆、港口船舶的检测效果是否有提升在分割任务中观察地物边界是否更清晰。这些直观的对比往往比数字的提升更能说明RingMo带来的价值。

相关新闻

Keil uVision5 MDK安装与注册全攻略:从下载到激活一步到位

Keil uVision5 MDK安装与注册全攻略:从下载到激活一步到位

1. 为什么你需要Keil MDK?从零开始的认知 如果你刚刚开始接触单片机或者嵌入式开发,听到“Keil”这个名字可能会有点懵。别担心,几年前我第一次接触它的时候,感觉也差不多。简单来说,Keil MDK(Microcontrol…

2026/7/2 8:13:01 阅读更多 →
深度学习中的空洞卷积:如何通过指数级感受野提升模型性能

深度学习中的空洞卷积:如何通过指数级感受野提升模型性能

1. 从“近视眼”到“千里眼”:感受野到底是个啥? 咱们玩深度学习的,尤其是搞计算机视觉的,总听人念叨“感受野”这个词。听起来挺玄乎,其实理解起来特别简单。你可以把它想象成模型里每个“小侦察兵”的“视力范围”。…

2026/7/3 3:17:16 阅读更多 →
保姆级教程:用万物识别模型提取图片文字,小白也能轻松学会

保姆级教程:用万物识别模型提取图片文字,小白也能轻松学会

保姆级教程:用万物识别模型提取图片文字,小白也能轻松学会 1. 从零开始:为什么你需要这个工具? 你是不是经常遇到这种情况:看到一张图片里有重要的文字信息,比如一张会议通知截图、一份产品海报&#xff…

2026/7/3 14:43:32 阅读更多 →

最新新闻

告别Selenium弹窗噩梦:Playwright实现无头浏览器文件自动下载实战

告别Selenium弹窗噩梦:Playwright实现无头浏览器文件自动下载实战

1. 项目概述:为什么我们要告别Selenium?如果你做过Web自动化测试或者数据抓取,尤其是涉及到文件下载的场景,那你大概率经历过“弹窗噩梦”。浏览器原生的“另存为”对话框,就像一堵无法逾越的高墙,横亘在你…

2026/7/5 0:39:55 阅读更多 →
从光学到产品:护眼钢化膜的技术原理与实现路径深度解析(以悟赫德 scinique 技术为例)

从光学到产品:护眼钢化膜的技术原理与实现路径深度解析(以悟赫德 scinique 技术为例)

1. 引言:为什么我们需要 "护眼" 的手机膜?随着 OLED 屏幕在智能手机中的全面普及,以及用户日均用屏时长的不断增加(据统计,2026 年国内用户日均手机使用时长已超过 6.5 小时),视疲劳正…

2026/7/5 0:39:55 阅读更多 →
ASM330LHH与PIC18F25K80的工业级运动跟踪系统设计

ASM330LHH与PIC18F25K80的工业级运动跟踪系统设计

1. 从传感器到系统:ASM330LHH与PIC18F25K80的硬件搭档当我在工业自动化项目中第一次接触到ASM330LHH这颗6DoF惯性测量单元(IMU)时,立刻被它的性能参数所震撼。作为意法半导体MEMS传感器家族的重要成员,它在一个3x2.5x0.83mm的封装内集成了三轴…

2026/7/5 0:35:54 阅读更多 →
Python3与Java Hutool实现SM2国密算法跨语言加解密互通方案

Python3与Java Hutool实现SM2国密算法跨语言加解密互通方案

1. 项目概述与核心价值最近在做一个需要跨语言数据交换的项目,后端是Java,用到了Hutool这个“瑞士军刀”库来处理SM2国密算法的加解密,而另一个数据处理服务是用Python3写的。这就引出了一个很实际的问题:Java这边用Hutool加密的数…

2026/7/5 0:33:53 阅读更多 →
电商App签名逆向实战:从x-sign/x-miniwua看移动端安全防线

电商App签名逆向实战:从x-sign/x-miniwua看移动端安全防线

1. 项目概述:为什么我们要研究x-sign/x-miniwua? 如果你做过电商数据相关的爬虫或者自动化工具,那么“签名”这个词对你来说一定不陌生。它就像一道门禁,横亘在你和服务器数据之间。而某宝的 x-sign 和 x-miniwua &#xff0c…

2026/7/5 0:27:49 阅读更多 →
AI绘画提示词编写与优化全指南

AI绘画提示词编写与优化全指南

1. AI绘画提示词(Prompt)编写核心逻辑解析AI绘画的核心在于将自然语言描述转化为视觉元素,这个过程本质上是一种跨模态的信息转换。理解这个转换机制是编写优质Prompt的基础。现代AI绘画模型如Stable Diffusion、MidJourney都建立在扩散模型(Diffusion Model)架构上…

2026/7/5 0:25:48 阅读更多 →

日新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻