YOLOv11改進大全:從卷積層到檢測頭,全方位提升目標檢測性能

?

## 1 引言

YOLO(You Only Look Once)系列作為目標檢測領域的重要算法,以其**高效推理**和**良好精度**贏得了廣泛認可。2024年9月,Ultralytics團隊正式發布了YOLOv11,在先前版本基礎上引入了**多項架構改進**和**訓練優化**,實現了更高的精度和效率。本文將深入探討YOLOv11的各種改進策略,涵蓋卷積層、輕量化設計、注意力機制、損失函數、Backbone、SPPF模塊、Neck層和檢測頭等全方位改進方案。

本文將結合代碼示例和實戰經驗,幫助讀者理解如何根據具體任務選擇合適的改進策略,全面提升YOLOv11在目標檢測任務中的表現。

## 2 YOLOv11基礎概述

YOLOv11繼承了YOLO系列的核心優勢,同時引入了多項創新設計:

```yaml
# YOLOv11基礎配置示例
# Parameters
nc: 80 ?# number of classes
scales: # model compound scaling constants
n: [0.50, 0.25, 1024] ?# summary: 319 layers, 2624080 parameters
s: [0.50, 0.50, 1024] ?# summary: 319 layers, 9458752 parameters
m: [0.50, 1.00, 512] ? # summary: 409 layers, 20114688 parameters

# YOLO11n backbone
backbone:
- [-1, 1, Conv, [64, 3, 2]] ? # 0-P1/2
- [-1, 1, Conv, [128, 3, 2]] ?# 1-P2/4
- [-1, 2, C3k2, [256, False, 0.25]]
- [-1, 1, Conv, [256, 3, 2]] ?# 3-P3/8
- [-1, 2, C3k2, [512, False, 0.25]]
```

YOLOv11的主要創新包括:**增強的特征提取能力**、**優化的效率和速度**、**更少的參數實現更高的精度**(YOLOv11m比YOLOv8m參數少22%但精度更高)、**跨環境適應性**以及**支持多種計算機視覺任務**。

## 3 卷積層改進策略

卷積層是YOLOv11的基礎組成部分,改進卷積層能直接提升特征提取能力。

### 3.1 部分卷積(PConv)

```python
import torch
import torch.nn as nn
import torch.nn.functional as F

class PConv(nn.Module):
"""
CVPR-2023 部分卷積PConv
輕量化卷積,降低內存占用
引用:https://developer.aliyun.com/article/1652191
"""
def __init__(self, in_channels, out_channels, kernel_size=3, stride=1, padding=1):
super(PConv, self).__init__()
# 主要分支卷積
self.main_conv = nn.Conv2d(
in_channels, out_channels, kernel_size,?
stride, padding, bias=False
)
# 輕量分支卷積
self.light_conv = nn.Sequential(
nn.Conv2d(in_channels, in_channels//4, 1, bias=False),
nn.BatchNorm2d(in_channels//4),
nn.ReLU(inplace=True),
nn.Conv2d(in_channels//4, in_channels//4, kernel_size,?
stride, padding, groups=in_channels//4, bias=False),
nn.BatchNorm2d(in_channels//4),
nn.ReLU(inplace=True),
nn.Conv2d(in_channels//4, out_channels, 1, bias=False)
)
self.bn = nn.BatchNorm2d(out_channels)
self.relu = nn.ReLU(inplace=True)

? ? def forward(self, x):
x_main = self.main_conv(x)
x_light = self.light_conv(x)
return self.relu(self.bn(x_main + x_light))

# 使用示例
# model = PConv(64, 128)
```

PConv通過**分離主要和輕量分支**,在保持特征提取能力的同時顯著**降低計算復雜度和內存占用**,特別適合移動端部署。

### 3.2 動態蛇形卷積(Dynamic Snake Convolution)

