深度學習模型開發部署全流程:以YOLOv11目標檢測任務為例

深度學習模型開發部署全流程:以YOLOv11目標檢測任務為例

深度學習模型從開發到部署的完整流程包含需求分析、數據準備、模型訓練、模型優化、模型測試和部署運行六大核心環節。YOLOv11作為新一代目標檢測模型,不僅延續了YOLO系列的高效實時性能,還在檢測精度和泛化能力上取得顯著突破 ,使其成為工業質檢、安防監控、自動駕駛等領域的理想選擇。本文將詳細闡述這一完整流程,并結合YOLOv11的具體實現,提供可直接復用的代碼示例,幫助開發者快速構建和部署高效穩定的目標檢測系統。

一、需求分析與環境準備

需求分析是深度學習項目成功的首要環節,它決定了后續開發的方向和重點。對于YOLOv11目標檢測任務,首先需要明確應用場景(如工業質檢、交通監控、安防系統等)、檢測目標類別(如人、車輛、特定物體等)、精度要求(如mAP@0.5指標)以及實時性需求(如每秒處理幀數)。明確這些需求后,可以確定模型復雜度(如選擇YOLOv11n、YOLOv11m或YOLOv11s版本)和部署平臺(如邊緣設備、服務器或移動端)

在環境準備方面,YOLOv11主要依賴Python和PyTorch框架,需要確保開發環境滿足以下條件:

硬件環境:

  • GPU: NVIDIA獨立顯卡(推薦RTX 3090或更高,24GB顯存以上)
  • CPU: AMD Ryzen 9或Intel i7/i9級別處理器
  • 內存: 16GB以上
  • 存儲: 至少50GB SSD存儲空間

軟件環境:

  • 操作系統: Ubuntu 20.04 LTS或Windows 10/11(推薦Linux)
  • Python版本: Python 3.8或3.9
  • CUDA版本: 11.8或12.1(根據PyTorch版本選擇)
  • PyTorch版本: 2.0.0+cu118或2.2.2+cu121(與CUDA版本匹配)
  • ultralytics庫: 最新版本

安裝依賴的完整命令如下:

# 創建虛擬環境(推薦使用conda)
conda create -n yolo11 python=3.9
conda activate yolo11# 安裝PyTorch(根據CUDA版本選擇)
pip install torch==2.2.2 torchvision==0.17.2 torchaudio==2.2.2 pytorch-cuda=12.1 -c pytorch -c nvidia# 安裝YOLOv11核心庫
pip install ultralytics

二、數據準備與模型訓練

數據是深度學習模型性能的基礎,YOLOv11訓練需要高質量的標注數據集,通常采用COCO或VOC格式 。數據準備環節包括數據收集、標注、預處理和增強。對于自定義數據集,需要確保數據的多樣性和代表性,覆蓋不同光照條件、角度和遮擋情況。

數據集目錄結構應符合以下規范:

my_data/
├── dataset/
│   ├── train/        # 訓練集
│   │   ├── images/   # 訓練圖像
│   │   └── labels/   # 訓練標注文件
│   ├── val/           # 驗證集
│   │   ├── images/
│   │   └── labels/
│   └── test/          # 測試集
└── dataset.yaml       # 數據集配置文件

數據集配置文件(dataset.yaml)示例:

# 數據集路徑配置
train: dataset/train/images
val: dataset/val/images
test: dataset/test/images# 類別信息
nc: 3
names: ['person', 'car', 'bus']# 圖像尺寸
imgsz: 640# 數據增強參數
augment: True
mosaic: 0.8
mixup: 0.2
hsv_h: 0.015
hsv_s: 0.7
hsv_v: 0.4
scale: 0.5
shear: 0.0
perspective: 0.0
flipud: 0.5
fliplr: 0.5

數據增強是提高模型泛化能力的關鍵技術,YOLOv11支持多種增強策略,包括Mosaic(四圖拼接)、MixUp(兩圖混合)、CutOut(隨機區域遮擋)等。以下是自定義數據增強的Python代碼示例:

from albumentations import Compose, RandomBrightnessContrast, HueSaturationValue, ShiftScaleRotate
import cv2
import numpy as np
import torch
from torch.utils.data import Dataset
from ultralytics import YOLOclass CustomDataset(Dataset):def __init__(self, data_config, transform=None):super().__init__()self.data_config = data_configself.transform = transformdef __len__(self):return len(self.data_config['train_images'])def __getitem__(self, idx):# 獲取圖像和標注img_path = self.data_config['train_images'][idx]label_path = self.data_config['train_labels'][idx]img = cv2.imread(img_path)boxes = np.load(label_path)# 應用數據增強if self.transform:augmented = self.transform(image=img, bboxes=boxes)img = augmented['image']boxes = augmented['bboxes']# 轉換為PyTorch張量img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)img = torch.from_numpy(img.transpose(2,0,1)).float()boxes = torch.from_numpy(boxes).float()return img, boxes

模型訓練是整個流程的核心環節,YOLOv11提供了簡潔的API接口,使訓練過程變得簡單高效。以下是完整的模型訓練代碼示例:

from ultralytics import YOLO
import torch
import time
import osdef train_model(model_name, data_config, epochs=100, imgsz=640, batch_size=16):# 加載預訓練模型或創建新模型if os.path.exists(model_name):model = YOLO(model_name)else:model = YOLO('yolo11n.yaml')  # 從頭開始構建模型# 定義訓練參數train_params = {'data': data_config,'imgsz': imgsz,'batch': batch_size,'epochs': epochs,'optimizer': 'AdamW',  # 優化器選擇'lr0': 0.01,            # 初始學習率'lrf': 0.1,              # 最終學習率衰減系數'momentum': 0.937,       # 動量參數'weight_decay': 0.0005,  # 權重衰減'device': '0',             # GPU編號'workers': 8,               # 數據加載線程數'amp': True,                # 自動混合精度訓練'tensorboard': True,        # 啟用TensorBoard監控'cache': True                 # 啟用緩存加速訓練}# 開始訓練results = model.train(**train_params)# 保存最佳模型best_model_path = os.path.join(results.save_dir, 'best.pt')print(f"Best model saved at: {best_model_path}")return best_model_path

訓練過程中,模型性能監控至關重要 。YOLOv11支持通過TensorBoard實時監控訓練指標,如損失值、精度和學習率變化。訓練完成后,模型會自動保存最佳權重文件(best.pt),同時生成訓練日志和可視化結果,便于后續分析和優化。

三、模型優化與測試

模型優化是提高推理效率的關鍵步驟,主要包括量化、剪枝和模型結構優化。量化是將浮點模型轉換為低精度模型(如FP32→INT8)的過程,可顯著提高推理速度而不明顯影響精度 。剪枝則是移除模型中的冗余參數,減少模型大小和計算復雜度。

模型量化代碼示例(使用TensorRT):

from ultralytics import YOLO
import osdef quantize_model(model_path, output_dir, imgsz=640):# 導出為ONNX格式model = YOLO(model_path)onnx_path = os.path.join(output_dir, 'yolov11.onnx')model.export(format='onnx', imgsz=imgsz, simplify=True)# 使用TensorRT轉換為INT8量化模型# 需要安裝TensorRT并確保CUDA環境配置正確# 命令行執行:# trtexec --onnx=yolov11.onnx --saveEngine=yolov11.engine --fp16 --workspace=4096# 導出為TensorRT引擎(示例)# 需要安裝tensorrt Python庫# import tensorrt as trt# ...return os.path.join(output_dir, 'yolov11.engine')

模型剪枝是另一種優化技術,通過移除不重要的網絡連接來減小模型大小。以下是基于通道的剪枝示例:

import torch
import torchPrunedef prune_model(model_path, output_path, pruning_ratio=0.5):# 加載預訓練模型model = YOLO(model_path)# 定義剪枝策略pruning_strategy = {'Conv2d': {'method': 'L1','ratio': pruning_ratio,'axis': 0},'Linear': {'method': 'L1','ratio': pruning_ratio,'axis': 1}}# 應用剪枝pruned_model = torchPrune prune(model, pruning_strategy)# 微調剪枝后的模型# pruned_model.train(...)# 保存剪枝模型pruned_model.save(output_path)return output_path

模型測試是評估模型性能的重要環節,確保模型在實際應用中能夠滿足需求。YOLOv11提供了方便的驗證接口,可以計算mAP等關鍵指標:

def evaluate_model(model_path, data_config, imgsz=640):# 加載模型model = YOLO(model_path)# 驗證模型val_results = model.val(data=data_config, imgsz(imgsz), save_img=True)# 打印驗證結果print(val_results)# 保存驗證結果results_file = os.path.join(val_results.save_dir, 'results.txt')with open(results_file, 'w') as f:f.write(str(val_results))return val_results

測試過程中,需要特別關注模型在不同場景下的表現 ,如光照變化、遮擋情況和目標大小變化等。通過分析測試結果,可以發現模型的不足之處,為后續優化提供依據。

四、模型部署與集成

模型部署是將訓練好的模型集成到實際應用系統中的過程。根據應用場景的不同,可以選擇不同的部署方式。對于實時目標檢測應用,通常需要低延遲、高吞吐的部署方案。

Python Web服務部署

在Python Web服務中部署YOLOv11模型,可以使用FastAPI構建高性能API。以下是完整的部署代碼示例:

from fastapi import FastAPI, File, UploadFile
from ultralytics import YOLO
import cv2
import numpy as np
import uvicorn
import os
from starlette中途件 import Midjourney
from starlette import status
from starlette.exceptions import HTTPException
from starlette背景任務 import BackgroundTaskapp = FastAPI()# 加載YOLOv11模型
model = YOLO('best.pt')
model.eval()# 配置中間件
@app中途件
async def log_requests(request: Request, call_next):start_time = time.time()response = await call_next(request)process_time = time.time() - start_timeresponse.headers["X-Process-Time"] = str(process_time)return response# 處理圖像的輔助函數
def process_image(img):# 調整圖像尺寸并歸一化img = cv2.resize(img, (640, 640))img = img[:, :, ::-1].transpose(2, 0, 1)  # BGR→RGB, HWC→CHWimg = np.ascontiguousarray(img)img = torch.from_numpy(img).float()img /= 255.0return img# 圖像檢測API
@app.post("/detect")
async def detect_image(image: UploadFile = File(...)):try:# 讀取圖像contents = await image.read()np_array = np.frombuffer(contents, np.uint8)img = cv2.imdecode(np_array, cv2.IMREAD_COLOR)# 預處理圖像input_img = process_image(img)# 執行推理results = model(input_img)# 解析結果output = {'detection': []}for res in results:boxes = res.boxesfor box in boxes:output['detection'].append({'class': model.names[int(box.cls)],'confidence': float(box.conf),'coordinates': {'x': float(box.x),'y': float(box.y),'width': float(box.w),'height': float(box.h)}})return outputexcept Exception as e:raise HTTPException(status_code=500, detail="Image processing failed", headers={"X-Error": str(e)})# 啟動應用
if __name__ == "__main__":uvicorn.run(app, host="0.0.0.0", port=8000)

部署命令:

# 啟動FastAPI服務
uvicorn main:app --reload --host 0.0.0.0 --port 8000
C++部署(ONNX+ONNX Runtime)

對于需要高性能和低延遲的場景,可以將YOLOv11模型部署到C++應用中。以下是完整的C++部署代碼示例:

#include <iostream>
#include <string>
#include <vector>
#include <opencv2/opencv.hpp>
#include <onnxruntime_cxx_api.h>using namespace cv;
using namespace std;
using namespace onnxruntime;// 模型輸入輸出參數
const int INPUT_SIZE = 640;
const float MEAN[3] = {0.485, 0.456, 0.406};
const floatSTD[3] = {0.229, 0.224, 0.225};// 圖像預處理函數
Mat preprocess(const Mat& img) {Mat processed_img;cv::resize(img, processed_img, Size(INPUT_SIZE, INPUT_SIZE));processed_img.convertTo(processed_img, CV_32F, 1.0/255.0);// 歸一化處理for (int i = 0; i < processed_img.rows; i++) {for (int j = 0; j < processed_img.cols; j++) {processed_img.at<float>(i,j,0) = (processed_img.at<float>(i,j,0) - MEAN[0])/STD[0];processed_img.at<float>(i,j,1) = (processed_img.at<float>(i,j,1) - MEAN[1])/STD[1];processed_img.at<float>(i,j,2) = (processed_img.at<float>(i,j,2) - MEAN[2])/STD[2];}}return processed_img;
}// 模型推理函數
vector< vector <float> > inference(const Mat& processed_img, const string& model_path) {vector< vector <float> > results;// 加載模型環境環境;vector <string> providers = {"CUDAExecutionProvider", "CPUExecutionProvider"};推理會話會話環境, providers);// 加載模型文件會話.LoadModel(model_path);// 準備輸入張量Ort::Value input_tensor;vector <float> input_data(processed_img total());processed_img.copyTo(input_data.data());// 調整張量維度vector <int64_t> input_shape = {1, 3, INPUT_SIZE, INPUT_SIZE};input_tensor = Orort::Value::CreateTensor環境, input_data.data(), input_data.size(), input_shape.data(), input_shape.size());// 執行推理vector <Ort::Value> outputs;string input_name = "images";string output_name = "output";// 設置輸入會話.SetInput(input_name, input_tensor);// 執行推理會話.Run();// 獲取輸出auto output_tensor = 會話.GetOutput(output_name);auto output_data = output_tensor.GetTensorData <float>();auto output_shape = output_tensor.GetTensorShape();// 解析輸出結果// 這里需要根據YOLOv11的輸出格式進行解析// ...return results;
}// 主函數
int main() {// 指定模型路徑和輸入圖像路徑string model_path = "./yolov11.onnx";string image_path = "./test.jpg";// 讀取圖像Mat img = cv::imread(image_path);if (img.empty()) {cout << "Could not open or find the image" << endl;return -1;}// 預處理圖像Mat processed_img = preprocess(img);// 執行推理vector< vector <float> > results = inference(processed_img, model_path);// 后處理結果// 在圖像上繪制檢測框和標簽for (auto& detection : results) {float confidence = detection[4];if (confidence < 0.5) continue;  // 過濾低置信度檢測// 獲取邊界框坐標int x = detection[0];int y = detection[1];int w = detection[2];int h = detection[3];// 繪制邊界框rectangle(img, Point(x, y), Point(x + w, y + h), Scalar(0, 255, 0), 2);// 添加標簽string label = model_names[int(detection[5])] + ": " + to_string((int)(confidence * 100)) + "%";putText(img, label, Point(x, y - 10), cv::.FONT_HERSHEY_SIMPLEX, 0.5, Scalar(0, 255, 0), 2);}// 顯示結果cv:: namedWindow("YOLOv11 Detection Result", cv:: cv:: CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV / CV /小標題:模型監控與維護模型監控與維護是保證模型長期穩定運行的關鍵環節。**通過建立完善的監控機制,可以及時發現模型性能下降或異常情況,為模型迭代提供依據**  。監控內容主要包括模型性能指標、資源消耗和推理延遲等。在Python Web服務中集成監控功能的代碼示例:```python
from fastapi import FastAPI, File, UploadFile
from ultralytics import YOLO
import cv2
import numpy as np
import uvicorn
import os
from starlette中途件 import Midjourney
from starlette import status
from starlette.exceptions import HTTPException
from starlette背景任務 import BackgroundTask
import psutil
import time
from torchsummary import summary
import tensorboardapp = FastAPI()# 加載YOLOv11模型
model = YOLO('best.pt')
model.eval()# 配置監控中間件
@app中途件
async def monitor_requests(request: Request, call_next):start_time = time.time()response = await call_next(request)end_time = time.time()# 記錄推理時間inference_time = end_time - start_timeprint(f"Inference Time: {inference_time:.4f} seconds")# 記錄資源使用情況cpu_usage = psutil.cpu_percent()mem_usage = psutil.virtual_memory().percentprint(f"CPU Usage: {cpu_usage:.1f}%, Memory Usage: {mem_usage:.1f}%")# 記錄推理結果# 可以將結果保存到數據庫或文件中# ...return response# 處理圖像的輔助函數
def process_image(img):# 預處理邏輯# ...# 圖像檢測API
@app.post("/detect")
async def detect_image(image: UploadFile = File(...)):# 推理邏輯# ...# 啟動應用
if __name__ == "__main__":uvicorn.run(app, host="0.0.0.0", port=8000)

在C++部署中,可以使用系統工具或自定義代碼監控資源消耗和推理性能:

#include <iostream>
#include <string>
#include <vector>
#include <opencv2/opencv.hpp>
#include <onnxruntime_cxx_api.h>
#include <sys/resource.h>
#include <time.h>using namespace cv;
using namespace std;
using namespace onnxruntime;// 監控系統資源使用情況
void monitor_resources() {// 獲取CPU使用率rusage before, after;getrusage(RUSAGE_SELF, &before);// 執行推理// ...getrusage(RUSAGE_SELF, &after);double cpu_usage = (after.ru_stime.tv_sec - before.ru_stime.tv_sec) * 1000.0 +(after.ru_stime.tv_usec - before.ru_stime.tv_usec) / 1000.0;cout << "CPU Usage: " << cpu_usage << " ms" << endl;// 獲取內存使用情況struct rlimit lim;getrlimit(RLIMITAS, &lim);double mem_usage = lim.rlim_max / (1024.0 * 1024.0);cout << "Memory Usage: " << mem_usage << " MB" << endl;
}// 主函數
int main() {// 模型路徑和輸入圖像路徑string model_path = "./yolov11.onnx";string image_path = "./test.jpg";// 讀取圖像Mat img = cv::imread(image_path);if (img.empty()) {cout << "Could not open or find the image" << endl;return -1;}// 監控資源monitor_resources();// 預處理和推理Mat processed_img = preprocess(img);vector< vector <float> > results = inference(processed_img, model_path);// 顯示結果// ...return 0;
}

五、模型迭代與持續優化

模型迭代是根據收集的反饋數據和監控指標,對模型進行持續優化的過程。通過分析模型在實際應用中的表現,可以發現模型的不足之處,針對性地改進模型結構或訓練策略

模型迭代的典型流程包括:

  1. 收集反饋數據:記錄模型在實際應用中的預測結果和用戶反饋
  2. 分析數據問題:識別誤檢、漏檢和低置信度檢測等常見問題
  3. 增強數據集:針對發現的問題,增加相關場景的訓練數據
  4. 調整訓練策略:修改學習率、批次大小或數據增強參數
  5. 重新訓練模型:使用改進后的數據和策略進行模型更新
  6. 部署新模型:將優化后的模型部署到生產環境

以下是基于反饋數據進行模型迭代的Python代碼示例:

import os
import json
import torch
import numpy as np
from ultralytics import YOLO
from torch.utils.data import Dataset, DataLoader# 加載反饋數據
def load_feedback_data feedback_dir):feedback_data = []# 遍歷反饋目錄中的所有文件for filename in os.listdir i feedback_dir):if filename.endswith(".json"):with open os.path.join i feedback_dir, filename), "r") as f:data = json.load(f)feedback_data.append(data)return feedback_data# 分析反饋數據并生成增強數據
def generate_enhanced_data feedback_data, original_dataset, output_dir):# 分析誤檢和漏檢情況# ...# 使用數據增強技術生成增強數據# ...# 保存增強后的數據# ...# 模型迭代訓練
def iterate_model training feedback_dir, original_dataset, model_path, output_dir, epochs=10):# 加載反饋數據feedback_data = load_feedback_data i feedback_dir)# 分析數據并生成增強數據enhanced_data = generate_enhanced_data feedback_data, original_dataset, output_dir)# 加載原始模型model = YOLO(model_path)# 合并數據集combined_data = original_dataset + enhanced_data# 隨機打亂數據np.random.shuffle(combined_data)# 定義訓練參數train_params = {'data': combined_data,'imgsz': 640,'batch': 16,'epochs': epochs,'optimizer': 'AdamW','lr0': 0.001,  # 使用較低的學習率進行微調'momentum': 0.937,'weight_decay': 0.0005,'device': '0','workers': 8,'amp': True,'tensorboard': True,'cache': True}# 開始訓練results = model.train(**train_params)# 保存新模型new_model_path = os.path.join(output_dir, '迭代模型.pt')results.save(new_model_path)return new_model_path

