还未设置个性签名
成为VIP会员 享9项特权: 开通会员

完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>

3天内不再提示

改进VPI和PyTorch之间的互操作性

星星科技指导员 来源:NVIDIA 作者:NVIDIA 2022-06-21 16:47 次阅读

NVIDIA Vision Programming Interface ( VPI )是 NVIDIA 的一个计算机视觉和图像处理软件库,使您能够在 NVIDIA Jetson 嵌入式设备和离散 GPU 上提供的不同硬件后端上实现加速算法。

库中的一些算法包括滤波方法、透视扭曲、时间降噪、直方图均衡化、立体视差和镜头畸变校正。 VPI 提供了易于使用的 Python 绑定,以及一个 C ++ API 。

除了 与 OpenCV 接口 , VPI 还能够与 PyTorch 和其他基于 Python 的库进行互操作。在本文中,我们将通过一个基于 PyTorch 的对象检测和跟踪示例向您展示这种互操作性是如何工作的。有关更多信息,请参阅 视觉编程接口( VPI ) 页和 Vision 编程接口 文档。

与 PyTorch 和其他库的互操作性

根据您在计算机视觉和深度学习管道中实现的应用程序,您可能必须使用多个库。开发此类管道的挑战之一是这些库之间交互的效率。例如,当在内存拷贝之间交换图像数据时,可能会由于内存拷贝而出现性能问题。

使用 VPI ,您现在可以与 PyTorch 或任何其他支持__cuda_array_interace__的库进行互操作。__cuda_array_interface__( CUDA Array Interface )是 Python 中的一个属性,它支持各种项目(如库)中类似 GPU Array 对象的不同实现之间的互操作性。

阵列对象(如图像)可以在一个库中创建,在另一个库中修改,而无需复制 GPU 中的数据或将其传递给 CPU

图 1 VPI 和其他库之间的互操作性使用 __cuda_array_interface__

时间噪声抑制以改进目标检测和跟踪

噪声是视频中跨帧的常见特征。这种时间噪声会对视频中目标检测和跟踪算法的性能产生负面影响。

VPI 库提供了一种时间降噪( TNR )算法,这是计算机视觉应用中用于降低视频数据中噪声的常用方法。

在本演练中,您将在嘈杂的视频上使用基于 PyTorch 的对象检测和跟踪示例。然后应用 VPI 中的 TNR 算法来减少噪声,从而改进目标检测和跟踪。

我们表明,在执行 VPI 和 PyTorch 算法的过程中, VPI 和 PyTorch 都可以无缝工作,没有任何内存拷贝。

该示例包括以下内容:

PyTorch 基于原始输入视频的目标检测与跟踪

PyTorch 基于 VPI TNR 的干净输入视频目标检测与跟踪

使用 CUDA 阵列接口实现 VPI 和 PyTorch 之间的互操作性

PyTorch 基于原始输入视频的目标检测与跟踪

首先,首先定义一个基于 PyTorch 的应用程序来检测图像中的对象。此示例应用程序基于 具有 MobileNetV3 主干的 SSDLite ,用于使用 PyTorch 和 Torchvision 进行目标检测 Example.

创建一个名为PyTorchDetection的类来处理所有 PyTorch 对象和调用。创建此类对象时,应用程序正在将用于对象检测的预训练深度学习模型加载到 GPU ,仅用于推理。以下代码示例显示了所需的导入和类构造函数定义:

import torch
import torchvision class PyTorchDetection: def __init__(self): assert torch.cuda.is_available() self.cuda_device = torch.device('cuda') self.convert = torchvision.transforms.Compose([ torchvision.transforms.ConvertImageDtype(torch.float32), torchvision.transforms.Lambda(lambda x: x.permute(2, 0, 1)), torchvision.transforms.Lambda(lambda x: x.unsqueeze(0)), ]) model = torchvision.models.detection.ssdlite320_mobilenet_v3_large(
pretrained=True) self.torch_model = model.eval().to(self.cuda_device)