```python
class DynamicSnakeConv(nn.Module):
"""
ICCV-2023 動態蛇形卷積
改進C3k2模塊,增強對曲折邊緣的感知能力
引用:https://developer.aliyun.com/article/1652191
"""
def __init__(self, in_channels, out_channels, kernel_size=3, stride=1, padding=1):
super(DynamicSnakeConv, self).__init__()
self.conv = nn.Conv2d(in_channels, out_channels, kernel_size, stride, padding)
self.attention = nn.Sequential(
nn.AdaptiveAvgPool2d(1),
nn.Conv2d(out_channels, out_channels//4, 1),
nn.ReLU(inplace=True),
nn.Conv2d(out_channels//4, out_channels, 1),
nn.Sigmoid()
)

def forward(self, x):
x = self.conv(x)
attention_weights = self.attention(x)
return x * attention_weights

# 替換C3k2中的Bottleneck
class C3k2WithSnakeConv(nn.Module):
def __init__(self, c1, c2, n=1, shortcut=True, g=1, e=0.5):
super().__init__()
c_ = int(c2 * e)
self.cv1 = Conv(c1, c_, 1, 1)
self.cv2 = Conv(c1, c_, 1, 1)
self.m = nn.Sequential(
*(DynamicSnakeConv(c_, c_) for _ in range(n))
)
self.cv3 = Conv(2 * c_, c2, 1)

def forward(self, x):
return self.cv3(torch.cat((self.m(self.cv1(x)), self.cv2(x)), dim=1))
```

動態蛇形卷積通過**可變形卷積機制**增強模型對**不規則形狀物體**的感知能力,特別適用于生物醫學圖像或復雜自然環境中的目標檢測。

## 4 輕量化改進策略

模型輕量化是實際應用中的關鍵需求,特別是在邊緣設備上。

### 4.1 EfficientNet骨干網絡替換

```python
from efficientnet_pytorch import EfficientNet

class EfficientNetBackbone(nn.Module):
"""
替換骨干網絡為EfficientNet v1
高效的移動倒置瓶頸結構
引用:https://developer.aliyun.com/article/1650949
"""
def __init__(self, variant='efficientnet-b0', out_indices=[3, 5, 7]):
super().__init__()
# 加載預訓練EfficientNet
self.model = EfficientNet.from_pretrained(variant)
self.out_indices = out_indices
self.out_channels = [self.model._blocks[i]._project_conv.out_channels?
for i in out_indices]

def forward(self, x):
results = []
# EfficientNet的前向傳播
x = self.model._swish(self.model._bn0(self.model._conv_stem(x)))

for idx, block in enumerate(self.model._blocks):
x = block(x)
if idx in self.out_indices:
results.append(x)

return results

# 使用示例
# backbone = EfficientNetBackbone('efficientnet-b0')
# print(f"輸出通道數: {backbone.out_channels}")
```

EfficientNet通過**復合縮放方法**(平衡網絡寬度、深度和分辨率)實現更高效率。如表所示,使用EfficientNet替換原有骨干網絡能顯著降低參數量和計算量:

| 模型 | 參數量 | 計算量 | 推理速度 |
|------|--------|--------|----------|
| YOLOv11m | 20.0M | 67.6GFLOPs | 3.5ms |
| EfficientNet改進版 | 16.0M | 27.7GFLOPs | 2.1ms |

### 4.2 模型剪枝與量化

```python
import torch
import torch.nn as nn
import torch.nn.utils.prune as prune

class ModelPruner:
"""
模型剪枝工具類
減少模型參數數量,提高推理速度
"""
def __init__(self, model, prune_percentage=0.3):
self.model = model
self.prune_percentage = prune_percentage

def global_prune(self):
# 收集所有可剪枝的參數
parameters_to_prune = []
for name, module in self.model.named_modules():
if isinstance(module, (nn.Conv2d, nn.Linear)):
parameters_to_prune.append((module, 'weight'))

# 全局剪枝
prune.global_unstructured(
parameters_to_prune,
pruning_method=prune.L1Unstructured,
amount=self.prune_percentage,
)

# 永久移除剪枝的權重
for module, param_name in parameters_to_prune:
prune.remove(module, param_name)

return self.model

# 使用示例
# pruner = ModelPruner(model, prune_percentage=0.3)
# pruned_model = pruner.global_prune()
```

