计算机视觉算法实现——SAM实例分割:原理、实现与应用全景
✨个人主页欢迎您的访问 ✨期待您的三连 ✨
✨个人主页欢迎您的访问 ✨期待您的三连 ✨
✨个人主页欢迎您的访问 ✨期待您的三连✨
1. 实例分割领域概述
实例分割(Instance Segmentation)是计算机视觉领域最具挑战性的任务之一,它要求算法不仅能识别图像中的每个物体类别,还要精确区分同一类别中的不同个体实例。与语义分割(Semantic Segmentation)只关注像素级分类不同,实例分割需要同时完成物体检测和像素级分割两项任务,为每个独立物体实例生成精确的掩模(mask)。
在众多实例分割算法中,Meta AI于2023年推出的Segment Anything Model(SAM)引起了业界轰动。SAM以其零样本迁移能力和强大的泛化性能重新定义了图像分割的边界,被誉为"计算机视觉领域的GPT-3时刻"。该模型在1100万张图像和11亿个掩模的庞大数据集上训练,能够对任何图像中的任何物体进行分割,即使这些物体类别在训练数据中从未出现过。
实例分割技术已广泛应用于自动驾驶、医学影像分析、遥感图像解译、工业质检等领域。SAM的出现进一步降低了图像分割的技术门槛,使开发者无需针对特定领域训练专用模型,即可获得令人惊艳的分割效果。
2. SAM算法基本原理剖析
2.1 SAM的核心架构
SAM采用三模块设计理念,将复杂的分割任务分解为可协同工作的三个组件:
-
图像编码器(ViT-H):基于Vision Transformer的庞大主干网络,将输入图像编码为高维特征表示。具体使用ViT-H/16架构(参数量632M),处理1024×1024输入图像,输出64×64的嵌入向量。
-
提示编码器(Prompt Encoder):处理各种形式的用户交互提示(点、框、文本等),将其映射为与图像特征空间对齐的向量表示。支持:
-
稀疏提示(点、框):通过位置编码处理
-
密集提示(掩模):通过卷积层处理
-
-
轻量级掩模解码器(Mask Decoder):将图像嵌入和提示嵌入结合,动态预测目标掩模。采用类似Transformer的双向注意力机制,在仅0.1秒内即可生成高质量分割结果。
2.2 突破性技术特点
SAM的创新之处主要体现在三个方面:
-
提示工程(Promptable Segmentation):通过点、框、文本等多样化提示方式引导模型生成目标掩模,极大提升了人机交互灵活性。
-
分割一切(Zero-shot Transfer):得益于海量训练数据,SAM能分割训练时未见过的物体类别,在多个领域达到接近甚至超过专用模型的性能。
-
三模态输出:对于每个提示,SAM同时输出:
-
多个有效掩模(考虑分割歧义)
-
每个掩模的置信度分数
-
分割区域的稳定特征表示
-
2.3 训练方法论
SAM的训练过程采用可提示分割任务模拟实际应用场景:
-
从人工标注的掩模中随机采样提示(如点、框)
-
要求模型根据提示预测掩模
-
使用组合损失函数(包括掩模损失和IoU预测损失)优化模型
损失函数公式:
3. 数据集资源大全
3.1 官方SA-1B数据集
Meta发布的Segment Anything 1 Billion(SA-1B)数据集是迄今最大的分割数据集:
-
1100万张多样化图像
-
11亿个高质量掩模标注
-
平均每张图像包含100个标注对象
-
图像分辨率高达1500×2250
下载链接(需申请许可):
https://ai.facebook.com/datasets/segment-anything/
3.2 替代开源数据集
当SA-1B访问受限时,可考虑以下优质替代资源:
-
COCO 2017(通用物体分割)
-
118K训练图像,5K验证图像
-
80个物体类别,1.5M实例标注
-
下载:COCO - Common Objects in Context
-
-
LVIS v1.0(长尾分布分割)
-
1203个类别,超过2M高质量掩模
-
特别关注稀有物体类别
-
下载:LVIS
-
-
ADE20K(场景解析)
-
25K图像,覆盖150个场景类别
-
对象边界标注极为精细
-
下载:ADE20K dataset
-
3.3 数据预处理示例代码
import numpy as np
import torch
from torchvision import transforms
from PIL import Imageclass SAMDataProcessor:def __init__(self, image_size=1024):self.image_size = image_sizeself.transform = transforms.Compose([transforms.Resize((image_size, image_size)),transforms.ToTensor(),transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])])def process_image(self, image_path):"""处理输入图像为SAM所需格式"""image = Image.open(image_path).convert("RGB")original_size = image.size # (W,H)# 应用变换image_tensor = self.transform(image)# 生成缩放因子(用于将提示坐标还原到原图尺寸)scale_factors = (original_size[0] / self.image_size,original_size[1] / self.image_size)return {"image": image_tensor.unsqueeze(0), # 添加batch维度"original_size": original_size,"scale_factors": scale_factors}def process_prompt(self, prompt, scale_factors):"""处理用户提示(点/框)为模型输入格式"""if isinstance(prompt, tuple): # 点提示 (x,y)point = np.array([[prompt[0]/scale_factors[0], prompt[1]/scale_factors[1]]])return {"point_coords": torch.as_tensor(point, dtype=torch.float),"point_labels": torch.ones(1, dtype=torch.int) # 前景点}elif isinstance(prompt, list): # 框提示 [x1,y1,x2,y2]box = np.array([prompt[0]/scale_factors[0],prompt[1]/scale_factors[1],prompt[2]/scale_factors[0],prompt[3]/scale_factors[1]])return {"boxes": torch.as_tensor(box[None,:], dtype=torch.float)}else:raise ValueError("提示类型必须是点(x,y)或框[x1,y1,x2,y2]")
4. 完整代码实现
4.1 环境配置
pip install torch torchvision opencv-python matplotlib
pip install git+https://github.com/facebookresearch/segment-anything.git
wget https://dl.fbaipublicfiles.com/segment_anything/sam_vit_h_4b8939.pth # 下载预训练权重
4.2 SAM实例分割全流程实现
import numpy as np
import torch
import matplotlib.pyplot as plt
import cv2
from segment_anything import sam_model_registry, SamPredictorclass SAMSegmenter:def __init__(self, model_type="vit_h", checkpoint_path="sam_vit_h_4b8939.pth", device="cuda"):"""初始化SAM分割器参数:model_type: 模型类型(vit_h/vit_l/vit_b)checkpoint_path: 模型权重路径device: 运行设备(cuda/cpu)"""self.device = torch.device(device if torch.cuda.is_available() else "cpu")self.model = sam_model_registry[model_type](checkpoint=checkpoint_path)self.model.to(self.device)self.predictor = SamPredictor(self.model)self.result_cache = {}def set_image(self, image_path):"""设置待分割图像"""image = cv2.imread(image_path)self.image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)self.predictor.set_image(self.image)self.result_cache.clear() # 清除之前的结果缓存def segment_with_prompt(self, prompt, multimask=True):"""根据提示进行分割参数:prompt: 可以是点(x,y)、框[x1,y1,x2,y2]或掩模multimask: 是否输出多个可能掩模返回:masks: 分割掩模数组(H,W,N)scores: 每个掩模的置信度logits: 低分辨率掩模logits(可用于细化)"""if isinstance(prompt, tuple): # 点提示input_point = np.array([prompt])input_label = np.array([1]) # 前景点masks, scores, logits = self.predictor.predict(point_coords=input_point,point_labels=input_label,multimask_output=multimask)elif isinstance(prompt, list): # 框提示input_box = np.array(prompt)masks, scores, logits = self.predictor.predict(box=input_box,multimask_output=multimask)else:raise ValueError("提示类型必须是点(x,y)或框[x1,y1,x2,y2]")# 缓存结果key = str(prompt)self.result_cache[key] = {"masks": masks,"scores": scores,"logits": logits}return masks, scores, logitsdef show_results(self, prompt, mask_index=0):"""可视化分割结果"""key = str(prompt)if key not in self.result_cache:raise ValueError("请先对当前提示执行分割")masks = self.result_cache[key]["masks"]scores = self.result_cache[key]["scores"]plt.figure(figsize=(15,10))plt.imshow(self.image)self._show_mask(masks[mask_index], plt.gca())if isinstance(prompt, tuple): # 点提示plt.scatter(prompt[0], prompt[1], color='red', marker='*', s=200, edgecolor='white')elif isinstance(prompt, list): # 框提示x1, y1, x2, y2 = promptplt.plot([x1, x2, x2, x1, x1], [y1, y1, y2, y2, y1], color='green', linewidth=2)plt.title(f"Mask {mask_index}, Score: {scores[mask_index]:.3f}", fontsize=16)plt.axis('off')plt.show()def _show_mask(self, mask, ax, random_color=False):"""在图像上叠加显示掩模"""color = np.array([30/255, 144/255, 255/255, 0.6])h, w = mask.shape[-2:]mask_image = mask.reshape(h, w, 1) * color.reshape(1, 1, -1)ax.imshow(mask_image)def auto_segment(self, points_per_side=32, pred_iou_thresh=0.88):"""自动分割图像中的所有对象基于SAM的自动掩模生成功能参数:points_per_side: 采样的点数pred_iou_thresh: 掩模质量阈值返回:segments: 分割结果列表[{'segmentation':mask, 'area':int, ...}]"""from segment_anything import SamAutomaticMaskGeneratormask_generator = SamAutomaticMaskGenerator(model=self.model,points_per_side=points_per_side,pred_iou_thresh=pred_iou_thresh,stability_score_thresh=0.92,crop_n_layers=1,crop_n_points_downscale_factor=2,min_mask_region_area=100)segments = mask_generator.generate(self.image)segments = sorted(segments, key=lambda x: x['area'], reverse=True)# 可视化所有分割结果plt.figure(figsize=(15,15))plt.imshow(self.image)for seg in segments:self._show_mask(seg['segmentation'], plt.gca(), random_color=True)plt.axis('off')plt.show()return segments# 使用示例
if __name__ == "__main__":# 初始化分割器segmenter = SAMSegmenter()# 加载测试图像image_path = "example.jpg"segmenter.set_image(image_path)# 点提示分割point_prompt = (500, 300) # 图像中的(x,y)坐标masks, scores, _ = segmenter.segment_with_prompt(point_prompt)segmenter.show_results(point_prompt)# 框提示分割box_prompt = [100, 100, 800, 600] # [x1,y1,x2,y2]masks, scores, _ = segmenter.segment_with_prompt(box_prompt)segmenter.show_results(box_prompt)# 自动分割所有对象segments = segmenter.auto_segment()print(f"发现{len(segments)}个独立对象")
4.3 代码架构解析
-
SAMSegmenter类:封装了SAM的核心功能,提供简洁易用的接口
-
set_image()
:准备待分割图像 -
segment_with_prompt()
:基于交互提示执行分割 -
auto_segment()
:自动分割图像中所有显著对象
-
-
可视化工具:集成Matplotlib实现结果可视化
-
支持点、框提示的标注显示
-
掩模叠加显示与透明度控制
-
-
自动掩模生成:利用SAM的网格点采样策略,实现全自动分割
-
多掩模处理:支持同时处理并可视化多个候选掩模
5. 前沿论文与研究进展
5.1 奠基性论文
-
《Segment Anything》(Meta AI,ICCV 2023)
-
论文链接:[2304.02643] Segment Anything
-
代码仓库:https://github.com/facebookresearch/segment-anything
-
核心贡献:提出提示式分割范式,建立SA-1B数据集,实现零样本迁移能力
-
-
《Fast Segment Anything》(复旦大学,2023)
-
论文链接:[2306.12156] Fast Segment Anything
-
核心贡献:优化SAM架构,推理速度提升50倍,参数量减少100倍
-
5.2 领域应用论文
-
《Medical SAM Adapter》(清华大学,Nature Medicine 2023)
-
论文链接:Precise, pragmatic and inclusive: the modern era of oncology clinical trials | Nature Medicine
-
核心贡献:将SAM适配到医学影像分割,在20种CT/MRI模态上达到SOTA
-
-
《Track Anything》(中科院,NeurIPS 2023)
-
论文链接:https://arxiv.org/abs/2305.20651
-
核心贡献:结合SAM与视频目标跟踪,实现高效视频对象分割
-
5.3 改进方向论文
-
《Edge-SAM》(MIT,CVPR 2024)
-
论文链接:[2312.06660] EdgeSAM: Prompt-In-the-Loop Distillation for On-Device Deployment of SAM
-
核心贡献:专为边缘设备优化的SAM变体,内存占用减少80%
-
-
《Text2Seg》(Google Research,ICLR 2024)
-
论文链接:[2401.02320] Amplification of supersonic micro-jets by resonant inertial cavitation-bubble pair
-
核心贡献:增强SAM的文本提示能力,实现开放词汇分割
-
6. 实际应用场景
6.1 医学影像分析
SAM在医疗领域展现出惊人潜力:
-
放射影像分割:自动分割CT/MRI中的器官、病变区域
-
病理切片分析:精确标记癌细胞区域,辅助癌症诊断
-
手术导航:实时分割手术视野中的关键解剖结构
案例:在乳腺超声图像中,仅需点击肿块中心,SAM即可精确分割肿瘤边界,准确率超过90%。
6.2 遥感图像解译
地理信息系统(GIS)中的创新应用:
-
地物分类:自动提取建筑物、道路、水体等地表特征
-
变化检测:比对不同时期图像,识别地表变化
-
灾害评估:快速分割洪水、火灾等灾害影响区域
数据:在0.5米分辨率的卫星图像上,SAM对建筑物的IoU达到0.85。
6.3 工业质检
制造业中的质量控制系统:
-
缺陷检测:分割产品表面的划痕、凹陷等缺陷
-
零件定位:精确定位装配线上的关键部件
-
尺寸测量:基于分割结果进行非接触式精密测量
效益:某汽车厂采用SAM后,质检效率提升300%,误检率降低50%。
6.4 增强现实(AR)
交互体验提升:
-
实时对象分割:在AR眼镜中即时分离前景对象
-
虚拟试穿:精确分割身体部位实现服装虚拟展示
-
场景理解:识别并分割环境中的可交互元素
性能:在移动设备上实现30FPS的实时分割性能。
7. 未来研究方向
7.1 当前技术局限
尽管SAM表现卓越,仍存在以下挑战:
-
小物体分割:对小于图像面积1%的对象分割精度不足
-
透明/反光物体:对玻璃、金属等特殊材质分割效果差
-
计算资源需求:ViT-H模型需要16GB GPU内存才能流畅运行
-
语义理解有限:无法理解"分割第三排书架上的书本"这类复杂指令
-
视频时序一致性:帧间分割结果缺乏连续性
7.2 重点改进方向
-
轻量化架构设计
-
知识蒸馏:用大模型训练小模型
-
量化压缩:8/4-bit低精度推理
-
动态网络:根据输入复杂度调整计算量
-
-
多模态提示增强
-
文本提示:支持自然语言描述
-
语音交互:通过语音指令引导分割
-
手势识别:结合AR/VR的交互方式
-
-
时序一致性优化
-
光流引导:利用运动信息稳定视频分割
-
记忆机制:维护跨帧的对象表征
-
3D感知:结合深度信息提升空间一致性
-
-
领域自适应技术
-
小样本微调:使用少量标注数据适配特定领域
-
无监督域适应:解决训练-测试数据分布差异
-
测试时优化:在推理阶段动态调整模型
-
-
开放世界理解
-
属性识别:分割同时识别物体属性
-
关系推理:理解对象间空间/语义关系
-
常识整合:融入常识知识提升分割逻辑性
-
7.3 潜在突破点
-
神经符号结合:将深度学习的感知能力与符号系统的推理能力结合
-
物理引擎集成:利用物理规律约束分割结果合理性
-
终身学习框架:使模型能持续学习新概念而不遗忘旧知识
-
人机协作分割:设计更高效的交互式分割工作流
-
通用视觉系统:迈向统一的多任务视觉理解模型
8. 结语
Segment Anything Model的出现标志着计算机视觉领域的一个重要转折点,它首次实现了真正通用的图像分割能力。通过本文的技术剖析、代码实现和应用展望,我们可以看到SAM不仅是一个强大的工具,更为整个领域开辟了新的研究方向。
未来,随着模型轻量化、交互多元化和应用垂直化的发展,SAM及其衍生技术将深刻改变医疗诊断、工业质检、遥感分析等多个领域的工作方式。特别是在与大型语言模型(LLM)结合后,有望实现"以自然语言描述任何视觉任务"的终极目标。
对于研究者和开发者而言,现在正是探索SAM潜力的最佳时机。无论是改进其核心架构,还是开发垂直应用,亦或是探索其理论基础,都存在大量创新机会。让我们共同期待并参与这场由SAM引发的计算机视觉革命。
相关文章:
计算机视觉算法实现——SAM实例分割:原理、实现与应用全景
✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ 1. 实例分割领域概述 实例分割(Instance Segmentation)是计算机视觉领域最具挑战性的任务之一,…...
asm汇编字符串操作
提供8个子程序: 1. 字符串长度 STRLEN 2. 字符串替换 REPLACE 3. 字节查找 SEARCHB 4. 双字节查找 SEARCHW 5. 输入字符串 GETSTR 6. 输出字符串 OUTSTR 7. 复制字符串 COPYSTR 8. 查找字符串 SRCHSTR 具体功能及参数描述如下 STRLEN PROC FAR ; IN: ; DS:DXSTRING ;…...
[MSPM0开发]之三MSPM0G3507之时钟系统
一、MSPM0G3507时钟模块概述 MSPM0G3507的时钟系统隶属于其电源管理和时钟单元 (PMCU) 。 PMCU主要负责电源管理、时钟配置和复位控制功能。 时钟模块包含内部和外部 振荡器 oscillators、 时钟监测器 clock monitors以及时钟选择和控制逻辑。 提供了频率时钟计数器frequency …...
如何绕过WAF实现SQL注入攻击?
引言 在渗透测试中,SQL注入(SQLi)始终是Web安全的核心漏洞之一。然而,随着企业广泛部署Web应用防火墙(WAF),传统的注入攻击往往会被拦截。本文将分享一种绕过WAF检测的SQL注入技巧…...
基础数学:图论与信息论
微积分与概率论由此进:基础数学:微积分和概率与统计-CSDN博客 线代与优化理论由此进:基础数学:线性代数与优化理论-CSDN博客 数值分析与离散数学由此进:基础数学:数值分析与离散数学-CSDN博客 四、图论与…...
05-RabbitMQ 面试题-mk
1.RabbitMQ-如何保证消息不丢失? 消息中间件的好处 提供了系统之间的异步调用,让服务与服务之间解耦削峰、填谷场景: 异步发送(验证码、短信、邮件…)MySQL和Redis , ES之间的数据同步分布式事务削峰填谷 消息发送者(publisher )把消息发送给交换机(exchange),由交…...
当当平台商品详情接口设计与调用指南
当当平台商品详情接口设计与调用指南 接口名称 GET /api/product/detail 图书商品核心信息查询接口 请求参数说明 参数名称 类型 是否必填 说明 isbn string 是 国际标准书号(支持13位/10位) product_id string 否 平台内部商品编号(与…...
基于vue框架的住院信息管理系统k08hv(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
系统程序文件列表 项目功能:患者,工作人员,预约住院,住院登记,科室信息,床位信息,床位分配,转病房,病历信息,费用信息,出院登记 开题报告内容 基于Vue框架的住院信息管理系统开题报告 一、选题背景与意义 (一)选题背景 随着医疗技术的不…...
Flink 编程基础:Scala 版 DataStream API 入门
大家好!我是心海 流处理技术在大数据时代正变得越来越重要,而 Apache Flink 作为领先的流处理引擎,凭借其高性能、低延迟和丰富的 API 受到了广泛关注。本文将以 Scala 语言为例,详细讲解 Flink DataStream API 的基本编程模型&am…...
noscript 标签是干什么的
vue public目录下的 index.html 会有 <noscript> 标签不知道是干吗的。 其实 noscript 标签在不支持或是禁用JavaScript 的浏览器中显示替代的内容。这个元素可以包含任何 HTML 元素。这个标签的用法也非常简单: <noscript><strong>Were sorry …...
基于 Streamlit 的 PDF 编辑器
你想实现一个基于 Streamlit 的 PDF 编辑器,功能包括: PDF 转 WordPDF 表格提取PDF 拆分页面PDF 转图片 下面是一个初步的 Streamlit 应用框架代码示例,集成了以上功能。使用了常见库如 pdfplumber、PyMuPDF(fitz)、…...
Oracle 排除交集数据 MINUS
MINUS 是 Oracle 数据库中的一种集合操作符,用于返回第一个查询结果中存在但第二个查询结果中 不存在 的 唯一行。其核心功能是 排除交集数据,常用于数据差异分析或过滤特定记录 一、核心功能 排除交集:返回第一个查询结果中 不在第二个查询结…...
.net Core 和 .net freamwork 调用 deepseek api 使用流输出文本(对话补全)
.net Core 调用 deepseek api 使用流输出文本 简下面直接上代码(.net core):最后再贴一个 .net Freamwork 4 可以用的代码TLS 的代码至关重要的:(下面这个) 简 在官网里面有许多的案例:我们通过…...
巧用递归算法:破解编程难题的“秘密武器”
专栏:算法的魔法世界 个人主页:手握风云 目录 一、递归 二、例题讲解 2.1. 汉诺塔问题 2.2. 合并两个有序链表 2.3. 反转链表 2.4. 两两交换链表中的节点 2.5. Pow(x, n) 三、总结 一、递归 递归的概念 一个方法在执行过程中调用自身, 就称为递…...
C++、Python的输入输出及相关的处理操作
一、C 输入输出及相关处理操作 C 是算法竞赛中常用的语言,因其高效性适合处理大数据或严格时间限制的题目。输入输出是基础,但细节处理(如速度优化、格式要求)对比赛结果影响很大。 1. 基本输入输出 C 使用 <iostream> 库…...
Unity协程从入门到精通:告别卡顿,用Coroutine优雅处理异步与时序任务 (Day 27)
Langchain系列文章目录 01-玩转LangChain:从模型调用到Prompt模板与输出解析的完整指南 02-玩转 LangChain Memory 模块:四种记忆类型详解及应用场景全覆盖 03-全面掌握 LangChain:从核心链条构建到动态任务分配的实战指南 04-玩转 LangChai…...
Web攻防—SSRF服务端请求伪造Gopher伪协议无回显利用
前言 重学Top10的第二篇,希望各位大佬不要见笑。 SSRF原理 SSRF又叫服务端请求伪造,是一种由服务端发起的恶意请求,SSRF发生在应用程序允许攻击者诱使服务器向任意域或资源发送未经授权的请求时。服务器充当代理,执行攻击者构造…...
青少年编程与数学 02-016 Python数据结构与算法 16课题、贪心算法
青少年编程与数学 02-016 Python数据结构与算法 16课题、贪心算法 一、贪心算法的基本概念定义组成部分 二、贪心算法的工作原理三、贪心算法的优点四、贪心算法的缺点五、贪心算法的应用实例(一)找零问题(二)活动安排问题&#x…...
Linux系统Debian最新版12.10安装详细教程,虚拟机系统安装(附系统镜像资源)
前言 Debian是一款以稳定性著称的免费开源Linux发行版,支持多种硬件架构,遵循自由软件原则,并提供庞大的软件仓库和长期维护。 一、环境下载 Debian 12.10镜像下载 💾资源下载👉Debian 12.10镜像下载:ht…...
android display 笔记(十一)surfaceflinger 如何将图层传到lcd驱动的呢?
SurfaceFlinger->>HWC: 提交所有图层(Layer) HWC->>DRM/KMS: 硬件合成(Overlay)或 GPU 合成 DRM/KMS->>LCD Driver: 配置显示控制器(CRTC/Encoder) LCD Driver->>Display: 通过 MI…...
管理大规模监控技术栈的最佳实践
集中管理可观测性数据 集中化监控数据有助于打破信息孤岛,提供系统全景视图。彭博社发现,当团队各自为战时,系统中断往往持续很久才有人意识到多个团队正在独立处理同一问题。通过数据集中管理,他们获得了更全面的基础设施视图&a…...
深入探索C++ STL:从基础到进阶
目录 引言 一、什么是STL 二、STL的版本 三、STL的六大组件 容器(Container) 算法(Algorithm) 迭代器(Iterator) 仿函数(Functor) 空间配置器(Allocator…...
GitHub Desktop 推送报错 Authentication Failed 身份验证失败
弹窗问题: Authentication Failed 验证失败 We were unable to authenticate with https://gitee.com/.Pleaseenter your username and password to try again. 用户名 密码 Depending on your repository’s hosting service, you might need touse a Personal Acc…...
Webpack中的文件指纹:给资源戴上个“名牌”
Webpack中的文件指纹:给资源戴上个“名牌” 你是否想过,当你修改代码后,浏览器为什么仍然拿着旧版资源不放?秘密就在于——文件指纹!简单来说,文件指纹就像给每个构建出来的文件贴上独一无二的“姓名牌”&…...
ESP32开发之ubuntu环境搭建
1. 在Ubuntu官网下载Ubuntu server 20.04版本https://releases.ubuntu.com/20.04.6/ 2. 在vmware下安装Ubuntu 3. 改Ubuntu静态IP $ sudo vi /etc/netplan/00-installer-config.yaml# This is the network config written by ‘subiquity’ network: renderer: networkd eth…...
重构艺术 | 如何优雅地“提炼函数“
在工作中总数遇到非常多的长代码,俗称“屎山”,这类代码读起来特别费劲。自己想重构一遍,但是总感觉缺乏经验指导,因此,多读书,读好书可能是最优解之一。读《重构改善即有代码的设计》有感,便写…...
[项目]基于RT-Thread的CAN通信仪表盘显示屏: 一.项目概述与软硬件说明
基于RT-Thread的CAN通信仪表盘显示屏: 一.项目概述与软硬件说明 一.项目概述二.硬件与软件资源 一.项目概述 功能结构图: 通过上位机发出模拟CAN数据给协议转换板,协议转换板将CAN协议数据转换为迪文屏数据,并通过迪文数据控制相关性质。 …...
如何查看自己 Android App 的私有数据?从 `adb backup` 到数据提取全过程
🛠️ 如何查看自己 Android App 的私有数据?从 adb backup 到数据提取全过程 📌 前言:作为一名 Android 开发者,我常常想知道自己写的 App 在用户设备上的数据存储结构是怎样的,比如有没有数据写入成功、有…...
Windows中xxx.dll动态链接库文件转xxx.a静态库文件
最近在学习探索C/C程序代码中调用Python代码时,出现了一个问题:下载的程序库文件,在使用MinGW编译C/C的代码时,一直提示无法链接,才发现是库类型不对应,无法导入链接。 上图所示的Python对应库,…...
用Java NIO模拟HTTPS
HTTPS流程 名词解释: R1:随机数1 R2:随机数2 R3:随机数3 publicKey:公钥 privateKey:私钥 step1 客户端 client hello R1 服务端 server hello R2 publicKey(验证证书,证书包含公钥) step2 客户端 R3 publicKey加密 服务端 privateKey解密 s…...
基于YOLOv8的火车轨道检测识别系统:技术实现与应用前景
✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ 1. 引言:火车轨道检测领域概述 铁路运输作为国民经济的大动脉,其安全运行至关重要…...
解决 Ubuntu 上 Docker 安装与网络问题:从禁用 IPv6 到配置代理
解决 Ubuntu 上 Docker 安装与网络问题的实践笔记 在 Ubuntu(Noble 版本)上安装 Docker 时,我遇到了两个常见的网络问题:apt-get update 失败和无法拉取 Docker 镜像。通过逐步排查和配置,最终成功运行 docker run he…...
DVDFab Virtual Drive电脑DVD备份和制作软件 v13.0.3.7 中文绿色便携
前言 DVDFab Virtual Drive是一个很厉害的光盘处理软件,它能帮你做几件事情:复制你的DVD或蓝光光盘作为备份,把这些光盘里的内容转换成其他格式,还能把视频文件刻录到DVD或蓝光光盘上。这个软件很灵活,能处理像DVD、蓝…...
FISCO BCOS区块链Postman接口测试:高级应用与实战技巧 [特殊字符]
引言:为什么Postman是FISCO BCOS测试的利器? 在区块链开发领域,接口测试是确保系统稳定性和安全性的关键环节。作为国产领先的联盟链平台,FISCO BCOS在金融、政务、供应链等多个领域得到广泛应用。而Postman作为一款功能强大的API测试工具,凭借其直观的图形界面和丰富的测…...
a sort.py demo
这份代码展示了如何使用 sort.py。注意,此处,我将文件名改为 my_sort.py。 你并不能直接 copy 使用,因为环境,包,还有模型。 此处使用 SSD-MobileNetv2 进行物体检测,将结果传入以 np 数组的形式传入sort…...
Linux 入门八:Linux 多进程
一、概述 1.1 什么是进程? 在 Linux 系统中,进程是程序的一次动态执行过程。程序是静态的可执行文件,而进程是程序运行时的实例,系统会为其分配内存、CPU 时间片等资源。例如,输入 ls 命令时,系统创建进程…...
学习如何设计大规模系统,为系统设计面试做准备!
前言 在当今快速发展的技术时代,系统设计能力已成为衡量一名软件工程师专业素养的重要标尺。随着云计算、大数据、人工智能等领域的兴起,构建高性能、可扩展且稳定的系统已成为企业成功的关键。然而,对于许多工程师而言,如何有效…...
前端防御性编程
关于防御性编程 你是否遇到过,接口请求失败或者返回数据错误,导致系统白屏或者前端自身写的代码存在一些缺陷,导致整个系统不够健壮,从而导致系统白屏 常见的问题与防范 最常见的问题 访问了null或者undefined的属性 null.a …...
Java工具类-assert断言
我们可能经常在项目的单元测试或者一些源码中看到别人在使用assert关键字,当然也不只是Java语言,很多编程语言也都能看到,我们大概知道断言可以用于测试中条件的校验,但却不经常使用,本文总结了Java中该工具类的使用。…...
215. 数组中的第K个最大元素
1、题目分析 顾名思义。 2.算法原理 利用排序,再找到第k个最大的数字即可。 3.代码实操 class Solution { public:int findKthLargest(vector<int>& nums, int k) {sort(nums.begin(),nums.end());return nums[nums.size()-k];//123456真的方便啊} };…...
【2025年泰迪杯数据挖掘挑战赛】B题 详细解题思路+数据预处理+代码分享
目录 2025年泰迪杯B题详细解题思路问题一问题分析数学模型Python代码Matlab代码 问题二问题分析数学模型Python代码Matlab代码 问题三问题分析数学模型Python代码Matlab代码 问题四问题分析数学模型Python代码Matlab代码 2025年泰迪杯B题详细解题思路 初步分析整理了B题的赛题分…...
对shell脚本敏感命令进行加密执行
我要加密这条命令:rm /root/scripty.sh 如何利用openssl aes-256-cbc 实现加密和解密,并执行命令 加密、解密并执行命令的完整流程 以下是使用 openssl aes-256-cbc 加密命令 rm /root/scripty.sh,解密并执行的详细步骤: 1. 加密…...
SQL ⑦-索引
索引 索引是一种特殊的数据结构,它帮助数据库系统高效地找到数据。 索引通过一定的规则排列数据表中的记录,使得对表的查询可以通过对索引的搜索来加快速度。 索引好比书籍的目录,能帮助你快速找到相应的章节。 B树 B树是一种经常用于数…...
LinkedBlockingQueue使用场景有哪些
1、LinkedBlockingQueue 的特点 LinkedBlockingQueue 是 Java 中 java.util.concurrent 包下的一种阻塞队列,它有以下几个主要特点: 1.线程安全 LinkedBlockingQueue 是线程安全的,它内部使用了锁机制来确保多线程环境下的并发访问不会导致…...
关于难例损失函数小记
什么是难例损失函数(Hard Example Loss Function) 这玩意儿是深度学习训练中非常重要又很实用的一个概念,特别适用于处理 数据不平衡、模型收敛缓慢、或者**想让模型更“挑剔”**的场景。 🌟 先从名字讲起: “难例”…...
小程序开发指南
小程序开发指南 目录 1. 小程序开发概述 1.1 什么是小程序1.2 小程序的优势1.3 小程序的发展历程 2. 开发准备工作 2.1 选择开发平台2.2 开发环境搭建2.3 开发模式选择 3. 小程序开发流程 3.1 项目规划3.2 界面设计3.3 代码开发3.4 基本开发示例3.5 数据存储3.6 网络请求3.7 …...
RCE漏洞学习
1,What is RCE? 在CTF(Capture The Flag)竞赛中,RCE漏洞指的是远程代码执行漏洞(Remote Code Execution)。这类漏洞允许攻击者通过某种方式在目标系统上执行任意代码,从而完全控制目…...
青少年编程考试 CCF GESP图形化编程 三级认证真题 2025年3月
图形化编程 三级 2025 年 03 月 一、单选题(共 15 题,每题 2 分,共 30 分) 1、2025 年春节有两件轰动全球的事件,一个是 DeepSeek 横空出世,另一个是贺岁 片《哪吒 2》票房惊人,入了全球票房榜…...
一、绪论(Introduction of Artificial Intelligence)
写在前面: 老师比较看重的点:对问题的概念本质的理解,不会考试一堆运算的东西,只需要将概念理解清楚就可以,最后一个题会出一个综合题,看潜力,前面的部分考的不是很深,不是很难&…...
多模态大语言模型arxiv论文略读(十五)
## Jailbreaking GPT-4V via Self-Adversarial Attacks with System Prompts ➡️ 论文标题:Jailbreaking GPT-4V via Self-Adversarial Attacks with System Prompts ➡️ 论文作者:Yuanwei Wu, Xiang Li, Yixin Liu, Pan Zhou, Lichao Sun ➡️ 研究机…...