模型迭代過程中,需要特別注意避免過擬合 ,可以通過以下方法實現:

  1. 數據增強:使用Mosaic、MixUp、CutOut等增強技術增加數據多樣性
  2. 正則化:添加Dropout層或L2正則化約束模型復雜度
  3. 早停法:當驗證集性能不再提升時停止訓練
  4. 學習率調度:使用余弦退火等策略調整學習率
  5. 集成學習:結合多個模型的預測結果提高魯棒性

通過持續的模型迭代和優化,可以不斷提升YOLOv11模型在實際應用中的表現,滿足不斷變化的業務需求。

六、總結與最佳實踐

深度學習模型開發部署是一個系統工程,需要從需求分析、數據準備、模型訓練、模型優化、模型測試到部署運行的全流程把控。對于YOLOv11目標檢測任務,應根據具體應用場景選擇合適的模型版本,充分準備高質量的標注數據,合理配置訓練參數,并采用量化、剪枝等技術優化模型性能

在實際部署中,建議采用以下最佳實踐:

  1. 環境配置:使用conda創建隔離的虛擬環境,確保依賴版本兼容性
  2. 數據增強:啟用Mosaic、MixUp等增強技術提高模型泛化能力
  3. 模型監控:集成TensorBoard等工具監控訓練和推理性能
  4. 性能優化:使用TensorRT等工具進行模型量化,提升推理效率
  5. 持續迭代:建立反饋數據收集機制,定期更新模型以適應變化