PyTorchDetection类还负责从阵列创建 CUDA 图像帧,有效地将其上载到 GPU 。稍后,您将使用 OpenCV 从文件中读取输入视频,其中每个视频帧都是一个 NumPy 数组,用作该类创建函数的输入。

此外,PyTorchDetection类可以将 CUDA 图像帧转换为 CUDA 张量对象,为模型推断做好准备,并将基于 VPI 的 CUDA 帧转换为张量。最后一次转换使用 VPI 的__cuda_array_interface__互操作性来避免复制帧。

 def CreateCUDAFrame(self, np_frame): return torch.from_numpy(np_frame).to(self.cuda_device) def ConvertToTensor(self, cuda_frame): return self.convert(cuda_frame) def ConvertFromVPIFrame(self, vpi_cuda_frame): return torch.as_tensor(vpi_cuda_frame, device=self.cuda_device)

除了前面定义的函数外,PyTorchDetection类还定义了一个函数,在给定scores_threshold值的情况下,可以在当前 OpenCV 帧中检测和绘制对象:

 def DetectAndDraw(self, cv_frame, torch_tensor, title, scores_threshold=0.2): with torch.no_grad(): pred = self.torch_model(torch_tensor) (...)

在这篇文章中,我们省略了代码,以提请大家注意 PyTorch 模型的预测结果。此处下载或使用本规范即表示您接受本规范的条款和条件。 您可以下载并查看代码 。

下一节介绍如何使用 VPI 降低输入视频中的噪声,将 VPI 与 PyTorch 耦合以改进其目标检测。

PyTorch 基于 VPI TNR 的干净输入视频目标检测与跟踪

在本节中,定义一个基于 VPI 的实用程序类VPITemporalNoiseReduction,以清除视频帧中的噪声。

创建此类对象时,应用程序加载主 VPI TNR 对象和基于 VPI 的 CUDA 帧以存储清理后的输出。以下代码示例显示了所需的导入和类构造函数定义:

import vpi class VPITemporalNoiseReduction: def __init__(self, shape, image_format): if (image_format == 'BGR8'): self.vpi_image_format = vpi.Format.BGR8 else: self.vpi_image_format = vpi.Format.INVALID self.vpi_output_frame = vpi.Image(shape, format=self.vpi_image_format) self.tnr = vpi.TemporalNoiseReduction(shape, vpi.Format.NV12_ER, version=vpi.TNRVersion.V3, backend=vpi.Backend.CUDA)

类的构造函数需要每个输入图像帧的形状(图像宽度和高度)和格式。为简单起见,您只接受BGR8图像格式,因为这是OpenCV在读取输入视频时使用的格式。

此外,您正在创建 VPI 图像,以使用提供的形状和格式存储输出帧。然后使用 TNR code 版本 3 和 CUDA 后端为该形状构造 TNR 对象。 TNR 的输入格式为 NV12 \ u ER ,与输入图像帧中的格式不同。接下来将在Denoise实用程序函数中处理帧转换。

 def Denoise(self, torch_cuda_frame, tnr_strength=1.0): vpi_input_frame = vpi.asimage(torch_cuda_frame, format=self.vpi_image_format) with vpi.Backend.CUDA: vpi_input_frame = vpi_input_frame.convert(vpi.Format.NV12_ER) vpi_input_frame = self.tnr(vpi_input_frame, preset=vpi.TNRPreset.OUTDOOR_LOW_LIGHT, strength=tnr_strength) vpi_input_frame.convert(out=self.vpi_output_frame) return self.vpi_output_frame

最后一个函数执行输入图像帧的实际清理。此函数用于从基于 PyTorch 的输入 CUDA 帧中移除噪声,返回基于 VPI 的输出 CUDA 帧。

首先使用 PyTorch 函数将 PyTorch vpi.asimage帧转换为 VPI 。torch_cuda_frame与vpi_input_frame共享相同的内存空间:即不涉及内存拷贝。

