深度学习与遥感入门(二)|基于PyTorch的HybridNet模型:CNN+Transformer结合的高光谱图像分类实战教程

高光谱分类论文解读分享之基于多模态融合Transformer的遥感图像分类方法 IEEE TGRS 2023:基于多模态融合Transformer的遥感图像分类方法 阅读详情

这次继续深度学习的内容,稍微进阶一点,但是核心还是一样的,主要是讨论一下PyTorch和新的模型,同样替换数据可以直接运行。另外,这次我把详细的注释直接放在代码里了,供大家参考!
高光谱图像(HSI)分类是遥感领域的经典问题。纯CNN模型在提取局部特征上表现不错,但对长距离依赖建模能力有限。Transformer结构善于捕获全局上下文信息,近年来被引入到HSI分类中。

本教程将带你一步步实现一个结合了CNN和Transformer的混合网络——HybridNet,用PyTorch完成训练与测试,并配套丰富的可视化,帮助理解和复现。

一、模型结构讲解与代码实现

1.1 设计思路

  • 卷积层负责提取局部特征,输出多个通道的特征序列。
  • 线性层将卷积输出映射为Transformer需要的特征维度。
  • Transformer编码器捕获序列内的全局依赖关系。
  • 分类层对提取的特征进行分类。

1.2 代码实现与注释

import torch
import torch.nn as nn

class HybridNet(nn.Module):
    def __init__(self, input_dim, num_classes, d_model=64, nhead=4, num_layers=1, dim_feedforward=128, dropout=0.1):
        super(HybridNet, self).__init__()

        # ------------------ CNN部分 -------------------
        # 输入形状为 (batch_size, 1, input_dim),即单通道的1D光谱序列
        # 先用第一层Conv1d将通道数从1升至32,卷积核大小3,padding=1保持长度不变
        # BatchNorm1d提升训练稳定性,ReLU增加非线性
        # MaxPool1d将序列长度缩减为原来一半
        self.conv_block = nn.Sequential(
            nn.Conv1d(1, 32, kernel_size=3, padding=1),  # 输出shape: (B, 32, input_dim)
            nn.BatchNorm1d(32),
            nn.ReLU(),
            nn.MaxPool1d(2),  # 长度变为 input_dim // 2

            # 第二层卷积将通道数升至64,依然kernel_size=3,padding=1保证长度不变
            nn.Conv1d(32, 64, kernel_size=3, padding=1),  # (B, 64, input_dim//2)
            nn.BatchNorm1d(64),
            nn.ReLU(),
            nn.MaxPool1d(2)   # 长度变为 input_dim // 4
        )

        # 卷积后特征的维度 = 通道数 * 长度 = 64 * (input_dim // 4)
        self.cnn_out_dim = 64 * (input_dim // 4)

        # 将卷积后得到的高维特征线性映射到Transformer需要的特征维度d_model
        self.proj = nn.Linear(self.cnn_out_dim, d_model)

        # ------------------ Transformer编码器 -------------------
        # 使用PyTorch内置的TransformerEncoderLayer构建编码器层
        encoder_layer = nn.TransformerEncoderLayer(
            d_model=d_model,        # 特征维度
            nhead=nhead,            # 多头注意力的头数
            dim_feedforward=dim_feedforward,  # 前馈网络隐藏层维度
            dropout=dropout,
            batch_first=True,       # 输入形状为(batch_size, seq_len, d_model)
            norm_first=True         # 先归一化再计算注意力和前馈
        )
        # 堆叠num_layers层Transformer编码器
        self.transformer = nn.TransformerEncoder(encoder_layer, num_layers=num_layers)

        # ------------------ 分类器 -------------------
        # 先用一层线性层降维到128,ReLU激活后使用Dropout防止过拟合
        # 最后输出类别数量维度的线性层
        self.classifier = nn.Sequential(
            nn.Linear(d_model, 128),
            nn.ReLU(),
            nn.Dropout(dropout),
            nn.Linear(128, num_classes)
        )

    def forward(self, x):
        """
        输入:
          x: tensor形状为(batch_size, 1, input_dim)
        输出:
          分类得分,形状(batch_size, num_classes)
        """
        # 通过卷积模块,输出形状 (batch_size, 64, input_dim//4)
        x = self.conv_block(x)

        # 将通道和长度展平成一维向量,方便线性层处理
        # 变成形状 (batch_size, 64 * (input_dim//4))
        x = x.view(x.size(0), -1)

        # 线性映射到Transformer特征维度,得到形状(batch_size, d_model)
        x = self.proj(x)

        # Transformer需要输入三维,表示序列形式,加入序列维度1
        # 变成(batch_size, seq_len=1, d_model)
        x = x.unsqueeze(1)

        # Transformer编码,输入输出形状保持不变
        x = self.transformer(x)

        # 去掉序列维度,变回(batch_size, d_model)
        x = x.squeeze(1)

        # 送入分类器,输出预测得分
        return self.classifier(x)

二、数据加载与预处理

高光谱数据具有波段多、维度高的特点,使用PCA降维和标准化是常规步骤。

import os
import numpy as np
import scipy.io
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
import torch
from torch.utils.data import Dataset, DataLoader, random_split

def load_data(x_path, y_path):
    # 从.mat文件中加载数据,返回图像和标签数组
    x_data = scipy.io.loadmat(x_path)
    y_data = scipy.io.loadmat(y_path)
    x_key = [k for k in x_data.keys() if not k.startswith('__')][0]
    y_key = [k for k in y_data.keys() if not k.startswith('__')][0]
    return x_data[x_key], y_data[y_key]

class HyperspectralDataset(Dataset):
    def __init__(self, data, labels):
        # 将numpy数组转为tensor,方便后续训练
        self.data = torch.tensor(data, dtype=torch.float32)
        self.labels = torch.tensor(labels, dtype=torch.long)

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

    def __getitem__(self, idx):
        return self.data[idx], self.labels[idx]

# 指定数据路径
data_dir = r"F:\WORK_SPACE\20240812\pythonProject\中汇\BASE_TOOL\DATASETS"
x_file = "KSC.mat"
y_file = "KSC_gt.mat"

# 加载数据
X_image, y_image = load_data(os.path.join(data_dir, x_file), os.path.join(data_dir, y_file))
h, w, bands = X_image.shape
print(f"图像大小: {h}x{w}, 波段数: {bands}")

# 将三维图像数据转换为二维样本(样本数, 波段数)
X_flat = X_image.reshape(-1, bands)
y_flat = y_image.reshape(-1)

# 筛选有标签的像素(标签不为0)
mask = y_flat != 0
X_labeled = X_flat[mask]
y_labeled = y_flat[mask] - 1  # 标签从0开始编号

# 标准化,使每个波段特征均值为0,方差为1
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X_labeled)