模型剪枝通過**移除不重要的權重連接**減少參數數量,結合**量化技術**(將FP32轉換為INT8)可以進一步壓縮模型大小并加速推理。

## 5 注意力機制改進

注意力機制能讓模型更好地關注重要特征區域,提升檢測精度。

### 5.1 EMA注意力機制

```python
class EMAAttention(nn.Module):
"""
EMA注意力模塊
即插即用,提高遠距離建模依賴
引用:https://developer.aliyun.com/article/1651268
"""
def __init__(self, channels, gamma=2, b=1):
super(EMAAttention, self).__init__()
self.gamma = gamma
self.b = b
# 空間注意力分支
self.spatial_attention = nn.Sequential(
nn.Conv2d(channels, channels//8, 1),
nn.ReLU(inplace=True),
nn.Conv2d(channels//8, 1, 1),
nn.Sigmoid()
)
# 通道注意力分支
self.channel_attention = nn.Sequential(
nn.AdaptiveAvgPool2d(1),
nn.Conv2d(channels, channels//8, 1),
nn.ReLU(inplace=True),
nn.Conv2d(channels//8, channels, 1),
nn.Sigmoid()
)

def forward(self, x):
# 空間注意力
spatial_weights = self.spatial_attention(x)
# 通道注意力
channel_weights = self.channel_attention(x)
# 融合注意力
attended_x = x * spatial_weights * channel_weights
return attended_x + x ?# 殘差連接

# 使用示例
# attention = EMAAttention(256)
# output = attention(input_tensor)
```

EMA注意力通過**并行空間和通道注意力分支**,解決了現有注意力機制中的維度縮減問題,能夠為高級特征圖產生更好的像素級注意力,**建模長程依賴**并嵌入精確的位置信息。

### 5.2 雙向特征金字塔網絡(BiFPN)

```python
class BiFPN(nn.Module):
"""
雙向特征金字塔網絡
高效的多尺度特征融合
"""
def __init__(self, channels, levels=5):
super(BiFPN, self).__init__()
self.levels = levels
# 上采樣和下采樣模塊
self.upsample = nn.Upsample(scale_factor=2, mode='nearest')
self.downsample = nn.MaxPool2d(kernel_size=2, stride=2)

# 特征融合卷積
self.fusion_convs = nn.ModuleList([
nn.Sequential(
nn.Conv2d(channels, channels, 3, padding=1),
nn.BatchNorm2d(channels),
nn.ReLU(inplace=True)
) for _ in range(levels*2)
])

def forward(self, features):
# 自頂向下路徑
for i in range(self.levels-1, 0, -1):
features[i-1] = features[i-1] + self.upsample(features[i])
features[i-1] = self.fusion_convs[i](features[i-1])

# 自底向上路徑
for i in range(0, self.levels-1, 1):
features[i+1] = features[i+1] + self.downsample(features[i])
features[i+1] = self.fusion_convs[self.levels+i](features[i+1])

return features
```

BiFPN通過**雙向信息流**(自頂向下和自底向上)實現更有效的多尺度特征融合,尤其適合處理**尺度變化大**的目標檢測任務。

## 6 損失函數改進

損失函數直接影響模型的學習方向和收斂效果。

### 6.1 NWD損失函數

