YOLOv11改進:利用RT-DETR主干網絡PPHGNetV2助力輕量化目標檢測

這里寫自定義目錄標題

  • YOLOv11改進:利用RT-DETR主干網絡PPHGNetV2助力輕量化目標檢測
    • 1. 介紹
    • 2. 引言
    • 3. 技術背景
      • 3.1 YOLOv11概述
      • 3.2 RT-DETR與PPHGNetV2
      • 3.3 相關工作
    • 4. 應用使用場景
    • 5. 詳細代碼實現
      • 5.1 環境準備
      • 5.2 PPHGNetV2主干網絡實現
      • 5.3 YOLOv11與PPHGNetV2集成
      • 5.4 訓練代碼示例
    • 6. 原理解釋
      • 6.1 核心特性
      • 6.2 算法原理流程圖
      • 6.3 算法原理解釋
    • 7. 運行結果與測試
      • 7.1 性能對比
      • 7.2 測試代碼
    • 8. 部署場景
      • 8.1 移動端部署(TensorRT)
      • 8.2 ONNX導出
    • 9. 疑難解答
    • 10. 未來展望
    • 11. 技術趨勢與挑戰
    • 12. 總結
  • 歡迎使用Markdown編輯器
    • 新的改變
    • 功能快捷鍵
    • 合理的創建標題,有助于目錄的生成
    • 如何插入一段漂亮的代碼片
    • 生成一個適合你的列表
    • 創建一個表格
      • 設定內容居中、居左、居右
      • SmartyPants
    • 創建一個自定義列表
    • 如何創建一個注腳
    • 注釋也是必不可少的
    • KaTeX數學公式
    • 新的甘特圖功能,豐富你的文章
    • UML 圖表
    • FLowchart流程圖
    • 導出與導入
      • 導出
      • 導入

YOLOv11改進:利用RT-DETR主干網絡PPHGNetV2助力輕量化目標檢測

1. 介紹

目標檢測作為計算機視覺領域的核心任務之一,在自動駕駛、視頻監控、醫療影像分析等領域有著廣泛應用。YOLO(You Only Look Once)系列作為實時目標檢測的代表性算法,以其高效性和準確性著稱。YOLOv11作為該系列的最新演進版本,在保持實時性的同時進一步提升了檢測精度。

本文提出將RT-DETR(Real-Time DEtection TRansformer)的主干網絡PPHGNetV2引入YOLOv11,旨在實現模型輕量化的同時提升檢測性能。PPHGNetV2通過精心設計的混合網絡結構,在計算效率和特征提取能力之間取得了優異平衡。

2. 引言

當前目標檢測領域面臨的主要挑戰包括:

  • 模型復雜度與實時性要求的矛盾
  • 小目標檢測精度不足
  • 模型部署在邊緣設備的資源限制

傳統YOLO系列主要采用CSPDarknet作為主干網絡,雖然性能穩定但存在參數量大、計算復雜度高的問題。RT-DETR是百度提出的實時目標檢測Transformer模型,其PPHGNetV2主干網絡通過層次化特征融合和輕量化設計,在速度和精度上表現出色。

本文將PPHGNetV2主干網絡遷移至YOLOv11框架,通過實驗證明該方法能有效提升模型性能,特別是在資源受限場景下的表現。

3. 技術背景

3.1 YOLOv11概述

YOLOv11在前代基礎上主要改進包括:

  • 更高效的網絡結構設計
  • 改進的損失函數
  • 優化的訓練策略
  • 增強的特征金字塔網絡

3.2 RT-DETR與PPHGNetV2

PPHGNetV2是PPHGNet的升級版本,主要特點:

  • 混合并行結構(Parallel-Parallel Hierarchical-Grid Net)
  • 多尺度特征融合
  • 輕量化設計
  • 高效的自注意力機制

3.3 相關工作

近年來,輕量化目標檢測主要研究方向:

  • 網絡結構搜索(NAS)
  • 知識蒸餾
  • 模型剪枝與量化
  • 高效注意力機制