# 使用PCA降维,减少计算复杂度,保留10个主成分
pca_dim = 10
pca = PCA(n_components=pca_dim)
X_pca = pca.fit_transform(X_scaled)

# 调整形状,满足模型输入格式(batch_size, 1, pca_dim)
X_reshaped = X_pca.reshape(-1, 1, pca_dim)

num_classes = len(np.unique(y_labeled))
print(f"类别数量: {num_classes}")

# 构建PyTorch数据集
dataset = HyperspectralDataset(X_reshaped, y_labeled)

# 按照30%训练集,70%测试集划分数据
train_size = int(0.3 * len(dataset))
test_size = len(dataset) - train_size
train_dataset, test_dataset = random_split(dataset, [train_size, test_size],
                                           generator=torch.Generator().manual_seed(42))

# 创建数据加载器,支持批量读取和多线程加速
train_loader = DataLoader(train_dataset, batch_size=256, shuffle=True, num_workers=4, pin_memory=True)
test_loader = DataLoader(test_dataset, batch_size=256, shuffle=False, num_workers=4, pin_memory=True)

三、训练过程与性能评估

import torch.optim as optim
from torch.cuda.amp import GradScaler, autocast
from sklearn.metrics import accuracy_score

device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
print(f"当前设备: {device}")

# 实例化模型并放到设备上
model = HybridNet(pca_dim, num_classes).to(device)

# 使用Adam优化器
optimizer = optim.Adam(model.parameters(), lr=1e-3)

# 动态调整学习率,监控验证集准确率
scheduler = optim.lr_scheduler.ReduceLROnPlateau(optimizer, mode='max', patience=3, factor=0.5)

# 交叉熵损失函数,适合多分类任务
criterion = nn.CrossEntropyLoss()

# 混合精度训练加速
scaler = GradScaler()