通過遵循上述流程和最佳實踐,可以高效地開發和部署YOLOv11目標檢測模型,滿足各種實際應用場景的需求,實現從實驗室到生產環境的順利過渡。

未來發展方向:隨著技術的不斷進步,YOLOv11模型部署將朝多模態融合、三維檢測、在線學習和邊緣-云協同等方向發展 。通過結合紅外、LiDAR等多傳感器數據,模型可以獲取更豐富的環境信息;通過擴展到三維空間定位,模型可以更好地理解物體的空間關系;通過在線學習技術,模型可以在任務過程中持續優化;通過邊緣-云協同架構,可以在資源受限的設備上實現高效推理。這些發展將使YOLOv11在智慧城市、精準農業、應急救援等領域發揮更加重要的作用。

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

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

相關文章

單片機(STM32-串口通信)

一、串口通信基礎概念串口通信&#xff08;Serial Communication&#xff09;是一種在計算機和外部設備之間進行數據傳輸的通信方式。它通過串行方式逐位傳輸數據&#xff0c;是最基本和常用的通信接口之一。主要特點1. 串行傳輸(1)數據按位順序傳輸&#xff0c;一次只能傳輸一…

Redis學習其三(訂閱發布,主從復制,哨兵模式)

文章目錄9.Redis訂閱與發布9.1發布訂閱命令9.2示例10.Redis主從復制10.1概念10.2環境配置10.3集群搭建&#xff08;一主二從配置&#xff09;10.4使用規則&原理11.哨兵模式11.1基本概念11.2工作原理11.3使用案例12.緩存穿透,雪崩&#xff08;待拓展&#xff09;12.1緩存穿透…