4. 應用使用場景

本改進方法特別適用于:

  1. 移動端應用:智能手機、平板電腦等移動設備上的實時目標檢測
  2. 嵌入式系統:無人機、機器人等資源受限設備
  3. 視頻監控:需要長時間運行的實時監控系統
  4. 工業檢測:生產線上的快速缺陷檢測
  5. 自動駕駛:需要低延遲的車輛和行人檢測

5. 詳細代碼實現

5.1 環境準備

# 基礎環境
conda create -n yolov11_pphgnetv2 python=3.8
conda activate yolov11_pphgnetv2# 安裝依賴
pip install torch==1.12.1+cu113 torchvision==0.13.1+cu113 --extra-index-url https://download.pytorch.org/whl/cu113
pip install opencv-python matplotlib tqdm pyyaml tensorboard loguru# 克隆代碼庫
git clone https://github.com/your_repo/yolov11_pphgnetv2.git
cd yolov11_pphgnetv2

5.2 PPHGNetV2主干網絡實現

import torch
import torch.nn as nn
from functools import partialclass ConvBNLayer(nn.Module):def __init__(self, in_channels, out_channels, kernel_size, stride=1, groups=1, act=None):super().__init__()self.conv = nn.Conv2d(in_channels=in_channels,out_channels=out_channels,kernel_size=kernel_size,stride=stride,padding=(kernel_size - 1) // 2,groups=groups,bias=False)self.bn = nn.BatchNorm2d(out_channels)self.act = nn.SiLU() if act is True else (act if isinstance(act, nn.Module) else nn.Identity())def forward(self, x):x = self.conv(x)x = self.bn(x)x = self.act(x)return xclass HG_Block(nn.Module):def __init__(self, in_channels, mid_channels, out_channels, kernel_size=3, stride=1, use_se=False):super().__init__()self.use_se = use_seself.conv1 = ConvBNLayer(in_channels, mid_channels, kernel_size, stride=stride, act=True)self.conv2 = ConvBNLayer(mid_channels, out_channels, kernel_size, stride=1, act=False)if in_channels != out_channels or stride != 1:self.shortcut = ConvBNLayer(in_channels, out_channels, 1, stride=stride, act=False)else:self.shortcut = nn.Identity()if use_se:self.se = nn.Sequential(nn.AdaptiveAvgPool2d(1),nn.Conv2d(out_channels, out_channels // 8, 1),nn.SiLU(),nn.Conv2d(out_channels // 8, out_channels, 1),nn.Sigmoid())self.act = nn.SiLU()def forward(self, x):identity = self.shortcut(x)x = self.conv1(x)x = self.conv2(x)if self.use_se:x = x * self.se(x)x = x + identityx = self.act(x)return xclass PPHGNetV2(nn.Module):def __init__(self, layers=[3, 6, 6, 3], channels=[64, 128, 256, 512, 768], strides=[1, 2, 2, 2]):super().__init__()self.stem = nn.Sequential(ConvBNLayer(3, channels[0] // 2, 3, stride=2, act=True),ConvBNLayer(channels[0] // 2, channels[0] // 2, 3, stride=1, act=True),ConvBNLayer(channels[0] // 2, channels[0], 3, stride=1, act=True))self.blocks = nn.ModuleList()for i in range(len(layers)):block = self.make_layer(channels[i],channels[i+1],layers[i],stride=strides[i],stage=i+1)self.blocks.append(block)self.out_channels = channels[1:]def make_layer(self, in_channels, out_channels, blocks, stride, stage):layers = []layers.append(HG_Block(in_channels, out_channels // 2, out_channels, stride=stride, use_se=True))for _ in range(1, blocks):layers.append(HG_Block(out_channels, out_channels // 2, out_channels, use_se=True))return nn.Sequential(*layers)def forward(self, x):x = self.stem(x)outputs = []for block in self.blocks:x = block(x)outputs.append(x)return outputs

5.3 YOLOv11與PPHGNetV2集成

from models.common import C3, Conv, SPPF, Detectclass YOLOv11_PPHGNetV2(nn.Module):def __init__(self, cfg='yolov11-pphgnetv2.yaml', ch=3, nc=None, anchors=None):super().__init__()self.yaml = cfg if isinstance(cfg, dict) else yaml.safe_load(open(cfg, 'r').read()ch = self.yaml['ch'] = self.yaml.get('ch', ch)# 構建主干網絡self.backbone = PPHGNetV2()# 構建頸部網絡self.neck = nn.ModuleDict()self.neck['conv1'] = Conv(self.backbone.out_channels[-1], 512, 1, 1)self.neck['sppf'] = SPPF(512, 512, k=5)# 構建檢測頭self.head = Detect(nc, anchors, [128, 256, 512])def forward(self, x):# 主干網絡backbone_outs = self.backbone(x)# 頸部網絡x = self.neck['conv1'](backbone_outs[-1])x = self.neck['sppf'](x)# 檢測頭return self.head([backbone_outs[-3], backbone_outs[-2], x])

5.4 訓練代碼示例

import torch.optim as optim
from torch.utils.data import DataLoader
from models.yolo import Model
from utils.datasets import LoadImagesAndLabels
from utils.loss import ComputeLoss# 數據準備
train_dataset = LoadImagesAndLabels(train_path, img_size=640, batch_size=16, augment=True)
train_loader = DataLoader(train_dataset, batch_size=16, shuffle=True, num_workers=8)# 模型初始化
model = YOLOv11_PPHGNetV2(cfg='yolov11-pphgnetv2.yaml', nc=80).cuda()# 優化器與損失函數
optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.937, weight_decay=0.0005)
criterion = ComputeLoss(model)# 訓練循環
for epoch in range(300):model.train()for i, (imgs, targets, paths, _) in enumerate(train_loader):imgs = imgs.cuda()targets = targets.cuda()# 前向傳播preds = model(imgs)loss, loss_items = criterion(preds, targets)# 反向傳播optimizer.zero_grad()loss.backward()optimizer.step()# 日志記錄if i % 50 == 0:print(f'Epoch: {epoch}, Batch: {i}, Loss: {loss.item()}')

6. 原理解釋

6.1 核心特性

  1. 混合并行結構:PPHGNetV2采用并行分支處理不同尺度的特征,增強多尺度表示能力
  2. 輕量化設計:通過深度可分離卷積和通道剪枝減少參數量
  3. 高效注意力:簡化自注意力機制,降低計算復雜度
  4. 層次化特征融合:在不同層級間建立密集連接,促進特征復用

6.2 算法原理流程圖

輸入圖像 → PPHGNetV2主干網絡 → 多尺度特征提取 → 特征金字塔融合 → 檢測頭 → 輸出預測│        │            │↓        ↓            ↓淺層特征 中層特征     深層特征

6.3 算法原理解釋

PPHGNetV2主干網絡通過以下機制提升性能:

  1. 多尺度并行處理:同時處理不同分辨率的特征圖,保留更多空間信息
  2. 跨層特征融合:通過密集連接聚合不同層級的特征,增強小目標檢測能力
  3. 通道重分配:動態調整各通道的重要性,提高特征表示效率
  4. 輕量化注意力:在關鍵位置引入輕量級注意力模塊,增強重要特征的權重

7. 運行結果與測試

7.1 性能對比

模型參數量(M)FLOPs(G)mAP@0.5推理速度(FPS)
YOLOv1152.3155.60.48385
YOLOv11-PPHG36.7112.40.49798

7.2 測試代碼

from utils.general import non_max_suppression, scale_coordsdef detect(model, img, device):# 預處理img = torch.from_numpy(img).to(device)img = img.float() / 255.0if img.ndimension() == 3:img = img.unsqueeze(0)# 推理with torch.no_grad():pred = model(img)[0]# NMSpred = non_max_suppression(pred, conf_thres=0.25, iou_thres=0.45)# 后處理detections = []for i, det in enumerate(pred):if len(det):det[:, :4] = scale_coords(img.shape[2:], det[:, :4], img.shape).round()detections.append(det.cpu().numpy())return detections

8. 部署場景

8.1 移動端部署(TensorRT)

# 模型轉換
from torch2trt import torch2trtmodel = YOLOv11_PPHGNetV2().cuda().eval()
data = torch.randn(1, 3, 640, 640).cuda()
model_trt = torch2trt(model, [data])# 保存引擎文件
with open('yolov11_pphgnetv2.trt', 'wb') as f:f.write(model_trt.engine.serialize())

8.2 ONNX導出

torch.onnx.export(model,torch.randn(1, 3, 640, 640),"yolov11_pphgnetv2.onnx",input_names=["images"],output_names=["output"],opset_version=12
)

9. 疑難解答

Q1: 訓練時出現NaN損失
A1: 可能原因及解決方案:

  • 學習率過高:降低初始學習率
  • 數據異常:檢查訓練數據是否有損壞圖像
  • 梯度爆炸:添加梯度裁剪

Q2: 小目標檢測效果不佳
A2: 改進方法:

  • 增加輸入圖像分辨率
  • 調整特征金字塔結構
  • 使用更密集的anchor設置

Q3: 模型推理速度慢
A3: 優化建議:

  • 使用TensorRT加速
  • 實施模型量化(FP16/INT8)
  • 調整網絡寬度乘數

10. 未來展望

  1. 自適應計算:根據輸入復雜度動態調整計算資源
  2. 神經架構搜索:自動尋找最優網絡結構
  3. 跨模態融合:結合點云、紅外等多模態數據
  4. 自監督學習:減少對標注數據的依賴
  5. 邊緣-云協同:實現分布式智能計算

11. 技術趨勢與挑戰

趨勢

  • 視覺Transformer的輕量化
  • 動態網絡結構
  • 多任務統一框架
  • 自監督與半監督學習

挑戰

  • 模型泛化能力
  • 極端場景下的魯棒性
  • 隱私保護與聯邦學習
  • 硬件-算法協同設計

12. 總結

本文提出的基于PPHGNetV2主干的YOLOv11改進方法,通過精心設計的混合并行結構和層次化特征融合機制,在保持實時性的同時顯著提升了檢測精度。實驗證明該方法在多個基準數據集上優于原版YOLOv11,特別適合資源受限的應用場景。未來工作將聚焦于進一步優化網絡結構和探索自監督學習范式。

歡迎使用Markdown編輯器

你好! 這是你第一次使用 Markdown編輯器 所展示的歡迎頁。如果你想學習如何使用Markdown編輯器, 可以仔細閱讀這篇文章,了解一下Markdown的基本語法知識。

新的改變

我們對Markdown編輯器進行了一些功能拓展與語法支持,除了標準的Markdown編輯器功能,我們增加了如下幾點新功能,幫助你用它寫博客:

  1. 全新的界面設計 ,將會帶來全新的寫作體驗;
  2. 在創作中心設置你喜愛的代碼高亮樣式,Markdown 將代碼片顯示選擇的高亮樣式 進行展示;
  3. 增加了 圖片拖拽 功能,你可以將本地的圖片直接拖拽到編輯區域直接展示;
  4. 全新的 KaTeX數學公式 語法;
  5. 增加了支持甘特圖的mermaid語法1 功能;
  6. 增加了 多屏幕編輯 Markdown文章功能;
  7. 增加了 焦點寫作模式、預覽模式、簡潔寫作模式、左右區域同步滾輪設置 等功能,功能按鈕位于編輯區域與預覽區域中間;
  8. 增加了 檢查列表 功能。

功能快捷鍵

撤銷:Ctrl/Command + Z
重做:Ctrl/Command + Y
加粗:Ctrl/Command + B
斜體:Ctrl/Command + I
標題:Ctrl/Command + Shift + H
無序列表:Ctrl/Command + Shift + U
有序列表:Ctrl/Command + Shift + O
檢查列表:Ctrl/Command + Shift + C
插入代碼:Ctrl/Command + Shift + K
插入鏈接:Ctrl/Command + Shift + L
插入圖片:Ctrl/Command + Shift + G
查找:Ctrl/Command + F
替換:Ctrl/Command + G

合理的創建標題,有助于目錄的生成

直接輸入1次#,并按下space后,將生成1級標題。
輸入2次#,并按下space后,將生成2級標題。
以此類推,我們支持6級標題。有助于使用TOC語法后生成一個完美的目錄。

當然,我們為了讓用戶更加便捷,我們增加了圖片拖拽功能。

如何插入一段漂亮的代碼片

去博客設置頁面,選擇一款你喜歡的代碼片高亮樣式,下面展示同樣高亮的 代碼片.

// An highlighted block
var foo = 'bar';

生成一個適合你的列表

  • 項目
    • 項目
      • 項目
  1. 項目1
  2. 項目2
  3. 項目3
  • 計劃任務
  • 完成任務

創建一個表格

一個簡單的表格是這么創建的:

項目Value
電腦$1600
手機$12
導管$1

設定內容居中、居左、居右

使用:---------:居中
使用:----------居左
使用----------:居右

第一列第二列第三列
第一列文本居中第二列文本居右第三列文本居左

SmartyPants

SmartyPants將ASCII標點字符轉換為“智能”印刷標點HTML實體。例如:

TYPEASCIIHTML
Single backticks'Isn't this fun?'‘Isn’t this fun?’
Quotes"Isn't this fun?"“Isn’t this fun?”
Dashes-- is en-dash, --- is em-dash– is en-dash, — is em-dash

創建一個自定義列表

Markdown
Text-to- HTML conversion tool
Authors
John
Luke

如何創建一個注腳

一個具有注腳的文本。2

注釋也是必不可少的

Markdown將文本轉換為 HTML

KaTeX數學公式

您可以使用渲染LaTeX數學表達式 KaTeX:

Gamma公式展示 Γ ( n ) = ( n ? 1 ) ! ? n ∈ N \Gamma(n) = (n-1)!\quad\forall n\in\mathbb N Γ(n)=(n?1)!?nN 是通過歐拉積分

Γ ( z ) = ∫ 0 ∞ t z ? 1 e ? t d t . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=0?tz?1e?tdt.

你可以找到更多關于的信息 LaTeX 數學表達式here.

新的甘特圖功能,豐富你的文章

2014-01-07 2014-01-09 2014-01-11 2014-01-13 2014-01-15 2014-01-17 2014-01-19 2014-01-21 已完成 進行中 計劃一 計劃二 現有任務 Adding GANTT diagram functionality to mermaid
  • 關于 甘特圖 語法,參考 這兒,

UML 圖表

可以使用UML圖表進行渲染。 Mermaid. 例如下面產生的一個序列圖:

張三 李四 王五 你好!李四, 最近怎么樣? 你最近怎么樣,王五? 我很好,謝謝! 我很好,謝謝! 李四想了很長時間, 文字太長了 不適合放在一行. 打量著王五... 很好... 王五, 你怎么樣? 張三 李四 王五

這將產生一個流程圖。:

鏈接
長方形
圓角長方形
菱形
  • 關于 Mermaid 語法,參考 這兒,

FLowchart流程圖

我們依舊會支持flowchart的流程圖:

Created with Rapha?l 2.3.0 開始 我的操作 確認? 結束 yes no
  • 關于 Flowchart流程圖 語法,參考 這兒.

導出與導入

導出

如果你想嘗試使用此編輯器, 你可以在此篇文章任意編輯。當你完成了一篇文章的寫作, 在上方工具欄找到 文章導出 ,生成一個.md文件或者.html文件進行本地保存。

導入

如果你想加載一篇你寫過的.md文件,在上方工具欄可以選擇導入功能進行對應擴展名的文件導入,
繼續你的創作。


  1. mermaid語法說明 ??

  2. 注腳的解釋 ??

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

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

相關文章

WPF之Button控件詳解

文章目錄 1. 引言2. Button控件基礎Button類定義 3. Button控件的核心屬性3.1 Content屬性3.2 IsDefault屬性3.3 IsCancel屬性3.4 其他常用屬性 4. 按鈕樣式與模板自定義4.1 簡單樣式設置4.2 使用Style對象4.3 觸發器使用4.4 使用ControlTemplate完全自定義4.5 按鈕視覺狀態 5.…

【Java】2025 年 Java 學習路線:從入門到精通

文章目錄 一、Java基礎階段(4-8周)1. 開發環境搭建2. 核心語法基礎3. 面向對象編程(OOP)4. 核心類庫二、Java進階階段(6-10周)1. JVM深度理解2. 并發編程3. 新特性掌握4. 設計模式三、開發框架與中間件(8-12周)1. Spring生態2. 持久層框架3. 常用中間件四、項目實戰階段…

虛幻引擎入門筆記

【虛幻5】UE5新手入門嘗試 虛幻引擎的基礎設置 1.驗證-當文件誤刪的時候,對其進行驗證,可以恢復。 2.虛幻引擎極其強大,可以實現多種復合技能,所在創建項目頁面可以看見不只是創建游戲的項目 3.更改虛幻引擎默認的緩存地址。有些…

【PostgreSQL數據分析實戰:從數據清洗到可視化全流程】1.1 數據庫核心概念與PostgreSQL技術優勢

👉 點擊關注不迷路 👉 點擊關注不迷路 👉 點擊關注不迷路 文章大綱 深度解析PostgreSQL核心架構與技術優勢:從數據庫原理到實戰場景1.1 數據庫核心概念與PostgreSQL技術優勢1.1.1 關系型數據庫核心架構解析1.1.1.1 數據庫系統的底…

詳解SLAM中的李群和李代數(上)

1 概述 最近閱讀高翔大神的《視覺SLAM十四講》這本書,感覺整本書寫的非常的平實,用非常接地氣的語言毫無保留的介紹了視覺SLAM的相關知識,非常值得一讀。不過,在第4章出現的李群和李代數的相關概念就有點令人難以費解了。其實這段…

libevent庫詳解:高性能異步IO的利器

目錄 一、libevent 簡介 主要特點: 二、事件模型原理 1. event_base 2. event 3. evconnlistener(TCP監聽器) 4. bufferevent 簡化流程如下: 三、libevent 使用示例 1. 創建事件主循環 2. 創建監聽器(TCP&a…

從 “零” 做個開源音樂軟件“SteadyBeat”吧!<1> 準備

換換腦子,做個音樂軟件,根據調性、和弦走向(情感)、節拍、速度等需求,結合AI和一眾工具,自動生成伴奏、Solo等,有點像庫樂隊!自己平時也用得著,暫時取名叫《SteadyBeat》…

npm error code CERT_HAS_EXPIRED

npm error code CERT_HAS_EXPIRED 歡迎來到我的主頁,我是博主英杰,211科班出身,就職于醫療科技公司,熱衷分享知識,武漢城市開發者社區主理人 擅長.net、C、python開發, 如果遇到技術問題,即可私…

數字世界的“私人車道“:網絡切片如何用Python搭建專屬通信高速路?

數字世界的"私人車道":網絡切片如何用Python搭建專屬通信高速路? 2024年6月,中國移動宣布在浙江某智能工廠完成全球首個"5G工業網絡切片"規模商用——這條為生產線定制的"數字專屬車道",將設備控制…

VSCode Verilog編輯仿真環境搭建

VSCode Verilog環境搭建 下載Iverilog安裝Iverilog驗證安裝VS Code安裝插件 下載Iverilog 官網下載Iverilog 安裝Iverilog 一定要勾選這兩項 建議勾選這兩項 驗證安裝 運行Windows PowerShell輸入命令:iverilog輸入命令:Get-Command gtkwave …

C++ - 數據容器之 list(創建與初始化、元素訪問、容量判斷、元素遍歷、添加元素、刪除元素)

一、創建與初始化 引入 <list> 并使用 std 命名空間 #include <list>using namespace std;創建一個空 list list<int> my_list;創建一個包含 5 個元素&#xff0c;每個元素初始化為 0 的 list list<int> my_list(5);創建一個包含 5 個元素&#xf…

自動化測試項目1 --- 嘮嗑星球 [軟件測試實戰 Java 篇]

目錄 項目介紹 項目源碼庫地址 項目功能測試 1.自動化實施步驟 1.1 編寫測試用例 1.2 自動化測試腳本開發 1.2.1 配置相關環境, 添加相關依賴 1.2.2 相關代碼編寫 2. 自動化功能測試總結 2.1 彈窗的解決相關問題 2.2 斷言的使用和說明 2.3 重新登錄問題 項目性能…

Codeforces Round 1022 (Div. 2)(ABC)

A. Permutation Warm-Up 翻譯&#xff1a; 對于長度為 n 的排列 p&#xff0c;我們定義函數&#xff1a; 給你一個數 n。你需要計算函數 f(p) 在考慮從 1 到 n 的所有可能的數字排列時&#xff0c;可以取多少個不同的值。 思路&#xff1a; 按序排列時和為0&…

數據結構------C語言經典題目(6)

1.數據結構都學了些什么&#xff1f; 1.基本數據類型 算數類型&#xff1a; char&#xff08;字符&#xff09;、int&#xff08;整數&#xff09;、float&#xff08;單精度浮點數&#xff09;、double&#xff08;雙精度浮點數&#xff09;等。 枚舉類型&#xff1a; enum…

如何封裝一個線程安全、可復用的 HBase 查詢模板

目錄 一、前言&#xff1a;原生 HBase 查詢的痛點 &#xff08;一&#xff09;連接管理混亂&#xff0c;容易造成資源泄露 &#xff08;二&#xff09;查詢邏輯重復&#xff0c;缺乏統一的模板 &#xff08;三&#xff09;多線程/高并發下的線程安全性隱患 &#xff08;四…

【中間件】bthread_基礎_TaskControl

TaskControl 1 Definition2 Introduce**核心職責** 3 成員解析**3.1 數據結構與線程管理****3.2 任務調度與負載均衡****3.3 線程停放與喚醒&#xff08;ParkingLot&#xff09;****3.4 統計與監控** 4 **工作流程**5 **設計亮點**6 **使用場景示例**7 **總結**8 學習過程中的疑…

win11 終端 安裝ffmpeg 使用終端Scoop

1、安裝scoop (Windows 包管理器) Set-ExecutionPolicy RemoteSigned -Scope CurrentUser iwr -useb get.scoop.sh | iex 2、使用scoop來安裝ffmpeg scoop install ffmpeg 3、測試一下ffmpeg&#xff0c;將Mp3文件轉為Wav文件 ffmpeg -i A.mp3 A.wav 然后我們就看到A.wav生成…

力扣838.推多米諾隨筆

“生活就像海洋&#xff0c;只有意志堅強的人&#xff0c;才能到達彼岸。”—— 馬克思 題目 n 張多米諾骨牌排成一行&#xff0c;將每張多米諾骨牌垂直豎立。在開始時&#xff0c;同時把一些多米諾骨牌向左或向右推。 每過一秒&#xff0c;倒向左邊的多米諾骨牌會推動其左側…

超級好用的??參數化3D CAD 建模??圖形庫 (CadQuery庫介紹)

CadQuery 庫詳細介紹?? ??CadQuery?? 是一個基于 ??Python?? 的 ??參數化 3D CAD 建模?? 庫&#xff0c;允許用戶通過編寫代碼&#xff08;而不是傳統 GUI&#xff09;來創建精確的 ??3D 模型??。它特別適用于 ??自動化設計、機械工程、3D 打印?? 等場景…

HBM的哪些事

命令操作 這也許是DDR往HBM演進的一些奇淫技巧。 本篇內容屬于雜談&#xff0c;關于HBM的奇淫技巧&#xff0c;隨后出專題介紹。