接下来,将输入帧从给定的输入格式( BGR8 )转换为 CUDA 中的 NV12 \ u ER 进行处理。

使用 TNR 预设OUTDOOR_LOW_LIGHT和给定的 TNR 强度,在转换后的输入帧上执行 TNR 算法。

清理后的输入帧( TNR 算法的输出)被转换回原始格式( BGR8 ),并存储在基于 VPI 的 CUDA 输出帧中。

生成的输出帧将返回,以供 PyTorch 稍后使用。

使用 CUDA 阵列接口实现 VPI 和 PyTorch 之间的互操作性

最后,在主模块中定义一个MainWindow类。此类基于 PySide2 ,并为本例提供了图形用户界面。

窗口界面显示两个输出图像帧,一个仅使用 PyTorch 进行检测,另一个在 VPI TNR 后使用 PyTorch 。此外,窗口界面包含两个滑块,用于控制用于 PyTorch 检测的分数阈值和用于去除 VPI 时间噪声的 TNR 强度。

import cv2
import numpy as np
(...)
from PySide2 import QtWidgets, QtGui, QtCore
(...)
from vpitnr import VPITemporalNoiseReduction
from torchdetection import PyTorchDetection class MainWindow(QMainWindow): def __init__(self, input_path): super().__init__() #-------- OpenCV part -------- self.video_capture = cv2.VideoCapture(input_path) if not self.video_capture.isOpened(): self.Quit() self.input_width = int(self.video_capture.get(cv2.CAP_PROP_FRAME_WIDTH)) self.input_height = int(self.video_capture.get(cv2.CAP_PROP_FRAME_HEIGHT)) self.output_video_shape = (self.input_height * 2, self.input_width, 3) self.output_frame_shape = (self.input_height, self.input_width, 3) self.cv_output_video = np.zeros(self.output_video_shape, dtype=np.uint8) #-------- Main objects of this example -------- self.torch_detection = PyTorchDetection() self.vpi_tnr = VPITemporalNoiseReduction((self.input_width, self.input_height), 'BGR8') (...) def UpdateDetection(self): in_frame = self.cv_input_frame if in_frame is None: return cuda_input_frame = self.torch_detection.CreateCUDAFrame(in_frame) # -------- Top Frame: No VPI --------- cuda_tensor = self.torch_detection.ConvertToTensor(cuda_input_frame) self.torch_detection.DetectAndDraw(self.TopFrame(), cuda_tensor, 'Pytorch only (no VPI)', self.scores_threshold) # -------- Bottom Frame: With VPI --------- vpi_output_frame = self.vpi_tnr.Denoise(cuda_input_frame, self.tnr_strength) with vpi_output_frame.rlock_cuda() as cuda_frame: cuda_output_frame=self.torch_detection.ConvertFromVPIFrame(cuda_frame) cuda_tensor = self.torch_detection.ConvertToTensor(cuda_output_frame) self.torch_detection.DetectAndDraw(self.BottomFrame(), cuda_tensor, 'Pytorch + VPI TNR', self.scores_threshold) (...)

类的构造函数需要输入视频的路径。它使用OpenCV读取输入视频,并创建一个高度为输入视频两倍的输出视频帧。这用于存储两个输出帧,一个仅用于PyTorch输出,另一个用于VPI+ PyTorch 输出。

构造函数还为 PyTorch 检测和 VPI TNR 创建对象。在本文中,我们省略了创建图形用户界面小部件和处理其回调的代码。我们还省略了创建主窗口和启动应用程序的代码。有关 TNR code 这一部分的更多信息,请下载示例。

当有新的输入视频帧可用时,调用UpdateDetection函数,从 NumPy OpenCV 输入帧创建基于 PyTorch 的 CUDA 输入帧。然后将其转换为张量,以检测并绘制PyTorchDetection类。顶部帧的管道直接在输入视频帧中运行 PyTorch 检测。