跨平臺 App 如何無痛遷移到鴻蒙系統?全流程實戰+Demo 教程

摘要 目前&#xff0c;隨著 HarmonyOS&#xff08;鴻蒙系統&#xff09;的快速發展&#xff0c;越來越多開發者和企業希望將已有的 Android、Flutter、React Native 等跨平臺應用遷移到鴻蒙生態中。鴻蒙不僅具備分布式能力、原生性能和統一的開發范式&#xff0c;還提供了豐富的…

智慧后廚檢測算法構建智能廚房防護網

智慧后廚檢測&#xff1a;構建安全潔凈廚房的智能解決方案背景&#xff1a;傳統后廚管理的痛點與智慧化需求餐飲行業后廚管理長期面臨操作規范難落實、安全隱患難察覺、衛生狀況難追溯等痛點。傳統人工巡檢效率低、覆蓋面有限&#xff0c;難以實現24小時無死角監管。例如&#…

LatentSync: 一鍵自動生成對嘴型的視頻

LatentSync是什么 字節跳動與北京交通大學聯合推出了全新的唇形同步框架 LatentSync&#xff0c;它基于音頻驅動的潛在擴散模型&#xff0c;跳過了傳統的3D建模或2D特征點提取&#xff0c;直接生成自然逼真的說話視頻。 LatentSync借助Stable Diffusion強大的圖像生成能力&am…

在斷網情況下,網線直接連接 Windows 筆記本和 Ubuntu 服務器進行數據傳輸

在斷網情況下&#xff0c;通過網線直接連接 Windows 筆記本 和 Ubuntu 服務器上的容器 進行數據傳輸&#xff0c;可以按照以下步驟操作&#xff1a;1. 物理連接 使用網線直連&#xff1a;用一根 普通網線&#xff08;直通線&#xff09; 連接 Windows 筆記本和 Ubuntu 服務器的…

機器學習17-Mamba

深度學習之 Mamba 學習筆記 一、Mamba 的背景與意義 在深度學習領域&#xff0c;序列建模是一項核心任務&#xff0c;像自然語言處理、語音識別和視頻分析等領域&#xff0c;都要求模型能有效捕捉長序列里的依賴關系。之前&#xff0c;Transformer 憑借強大的注意力機制成為序列…

Java實現word、pdf轉html保留格式

一、word轉html 依賴&#xff1a; <properties><poi.version>5.2.3</poi.version><xhtml.version>2.0.4</xhtml.version> </properties><!--word轉html--> <dependency><groupId>org.apache.poi</groupId><a…

基于51單片機和16X16點陣屏、矩陣按鍵的小游戲《俄羅斯方塊》

目錄系列文章目錄前言一、效果展示二、原理分析三、各模塊代碼1、16X16點陣屏&#xff08;MAX7219驅動&#xff09;2、矩陣按鍵3、定時器0四、主函數總結系列文章目錄 前言 《俄羅斯方塊》&#xff0c;一款經典的、懷舊的小游戲&#xff0c;單片機入門必寫程序。 有兩個版本&…

Stable Diffusion Windows本地部署超詳細教程(手動+自動+整合包三種方式)

Stable Diffusion Windows 本地部署超詳細教程 (手動 自動 整合包三種方式) 一、引言 我們可以通過官方網站 Stability AI&#xff0c;以及 Dream Studio、Replicate、Playground AI 、Baseten 等網站在線體驗 Stable Diffusion 的巨大威力。相比于集成在網絡平臺的 SD 或者…

sqli-labs靶場通關筆記:第29-31關 HTTP參數污染

第29關 HTTP參數污染本關設置了web應用防火墻&#xff08;WAF&#xff09;&#xff0c;利用白名單保護機制來檢測和攔截惡意請求。看本關源代碼。<?php //including the Mysql connect parameters. include("../sql-connections/sql-connect.php"); //disable er…

