深度学习模型开发部署全流程:以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;相与无边的黑暗已是耀眼。一.引言在这个数据如同空气般渗透到生活每个角落的时代…