底部帧的下一条管道首先对基于 PyTorch CUDA 的输入帧进行去噪。去噪后的输出是一个名为vpi_output_frame的基于 VPI 的 CUDA 帧,使用rlock_cuda函数在 CUDA 中锁定读取。此函数为cuda_frame对象中的 VPI CUDA 互操作性提供__cuda_array_interface__。该对象将转换为 PyTorch CUDA 帧,然后转换为张量。再次,对管道的结果调用 detect and draw 函数。第二条管道在 VPI 去噪功能之后运行PyTorchDetection。

结果

图 3 显示了在公共场所行人噪声输入视频上,无 VPI TNR 和有 VPI TNR 的 PyTorch 目标检测和跟踪的结果。正如您可以从带有注释的输出视频中看到的那样,在检测之前应用去噪可以改善检测和跟踪结果(右)。

图 3 PyTorch 无 VPI TNR 和(右)有 VPI TNR 的目标检测和跟踪(左)

视频帧右下角显示的每秒帧数( FPS )( 32.8 仅适用于 PyTorch , 32.1 适用于 VPI + PyTorch )表明,将 VPI 添加到 PyTorch 检测管道不会增加太多开销。这在一定程度上是由于避免了从 CUDA 内存到 CPU 内存的每帧超过 20Mb 的拷贝,这是通过使用__cuda_array_interface__启用的。

总结

在这篇文章中,我们以 PyTorch 对象检测和跟踪为例,展示了 VPI 和其他支持__cuda_array_interface__的库之间的互操作性。在目标检测和跟踪之前,您应用了 VPI 的时间噪声抑制来改进它。我们还证明了在 PyTorch 管道中添加 VPI 不会导致性能损失。

关于作者

Sandeep Hiremath 是NVIDIA 计算机视觉的首席技术产品经理。他是一位经验丰富的产品领导者,专长于计算机视觉、机器学习和嵌入式系统领域。在NVIDIA ,他负责为汽车、医疗保健、机器人和研究领域的开发人员提供一组计算机视觉和图像处理解决方案的产品愿景和战略。

André de Almeida Maximo 是 NVIDIA 的系统工程师,专注于嵌入式平台的软件。他曾在多家工业公司的研究中心工作,帮助塑造不同行业的人工智能。在空闲时间,安德烈喜欢跑步和阅读小说。

审核编辑:郭婷

  • 嵌入式
    +关注

    关注

    3705

    文章

    14988

    浏览量

    261562
  • gpu
    gpu
    +关注

    关注

    27

    文章

    2851

    浏览量

    116894
  • 计算机
    +关注

    关注

    16

    文章

    4873

    浏览量

    79224