```python
import numpy as np
import torch
import torch.nn as nn

class NWDLoss(nn.Module):
"""
NWD損失函數,提高小目標檢測精度
引用:https://developer.aliyun.com/article/1651320
"""
def __init__(self, c=5.0):
super(NWDLoss, self).__init__()
self.c = c ?# 歸一化常數

def forward(self, pred_boxes, target_boxes):
"""
計算NWD損失
Args:
pred_boxes: 預測框 [x, y, w, h]
target_boxes: 目標框 [x, y, w, h]
Returns:
nwd_loss: NWD損失值
"""
# 將邊界框轉換為高斯分布表示
pred_gaussian = self.bbox_to_gaussian(pred_boxes)
target_gaussian = self.bbox_to_gaussian(target_boxes)

# 計算Wasserstein距離
wasserstein_dist = self.calculate_wasserstein(pred_gaussian, target_gaussian)

# 計算NWD
nwd = torch.exp(-torch.sqrt(wasserstein_dist) / self.c)

# 損失為1-NWD
return 1 - nwd.mean()

def bbox_to_gaussian(self, boxes):
"""
將邊界框轉換為高斯分布參數
"""
x, y, w, h = boxes.unbind(dim=-1)
mean = torch.stack([x, y], dim=-1)
var = torch.stack([w**2/12, h**2/12], dim=-1)
return mean, var

def calculate_wasserstein(self, gauss1, gauss2):
"""
計算兩個高斯分布之間的Wasserstein距離
"""
mean1, var1 = gauss1
mean2, var2 = gauss2

# 均值差異
mean_diff = torch.sum((mean1 - mean2)**2, dim=-1)

# 方差差異
var_diff = torch.sum((torch.sqrt(var1) - torch.sqrt(var2))**2, dim=-1)

return mean_diff + var_diff

# 使用示例
# nwd_loss = NWDLoss()
# loss = nwd_loss(pred_boxes, target_boxes)
```

NWD(Normalized Wasserstein Distance)損失通過**將邊界框建模為高斯分布**并計算分布之間的距離,解決了IoU損失在小目標檢測中的問題:**對微小物體的位置偏差過于敏感**、**在無重疊情況下無法提供梯度**等。

### 6.2 分類-定位任務解耦損失

```python
class TaskDecoupledLoss(nn.Module):
"""
分類-定位任務解耦損失
分別優化分類和定位任務
"""
def __init__(self, alpha=0.25, gamma=2.0, lambda_reg=1.0):
super().__init__()
self.cls_loss = nn.BCEWithLogitsLoss()
self.reg_loss = nn.SmoothL1Loss()
self.alpha = alpha
self.gamma = gamma
self.lambda_reg = lambda_reg

def forward(self, cls_pred, reg_pred, cls_target, reg_target):
# 分類損失(Focal Loss)
cls_loss = self.focal_loss(cls_pred, cls_target)

# 定位損失
reg_loss = self.reg_loss(reg_pred, reg_target)

return cls_loss + self.lambda_reg * reg_loss

def focal_loss(self, pred, target):
"""
Focal Loss,解決類別不平衡問題
"""
BCE_loss = F.binary_cross_entropy_with_logits(pred, target, reduction='none')
pt = torch.exp(-BCE_loss)
focal_loss = self.alpha * (1-pt)**self.gamma * BCE_loss
return focal_loss.mean()
```

任務解耦損失通過**獨立優化分類和定位目標**,解決了傳統損失函數中兩個任務相互干擾的問題,尤其適合**復雜場景**中的目標檢測。

## 7 Backbone與Neck改進

Backbone和Neck是目標檢測器的核心組成部分,直接影響特征提取能力。

### 7.1 雙Backbone架構

```python
class DoubleBackbone(nn.Module):
"""
雙Backbone架構
利用雙backbone提高目標檢測的精度
引用:https://blog.csdn.net/qq_64693987/article/details/147400791
"""
def __init__(self, backbone1_cfg, backbone2_cfg, fusion_method='concat'):
super().__init__()
# 初始化兩個不同的backbone
self.backbone1 = self.build_backbone(backbone1_cfg)
self.backbone2 = self.build_backbone(backbone2_cfg)

self.fusion_method = fusion_method
self.fusion_layer = self.build_fusion_layer(fusion_method)

def build_backbone(self, cfg):
"""根據配置構建backbone"""
if cfg['type'] == 'CSPDarknet':
return CSPDarknet(**cfg['params'])
elif cfg['type'] == 'EfficientNet':
return EfficientNetBackbone(**cfg['params'])
elif cfg['type'] == 'ConvNeXt':
return ConvNeXtBackbone(**cfg['params'])

def build_fusion_layer(self, method):
"""構建特征融合層"""
if method == 'concat':
return lambda x1, x2: torch.cat([x1, x2], dim=1)
elif method == 'add':
return lambda x1, x2: x1 + x2
elif method == 'attention':
return AttentionFusion(256) ?# 假設通道數為256

def forward(self, x):
# 雙分支特征提取
features1 = self.backbone1(x)
features2 = self.backbone2(x)

# 多尺度特征融合
fused_features = []
for f1, f2 in zip(features1, features2):
fused = self.fusion_layer(f1, f2)
fused_features.append(fused)

return fused_features

# 使用示例
# backbone_cfg1 = {'type': 'CSPDarknet', 'params': {'depth': 1.0, 'width': 1.0}}
# backbone_cfg2 = {'type': 'EfficientNet', 'params': {'variant': 'efficientnet-b0'}}
# double_backbone = DoubleBackbone(backbone_cfg1, backbone_cfg2, 'concat')
```