def evaluate(model, loader):
    model.eval()
    all_preds, all_labels = [], []
    with torch.no_grad():
        for batch_x, batch_y in loader:
            batch_x, batch_y = batch_x.to(device), batch_y.to(device)
            outputs = model(batch_x)
            preds = outputs.argmax(dim=1).cpu().numpy()
            all_preds.extend(preds)
            all_labels.extend(batch_y.cpu().numpy())
    acc = accuracy_score(all_labels, all_preds)
    return acc

epochs = 30
best_acc = 0

for epoch in range(epochs):
    model.train()
    running_loss = 0
    train_preds, train_labels = [], []

    for batch_x, batch_y in train_loader:
        batch_x, batch_y = batch_x.to(device), batch_y.to(device)

        optimizer.zero_grad()
        with autocast():
            outputs = model(batch_x)
            loss = criterion(outputs, batch_y)

        scaler.scale(loss).backward()
        scaler.step(optimizer)
        scaler.update()

        running_loss += loss.item() * batch_x.size(0)
        preds = outputs.argmax(dim=1).cpu().numpy()
        train_preds.extend(preds)
        train_labels.extend(batch_y.cpu().numpy())

    train_loss = running_loss / len(train_loader.dataset)
    train_acc = accuracy_score(train_labels, train_preds)
    test_acc = evaluate(model, test_loader)
    scheduler.step(test_acc)

    if test_acc > best_acc:
        best_acc = test_acc
        torch.save(model.state_dict(), 'best_model.pth')

    print(f"Epoch {epoch+1}/{epochs} - 训练损失: {train_loss:.4f} - 训练准确率: {train_acc:.4f} - 测试准确率: {test_acc:.4f}")

print(f"训练完成,最佳测试准确率: {best_acc:.4f}")

# 加载最佳模型权重
model.load_state_dict(torch.load('best_model.pth'))

四、可视化重点讲解

4.1 PCA方差解释率图

展示PCA降维时每个主成分的方差贡献,帮助确认降维合理性。

import matplotlib.pyplot as plt
import numpy as np

def visualize_pca_variance(pca):
    plt.figure(figsize=(8,5))
    x = np.arange(1, len(pca.explained_variance_ratio_) + 1)
    plt.plot(x, pca.explained_variance_ratio_, 'o-', label='单个主成分')
    plt.plot(x, np.cumsum(pca.explained_variance_ratio_), 's-', label='累计方差')
    plt.axhline(y=0.9, color='r', linestyle='--', label='90%方差线')
    plt.xlabel('主成分数量')
    plt.ylabel('方差解释率')
    plt.title('PCA主成分方差解释率')
    plt.legend()
    plt.grid()
    plt.show()

visualize_pca_variance(pca)

4.2 混淆矩阵及分类报告

清晰展示模型对各类别的识别情况。

from sklearn.metrics import confusion_matrix, classification_report
import seaborn as sns

def visualize_confusion_matrix(model, loader, class_names):
    model.eval()
    y_true, y_pred = [], []
    with torch.no_grad():
        for batch_x, batch_y in loader:
            batch_x = batch_x.to(device)
            preds = model(batch_x).argmax(dim=1).cpu().numpy()
            y_pred.extend(preds)
            y_true.extend(batch_y.numpy())

    cm = confusion_matrix(y_true, y_pred)
    plt.figure(figsize=(10,8))
    sns.heatmap(cm, annot=True, fmt='d', cmap='Blues', xticklabels=class_names, yticklabels=class_names)
    plt.xlabel('预测标签')
    plt.ylabel('真实标签')
    plt.title('混淆矩阵')
    plt.show()

    print("分类报告:")
    print(classification_report(y_true, y_pred, target_names=class_names))

class_names = [f"类{i+1}" for i in range(num_classes)]
visualize_confusion_matrix(model, test_loader, class_names)

4.3 全图分类结果展示

将模型预测结果映射回原图空间,直观展示空间分布。