收藏 人收藏

    评论

    相关推荐

    使用双SD卡数据存储策略提高工业系统的可靠性

      这一切都可以通过编程方式完成,并且可以完全配置以满足应用程序的需求。例如,通过设置关机和看门狗时....
    的头像 星星科技指导员 发表于 08-16 11:30 36次 阅读

    边缘设备中计算机视觉和语音的AI推理加速器应用

      SiFive 将 RISC-V 处理器 IP 引入其下一代 AI 推理加速器,为边缘设备中的计算....
    的头像 星星科技指导员 发表于 08-16 11:24 40次 阅读

    在Python中评估不同嵌入式算法的性能

      其次,如果在嵌入式系统上运行多个应用程序,这些其他应用程序可能会破坏目标应用程序,这也会增加算法....
    的头像 星星科技指导员 发表于 08-16 11:12 26次 阅读
    在Python中评估不同嵌入式算法的性能

    8点PyTorch提速技巧总结

    CPU的话尽量看主频比较高的,缓存比较大的,核心数也是比较重要的参数。显卡尽可能选现存比较大的,这样....
    发表于 08-16 09:50 35次 阅读

    嵌入式Linux调试变得更容易

      诸如用于自上而下探索性分析的高级概述等功能,包括进程交互、进程分叉、CPU 使用率、RAM 使用....
    发表于 08-16 09:48 35次 阅读
    嵌入式Linux调试变得更容易

    顶级FPGA和GPU的PK

    首先,文章使用GPU最擅长处理的工作负载:通用矩阵乘(GEMM)来跑GPU的benchmark(什么....
    发表于 08-16 09:22 25次 阅读

    释放边缘工作负载整合的全部潜力

      由于 5G 技术和 10+ GbE 网络,实时处理在触觉互联网环境中变得越来越重要,因此开发人员....
    的头像 星星科技指导员 发表于 08-16 09:19 38次 阅读

    关于单片机与嵌入式、操作系统与RTOS之间的那些事!

    乍一听,和我们的直觉有矛盾啊:那么高大上的设备,其中的控制逻辑一定很复杂,不用嵌入式系统怎么来完成那....
    发表于 08-16 09:18 39次 阅读

    模型有助于实现最大的运营效率

      为了推动行动或结果,非结构化数据通过 DeepStream 等处理模型运行,从而产生结构化数据。....
    的头像 星星科技指导员 发表于 08-16 09:16 26次 阅读

    嵌入式Linux上的以太网TSN简介

      引导加载程序是系统上电后运行的第一个代码,它处理基本的硬件初始化,并从嵌入式 Linux 系统中....
    发表于 08-16 09:14 45次 阅读
    嵌入式Linux上的以太网TSN简介

    使用加速WEKA加速机器学习模型

    最后,我们使用了 HIGGS 数据集 ,其中包含有关原子加速器运动学特性的数据。希格斯数据集的前 5....
    的头像 星星科技指导员 发表于 08-15 17:27 164次 阅读
    使用加速WEKA加速机器学习模型

    如何使用Eclipse玩转STM32(上)

    在嵌入式开发中,我们比较熟悉的是像Keil,IAR这些IDE(Integrated Developm....
    发表于 08-15 17:16 42次 阅读
    如何使用Eclipse玩转STM32(上)

    使用MineDojo构建具有一般能力的人工智能代理

      该关联分数可以作为奖励信号提供,以指导强化学习代理完成任务。对于示例任务“剪一只羊以获得羊毛”,....
    的头像 星星科技指导员 发表于 08-15 17:10 97次 阅读

    用NVIDIA Jetson Xavier NX构建四节点集群

    跟随大型超级计算机(如 NVIDIA DGX SuperPOD )的脚步,本文将引导您完成创建适合您....
    的头像 星星科技指导员 发表于 08-15 17:04 120次 阅读

    电子系统设计的模块化

      开发人员现在可以访问面向云的软件模块和工具,这些模块和工具可轻松与常见的网络堆栈和 RTOS 实....
    的头像 星星科技指导员 发表于 08-15 16:57 88次 阅读

    为NVIDIA MLPerf Training v2.0性能提供动力的全堆栈优化

      NVIDIA MLPerf v2.0 提交基于经验证的 A100 Tensor Core GPU....
    的头像 星星科技指导员 发表于 08-15 16:43 107次 阅读
    为NVIDIA MLPerf Training v2.0性能提供动力的全堆栈优化

    通过GPU内存访问调整提高应用程序性能

    在本文的所有代码示例中,大写变量都是编译时常量。 BLOCKDIMX 采用预定义变量 blockDi....
    的头像 星星科技指导员 发表于 08-15 16:24 98次 阅读

    如何在基于Arm的设备上运行游戏AI呢

    在本系列的第 2 部分中,我们展示了游戏 AI 代理是如何设计的。我们还展示了为 Dr Arm 的 Boss Battle 演示生成的神经网络...
    发表于 08-15 15:43 593次 阅读

    了解SOK的原理

      以上就是 SOK 将数据并行转化为模型并行再转回数据并行的过程,这整个流程都被封装在了 SOK ....
    的头像 星星科技指导员 发表于 08-15 15:22 44次 阅读
    了解SOK的原理

    开源Zephyr和MCUboot堆栈中的26个缺陷

      一般来说,当嵌入式设备和用于构建物联网设备的相关组件的设计者和制造商认真对待安全性时,物联网设备....
    的头像 星星科技指导员 发表于 08-15 15:12 65次 阅读
    开源Zephyr和MCUboot堆栈中的26个缺陷

    Raspberry Pi Bash Shell 脚本简介

      抛开潜在的麻烦不谈,Bash 可以是一个非常强大的工具,让您可以自动执行各种任务。在即将发表的文....
    的头像 星星科技指导员 发表于 08-15 15:08 38次 阅读
    Raspberry Pi Bash Shell 脚本简介

    新型transformer模型实现3D医学图像分析最新基准

      Swin UNETR 体系结构在使用变压器的医疗成像方面提供了急需的突破。鉴于医学成像需要快速构....
    的头像 星星科技指导员 发表于 08-15 15:01 114次 阅读
    新型transformer模型实现3D医学图像分析最新基准

    AI正在改变企业管理边缘应用程序的方式

      为了帮助企业快速起步,我们创建了 NVIDIA LaunchPad ,这是一个免费的程序,提供对....
    发表于 08-15 14:52 71次 阅读
    AI正在改变企业管理边缘应用程序的方式

    并非所有开发板都是平等创建的

      第三个要求很重要,因为设计师经常需要自谋生路。他们得到了一个开发工具包,然后被期望完全自行设计。....
    的头像 星星科技指导员 发表于 08-15 14:47 46次 阅读

    iWave i.MX8M迷你板可实现低成本的面部识别系统

      iWave i.MX8M Mini 板 与 NXP eIQ OpenCV 机器学习软件集成, 可....
    的头像 星星科技指导员 发表于 08-15 14:44 45次 阅读
    iWave i.MX8M迷你板可实现低成本的面部识别系统

    简述基于HTTP协议实现WebClient软件包的工作原理

    工作原理 WebClient 软件包主要用于在嵌入式设备上实现 HTTP 协议,软件包的主要工作原理基于 HTTP 协议实现,如下图...
    发表于 08-15 14:27 267次 阅读

    使用工业SMARC套件加速原型设计和开发

      当从原型转向生产时,团队可以使用 I-Pi 载体的开源规范作为起点,创建自己的载体,只包含所需的....
    的头像 星星科技指导员 发表于 08-15 14:24 45次 阅读
    使用工业SMARC套件加速原型设计和开发

    用于加速嵌入式视觉和推理的开放标准

      OpenCL 最初是为在高端 PC 和超级计算机硬件上执行而设计的,但在与 OpenVX 类似的....
    的头像 星星科技指导员 发表于 08-15 14:13 151次 阅读
    用于加速嵌入式视觉和推理的开放标准

    Windows CE中的内存泄漏问题

    很多实时嵌入式设备是长时间不间断运行的,即使是少许的内存泄漏,也会积少成多,对嵌入式系统带来灾难性的....
    的头像 嵌入式应用开发 发表于 08-15 09:47 100次 阅读
    Windows CE中的内存泄漏问题

    MCM应用于GPU还需要多久

    消费用户市场,普通用户都能用上16核甚至64核处理器的PC。这可不是单纯堆核心就完事儿的。以当前CP....
    的头像 FPGA之家 发表于 08-14 14:50 124次 阅读

    NVIDIA发布NeuralVDB 可将内存占用量减少高达100倍

    NeuralVDB 可将烟雾、云和其他稀疏体积数据的内存占用量减少多达 100 倍。
    的头像 NVIDIA英伟达企业解决方案 发表于 08-14 10:58 242次 阅读

    使用NVIDIA Omniverse开展数字孪生教学

    Donald Greenberg 在康奈尔大学的办公室里度过了 54 年的计算职业生涯,他在这间办公....
    的头像 NVIDIA英伟达企业解决方案 发表于 08-14 10:51 127次 阅读

    量子处理单元(QPU)的定义及工作原理

    量子处理单元(QPU)是量子计算机的“大脑”。它利用电子或光子等粒子的行为来进行特定类型的计算,其速....
    发表于 08-14 10:33 51次 阅读

    C语言-一维指针定义与使用

    指针在很多书本上都是当做重点来介绍,作为C语言的灵魂,项目里指针无处不在。 这篇文章介绍指针的基本用....
    的头像 DS小龙哥-嵌入式技术 发表于 08-14 10:02 134次 阅读

    计算机仿真技术发展方向

    仿真技术是利用计算机并通过建立模型进行科学实验的一门多学科综合性技术。它是它具有经济、可靠、实用、安....
    的头像 传感器技术 发表于 08-14 09:11 64次 阅读

    嵌入式Linux开发-根文件系统本地挂载

    上篇文章介绍了根文件系统的制作与NFS网络挂载,这篇文章介绍内核如何从本地挂载根文件系统,完成系统启....
    的头像 DS小龙哥-嵌入式技术 发表于 08-14 09:10 180次 阅读

    嵌入式Linux开发-根文件系统NFS网络挂载

    根文件系统是Linux内核启动之后挂载的第一个文件系统,上篇文章里已经介绍过,如何使用busybox....
    的头像 DS小龙哥-嵌入式技术 发表于 08-14 08:57 73次 阅读

    嵌入式Linux开发-编写自定义uboot命令

    U-Boot的命令为用户提供了交互功能,并且已经实现了几十个常用的命令,前面两篇文章介绍了uboot....
    的头像 DS小龙哥-嵌入式技术 发表于 08-14 08:56 78次 阅读

    嵌入式Linux开发-busybox根文件系统制作

    根文件系统是内核启动时所挂载mount的第一个文件系统,系统引导启动程序会在根文件系统挂载之后从中把....
    的头像 DS小龙哥-嵌入式技术 发表于 08-14 08:51 78次 阅读

    嵌入式初级工程师全套学习资料包(第一阶段)

    本期资料分享为linux开发全套学习资料包,整理了嵌入式学习必备资料和工具包,大家可以配合下方的三个学习阶段路线进行学习,希望...
    发表于 08-12 15:37 8279次 阅读
    嵌入式初级工程师全套学习资料包(第一阶段)

    全网通DTU/Cat1 DTU/MQTT DTU/嵌入式DTU的定义

    解析爱陆通全网通DTU,cat1 DTU,opencup DTU,低成本DTU,MQTT DTU,嵌....
    的头像 asdxfy 发表于 08-12 14:42 67次 阅读

    嵌入式处理器(Embedded Processor)

    嵌入式处理器设计原则是,仅保留满足应用需求的功能并尽可能简化设计,同时根据应用场景的不同在处理能力,....
    的头像 倩倩 发表于 08-12 14:39 70次 阅读

    壁仞科技发布首款通用GPU芯片 苹果智能指环专利曝光

    近日,亚马逊宣布将以约17亿美元的价格收购真空吸尘器制造商iRobot。根据公告,亚马逊表示,将以每....
    的头像 Camsense 发表于 08-12 13:50 183次 阅读

    芯动科技风华2号GPU与麒麟操作系统完成互认证

    近期,由芯动科技(INNOSILICON)自主研发的“风华2号”GPU与银河麒麟桌面操作系统全面完成....
    的头像 芯动科技Innosilicon 发表于 08-12 11:37 177次 阅读

    NVIDIA Studio技术如何加速创意工作流

    编辑注:本文是 NVIDIA Studio 创意加速系列的一部分,该系列旨在介绍一些特邀艺术家、提供....
    的头像 NVIDIA英伟达企业解决方案 发表于 08-12 11:21 168次 阅读

    NVIDIA Instant NeRF赢得SIGGRAPH最佳论文

    世界各地的开发者和创作者下载了来自 NVIDIA Research 的最新代码,以使用 2D 图像创....
    的头像 NVIDIA英伟达企业解决方案 发表于 08-12 11:10 173次 阅读

    Device Studio应用实例之BDF(上)

    Device Studio(简称:DS)作为鸿之微的材料设计与仿真软件,能够进行电子器件的结构搭建与....
    的头像 鸿之微 发表于 08-12 10:38 117次 阅读

    提高基于Linux的网络连接系统的安全性

      所描述的服务和方法使用 IPv4 协议。IPv6 协议的安全配置被忽略,这使得保持启用是不安全的....
    的头像 星星科技指导员 发表于 08-12 10:34 255次 阅读

    IP平台支持云连接设备开发

      越来越广泛的高度便携应用平台,如 Linux、Android 和复杂的实时操作系统 (RTOS)....
    的头像 星星科技指导员 发表于 08-12 10:27 39次 阅读

    RTOS实时管理应用软件的开发挑战

      在开始内部软件开发项目之前,开发人员应该花时间分析他们的系统需求、开发计划、软件支持、可扩展性、....
    发表于 08-12 10:25 52次 阅读
    RTOS实时管理应用软件的开发挑战

    评估开源的注意事项

      总而言之,所有这些问题很容易复合,从而在任何嵌入式开发过程中引入重大问题。这并不是说开源不能成为....
    的头像 星星科技指导员 发表于 08-12 10:20 56次 阅读
    评估开源的注意事项

    基于开源软件构建产品的工作流程挑战

      确保开发团队了解并遵守与这些开源许可证相关的义务需要时间和精力。在尝试达到激进的产品开发里程碑时....
    的头像 星星科技指导员 发表于 08-12 10:13 187次 阅读
    基于开源软件构建产品的工作流程挑战

    每周精选 | 征文大赛精选技术文章合集,战“码”先锋第二期正式开启

    大家好,电子发烧友精选一周社区好帖推送给大家,同时欢迎大家留言推荐更多好帖子,一旦入选将获得电子发烧友月度vip奖励! 1、...
    发表于 08-12 10:08 7785次 阅读

    通过开放平台定制快速部署

      MultiTech 网关它是 2014 年底推出的系列之一,将有公开记录的硬件扩展槽。扩展接口是....
    的头像 星星科技指导员 发表于 08-12 09:55 60次 阅读

    使用SystemReady IR简化嵌入式Linux系统

    作为过去 16 年一直在构建嵌入式 Linux 系统的人,我为使用 Linux on Arm 构建的令人惊叹的产品感到自豪。然而,我也很关心每...
    发表于 08-11 16:06 994次 阅读

    【社区之星】祁佳琳:学习应当向下扎根,才能汲取向上生长的力量

    嘉宾介绍:祁佳琳(论坛号:),电气专业出身,从事车用传感器开发工作两年,喜欢分享开发过程中遇到的各种问题,全网粉丝5W,视...
    发表于 08-10 10:54 3291次 阅读
    【社区之星】祁佳琳:学习应当向下扎根,才能汲取向上生长的力量

    嵌入式RT-thread中初始化线程函数中(void *)entry的意义何在

    嵌入式RT-thread中初始化线程函数中(void  )entry的意义何在,为什么要使用(void )? ...
    发表于 08-09 10:17 319次 阅读

    AM335x继任者?AM6254性能解析

    ****一、AM335x VS AM62x **** 相较于经典的AM335x处理器,AM62x有着更丰富的功能以及更强大的其性能,参数对比如下:...
    发表于 08-08 14:59 1827次 阅读

    关于i.MX6ULL配置GPIO

    正如学习C语言时写的第一段代码都是“HelloWorld!”,接触一款新的处理器时往往是从点亮一个LED开始;而点亮一个LED,...
    发表于 08-05 10:37 2268次 阅读

    试用体验 | 飞凌嵌入式OK3568-C开发板测评

    OK3568-C开发板是飞凌嵌入式新推出的嵌入式开发板,采用核心板+底板的分体式设计,基于 Rockchip RK3568 处理器设计,该处...
    发表于 08-04 14:21 4851次 阅读