边缘计算技术:深度学习与人工智能的融合|社区征文

2023总结
前言

“边缘”二字说的是边缘节点。这是一个网络概念,边缘节点是指那些离用户很近的、不在主干网络上的节点。用户在访问网络中的信息时,请求会先到达边缘节点,然后由边缘节点逐步转发到核心节点上。CDN部署的CDN节点其实就属于边缘节点,这样,用户请求静态资源时,可以在边缘节点上获得,而不需要经过层层转发后从核心节点获得。

picture.image

机器学习(ML)越来越“边缘”

目前存在的机器学习,从处理的时空地点划分为3种形态,云端ML、边缘ML和TinyML。TinyML正是针对占比超过95%以上的物联网实时数据处理场景。

picture.image

云端ML: 是指机器学习在企业内部或云端特定计算数据中心的应用。这些云服务器涵盖所有类型,包括公共云、私有云和混合云。此外,它还包括运营控制中心,例如管理电网或电话网络的那些运营控制中心。

边缘ML: 是指机器学习在不处于核心数据中心的,企业级计算机/设备中的应用。边缘设备包括服务器机房,现场服务器,以及位于各个地区以加快响应速度为目的的小型数据中心。

云端和边缘端的ML 已经通过3年多的科普,广为大众所接受。今天我们看到的人脸门禁、摄像头行为识别、智能音箱...... 绝大部分场景都属于这两类。 以 TensorFlow & TF lite 等开源深度学习框架为基础的大量应用,推动了智能在云端和边缘端应用。然而,更加具有广大前景的应用,应该属于下面这一类:

TinyML: 是指超低功耗的机器学习在物联网各种终端微控制器中的应用。TinyML通常功耗为毫瓦(mW)级别甚至更低,因此可以支持各种不同的电池驱动的设备,和需要始终在线的应用。这些设备包括智能摄像头、远程监控设备、可穿戴设备、音频采集硬件以及各种传感器等等……根据行业研究报告2010-2018 年全球物联网设备连接数高速增长,由 2010 年的 20 亿个增长至 2018 年的 91亿个,复合增长率达 20.9%,预计 2025 年全球物联网设备(包括蜂窝及非蜂窝)联网数量将达到 252 亿个。这个数量级下,真正有落地价值的智能创新应用,将开辟巨大的蓝海。

如何在边缘设备上优化代码?

如何使用PyTorch框架对深度学习模型进行训练和优化,以及如何将模型部署到边缘设备上? 以下是我的答案

import torch  
import torch.nn as nn  
import torch.optim as optim  
from torch.utils.mobile_optimizer import optimize_for_mobile  
  
# 定义一个简单的深度学习模型  
class SimpleModel(nn.Module):  
    def __init__(self):  
        super(SimpleModel, self).__init__()  
        self.fc = nn.Linear(10, 1)  
          
    def forward(self, x):  
        return self.fc(x)  
  
# 初始化模型和优化器  
model = SimpleModel()  
optimizer = optim.SGD(model.parameters(), lr=0.01)  
  
# 训练模型  
for epoch in range(100):  
    # 假设我们有一个输入数据x和对应的目标y  
    x = torch.randn(10, 10)  
    y = torch.randn(10, 1)  
      
    # 前向传播  
    output = model(x)  
      
    # 计算损失  
    loss = nn.MSELoss()(output, y)  
      
    # 反向传播和优化  
    optimizer.zero_grad()  
    loss.backward()  
    optimizer.step()  
      
    print(f"Epoch {epoch+1}, Loss: {loss.item()}")  
  
# 优化模型以适应边缘设备  
optimized_model = optimize_for_mobile(model)  
optimized_model.save("optimized_model.pt")  
  
# 在边缘设备上加载和运行优化后的模型  
import torch.jit.mobile as mobile  
optimized_model = mobile.load("optimized_model.pt")  
input_data = torch.randn(10, 10).to(device) # 假设设备是边缘设备,例如手机或平板电脑  
output_data = optimized_model(input_data)
边缘计算案例:实时视频流处理

问题:传统的中央服务器处理方式在大规模并发请求时可能会出现延迟和卡顿,影响用户体验。

解决方案:

  • 边缘设备部署:在体育场馆的各个角落部署边缘计算设备,这些设备可以实时接收比赛现场的高清视频流。
  • 边缘计算优化:利用边缘设备的计算资源,对视频流进行实时分析和处理,例如识别关键时刻、提供实时字幕等。

技术细节:

  • 使用高效的视频编码技术,如H.265/H.266,以减少视频文件的大小并提高传输效率。
  • 利用边缘设备的GPU或专用硬件加速视频处理任务。
  • 使用低延迟的通信协议,如WebRTC,确保实时视频流的稳定传输。
  • 集成AI模型,在边缘设备上进行实时的视频内容分析,如运动员识别、精彩瞬间检测等。
import cv2  
import numpy as np  
  
# 初始化摄像头  
cap = cv2.VideoCapture(0)  # 使用摄像头0进行视频捕获  
  
# 定义一个函数来处理视频帧  
def process_frame(frame):  
    # 在这里添加你的视频处理逻辑,例如压缩、转码、分析等  
    # 作为示例,我们只是简单地转换帧的颜色空间并缩小其大小  
    frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)  # 转换颜色空间  
    frame = cv2.resize(frame, (800, 600))  # 缩小帧的大小  
    return frame  
  
# 循环捕获视频帧并处理它们  
while True:  
    ret, frame = cap.read()  # 读取一帧视频  
    if not ret:  # 如果无法读取帧,可能是因为摄像头已关闭或出现其他问题  
        break  
    processed_frame = process_frame(frame)  # 处理帧  
    cv2.imshow('Processed Frame', processed_frame)  # 显示处理后的帧  
    if cv2.waitKey(1) & 0xFF == ord('q'):  # 如果按下'q'键,退出循环  
        break  
  
# 释放摄像头并关闭所有窗口  
cap.release()  
cv2.destroyAllWindows()

infoq原文链接:https://xie.infoq.cn/article/254f6856148ecf3719940af4f

0
0
0
0
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论