雙Backbone架構通過**融合不同架構的優勢**,提供更豐富的特征表示。常見組合包括:

1. ?**CNN + CNN**(輕量級組合):平衡速度和精度
2. ?**CNN + Transformer**(語義增強組合):結合局部和全局特征
3. ?**CNN + Mamba**(狀態建模組合):增強時序建模能力

### 7.2 EFC特征融合模塊

```python
class EFC(nn.Module):
"""
EFC:增強層間特征相關性的輕量級特征融合策略
適用于小目標檢測
引用:https://cloud.tencent.com/developer/article/2488408
"""
def __init__(self, c1, c2):
super().__init__()
self.conv1 = nn.Conv2d(c1, c2, kernel_size=1, stride=1)
self.conv2 = nn.Conv2d(c2, c2, kernel_size=1, stride=1)
self.conv4 = nn.Conv2d(c2, c2, kernel_size=1, stride=1)
self.bn = nn.BatchNorm2d(c2)
self.sigmoid = nn.Sigmoid()
self.group_num = 16
self.eps = 1e-10

# 門控機制
self.gate_generator = nn.Sequential(
nn.AdaptiveAvgPool2d((1, 1)),
nn.Conv2d(c2, c2, 1, 1),
nn.ReLU(True),
nn.Softmax(dim=1),
)

def forward(self, x1, x2):
# 分組特征關注
global_conv1 = self.conv1(x1)
bn_x = self.bn(global_conv1)
weight_1 = self.sigmoid(bn_x)

global_conv2 = self.conv2(x2)
bn_x2 = self.bn(global_conv2)
weight_2 = self.sigmoid(bn_x2)

# 全局特征融合
X_GLOBAL = global_conv1 + global_conv2
x_conv4 = self.conv4(X_GLOBAL)
X_4_sigmoid = self.sigmoid(x_conv4)
X_ = X_4_sigmoid * X_GLOBAL

# 分組交互
X_ = X_.chunk(4, dim=1)
out = []
for group_id in range(0, 4):
out_1 = self.interact(X_[group_id])
out.append(out_1)

return torch.cat(out, dim=1)
```

EFC模塊通過**分組特征關注單元(GFF)** 和**多級特征重構模塊(MFR)**,增強了相鄰特征層之間的相關性,減少了冗余特征融合,特別適合**小目標檢測**任務。

## 8 檢測頭改進

檢測頭是目標檢測器的最終輸出階段,直接影響檢測精度。

### 8.1 DynamicHead檢測頭

