DAMOYOLO-S工程实践:实时手机检测-通用ONNX导出与跨平台部署

news2026/4/28 15:59:49
DAMOYOLO-S工程实践实时手机检测-通用ONNX导出与跨平台部署1. 引言为什么你需要一个高效的手机检测模型想象一下你正在开发一个智能会议室管理系统需要自动检测参会者是否在会议期间违规使用手机。或者你正在构建一个智慧工厂的安全监控系统需要识别工人在危险区域是否携带手机。在这些场景下一个快速、准确的手机检测模型就是核心。传统的目标检测模型比如大家熟知的YOLO系列虽然效果不错但在追求极致速度和精度的工业场景下有时会显得力不从心。今天要介绍的DAMOYOLO-S就是一个专为工业落地设计的高性能检测框架。它不仅在精度上超越了经典的YOLO模型还保持了极高的推理速度特别适合像手机检测这类需要实时响应的任务。更棒的是我们将重点讲解如何将这个强大的模型转换成通用的ONNX格式并部署到各种不同的平台比如服务器、边缘设备甚至手机端让你一次训练到处运行。无论你是算法工程师、嵌入式开发者还是全栈工程师这篇文章都将带你走通从模型使用到跨平台部署的完整路径。2. DAMOYOLO-S与实时手机检测模型揭秘2.1 模型能力速览首先我们得搞清楚这个“实时手机检测-通用”模型到底能做什么。简单来说你给它一张图片它就能把图片里所有的手机都找出来并且用框标出具体位置。无论是放在桌上的手机、拿在手里的手机还是只露出一部分的手机它都能识别。这个模型是基于DAMOYOLO-S框架训练的。你可能听说过YOLOv5、YOLOv8DAMOYOLO可以看作是这个家族里的一个“性能猛兽”。它的设计目标很明确在保持飞快速度的同时把检测精度做到更高。这对于需要7x24小时不间断运行的安防、质检等系统来说至关重要。2.2 核心技术大道至简的“大脖子小脑袋”DAMOYOLO的网络结构很有特点官方称之为“large neck, small head”大脖子小脑袋。这可不是随便说的而是一种精妙的设计思想。Backbone (MAE-NAS): 这是模型的“脊椎”负责从原始图像中提取多层次的特征。MAE-NAS是一种自动搜索出来的高效网络结构能很好地平衡计算量和特征提取能力。Neck (GFPN): 这是模型的“脖子”而且是个“大脖子”。它的任务是把“脊椎”提取出的不同层次的特征有的细节丰富有的语义信息强进行充分融合。你可以把它想象成一个信息交换中心让浅层的位置信息和深层的类别信息互相沟通这样模型对物体的大小、位置判断就更准了。Head (ZeroHead): 这是模型的“小脑袋”。经过“大脖子”充分融合后的特征已经非常强了所以“脑袋”可以设计得轻量一些主要负责最终的分类是不是手机和定位框在哪里。这种设计减少了计算量提升了速度。正是这种“强化特征融合简化预测头”的思路让DAMOYOLO在速度和精度之间找到了一个更好的平衡点。下图直观展示了它与其他YOLO系列模型的性能对比可以看到其在精度mAP上的优势。3. 快速体验使用Gradio构建可视化检测Demo在深入技术细节前我们先快速上手直观感受一下模型的检测效果。这里我们使用ModelScope魔搭社区的模型和Gradio这个轻量级的Web框架来搭建一个可视化界面。3.1 环境准备与模型加载首先确保你的Python环境已经安装了必要的库。如果使用CSDN星图镜像这些环境通常已经配置好了。# 安装核心库 (如果尚未安装) # pip install modelscope gradio opencv-python-headless Pillow numpy from modelscope.pipelines import pipeline from modelscope.utils.constant import Tasks import gradio as gr import cv2 import numpy as np # 创建手机检测pipeline # 模型ID指定为 damo/cv_tinynas_object-detection_damoyolo_phone phone_detection_pipeline pipeline( Tasks.domain_specific_object_detection, modeldamo/cv_tinynas_object-detection_damoyolo_phone )这段代码的核心是pipeline函数它从ModelScope加载指定的模型damo/cv_tinynas_object-detection_damoyolo_phone。Tasks.domain_specific_object_detection告诉框架我们要做的是特定领域的目标检测任务。3.2 编写检测与可视化函数模型加载后我们需要一个函数来处理上传的图片调用模型进行推理并把检测结果边界框画到图片上。def detect_phone(image): 对输入图像进行手机检测并可视化结果。 参数: image: numpy数组格式的图像 (H, W, C) 返回: 绘制了检测框的图像 (numpy数组) # 执行推理 result phone_detection_pipeline(image) # 获取检测结果 # 结果格式通常为: [{bbox: [x1, y1, x2, y2], score: 0.99, label: phone}, ...] detections result[detections] if detections in result else [] # 创建原图的副本用于绘制 output_image image.copy() for det in detections: bbox det[bbox] # 边界框坐标 score det[score] # 置信度 label det.get(label, phone) # 标签默认为phone # 将坐标转换为整数 x1, y1, x2, y2 map(int, bbox) # 绘制矩形框 color (0, 255, 0) # 绿色框 thickness 2 cv2.rectangle(output_image, (x1, y1), (x2, y2), color, thickness) # 准备标签文本 label_text f{label}: {score:.2f} # 计算文本背景框的位置 (text_width, text_height), baseline cv2.getTextSize(label_text, cv2.FONT_HERSHEY_SIMPLEX, 0.5, 1) cv2.rectangle(output_image, (x1, y1 - text_height - 5), (x1 text_width, y1), color, -1) # 填充背景 cv2.putText(output_image, label_text, (x1, y1 - 5), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 1) # 白色文字 return output_image3.3 使用Gradio创建Web界面最后我们用Gradio将上面的函数包装成一个有上传按钮和显示窗口的Web应用。# 定义Gradio界面 demo gr.Interface( fndetect_phone, # 处理函数 inputsgr.Image(label上传包含手机的图片, typenumpy), # 输入组件 outputsgr.Image(label检测结果), # 输出组件 title实时手机检测Demo (基于DAMOYOLO-S), description上传一张图片模型将自动检测其中的手机并用绿色框标出。, examples[[path/to/example_phone_image.jpg]] # 可提供示例图片路径 ) # 启动应用在Notebook中可以使用demo.launch(shareTrue)获取临时公网链接 if __name__ __main__: demo.launch(server_name0.0.0.0, server_port7860) # 在本地7860端口启动运行这段代码一个本地Web服务就启动了。你打开浏览器访问http://localhost:7860就能看到一个简洁的界面。点击上传按钮选择一张有手机的图片再点击“Submit”几秒钟内就能看到检测结果。效果如下图所示4. 工程化关键步骤导出ONNX模型Demo跑通了但这只是第一步。要想在真实项目尤其是嵌入式设备或不同框架中使用这个模型我们需要将其转换为一种通用的格式——ONNX。4.1 为什么要导出ONNXONNXOpen Neural Network Exchange就像一个AI模型的“通用翻译器”。不同深度学习框架PyTorch, TensorFlow, PaddlePaddle等训练的模型都可以转换成ONNX格式。一旦转换成ONNX你就可以跨框架使用用ONNX Runtime在几乎任何平台上运行。进行模型优化使用ONNX Runtime提供的工具进行图优化、量化进一步提升速度。部署到边缘设备许多边缘计算平台如NVIDIA Jetson, 瑞芯微RKNN华为昇腾都优先支持ONNX模型。4.2 从PyTorch到ONNX的转换实战假设我们已经有了DAMOYOLO-S模型的PyTorch权重文件.pth和模型定义代码。以下是导出ONNX的核心步骤import torch import torch.onnx from modelscope.models import Model # 假设通过ModelScope获取模型 from modelscope.utils.constant import Tasks # 1. 加载PyTorch模型 (这里以ModelScope方式为例) model Model.from_pretrained(damo/cv_tinynas_object-detection_damoyolo_phone, taskTasks.domain_specific_object_detection) model.eval() # 切换到评估模式 # 2. 准备一个示例输入张量 (模拟一张图片) # 尺寸需要与模型训练时一致例如 640x640 batch_size 1 channels 3 height, width 640, 640 dummy_input torch.randn(batch_size, channels, height, width, devicecpu) # 3. 指定导出ONNX的文件路径 onnx_model_path damoyolo_phone_detection.onnx # 4. 执行导出 # 关键参数说明 # - dummy_input: 示例输入用于确定输入维度 # - onnx_model_path: 输出文件路径 # - input_names, output_names: 输入输出节点名称便于后续推理时识别 # - opset_version: ONNX算子集版本建议11 # - dynamic_axes: 支持动态维度如批处理大小可变 torch.onnx.export( model, dummy_input, onnx_model_path, export_paramsTrue, # 将模型参数也保存在文件中 opset_version13, # 使用ONNX opset 13 do_constant_foldingTrue, # 执行常量折叠优化 input_names[images], # 输入名 output_names[output], # 输出名 dynamic_axes{ images: {0: batch_size}, # 第0维批处理大小是动态的 output: {0: batch_size} } ) print(f模型已成功导出至: {onnx_model_path})导出后的检查强烈建议使用onnx.checker.check_model和onnxruntime进行验证确保导出的模型没有错误且能正常推理。import onnx import onnxruntime as ort import numpy as np # 检查模型格式是否正确 onnx_model onnx.load(onnx_model_path) onnx.checker.check_model(onnx_model) print(ONNX模型格式检查通过) # 使用ONNX Runtime进行简单推理验证 ort_session ort.InferenceSession(onnx_model_path) # 准备与导出时一致的输入 ort_inputs {ort_session.get_inputs()[0].name: dummy_input.numpy()} ort_outs ort_session.run(None, ort_inputs) print(ONNX模型推理验证成功输出形状:, ort_outs[0].shape)5. 跨平台部署策略与实践模型转换成ONNX后我们就拥有了部署的主动权。下面看看几种典型的部署场景。5.1 方案一使用ONNX Runtime进行CPU/GPU推理服务端/桌面端这是最通用和简单的部署方式。ONNX Runtime支持Windows、Linux、macOS并且可以利用CPU或GPU进行加速。# onnx_runtime_inference.py import onnxruntime as ort import cv2 import numpy as np from typing import List, Tuple class PhoneDetectorONNX: def __init__(self, model_path: str, providersNone): 初始化ONNX Runtime推理器。 参数: model_path: ONNX模型文件路径 providers: 执行提供者列表如[CUDAExecutionProvider, CPUExecutionProvider] if providers is None: # 优先使用CUDA如果有GPU否则使用CPU providers [CUDAExecutionProvider, CPUExecutionProvider] self.session ort.InferenceSession(model_path, providersproviders) self.input_name self.session.get_inputs()[0].name self.input_shape self.session.get_inputs()[0].shape # 例如: (1, 3, 640, 640) _, _, self.net_height, self.net_width self.input_shape def preprocess(self, image: np.ndarray) - np.ndarray: 将输入图像预处理为模型需要的格式 # 1. 调整大小并保持长宽比 (LetterBox) img_h, img_w image.shape[:2] scale min(self.net_height / img_h, self.net_width / img_w) new_h, new_w int(img_h * scale), int(img_w * scale) resized cv2.resize(image, (new_w, new_h)) # 2. 创建画布并填充到网络输入尺寸 canvas np.full((self.net_height, self.net_width, 3), 114, dtypenp.uint8) top (self.net_height - new_h) // 2 left (self.net_width - new_w) // 2 canvas[top:topnew_h, left:leftnew_w, :] resized # 3. 转换格式: HWC - CHW, BGR - RGB, 归一化, 增加批次维度 canvas canvas.transpose(2, 0, 1) # HWC to CHW canvas canvas[::-1, :, :] # BGR to RGB (如果模型需要RGB) canvas canvas.astype(np.float32) / 255.0 # 归一化到[0,1] canvas np.expand_dims(canvas, axis0) # 添加批次维度 - (1,3,H,W) return canvas, (scale, left, top) def postprocess(self, outputs: np.ndarray, preprocess_info) - List[dict]: 将模型输出解析为检测框列表 scale, left_pad, top_pad preprocess_info detections [] # 这里需要根据DAMOYOLO-S的具体输出格式进行解析 # 假设outputs[0]形状为(1, 8400, 6)其中6代表[x1, y1, x2, y2, conf, class] # 实际格式请根据模型确认 output outputs[0][0] # 去除批次维度 - (8400, 6) for det in output: conf det[4] if conf 0.25: # 置信度阈值 continue # 将框坐标映射回原图 x1 (det[0] - left_pad) / scale y1 (det[1] - top_pad) / scale x2 (det[2] - left_pad) / scale y2 (det[3] - top_pad) / scale # 确保坐标在图像范围内 x1, y1, x2, y2 max(0, x1), max(0, y1), min(x2, self.net_width/scale), min(y2, self.net_height/scale) detections.append({ bbox: [x1, y1, x2, y2], score: float(conf), label: phone }) return detections def detect(self, image: np.ndarray) - List[dict]: 主检测函数 input_tensor, preprocess_info self.preprocess(image) outputs self.session.run(None, {self.input_name: input_tensor}) return self.postprocess(outputs, preprocess_info) # 使用示例 if __name__ __main__: detector PhoneDetectorONNX(damoyolo_phone_detection.onnx) img cv2.imread(your_phone_image.jpg) results detector.detect(img) print(f检测到 {len(results)} 部手机) for i, r in enumerate(results): print(f手机{i1}: 位置{r[bbox]}, 置信度{r[score]:.2f})5.2 方案二在移动端部署以Android为例在Android上部署ONNX模型通常使用ONNX Runtime Mobile或将其转换为平台更优的格式如NCNN、MNN。核心步骤模型优化使用ONNX Runtime的模型优化工具进行算子融合、常量折叠等减小模型体积。集成ONNX Runtime Mobile将ONNX Runtime的Android版本库AAR添加到你的Android项目中。编写JNI接口或直接使用Java API在App中加载模型并进行推理。一个简化的Android端推理代码结构如下Java示例// 伪代码展示流程 import ai.onnxruntime.*; public class PhoneDetector { private OrtSession session; public void init(Context context, String modelPath) { // 1. 加载模型文件 OrtEnvironment env OrtEnvironment.getEnvironment(); OrtSession.SessionOptions options new OrtSession.SessionOptions(); // 可选设置线程数、使用NNAPI等 // options.addConfigEntry(session.intra_op_num_threads, 4); // 2. 创建会话 session env.createSession(context.getAssets().open(modelPath), options); } public ListDetectionResult detect(Bitmap bitmap) { // 3. 预处理调整大小、归一化、转成CHW格式... float[] inputData preprocessBitmap(bitmap); // 4. 创建输入Tensor long[] inputShape {1, 3, 640, 640}; // NCHW OnnxTensor inputTensor OnnxTensor.createTensor(env, FloatBuffer.wrap(inputData), inputShape); // 5. 运行推理 MapString, OnnxTensor inputs new HashMap(); inputs.put(images, inputTensor); OrtSession.Result outputs session.run(inputs); // 6. 后处理解析输出映射坐标... OnnxTensor outputTensor (OnnxTensor) outputs.get(0); float[][] detectionData (float[][]) outputTensor.getValue(); return postprocess(detectionData, bitmap.getWidth(), bitmap.getHeight()); } }5.3 方案三模型量化与加速为了在资源受限的边缘设备上运行我们还可以对ONNX模型进行量化将模型参数从FP3232位浮点数转换为INT88位整数从而显著减小模型体积并提升推理速度。# 使用ONNX Runtime的量化工具需要安装 onnxruntime-extensions from onnxruntime.quantization import quantize_dynamic, QuantType # 动态量化训练后量化无需校准数据 quantized_model_path damoyolo_phone_detection_quantized.onnx quantize_dynamic( model_inputdamoyolo_phone_detection.onnx, model_outputquantized_model_path, weight_typeQuantType.QUInt8, # 权重量化为UINT8 ) print(f量化模型已保存至: {quantized_model_path}) # 量化后的模型通常能减少75%的存储空间并在支持INT8的硬件上获得加速。6. 总结与展望通过本文的实践我们完成了一个完整的工业级目标检测模型的落地流程从使用ModelScope和Gradio快速验证模型效果到将其转换为通用的ONNX格式最后探讨了在不同平台服务端、移动端的部署策略。核心要点回顾模型选择DAMOYOLO-S凭借其“大脖子小脑袋”的设计在精度和速度上取得了良好平衡非常适合手机检测这类实时性要求高的任务。快速验证利用ModelScope和Gradio可以在几分钟内搭建一个可交互的Demo直观评估模型性能这是项目启动的第一步。格式转换将PyTorch模型导出为ONNX格式是跨平台部署的关键一步它打破了框架的壁垒。灵活部署ONNX模型配合ONNX Runtime可以轻松部署在从云服务器到边缘设备的广泛环境中。针对特定平台如Android可进一步集成专用运行时或进行量化优化。下一步建议性能调优在实际部署中根据目标硬件调整ONNX Runtime的提供者Provider和会话选项SessionOptions如线程数、图优化级别等以榨干硬件性能。Pipeline优化模型推理只是整个应用的一部分。图像预处理、后处理如NMS以及结果渲染的耗时也需考虑可以尝试将这些步骤也集成到ONNX图中或使用C实现以获得极致性能。持续探索ONNX生态中还有更多工具如ONNX Simplifier用于简化模型结构ONNX GraphSurgeon用于高级图修改值得深入探索。将先进的AI模型从实验室带到真实世界ONNX扮演了桥梁的角色。希望这篇关于DAMOYOLO-S手机检测模型ONNX导出与部署的实践指南能为你后续的工程项目提供一条清晰的路径。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2545294.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…