Vuex 基本概念

參照官網整理總結vuex語法。 計劃日期&#xff1a; Vuex基礎部分&#xff1a;2022年2月20日——2022年2月28日 Vuex源碼相關實踐&#xff1a;待定 Vuex拓展&#xff1a;待定 寫完后&#xff0c;會發到倉庫地址&#xff1a;待定 Vuex 是一個專為 Vue.js 應用程序開發的狀態管理模…

深入理解Linux文件操作:stdin/stdout/stderr與C語言文件函數全解析

目錄 一、stdin、stdout 和 stderr 詳解 二、文件打開方式 三、C語言文件操作函數詳解 1、文件操作概述 2、文件操作函數分類表 1. 文件打開與關閉 2. 字符讀寫函數 3. 字符串讀寫函數 4. 格式化讀寫函數 5. 二進制讀寫函數 6. 文件定位函數 7. 文件狀態與錯誤檢測…

【自用】JavaSE--集合框架(一)--Collection集合體系

概述之前學的ArrayList就是集合的一種&#xff0c;是一種容器&#xff0c;可以往里面存東西&#xff0c;大小可變Collection集合體系Collection的常用方法以后Collection體系的集合都可以用下圖的方法注意toArray方法的數組類型是Object&#xff0c;這樣就可以接收任意類型的數…

電腦視頻常用幾種接口

傳輸信號類型 DP&#xff08;DisplayPort&#xff09;主要用于傳輸數字視頻和音頻信號&#xff0c;支持高分辨率和高刷新率。HDMI&#xff08;High-Definition Multimedia Interface&#xff09;同樣傳輸數字音視頻信號&#xff0c;但更偏向消費電子領域&#xff0c;如電視、游…

CherryStudio+playwright-mcp-server實現AI自動化

目錄 1、CherryStudio安裝與配置 1.1什么是CherryStudio 1.2安裝 1.3配置 2、playwright-mcp-server的安裝與配置 3、執行測試與結果 1、CherryStudio安裝與配置 1.1什么是CherryStudio Cherry Studio 是一款集多模型對話、知識庫管理、AI 繪畫、翻譯等功能于一體的全能 …

深入了解 find_element 方法:Web 自動化定位元素的核心?

在 Web 自動化測試領域&#xff0c;元素定位是實現各類操作的基礎&#xff0c;而find_element方法正是 Selenium 等自動化工具中用于定位單個元素的核心方法。掌握它的使用技巧&#xff0c;能讓我們更精準、高效地操控網頁元素&#xff0c;為自動化測試腳本的編寫打下堅實基礎。…

從零開始的云計算生活——第三十三天,關山阻隔,ELK日志分析

目錄 一.故事背景 二、Elasticsearch 全面概述 1、核心定位 2、核心特性 a. 分布式架構 b. 高性能原理 c. 數據模型創新 3、核心技術組件 4、核心應用場景 a. 企業級搜索 b. 可觀測性 c. 安全分析&#xff08;SIEM&#xff09; 5、版本演進關鍵特性 6、核心優勢…

深入理解 Spring Boot Starter 的生成機制

在使用 Spring Boot 進行開發時&#xff0c;我們常常會引入諸如 spring-boot-starter-web、spring-boot-starter-data-jpa 等依賴&#xff0c;從而快速開啟相關功能模塊。但你是否思考過這些 Starter 是如何構建的&#xff1f;如果我們要開發自己的 Starter&#xff0c;又該如何…

阿里云-通義靈碼:隱私保護機制—為數據安全筑起銅墻鐵壁

免責聲明&#xff1a;此篇文章所有內容皆是本人實驗&#xff0c;并非廣告推廣&#xff0c;并非抄襲&#xff0c;該系列繼續~每日一句不要感嘆自己的平凡&#xff0c;即便是最暗的星星&#xff0c;相與無邊的黑暗已是耀眼。一.引言在這個數據如同空氣般滲透到生活每個角落的時代…