def visualize_classification_map(model, X_image, y_image, scaler, pca, h, w, pca_dim):
    # 将图像数据转为模型输入格式
    X_flat = X_image.reshape(-1, X_image.shape[-1])
    X_scaled = scaler.transform(X_flat)
    X_pca = pca.transform(X_scaled)
    X_reshaped = X_pca.reshape(-1, 1, pca_dim)

    model.eval()
    preds = []
    batch_size = 1024
    with torch.no_grad():
        for i in range(0, len(X_reshaped), batch_size):
            batch_x = torch.tensor(X_reshaped[i:i+batch_size], dtype=torch.float32).to(device)
            pred = model(batch_x).argmax(dim=1).cpu().numpy()
            preds.extend(pred)

    pred_map = np.array(preds).reshape(h, w)
    plt.figure(figsize=(10,8))
    cmap = plt.cm.get_cmap('tab10', np.max(pred_map) + 1)
    plt.imshow(pred_map, cmap=cmap)
    plt.colorbar(ticks=range(np.max(pred_map)+1), label='预测类别')
    plt.title('高光谱图像分类结果')
    plt.axis('off')
    plt.show()

visualize_classification_map(model, X_image, y_image, scaler, pca, h, w, pca_dim)

结果展示:

  1. 主成分结果(这个图大家应该都熟悉我就不解释了)
    在这里插入图片描述

2.全图分类结果(现在一般论文要求最好全图预测)
在这里插入图片描述

3.其实就是精确率(Precision)
在这里插入图片描述

4.这个不多说都懂
在这里插入图片描述

  1. 其实从图片看,epoch还能再加一点
    在这里插入图片描述

五、总结

本文详细拆解了HybridNet的代码实现,结合数据预处理、模型训练、性能评估与多角度可视化。希望你通过这篇教程能深入理解高光谱分类中的混合模型设计与实战流程,能够直接复制代码进行实验。

如有任何疑问或想法,欢迎留言交流!同时欢迎关注我的公众号:遥感AI实战,转发给需要的朋友!

MultiTask V3、HybridNets和YOLOP谁更强呢? 移动机器人中的感知系统,包括自动驾驶汽车和无人机,使用相机、激光雷达、雷达、IMU等传感器,GNSS等,以提供有关车辆在3D空间中位置的关键信息,并检测相关物体(如汽车、行人、骑自行车的人、红绿灯等)。图像和激光雷达数据处理涉及两项主要任务:检测,识别物体并用边界框或Mask标记,其基于每个像素在图像中的表示将标签分配给每个像素。实例分割为属于同一类的目标(例如,不同的汽车)分配不同的标签。这样可以正确识别和跟踪所有目标。通常,这两项任务都由不同类型的深度卷积神经网络执行。 阅读详情

相关推荐

【多层交叉transformer:高光谱和多光谱图像融合】

仅供自己参考

weixin_43690932的博客 1万+

HybridNets: End-to-End Perception Network

HybridNets的重要内容翻译。其主要改进点为:主干网络替换为EfficientNet-B3;颈部网络替换为BiFPN;分割损失修改为Focal损失+Tversky损失;后者可以改善类别不平衡问题。

Jad_Goh的博客 2950

结合Transformer和多层特征聚合的高光谱图像分类算法