```python
class DynamicHead(nn.Module):
"""
DynamicHead檢測頭
統一處理尺度感知、空間感知和任務感知
引用:https://cloud.tencent.com/developer/article/2545621
"""
def __init__(self, in_channels, num_classes, num_anchors=3):
super().__init__()
self.in_channels = in_channels
self.num_classes = num_classes
self.num_anchors = num_anchors

# 尺度感知模塊
self.scale_attention = nn.Sequential(
nn.AdaptiveAvgPool2d(1),
nn.Conv2d(in_channels, in_channels//4, 1),
nn.ReLU(inplace=True),
nn.Conv2d(in_channels//4, in_channels, 1),
nn.Sigmoid()
)

# 空間感知模塊(可變形卷積)
self.spatial_attention = nn.Sequential(
nn.Conv2d(in_channels, in_channels//4, 3, padding=1),
nn.ReLU(inplace=True),
nn.Conv2d(in_channels//4, in_channels, 3, padding=1),
nn.Sigmoid()
)

# 任務感知模塊
self.task_attention = nn.Sequential(
nn.AdaptiveAvgPool2d(1),
nn.Conv2d(in_channels, in_channels//4, 1),
nn.ReLU(inplace=True),
nn.Conv2d(in_channels//4, in_channels*2, 1),
nn.Sigmoid()
)

# 預測層
self.cls_pred = nn.Conv2d(in_channels, num_anchors * num_classes, 1)
self.reg_pred = nn.Conv2d(in_channels, num_anchors * 4, 1)

def forward(self, x):
# 尺度感知
scale_weights = self.scale_attention(x)
x_scale = x * scale_weights

# 空間感知
spatial_weights = self.spatial_attention(x_scale)
x_spatial = x_scale * spatial_weights

# 任務感知
task_weights = self.task_attention(x_spatial)
task_weights_cls, task_weights_reg = task_weights.chunk(2, dim=1)

# 最終預測
cls_output = self.cls_pred(x_spatial * task_weights_cls)
reg_output = self.reg_pred(x_spatial * task_weights_reg)

return cls_output, reg_output
```

DynamicHead通過**統一處理尺度感知、空間感知和任務感知**三個方面,顯著提升了檢測頭的表達能力。實驗表明,這種改進能在COCO數據集上提升**1.2%-3.2%的AP值**。

## 9 綜合改進實戰示例

下面是一個綜合多種改進策略的YOLOv11配置示例:

```yaml
# YOLOv11綜合改進配置
# 引用:https://developer.aliyun.com/article/1652191

# Parameters
nc: 80 ?# number of classes
depth_multiple: 0.33 ?# model depth multiple
width_multiple: 0.50 ?# layer channel multiple

# Backbone
backbone:
# [from, number, module, args]
- [-1, 1, Conv, [64, 6, 2, 2]] ?# 0-P1/2
- [-1, 1, Conv, [128, 3, 2]] ? ? # 1-P2/4
- [-1, 3, C3k2, [128]] ? ? ? ? ? # 使用改進的C3k2模塊
- [-1, 1, Conv, [256, 3, 2]] ? ? # 3-P3/8
- [-1, 6, C3k2, [256]] ? ? ? ? ? # 使用改進的C3k2模塊
- [-1, 1, Conv, [512, 3, 2]] ? ? # 5-P4/16
- [-1, 9, C3k2, [512]] ? ? ? ? ? # 使用改進的C3k2模塊
- [-1, 1, Conv, [1024, 3, 2]] ? ?# 7-P5/32
- [-1, 3, C3k2, [1024]] ? ? ? ? ?# 使用改進的C3k2模塊
- [-1, 1, SPPF, [1024, 5]] ? ? ? # 9
- [-1, 1, EMAAttention, [1024]] ?# 10-添加EMA注意力

# Head
head:
- [-1, 1, nn.Upsample, [None, 2, "nearest"]]
- [[-1, 6], 1, Concat, [1]] ?# cat backbone P4
- [-1, 3, C3k2, [512, False]] ?# 13

? - [-1, 1, nn.Upsample, [None, 2, "nearest"]]
- [[-1, 4], 1, Concat, [1]] ?# cat backbone P3
- [-1, 3, C3k2, [256, False]] ?# 16 (P3/8-small)

? - [-1, 1, Conv, [256, 3, 2]]
- [[-1, 13], 1, Concat, [1]] ?# cat head P4
- [-1, 3, C3k2, [512, False]] ?# 19 (P4/16-medium)

? - [-1, 1, Conv, [512, 3, 2]]
- [[-1, 10], 1, Concat, [1]] ?# cat head P5
- [-1, 3, C3k2, [1024, False]] ?# 22 (P5/32-large)

? - [[16, 19, 22], 1, DynamicHead, [nc]] ?# 23-DynamicHead檢測頭
```

## 10 總結與展望

本文全面介紹了YOLOv11的各種改進策略,從卷積層到檢測頭,涵蓋了**輕量化設計**、**注意力機制**、**損失函數優化**等多個方面。這些改進策略可以根據具體任務需求靈活組合使用,顯著提升模型在目標檢測任務中的性能。

