Meta公司开源大数据模型SAM实战演练

立体注意力机制(SAM)详解及代码复现 立体注意力机制(Stereo Attention Mechanism, SAM)是一种在计算机视觉领域中广泛应用的先进技术,旨在模拟人类视觉系统的选择性注意力机制。它通过动态地聚焦于图像或点云数据中的关键区域,有效提高了模型对复杂场景的理解和处理能力。 阅读详情

当前,许多强大的开源基础模型的发布,加上微调技术的不断进步,已经带来了机器学习和人工智能的新范式。整体来看,这场革命的核心在于转换器模型(https://arxiv.org/pdf/1706.03762)。

虽然除了资金充足的公司之外,所有公司都曾经无法获得高精度的特定领域模型;但是如今,基础模型范式甚至能够允许学生或独立研究人员获得适度的资源,以实现与最先进的专有模型相抗衡的结果。

微调技术可以极大地提高模型任务的性能

本文旨在探讨Meta公司的分割一切模型(SAM:Segment Anything Model)在河流像素分割遥感任务中的应用。如果您想直接跳到有关项目代码,那么这个项目的源文件可以在GitHub(https://github.com/geo-smart/water-surf/blob/main/book/chapters/masking_distributed.ipynb)上获得,数据也可以在HuggingFace(https://huggingface.co/datasets/stodoran/elwha-segmentation-v1)上找到。当然,我还是建议您先阅读一下本文。

项目需求

第一个任务是找到或创建一个合适的数据集。根据现有文献,一个良好的SAM微调数据集将至少包含200–800张图像。过去十年深度学习进步的一个关键教训是,数据越多越好,这样一来,更大规模的微调数据集就不会出错。然而,基础模型研究的一个重要目标是,允许即使是相对较小的数据集也足以实现强大的性能。

此外,我们还需要有一个HuggingFace帐户,这可以在链接https://huggingface.co/join处创建。使用HuggingFace,我们可以随时从任何设备轻松存储和获取数据集,这使得协作和再现性更加容易。

最后一个需求是,具备一台带有GPU的设备,我们可以在其上运行训练工作流程。通过Google Colab(https://colab.research.google.com/)免费提供的Nvidia T4 GPU足够强大,可以在12小时内对1000张图像进行50个时期的最大SAM模型检查点(sam-vit-huge)训练。

为了避免在托管运行时因使用限制而影响进度,您可以安装Google Drive并将每个模型检查点保存在那里。或者,部署并连接到GCP虚拟机(https://console.cloud.google.com/marketplace/product/colab-marketplace-image-public/colab)以完全绕过限制。如果您以前从未使用过GCP,那么您就有资格获得300美元的免费信贷,这足以支持对模型进行至少十几次的训练了。

理解SAM架构

在开始训练之前,我们需要先来了解一下SAM模型的架构。该模型包含三个组件:一个是从稍经修改的掩码自动编码器(https://arxiv.org/pdf/2111.06377)得到的图像编码器,一个能够处理各种提示类型的相当灵活的提示编码器,还有一个快速轻量级的掩码解码器。这种设计架构背后的一个重要动机是允许在边缘设备上(例如在浏览器中)进行快速、实时的分割,因为图像嵌入只需要计算一次,并且掩码解码器可以在CPU上运行约50ms。

SAM的模型架构向我们展示了模型接受哪些输入以及需要训练模型的哪些部分(图片来源于SAM GitHub:https://github.com/facebookresearch/segment-anything)。

理论上,图像编码器已经学会了嵌入图像的最佳方式,包括识别形状、边缘和其他一般视觉特征等。类似地,在理论上,提示编码器已经能够以最优方式对提示进行编码。掩码解码器是模型架构的一部分,它采用这些图像和提示嵌入,并通过对图像和提示嵌入式进行操作来实际创建掩码。

因此,一种方法是在训练期间冻结与图像和提示编码器相关联的模型参数,并且仅更新掩码解码器权重。这种方法的优点是允许有监督和无监督的下游任务,因为控制点和边界框提示都是自动的,并且可供人工使用。

图中显示了AutoSAM体系架构中使用的冻结SAM图像编码器和掩码解码器,以及过载提示编码器(来源于AutoSAM论文:https://arxiv.org/pdf/2306.06370)。

另一种方法是使提示编码器过载,冻结图像编码器和掩码解码器,并且只是简单地不使用原始SAM掩码编码器。例如,AutoSAM体系架构使用基于Harmonic Dense Net的网络来基于图像本身生成提示嵌入。在本教程中,我们将介绍第一种方法,即冻结图像和提示编码器,只训练掩码解码器,但这种替代方法的代码可以在AutoSAM GitHub(https://github.com/talshaharabany/AutoSAM/blob/main/inference.py)和论文(https://arxiv.org/pdf/2306.06370)中找到。

配置提示

接下来的一步是确定模型在推理过程中会收到什么类型的提示,以便我们可以在训练时提供这种类型的提示。就我个人而言,考虑到自然语言处理的不可预测/不一致性,我不建议在任何严肃的计算机视觉项目架构中使用文本提示。剩下的解决方案就需要依赖控制点和边界框技术了;但是,最终的选择还要取决于特定数据集的特定性质,尽管有关文献中已经指出边界框方案的表现相当一致地优于控制点方案。

造成这种情况的原因尚不完全清楚,但可能是以下任何因素之一,或者是这些因素的组合:

  • 在推理时(当真实值掩码未知时),好的控制点比边界框更难选择。
  • 可能的点提示的空间比可能的边界框提示的空间大几个数量级,因此它没有经过彻底的训练。
  • 最初的SAM模型作者主要专注于模型的零样本和少样本(根据人工提示交互计算)功能,因此预训练可能更多地关注边界框。

无论如何,河流分割实际上是一种罕见的情况;在这种情况下,点提示方案实际上优于边界框(尽管只是轻微的,即使是在非常有利的域中)。假设在河流的任何图像中,水体将从图像的一端延伸到另一端,任何包含的边界框几乎总是覆盖图像的大部分。因此,河流非常不同部分的边界框提示看起来非常相似。理论上,这意味着边界框为模型提供的信息比控制点少得多;因此,导致性能较差。

控制点、边界框提示和叠加在两个样本训练图像上的真实分割

请注意,在上图中,尽管两条河流部分的真实分割掩码完全不同,但它们各自的边界框几乎相同,而它们的点提示(相对而言)差异更大。

另一个需要考虑的重要因素是在推理时生成输入提示的容易程度。如果您希望在循环执行阶段有人工介入,那么请注意边界框和控制点在推理阶段都是相当琐碎的。然而,如果您打算使用一个完全自动化的架构方案,那么回答这些问题将变得更加复杂。

无论是使用控制点还是边界框,生成提示通常首先包括估计感兴趣对象的粗略掩码。边界框可以只是包裹粗略掩码的最小框,而控制点需要从粗略掩码中采样。这意味着,当真实值掩码未知时,边界框更容易获得,因为感兴趣对象的估计掩码只需要大致匹配真实对象的相同大小和位置;而对于控制点,估计掩码将需要更紧密地匹配对象的轮廓。

当使用估计的掩码而不是真实值时,控制点的放置可能包括错误标注的点,而边界框通常位于正确的位置

对于河流分割,如果我们可以同时使用RGB和NIR,那么我们可以使用光谱指数阈值方法来获得我们的粗略掩模。如果我们只能使用RGB模式,我们可以将图像转换为HSV模式,并对特定色调、饱和度和值范围内的所有像素设置阈值。然后,我们可以移除低于特定大小阈值的连接内容,并使用skimage.morphology子模块中的erosion函数来确保我们的掩模中只有1个像素是朝向蓝色大斑点中心的像素。

模型训练

为了训练我们的模型,我们需要一个包含所有训练数据的数据加载器,我们可以在每个训练时期对这些数据进行迭代。当我们从HuggingFace加载数据集时,它采用datasets.Dataset类的形式。如果数据集是私有的,请确保首先安装HuggingFace CLI并使用“!huggingface-cli login”方式登录。


from datasets import load_dataset, load_from_disk, Dataset
hf_dataset_name = "stodoran/elwha-segmentation-v1"
training_data = load_dataset(hf_dataset_name, split="train")
validation_data = load_dataset(hf_dataset_name, split="validation")

然后,我们需要编写自己的自定义数据集类,该类不仅返回任何索引的图像和标签,还返回提示词信息。下面是一个可以同时处理控制点和边界框提示的实现。要完成初始化工作,需要一个HuggingFace datasets.Dataset实例和SAM模型的处理器实例。


from torch.utils.data import Dataset
class PromptType:
CONTROL_POINTS = "pts"
BOUNDING_BOX = "bbox"
class SAMDataset(Dataset):
def __init__(
self, 
dataset, 
processor, 
prompt_type = PromptType.CONTROL_POINTS,
num_positive = 3,
num_negative = 0,
erode = True,
multi_mask = "mean",
perturbation = 10,
image_size = (1024, 1024),
mask_size = (256, 256),
):
#将所有值赋给self
...

def __len__(self):
return len(self.dataset)

def __getitem__(self, idx):
datapoint = self.dataset[idx]
input_image = cv2.resize(np.array(datapoint["image"]), self.image_size)
ground_truth_mask = cv2.resize(np.array(datapoint["label"]), self.mask_size)

if self.prompt_type == PromptType.CONTROL_POINTS:
inputs = self._getitem_ctrlpts(input_image, ground_truth_mask)
elif self.prompt_type == PromptType.BOUNDING_BOX:
inputs = self._getitem_bbox(input_image, ground_truth_mask)

inputs["ground_truth_mask"] = ground_truth_mask
return inputs

我们还必须定义SAMDataset_getitem_ctrlpts和SAMDataset_getitem_box函数,尽管如果您只计划使用一种提示类型,那么您可以重构代码以直接处理SAMDataset.__getitem__中的该类型,并删除帮助类工具函数。


class SAMDataset(Dataset):
...
def _getitem_ctrlpts(self, input_image, ground_truth_mask):
# 获取控制点提示。请参阅GitHub获取该函数的源代码,或将其替换为您自己的点选择算法。
input_points, input_labels = generate_input_points(
num_positive=self.num_positive,
num_negative=self.num_negative,
mask=ground_truth_mask,
dynamic_distance=True,
erode=self.erode,
)
input_points = input_points.astype(float).tolist()
input_labels = input_labels.tolist()
input_labels = [[x] for x in input_labels]

# 为模型准备图像和提示。
inputs = self.processor(
input_image,
input_points=input_points,
input_labels=input_labels,
return_tensors="pt"
)

#删除处理器默认添加的批次维度。
inputs = {k: v.squeeze(0) for k, v in inputs.items()}
inputs["input_labels"] = inputs["input_labels"].squeeze(1)

return inputs

def _getitem_bbox(self, input_image, ground_truth_mask):
#获取边界框提示。
bbox = get_input_bbox(ground_truth_mask, perturbation=self.perturbation)

#为模型准备图像和提示。
inputs = self.processor(input_image, input_boxes=[[bbox]], return_tensors="pt")
inputs = {k: v.squeeze(0) for k, v in inputs.items()} # 删除处理器默认添加的批次维度。

return inputs

将所有这些功能组合到一起,我们可以创建一个函数,该函数在给定HuggingFace数据集的任一部分的情况下创建并返回PyTorch数据加载器。编写返回数据加载器的函数,而不仅仅是用相同的代码执行单元,这不仅是编写灵活和可维护代码的好方法,而且如果您计划使用HuggingFace Accelerate(https://huggingface.co/docs/accelerate/index)来运行分布式训练的话,这也是必要的。

 

from transformers import SamProcessor
from torch.utils.data import DataLoader

def get_dataloader(
hf_dataset,
model_size = "base",  # One of "base", "large", or "huge" 
batch_size = 8, 
prompt_type = PromptType.CONTROL_POINTS,
num_positive = 3,
num_negative = 0,
erode = True,
multi_mask = "mean",
perturbation = 10,
image_size = (256, 256),
mask_size = (256, 256),
):
processor = SamProcessor.from_pretrained(f"facebook/sam-vit-{model_size}")

sam_dataset = SAMDataset(
dataset=hf_dataset, 
processor=processor, 
prompt_type=prompt_type,
num_positive=num_positive,
num_negative=num_negative,
erode=erode,
multi_mask=multi_mask,
perturbation=perturbation,
image_size=image_size,
mask_size=mask_size,
)
dataloader = DataLoader(sam_dataset, batch_size=batch_size, shuffle=True)

return dataloader​​​​

在此之后,训练只需加载模型、冻结图像和提示编码器,并进行所需次数的迭代训练。


model = SamModel.from_pretrained(f"facebook/sam-vit-{model_size}")
optimizer = AdamW(model.mask_decoder.parameters(), lr=learning_rate, weight_decay=weight_decay)

# Train only the decoder.
for name, param in model.named_parameters():
if name.startswith("vision_encoder") or name.startswith("prompt_encoder"):
param.requires_grad_(False)

以下列出的是训练过程循环部分的基本框架代码。请注意,为了简洁起见,forward_pass、calculate loss、evaluate_mode和save_model_checkpoint函数被省略了,但GitHub上提供了实现。正向传递码根据提示类型略有不同,损失计算也需要基于提示类型的特殊情况;当使用点提示时,SAM模型为每个单个输入点返回一个预测掩码,因此为了获得可以与真实数据进行比较的单个掩码,需要对预测掩码进行平均,或者需要选择最佳预测掩码(基于SAM的预测IoU分数来识别)。


train_losses = []
validation_losses = []
epoch_loop = tqdm(total=num_epochs, position=epoch, leave=False)
batch_loop = tqdm(total=len(train_dataloader), position=0, leave=True)

while epoch < num_epochs:
epoch_losses = []

batch_loop.n = 0  #循环重置
for idx, batch in enumerate(train_dataloader):
# 正向传递
batch = {k: v.to(accelerator.device) for k, v in batch.items()}
outputs = forward_pass(model, batch, prompt_type)

#计算损失值
ground_truth_masks = batch["ground_truth_mask"].float()
train_loss = calculate_loss(outputs, ground_truth_masks, prompt_type, loss_fn, multi_mask="best")
epoch_losses.append(train_loss)

# 反向传递与优化环节
optimizer.zero_grad()
accelerator.backward(train_loss)
optimizer.step()
lr_scheduler.step()

batch_loop.set_description(f"Train Loss: {train_loss.item():.4f}")
batch_loop.update(1)

validation_loss = evaluate_model(model, validation_dataloader, accelerator.device, loss_fn)
train_losses.append(torch.mean(torch.Tensor(epoch_losses)))
validation_losses.append(validation_loss)

if validation_loss < best_loss:
save_model_checkpoint(
accelerator,
best_checkpoint_path,
model,
optimizer,
lr_scheduler,
epoch,
train_history,
validation_loss,
train_losses,
validation_losses,
loss_config,
model_descriptor=model_descriptor,
)
best_loss = validation_loss

epoch_loop.set_description(f"Best Loss: {best_loss:.4f}")
epoch_loop.update(1)
epoch += 1

微调结果分析

对于艾尔瓦河项目,最佳设置是在不到12小时的时间内使用GCP虚拟机实例,使用超过1k个分割掩码的数据集训练成功“sam-vit-base”模型。

与基准型SAM相比,微调显著提高了性能,中值掩码从不可用变为高度准确。

相对于基于默认提示词的基准型SAM模型,微调后的SAM模型极大地提高了分割性能

需要注意的一个重要事实是,1k河流图像的训练数据集是不完美的,分割标签在正确分类的像素数量上变化很大。因此,上述指标是在225幅河流图像的像素完美数据集上计算出来的。

实验过程中,我们观察到的一个有趣的行为是,模型学会了从不完美的训练数据中进行归纳。当在训练样本包含明显错误分类的数据点上进行评估时,我们可以观察到模型预测避免了误差。请注意,显示训练样本的顶行中的图像包含的掩码不会一直填充到河岸,而显示模型预测的底行则更紧密地分割河流边界。

即使训练数据不完美,经微调的SAM模型也能带来令人印象深刻的泛化效果。请注意,与训练数据(顶行)相比,预测(底行)的错误分类更少,并且河流的填充程度更高。

结论

如果您已经顺利完成本文中的实例内容,那么祝贺您!您已经学会了为任何下游愿景任务完全微调Meta的分割一切模型SAM所需的一切!

虽然您的微调工作流程无疑与本教程中介绍的实施方式不同,但从阅读本教程中获得的知识不仅会影响到您的细分项目,还会影响到未来的深度学习项目及其他项目。

最后,希望您继续探索机器学习的世界,保持好奇心,并一如既往地快乐编程!

附录

本文实例中使用的数据集是Elwha V1数据集(https://huggingface.co/datasets/stodoran/elwha-segmentation-v1),该数据集由华盛顿大学的GeoSMART研究实验室(https://geo-smart.github.io/)创建,用于将微调的大型视觉变换器应用于地理空间分割任务的研究项目。本文描述的内容代表了即将发表的论文的精简版和一个更易于实现的版本。在高水平上,Elwha V1数据集由SAM检查点的后处理模型预测组成,该检查点使用Buscombe等人(https://zenodo.org/records/10155783)发布并在多学科研究数据知识库和文献资源网站Zenodo上发布的标注正射影像的子集进行了微调。

项目实训(四)——SAM模型的学习与部署 这里的show_mask就是我们用mask的prompt进行分割,show_points就是我们用points进行分割,show_box就是通过box进行分割,这是SAM的三种prompt的方式。总的来说,Meta AI 的 Segment Anything 模型为我们提供了一种全新的物体识别和分割方式,其强大的泛化能力和广泛的应用前景将极大地推动计算机视觉领域的发展。这里有vit_h、vit_b、vit_l三种权重模型,这里可以根据自己的需要下载相应的权重模型。我们是下载的vit_h权重模型。 阅读详情

相关推荐

分割一切,SAM模型详解和使用

随着深度学习在计算机视觉领域的应用,图像分割技术得到了显著的发展。然而,大多数模型都是针对特定任务或数据集设计的,缺乏泛用性。Meta AI的研究团队开发了一个新的模型架构,该模型能够接收各种提示(如点、框、文本等)来执行图像分割任务。这跳脱了传统的分割任务的局限性,使得分割任务变得更加简单。 SAM模型使得高级图像分割技术变得更加易于使用和普及,让非专业人士也能轻松处理复杂的图像分割任务。

程序猿追的博客 4093

【大模型系列】一文看懂SAM大模型

参考资料:SAM模型大致上分成3个模块,一个标准的vit构成的image encoder、一个prompt encoder和一个mask decoder。其中:从结构上看,sam的encoder部分就是堆叠transformer的block结构,最后再跟一个neck,调整输出embedding的维度。Meta开源了三个模型,分别是vit_h, vit_l和vit_b,这三个模型的区别仅仅在于内部patch embedding维度、transformer的block的个数以及每个block中head的数量和全

kabuto_hui的博客 3万+

【信息科学与工程学】计算机科学与自动化 第二百零一十一 软件开发模型01

编号类型模型领域模型中的知识点/因素/参数关联知识和法律法规1传统顺序模型瀑布模型 (Waterfall)通用软件开发、硬件紧密耦合系统、政府/军工项目、需求稳定的传统信息系统严格线性阶段:可行性研究→需求分析(SRS,含功能/非功能/接口/约束,使用IEEE 830模板)→系统设计(概要设计HLD:架构、模块划分、数据库ER图;详细设计LLD:伪代码、类图、接口定义)→实现(编码规范、代码审查、静态分析工具SonarQube)→测试(单元测试JUnit、集成测试、系统测试、验收测试UAT,测试计划提前编写

weixin_49199313的博客 154

文献阅读笔记:SAM大模型(Segment Anything)

本周学习了SAM大模型,该大模型用于图像分割的新任务、模型和数据集。该模型的设计和训练具有快速性,因此它可以将零样本转移到新的图像分布和任务。通过评估SAM在众多任务上的能力,该大模型的零样本性能与之前完全监督的结果相媲美甚至优于之前的结果。本文将详细介绍SAM模型。作者在这篇文献中介绍了SAM大模型:该大模型用于图像分割的新任务、模型和数据集。作者构建了迄今为止最大的分割数据集,在 1100 万张许可且尊重隐私的图像上包含超过 10 亿个mask。该模型的设计和训练具有快速性,因此它可以将零样本。

weixin_45409613的博客 1万+

【STM32实战】利用STM32CubeMX配置PWM互补输出驱动电机

本文详细介绍了如何利用STM32CubeMX配置STM32高级定时器的PWM互补输出功能,以驱动电机等需要半桥/全桥电路的应用。通过图形化界面设置定时器参数、使能互补通道并配置关键的死区时间,结合代码示例演示了如何启动PWM输出和动态调整占空比,确保输出安全、精确的互补信号,避免MOS管直通风险,提升驱动可靠性。

weixin_29161785的博客 535

银河麒麟服务器操作系统V10-SP1部署gitlab服务

银河麒麟高级服务器操作系统 V10 SP1 部署GitHub

weixin_43173670的博客 2155

万字长文从零解读SAM(Segment Anything Model)大模型!万物皆可分割!(含源码解析)

首先,mask进入一个1x2x2x4的卷积,stride=2;在非全局注意力的Block中,将attention层输出的特征图1x70x70x768转化为1x64x64x768的特征图,实际上是通过切片操作x = x[:1, :64, :64, :],从1x70x70x768的特征图中取出左上角的1x64x64x768部分。如下图(a)所示,模型的输入是原始的图像和一些prompt,目标是输出"valid"的分割,所谓valid,就是当prompt的指向是模糊时,模型能够输出至少其中一个mask。

具身机器人和通用AI 1万+

学Simulink——基于Simulink的Buck-Boost变换器双闭环PI+抗饱和设计建模示例

本文详细介绍了基于Simulink的非反相Buck-Boost变换器双闭环控制设计方法。针对Buck-Boost变换器特有的右半平面零点(RHPZ)和控制挑战,提出了电压-电流双闭环PI控制架构,并集成抗积分饱和机制。通过Simulink建模,实现了主电路、电流内环PI、电压外环PI、PWM及占空比限幅等模块的搭建,验证了在输入电压跌落(20V→10V)和负载突变(2A→4A)等场景下的稳定性能。仿真结果表明,输出电压波动小于0.35V,恢复时间快于1ms,电感电流有效限幅。文章还讨论了工程实践要点和扩展方

xiaoheshang_123的博客 318

大模型学习笔记------SAM模型详解与思考

本文主要介绍了Segment Anything Model(SAM)的网络结构,所有解释基本都在网络结构的图像中进行标注,可读性更强。

gz7seven 4544

Halcon算子知识:optical_flow_mg

光流(Optical Flow)是一种研究图像对齐的算法,一般包括两大类:稀疏光流和稠密光流。稀疏光流就是研究图像中稀疏点的光流,这些点一般是角点;稠密光流则是研究图像中所有点的偏移量。以下介绍halcon的基本光流算子optical_flow_mg的原理方法。该算子计算两个图片的光流法。 二、算子说明 optical_flow_mg(ImageT1, ImageT2 : VectorField : Algorithm, SmoothingSigma, Integration

gongdiwudu的专栏 1万+

【Java面试题汇总】JVM篇(2026版)

JVM内存模型、双亲委派模型、类加载机制、内存溢出、垃圾回收机制、内存泄漏、垃圾回收流程、垃圾回收器、G1、CMS、JVM调优

种一棵树最好的时间是十年前,其次是现在 3万+

SAM模型

Task:向模型输入图片以及分割提示,可以是点、框、文本,模型生成相应的分割掩膜。图像编码器计算图像嵌入;提示编码器嵌入提示;mask decoder整合两者信息,输入最终的mask。SAM模型的官方demo,可以更快理解交互式分割提高模型的在新数据分布上面泛化能力,需要一个庞大的数据集训练模型。我们的数据引擎有三个阶段:辅助手动,半自动和全自动。在第一阶段,SAM协助注释者注释Mask,类似于经典的交互式分割设置。

qq_47432746的博客 2961

小工匠聊架构-分布式场景下的并发幂等性常见的解决方案

Pre 我们来回顾下单体时代 单体时代,应用部署在一台主机上,可以使用JVM级别的锁来控制并发请求 。 随着应用规模的不断扩大,集群化或者微服务化的分布式部署越来越普及,每个应用都是一个单独的JVM应用,所以单体时代的这种处理方式已经无法满足当前架构下的业务需求了。 JVM级别的锁已经无法满足跨进程之间访问控制了,进而演化出来了分布式锁。 分布式锁 能否解决幂等性问题? 分布式锁解决什么问题? 简言之: 解决跨进程间无法共享本地资源的问题 ,解决的是分布式场景下并发访问的问题。 为什么需要确保并发.

小工匠 2万+

YOLOv4目标检测:原理与源码解析

需要学习Windows系统YOLOv4的同学请前往《Windows版YOLOv4目标检测实战:原理与源码解析》,课程链接 https://edu.youkuaiyun.com/course/detail/29865【为什么要学习这门课】 Linux创始人Linus Torvalds有一句名言:Talk is cheap. Show me the code. 冗谈不够,放码过来!  代码阅读是从基础到提高的必由之路。尤其对深度学习,许多框架隐藏了神经网络底层的实现,只能在上层调包使用,对其内部原理很难认识清晰,不利于进一步优化和创新。YOLOv4是最近推出的基于深度学习的端到端实时目标检测方法。YOLOv4的实现darknet是使用C语言开发的轻型开源深度学习框架,依赖少,可移植性好,可以作为很好的代码阅读案例,让我们深入探究其实现原理。【课程内容与收获】 本课程将解析YOLOv4的实现原理和源码,具体内容包括:- YOLOv4目标检测原理- 神经网络及darknet的C语言实现,尤其是反向传播的梯度求解和误差计算- 代码阅读工具及方法- 深度学习计算的利器:BLAS和GEMM- GPU的CUDA编程方法及在darknet的应用- YOLOv4的程序流程- YOLOv4各层及关键技术的源码解析本课程将提供注释后的darknet的源码程序文件。【相关课程】 除本课程《YOLOv4目标检测:原理与源码解析》外,本人推出了有关YOLOv4目标检测的系列课程,包括:《YOLOv4目标检测实战:训练自己的数据集》《YOLOv4-tiny目标检测实战:训练自己的数据集》《YOLOv4目标检测实战:人脸口罩佩戴检测》《YOLOv4目标检测实战:中国交通标志识别》建议先学习一门YOLOv4实战课程,对YOLOv4的使用方法了解以后再学习本课程。【YOLOv4网络模型架构图】 下图由白勇老师绘制  

2026年数字IC设计禾赛科技笔试带答案解析

本文介绍了一份数字IC设计工程师笔试的试卷结构和部分题目解析。试卷包含15道单选题(30分)、10道填空题(20分)和5道简答/编程题(50分),总分100分,考试时长120分钟。单选题涉及同步时序电路、Verilog语法、跨时钟域设计、FPGA优化、存储器层次、功耗优化等知识点;填空题考查环形振荡器、工艺参数、时序约束、LUT结构等基础概念。试题重点考察应聘者对数字电路设计核心概念的理解和实际工程应用能力,特别是针对激光雷达芯片设计中的关键技术点进行考核。

Open 123

DDR5 的 PI: DIMM 上 PMIC,正在制造一批“新型 EMI 问题”

DDR5 的 PI,不再只是“供电设计”,而是一次“噪声管理设计”。电压稳定本地调节高频噪声EMI 风险系统不确定性DDR5 真正难的地方,不是跑起来,而是——在最差条件下,它还能不能一直跑。而 DIMM 上那颗 PMIC,正是你绕不开的关键角色。

weixin_43199439的博客 181

源码解析:从零解读SAM(Segment Anything Model)大模型!

节前,我们星球组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、参加社招和校招面试的同学。针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。SAM(Segment Anything Model),顾名思义,即为分割一切!该模型由Facebook的Meta AI实验室,能够根据文本指令或图像识别,实现对任意物体的识别与分割。它的诞生,无疑是CV领域的一次重要里程碑。

2401_84033492的博客 1万+

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

SAM - 分割一切图像【AI大模型】

如果你认为 AI 领域已经通过 ChatGPT、GPT4 和 Stable Diffusion 快速发展,那么请系好安全带,为 AI 的下一个突破性创新做好准备。推荐:用快速搭建3D场景。Meta 的 FAIR 实验室刚刚发布了 Segment Anything Model (SAM),这是一种最先进的图像分割模型,旨在改变计算机视觉领域。SAM 基于对自然语言处理 (NLP) 产生重大影响的基础模型。它专注于可提示的分割任务,使用提示工程来适应不同的下游分割问题。为什么我们对 SAM 如此兴奋?

新缸中之脑 1万+

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Segment Anything:SAM系列模型(SAM、EfficientSAM、MobileSAM、MobileSAM-v2、FastSAM)

这种设计受到《基于Trasformers的端到端目标检测》和Maskformer的启发,使用了一个修改的Transformer解码器block,后跟一个动态掩码预测头。修改后的解码器block在两个方向(提示到图像嵌入和图像嵌入到提示)上使用自注意力和交叉注意力来更新所有嵌入。在运行两个Block后,对图像嵌入进行上采样,并通过MLP层将输出标记映射到一个动态线性分类器(该分类器用于计算每个图像位置的掩码前景概率)。密集提示(即掩码)使用卷积进行嵌入,并与图像嵌入进行逐元素求和。

越努力,越幸运 7367

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

SAM(分割任何内容模型)

Meta AI开发的**SAM(Segment Anything Model)**是一款通用图像分割模型,支持通过点、框或文本提示实现零样本任意目标分割。基于SA-1B数据集(11亿掩码)和视觉Transformer架构,SAM具备强大的泛化能力,无需微调即可应用于新场景。其特点包括交互式分割(点击/框选)和文本引导分割,但存在高分辨率计算成本高的局限。该模型已广泛应用于计算机视觉、AR/VR等领域,提供在线演示功能。

热爱分享,热爱记录 732

太强了!10大开源大模型!

近期,Meta 隆重推出了两款开源模型:Llama 3 8B与Llama 3 70B,这两款模型可供外部开发者免费使用。Meta 表示,Llama 3 8B和Llama 3 70B在目前同体量模型中,展现出卓越的性能,堪称业界的佼佼者。从Meta 分享的基准测试结果来看,Llama 3 400B+ 的实力不容小觑,其性能已逼近Claude超大杯以及新版GPT-4 Turbo,虽然还存在一定的差距,但足以证明它在顶尖大模型领域已占有一席之地。

优快云_430422的博客 5503

SAM(分割一切)——从分割图像到分割视频:从SAM、FastSAM、EfficientSAM到SAM2、SAMURAI

SAM就是一类处理图像分割任务的通用模型。与以往只能处理某种特定类型图片的图像分割模型不同,SAM可以处理所有类型的图像。在SAM出现前,基本上所有的图像分割模型都是专有模型。比如,在医学领域,有专门分割核磁图像的人工智能模型,也有专门分割CT影像的人工智能模型。但这些模型往往只在分割专有领域内的图像时,才具有良好性能,而在分割其他领域的图像时往往性能不佳。

结构之法 算法之道 2万+

ChatGPT和Bard太贵,介绍8个免费开源的大模型解决方案!

8个开源的ChatGPT和Bard的替代方案,带你发现更多广泛使用的开源框架和模型。

weixin_39915649的博客 1479

十大开源大模型的特点及应用要点

开源大模型与闭源模型的辩论仍在继续,但开源模型如LLaMA 3的出现,为开源社区带来了希望。开源模式在构建生态方面具有巨大潜力,尽管在大模型领域的发展存在不确定性,但开源社区的合作和创新将继续推动AI技术的进步。​。

python12222_的博客 4035

SAM 模型真的是强悍到可以“分割一切”了吗?

关注公众号,发现CV技术之美上周,Meta AI发布了 Segment Anything Model(SAM)—— 第一个图像分割基础模型。很多计算机视觉从业者惊呼“这下CV真的不存在了,快跑!”。但是SAM 模型真的是强悍到可以“分割一切”了吗?它在哪些场景或任务中还不能较好地驾驭呢?研究社区已经有一些相关工作对这一问题进行探索,今天向大家介绍一篇昨天刚出的技术报告:SAM Struggles ...

我爱计算机视觉 3073

第一篇综述!分割一切模型(SAM)的全面调研

点击下方卡片,关注“CVer”公众号AI/CV重磅干货,第一时间送达点击进入—>【图像分割】微信技术交流群转载自:机器之心作为首个全面介绍基于 SAM 基础模型进展的研究,本文聚焦于 SAM 在各种任务和数据类型上的应用,并讨论了其历史发展、近期进展,以及对广泛应用的深远影响。人工智能(AI)正在向 AGI 方向发展,这是指人工智能系统能够执行广泛的任务,并可以表现出类似于人类的智能水平,狭...

阿木寺的博客 3145
上一篇: 黑客入侵OpenAI,细节一年后才公开,三类数据资源让AI公司成为活靶子
下一篇: 揭开危险的面纱:人工智能可能失控的十种方式以及如何识别
老贾的AI世界
博客等级 码龄7年 3335粉丝 254原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老贾的AI世界

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值