换句话说,通过多种尺度的卷积核实现不同层次的特征提取,然后进行按元素相加,改善了不同特征图之间的交互作用,从而提高了网络的表达能力。因此,与其他仅使用卷积网络相比,所提出网络具有更大的感受野,这就使得获得特征更具上下文信息,丰富了特征的多样性。其中,最为经典的是,在人类的视觉中,由于机制信息处理的瓶颈,人类会有选择性的关注某一部分信息,人类视网膜不同的部位具有不同程度的信息处理能力。近年来,自注意力机制(此外,基于注意力机制的方法能够获取长远的依赖关系,得到全局的特征,所以广泛应用在高光谱图像分类中。

罗伯特技术屋 1725

HybridNet 容器网络解决方案安装与使用教程

HybridNet 容器网络解决方案安装与使用教程 hybridnetMake underlay and overlay network can coexist, communicate, even be transformed purposefully.项目地址:https://gitcode.com/gh_mirrors/hy/hybridnet 1. 项目目录结构及介绍 HybridNet...

gitblog_00729的博客 653

目标检测系列算法:HybridNets端到端感知网络

论文摘要:端到端网络在多任务处理中变得越来越重要。一个突出的例子是驾驶感知系统在自动驾驶中的重要性日益增加。本文系统地研究了用于多任务处理的端到端感知网络,并提出了几个关键优化以提高准确性。首先,本文提出了基于加权双向特征网络的高效分割头和框/类预测网络。其次,本文提出了为加权双向特征网络中的每个级别自动定制的anchor。第三,本文提出了一种有效的训练损失函数和训练策略来平衡和优化网络。......

源代码杀手的博客 2031

新模型设计:AdaptiveHybridNet - 动态混合架构网络用于超轻量图像分类

在本博客中,我们详细介绍了 AdaptiveHybridNet 模型的设计背景、创新点及网络结构,通过混合卷积-注意力单元、梯度感知动态稀疏和跨层特征复用,实现了在极低参数量(≤300K)下的超轻量图像分类。模型采用 2x2 均值池化和 1x1 卷积作为熵引导预处理,将图像下采样至 96×96,后续四个堆叠的 HCA 单元依次提取特征,并通过跨层复用减少重复计算。分类头部分利用自适应空间池化和极简全连接层输出类别概率。

闲人编程的博客 483

安装hybridnet网络插件

与 hybridnet 网络插件不同,terway 网络插件是与阿里云基础设施紧密结合的,并不考虑在非阿里云公有云基础设施环境部署的情况,而 hybridnet 更像是类似 flannel、calico 的社区解决方案,支持在任意环境拉起和部署。在异构的混合云基础设施上,对资源进行统一纳管和优化调度,以开放的、云原生的方式为平台及业务系统提供生产可用的产品及组件,帮助用户打造满足大规模、高性能、合规性和业务连续性等要求的分布式应用系统,提升企业数字化转型的整体效能。

因上努力,果上随缘。但行好事,莫问前程。 942

HybridNet:快速车辆检测新方法

本文提出一种名为HybridNet的两阶段回归级联检测系统,融合单阶段速度与两阶段精度优势,通过过渡阶段映射候选区域至高分辨率特征图以提升检测精度。在KITTI和PASCAL VOC2007数据集上实验表明,该方法在保持高速推理的同时显著提升车辆检测性能,适用于自动驾驶实际应用。

u0v1w2x3的博客 816

与容器服务 ACK 发行版的深度对话第二弹:如何借助 hybridnet 构建混合云统一网络平面

作者:若禾、昱晟、瑜佳 记者: 各位阿里巴巴云原生的读者朋友们大家好,欢迎再次来到探究身世之谜系列专访栏目,今天邀请来的还是大家的老朋友,『阿里云容器服务 ACK 发行版』,上次的访谈中它为我们介绍了阿里巴巴开源集群镜像技术 sealer,以及它们是如何相互配合来达成阿里云 ACK 服务的快速稳定交付。错过的读者不要忘记去回顾一下哦~那么这次做客,它又会为我们介绍哪位小伙伴呢? 阿里云容器服务 ACK 发行版(简称 ACK Distro) :大家好,我们又见面了!相信经过上次的自我介绍,你们对我已经有了大概

阿里巴巴云原生的博客 584

BDD100K可通行区域标签,da-seg-annotations.zip

BDD100K语义分割标签,twinlitenet,yolop,yolopv2,hybridnet训练必须文件,地址https://drive.google.com/file/d/1xy_DhUZRHR8yrZG3OwTQAHhYTnXn7URv/view?usp=sharing,如要下载需要科学上网。 BDD100K 数据集,是加州大学伯克利分校 AI 实验室(BAIR)于 2018 年发布的,迄今为止最大规模、内容最具多样性的公开驾驶数据集之一。其包含的 10 万个高清视频序列,时长超过 1100 小时。其中,每个视频大约 40 秒长、720p、30 fps,还附有手机记录的 GPS/IMU 信息和时间戳,以显示大概的驾驶轨迹。BAIR 还对每个视频的第 10 秒对关键帧进行采样,得到 10 万张图片(图片尺寸:1280*720 ),并进行标注。这些图片还被标记了:图像标记、道路对象边界框、可驾驶区域、车道标记线和全帧实例分割。这些注释有助于理解不同场景中数据和对象统计的多样性。数据集中的视频是从美国各地收集的,涵盖不同时间、不同天气条件(包括晴天、阴天和雨天,以及白天和晚上的不同

别再调PID了!用MATLAB/Simulink给四旋翼无人机搭个ADRC控制器(附完整仿真模型)

本文详细介绍了在MATLAB/Simulink环境中为四旋翼无人机搭建ADRC控制器的完整流程,包括核心原理、Simulink建模、参数调试技巧及与PID控制的性能对比。ADRC通过扩张状态观测器(ESO)有效提升无人机在复杂扰动下的控制性能,特别适合四旋翼无人机这类强耦合系统。文章还提供了完整的仿真模型和工程实践问题解决方案。

weixin_26808439的博客 376

高光谱图像分类,使用GAN和Swin-Transformer改进

近年来,基于生成对抗网络(GAN)的高光谱图像(HSI)分类取得了很大进展。然而,一些研究指出现有的基于GAN的HSI分类方法受到不平衡训练数据问题的严重影响。生成器只能在数据空间的一个狭窄范围内生成样本,这严重阻碍了基于GAN的HSI分类方法的发展。AdapDrop通过自适应形状生成Drop掩码,而不是固定尺寸的区域,它缓解了DropBlock在处理具有各种形状的地面对象时的限制。在三个HSI数据集上的实验结果表明,我们提出的ADGAN相对于现有的基于GAN的方法取得了更优秀的分类性能。

crasher123的博客 1339

从零打造M328晶体管测试仪:硬件DIY与烧录避坑指南

本文是一份详尽的M328晶体管测试仪DIY指南,涵盖从硬件选型、PCB设计、焊接组装到固件烧录的全过程。重点解析了使用AVR单片机与Arduino IDE环境时,如何正确设置熔丝位以避免“白屏”等常见问题,并提供了使用ISP编程器进行烧录的实操步骤与校准方法,帮助电子爱好者成功打造属于自己的高性价比元件测试工具。

weixin_29243063的博客 463

探索未来云网络:Hybridnet 开源项目详解

探索未来云网络:Hybridnet 开源项目详解 在云原生的今天,容器网络解决方案扮演着至关重要的角色。然而,传统的CNI插件通常将网络分为覆盖网络(Overlay)和底层网络(Underlay),它们各自运作,互不连通。为此,阿里巴巴推出了Hybridnet,一个专为混合云设计的开放源代码容器网络解决方案,旨在打破这一界限,实现二者的无缝融合。 项目简介 Hybridnet 提供了一种全新的网络...

gitblog_00012的博客 811

【Gazebo安装指南】Ubuntu22.04LTS环境下的高效配置与常见问题解决

本文提供了在Ubuntu 22.04 LTS系统上高效安装和配置Gazebo仿真环境的详细指南。针对Gazebo Classic版本,文章对比了通过ROS 2仓库和Ubuntu官方仓库两种主流安装方法,并重点解决了安装过程中常见的软件包定位、模型下载及图形驱动等问题,帮助用户快速搭建稳定的机器人仿真开发环境。

weixin_29279101的博客 432

安卓-折叠屏平行视界适配(多厂商兼容与优先级实战)

本文详细解析了安卓折叠屏平行视界适配的现状与挑战,重点探讨了多厂商兼容性策略和优先级冲突的实战解决方案。通过对比Google的Embedding方案和国内厂商的EasyGo标准,提供了检测设备支持方案、处理优先级冲突及双方案共存的最佳实践,帮助开发者高效完成折叠屏适配。

weixin_29190169的博客 152

Alibaba HybridNet: 容器网络解决方案在混合云环境下的实现

Alibaba HybridNet: 容器网络解决方案在混合云环境下的实现 一、项目介绍 Alibaba HybridNet 是一个开放源码的容器网络解决方案,特别设计用于应对混合云环境中的网络挑战。它紧密结合 Kubernetes 生态系统,旨在使底层和覆盖层网络能够共存、通信甚至目的性地转换。 关键特性包括: 统一的拓扑感知管理API: 实现于Kubernetes自定义资源定义(CRD),便...

gitblog_00916的博客 1213

Linux服务器 离线安装oracle

Linux服务器 离线安装oracle

xie_bro的博客 4238

CNStack 网络插件:hybridnet 的设计与实现

从诞生到现在,在阿里内部 hybridnet 一直承载的是“私有化交付基石”的角色,即为以 K8s 为交付媒介的 PaaS/SaaS 产品提供在客户线下机房的网络部署、运维能力,其性质看起来也就和 “为所有人提供 K8s 网络” 更加类似。

数据库技术 421

如何通过conda安装HyPhy教程

本文介绍了在Ubuntu系统上通过conda安装分子进化分析工具HyPhy的详细步骤。首先创建conda环境并指定Python 3.8版本,然后通过bioconda通道安装HyPhy软件包。安装完成后可通过conda list命令验证安装。文中还特别指出可能遇到的libcrypto.so.1.1共享库缺失错误,并提供了解决方案的参考链接。该教程配有安装过程截图,帮助用户直观了解操作流程和验证安装结果。

猿小白的博客 8248

31、工程中不确定性量化与优化的全面解析

本文全面解析了工程中不确定性量化与优化的关键方法。针对数据充足与不足两种情况,分别介绍了概率理论和非概率方法在不确定性建模中的应用;系统阐述了采样方法、FORM/SORM、泰勒级数近似等不确定性传播技术;深入比较了RBDO与RDO两种主流优化框架的原理、步骤及适用场景,并通过两杆桁架案例展示了具体实现过程。文章旨在为工程师提供一套完整的从不确定性分析到优化设计的方法论,提升工程系统的可靠性与稳健性。

php55的博客 117

自动驾驶视觉感知—— 多任务学习(HybridNets)

HybridNets多任务模型主要针对目标检测、可行驶区域分割和车道检测。在Berkeley DeepDrive Dataset (BDD100K)数据集上进行训练,达到SOTA的目标和车道检测。

old_power的博客 1396

串行RapidIO(Serial RapidIO,SRIO):协议介绍

目录一、RapidIO背景介绍二、RapidIO协议概述2.1 包与控制符号2.2 包格式2.4 消息传递2.5 全局共享存储器2.6 流量控制2.7 串行物理层三、I/O逻辑操作与包格式四、维护操作与包格式五、消息操作与包格式六、总结 本文是基于Xilinx平台SRIO介绍(一)RapidIO协议介绍的内容作读书笔记。 一、RapidIO背景介绍 RapidIO采用三层分级体系结构,包括逻辑层、传输层和物理层该分级结的如下图所示: ● 逻辑层:位于最高层,定义全部协议和包的格式,它们为端点器件发起和完

Starry__的博客 1万+

Hybridnet 项目常见问题解决方案

Hybridnet 项目常见问题解决方案 项目基础介绍 Hybridnet 是一个开源的容器网络解决方案,设计用于混合云环境,与 Kubernetes 集成,并由阿里巴巴集团的多个知名 PaaS 平台(如 ACK、AECP、SOFAStack)官方使用。该项目的目标是打破传统容器网络类型的严格界限,允许在同一集群中同时创建和使用 Overlay 和 Underlay 网络类型,提供更灵活、可扩展的...

gitblog_00775的博客 390

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

【深度学习|地学应用】使用SimCLR对遥感数据(如AID)训练+评估完整代码流程,附代码。

【深度学习|地学应用】使用SimCLR(a simple framework for contrastive learning of visual representations)对遥感数据(如AID)训练+评估完整代码流程,附代码。

2401_89898861的博客 928

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

TPAMI 2025 | 顶刊新成果:S²-Transformer 以物理驱动设计,赋能高光谱图像重建全局 - 局部细节精准恢复

近年来流行的"快照压缩成像(SCI)"技术,比如编码孔径快照光谱成像仪(CASSI),能一次性把三维高光谱数据压缩成二维图像,但这就像把彩色拼图强行塞进黑白相册,信息全缠在了一起,还会因为"掩膜"遮挡丢失部分数据,重建起来特别费劲。先给大家科普下CASSI的工作原理:它就像一个"光学魔术师",先用一张物理掩膜(类似带孔的挡板)对高光谱数据进行编码,再通过色散器把不同波长的光"错位叠加",最后生成一张二维的测量图。被掩膜遮挡的区域重建难度大,但之前的损失函数对所有像素"一碗水端平",导致这些区域总是拖后腿。

小白学视觉 316

精雕软件(JDpaint) 5.5 绿色版

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

上一篇: 机器学习入门基础 | 基于python的高光谱图像特征挖掘:PCA + 形态学属性处理可视化实战
下一篇: 深度学习与遥感入门(2.5)|三种 CNN 特征对比:高光谱图像分类中的光谱、空间与时空混合可视化
遥感AI实战
博客等级 码龄9年 1002粉丝 107原创
评论
成就一亿技术人!
拼手气红包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、付费专栏及课程。

余额充值