未來YOLO系列的發展方向可能包括:

1. ?**更強的多模態融合**:結合RGB、深度、紅外等多種傳感器數據
2. ?**更高效的架構設計**:進一步優化計算效率,適應邊緣設備部署
3. ?**更智能的自動化設計**:利用NAS技術自動搜索最優架構
4. ?**更廣泛的任務支持**:統一支持檢測、分割、跟蹤等多種視覺任務

無論選擇哪種改進策略,都需要根據具體任務需求和數據特性進行實驗驗證。建議讀者從單個改進開始,逐步組合多種策略,找到最適合自己任務的方案。

> 以上代碼示例僅供參考,實際使用時請根據具體需求進行調整和優化。更多詳細實現請參考引用的原始文章和代碼庫。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/95988.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/95988.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/95988.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

JWT全面理解

目錄 一、JWT是什么 1、身份認證(最核心用途) 2、信息交換 3、授權控制 二、JWT的核心價值 三、如何理解JWT的結構和工作原理 1、三部分結構解析 2、核心工作流程 四、JWT的使用步驟 1、添加依賴 2、添加配置文件 3、創建實體類 4、創建JWT…

量子文件傳輸系統:簡單高效的文件分享解決方案

🌐 在線體驗地址:https://share-file.narutogis.com/ 📤 項目概述 量子文件傳輸系統是一款基于Python Flask開發的高效文件管理與分享工具,致力于提供簡單、安全、可靠的文件傳輸解決方案。系統支持用戶管理、文件上傳下載、自動…

基于 GitHub Actions 的零成本自動化部署:把 Vite/Vue3 項目一鍵發布到 GitHub Pages 的完整實戰

1. 實現自動化部署1.1. 創建 vue 項目# 1. 安裝/確認 Node.js(>14) node -v # 推薦 20.x# 2. 創建項目(交互式,選 Vue3 Router 等) npm init vuelatest github-actions-demo # 創建vite項目 # 或:v…

minio 文件批量下載

MinIO 批量下載功能說明 1. 功能描述 前端勾選多個對象文件后,一次性將這些對象從 MinIO 拉取并打包成 ZIP,通過瀏覽器直接下載。整體特性: 支持跨桶批量下載(不同 bucket 的對象可同時下載)。服務端采用流式壓縮邊…

機器學習11——特征選擇與稀疏學習

上一章:機器學習10——降維與度量學習 下一章:【從 0 到 1 落地】機器學習實操項目目錄:覆蓋入門到進階,大學生就業 / 競賽必備[TOC] 機器學習實戰項目:【從 0 到 1 落地】機器學習實操項目目錄:覆蓋入門到…

整理python快速構建數據可視化前端的Dash庫

一.Dash框架# 導入 Dash 相關庫 import dash from dash import dcc, html # dcc 是 Dash 核心組件庫,html 是 HTML 組件庫 from typing import Generic# 創建一個 Dash 應用實例 app dash.Dash(__name__)# 定義應用的布局 app.layout html.Div(children[# 添加一…

RNN循環神經網絡(一):基礎RNN結構、雙向RNN

RNN循環神經網絡 什么是循環神經網絡? 循環神經網絡(Recurrent Neural Network, RNN)是一類專門用于處理序列數據的神經網絡架構。與傳統的前饋神經網絡不同,RNN具有"記憶"能力,能夠捕捉數據中的時間依賴關系…

#C語言——刷題攻略:牛客編程入門訓練(十):攻克 循環控制(二),輕松拿捏!

🌟菜鳥主頁:晨非辰的主頁 👀學習專欄:《C語言刷題合集》 💪學習階段:C語言方向初學者 ?名言欣賞:"代碼行數決定你的下限,算法思維決定你的上限。" 目錄 1. BC82 乘法表…

daily notes[16]

文章目錄意大利語單詞 **“bello”**一、核心含義二、變形規則:最重要的部分1. 當 “bello” 位于 **名詞前面** 時2. 當 “bello” 位于 **名詞后面** 或 **動詞后面** 時三、用法總結與對比四、其他用法和常見表達references意大利語單詞 “bello” 融合了 指示形…

【知識庫】計算機二級python操作題(二)

文章目錄基本操作題1基本操作題2基本操作題3簡單應用題1簡單應用題2綜合應用題1基本操作題1考生文件夾下存在一個文件PY101.py,請寫代碼替換橫線,不修改其他代碼,實現以下功能,隨機選擇一個手機品牌屏幕輸出。 # 請在...處使用一行…

Nginx 服務用戶與防盜鏈配置

目錄 Nginx 服務用戶與防盜鏈配置 1. 隱藏版本號 1.1 配置方法 1.2 生效與驗證 2. 修改當前程序賬號 2.1 操作步驟 3. 緩存時間 3.1 配置方法 3.2 說明 4. 日志分割 4.1 實現方式(腳本自動分割) 5. 連接超時時間 5.1 核心超時指令&#xff0…

域格4G模塊通信協議之HTTP(三):下載大文件的兩種方式

域格ASR系列模塊支持HTTP下載大文件,本文將提供兩種方式。一、直接通過URC上報數據基礎操作核心指令說明配置說明響應說明應用示例注意點二、HTTP Range分段下載核心指令說明注意點一、直接通過URC上報數據 若文件體積適中,且需要 MCU 即時處理數據&…

Android 圖片 OOM 防護機制設計:大圖加載、內存復用與多級緩存

1. 為什么圖片加載總讓 Android 開發抓狂? 圖片是 Android 應用中不可或缺的元素,從用戶頭像到高清壁紙,從商品詳情頁到動態表情包,圖片無處不在。然而,圖片加載是內存管理的雷區,稍不留神就可能觸發臭名昭著的 OutOfMemoryError(OOM)。為啥圖片這么“吃內存”?原因很…

9月9日

TCP 服務器端#include <myhead.h> #define SER_PORT 8888 //服務器端口號 #define SER_IP "192.168.108.179" //服務器IP地址 int main(int argc, const char *argv[]) {//創建一個用于連接的套接字文件描述符int sfd socket(AF_INET, SOCK_STRE…

Docker生產部署

目錄 一、準備工作&#xff1a;理解 Docker 與 Spring Boot 的關系 1. Docker 是什么&#xff1f; 2. Spring Boot 為什么適合 Docker&#xff1f; 二、編寫Dockerfile 三、配置管理 掛載外部配置文件 四、用 docker-compose 編排多服務 一、準備工作&#xff1a;理解 Do…

ARM 基礎(3)

ARM匯編與C語言函數的相互調用及參數傳遞匯編調用C函數參數傳遞規則 前4個參數通過寄存器 R0-R3 傳遞&#xff0c;超出部分從右向左壓棧。32位返回值存于 R0&#xff0c;64位整數用 R0 和 R1&#xff0c;浮點數通過 S0/D0 返回。示例&#xff1a;ARM匯編調用C函數.global _star…

OpenCV計算機視覺筆記合集

參考課程&#xff1a; 【黑馬程序員 OpenCV入門教程】 [https://www.bilibili.com/video/BV1Fo4y1d7JL] ZZHow(ZZHow1024) 學習路線 基本的圖像處理方法&#xff1a;幾何變換&#xff0c;形態學變換&#xff0c;圖像平滑&#xff0c;直方圖操作&#xff0c;模板匹配&#…

Mybatis-12 第三方緩存-EhCache

配置文檔 Ehcache配置文件ehcache.xml Java Ehcache緩存的timeToIdleSeconds和timeToLiveSeconds區別 基本介紹 1.EhCache是一個純Java的緩存框架&#xff0c;具有快速、精干等特點 2.MyBatis有自己默認的二級緩存&#xff08;前面我們已經使用過了&#xff09;&#xff0c;…

元器件--電容器

文章目錄一、技術理論??1、電容定義??2、定義式??3、單位換算??4、電容作用??5、電容特性二、組成結構??1、極板&#xff08;電極&#xff09;??????2、介質&#xff08;絕緣層&#xff09;????3、引線&#xff08;電極引出端&#xff09;????4、封裝…