【光电智造】神经网络之CNN与RNN的关系

今日光电 2024-05-06 18:01

今日光电

     有人说,20世纪是电的世纪,21世纪是光的世纪;知光解电,再小的个体都可以被赋能。追光逐电,光赢未来...欢迎来到今日光电!




----追光逐电 光赢未来----

1、CNN介绍

CNN是一种利用卷积计算的神经网络。它可以通过卷积计算将原像素很大的图片保留主要特征变成很小的像素图片。本文以李宏毅老师ppt内容展开具体介绍。

1.1 Why CNN for Image

①为什么引入CNN ?

图片示意:给定一个图片放入全连接神经网络,第一个hidden layer识别这张图片有没有绿色出现?有没有黄色出现?有没有斜的条纹?第二个hidden layer结合第一个hidden layer的输出实现更复杂的功能,例如:如图如果看到直线+横线就是框框一部分,如果看到棕色+条纹就是木纹,如果看到斜条纹+绿色就是灰色类条纹一部分。再根据第二个hidden layer输出结果,如果某个神经元看到蜂巢就会activate,某个神经元如果看到人就会activate。

但是我们如果一般地用fully network(全连接)神经网络处理的话,我们会需要很多的参数,例如如果input的vector是个30000维,第一个hidden layer假设是1000个神经元,那么第一个hidden layer就会30000*1000个,数据量非常大,导致计算效率和准确率效果低,而引入CNN,主要就是解决我们这些问题,简化我们神经网络架构。因为 某些weight我们是用不到的,CNN会使用过滤手段(filter)将一些不需要的参数过滤掉,保留一些重要的参数做图像处理。

②为什么使用比较少的参数就足够进行图像处理 ?

三个特性:

  1. 大部分的patterns要比整张图片小,一个神经元不需要去观察整个图片,只需要观察图片的一小部分就能找到一个想要的pattern,例如:给定一张图片,第一个hidden layer的某个神经元找图像中的鸟的嘴,另一个神经元找鸟的爪子。如下图只需要看红色框不需要观察整张图就可以找到鸟嘴。
  1. 不同位置的鸟嘴只需要训练一个识别鸟嘴的参数就Ok了,不需要分别训练。

  2. 我们可以采用子样品来使图片变小,子样不会改变目标图像。

1.2 CNN架构图

1.1节的前两个property需要卷积计算,后一个池化层处理,具体下节介绍。

1.3 卷积层

1.3.1 重要参数

1.3.2 卷积计算

矩阵卷积计算如下:

计算如下:图像传入的是553的像素值,经过padding=1的填充构成773的像素值,卷积核是333的大小,2个卷积核,步数stride=2。注意这里的卷积核深度要核传入过来的像素值深度相同,当每次扫描到的蓝色位置数对应卷积核红色位置数位置相乘后相加得到绿色位置的数据。

像素数变化为:(n+2p-f)\s = (5+2-3)\2 + 1= 3得到332的数据,经过卷积输出的像素深度等于上一层输入的卷积核数目。将得的结果作为池化层的输入值。

卷积核大小选取往往是奇数。深度要和它的上一层输出像素值深度相同,如动图卷积核的选取是3*3*3,而输出像素值深度=本次卷积的卷积核数。这点不要混淆。

1.3.3 卷积层与全连接层的关系

其实卷积就是将全连接层的一些weight拿掉,卷积层计算输出的结果,其实就是全连接层的hidden layer输出的结果。如下图所示:

卷积没有考虑输入的全部特征,只和filter中经过的特征有关,如下:6*6的图像展开成36pixel,然后下一层只和输入层的9个pixel有关,没有连接全部,这样就会使用很少的参数,具体图解如下:

由上图也可发现,计算结果3和-1不像全连接网络那样全部都需要不同的weight,而这个3和-1的部分计算的weight相同,这就是所谓的参数共享(权值共享)

1.4 池化层

根据前一个卷积计算后的矩阵,再进行池化处理(将一个框框内的四个值合并一个值,可取最大值或者平均值),如下图:

经过一次卷积一次池化,将原来6x6的image转化成2x2的image

1.5 应用

主要使用pytorch框架来介绍卷积神经网络。

源代码:

torch.nn.Conv2d(
in_channels: int, #输入图像的通道数
out_channels: int, #卷积产生的输出通道数
kernel_size: Union[T, Tuple[T, T]], #卷积核大小
stride: Union[T, Tuple[T, T]] = 1#卷积的步数 默认:1
padding: Union[T, Tuple[T, T]] = 0#0填充添加到输入的两边 默认:0
dilation: Union[T, Tuple[T, T]] = 1#核元素之间的间距 默认:1
groups: int = 1#从输入通道到输出通道的阻塞链接数,默认:1
#groups:控制输入和输出之间的连接,输入和输出通道数必须被组整除,
#当groups=1:所有输入移交给所有输出
#当groups=2:相当于两个卷积层,一个看到一半的输入通道并产生一半的输出通道,将两个合并
#当groups=in_channels:每个通道都有自己的一组过滤器,其大小为out_channel/in_channel
bias: bool = True#将可学习的偏差添加到输出中 默认:true
padding_mode: str = 'zeros')
#注:kenerl_size,stride,padding,dilation参数类型可以是int,可以是tuple,当是tuple时,第一个int是高度维度,第二个是宽度维度。当是单个int时,高度宽度值相同

# 方形核和等步幅
m = nn.Conv2d(16333, stride=2)
# 非方形核和不等步幅和填充
m = nn.Conv2d(1633, (35), stride=(21), padding=(42))
# 非方形核和不等步幅和填充和扩展
m = nn.Conv2d(1633, (35), stride=(21), padding=(42), dilation=(31))
input = torch.randn(201650100)
output = m(input)

应用:此处采用的是VGG16,顺便介绍以下pytorch的torchsummary库,可以把网络模型打印出来,例如:

import torchvision.models as models
import torch.nn as nn
import torch
from torchsummary import summary

device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')

model = models.vgg16(pretrained=True).to(device)
print(model)

输出:

VGG(
  (features): Sequential(
    (0): Conv2d(364, kernel_size=(33), stride=(11), padding=(11))
    (1): ReLU(inplace)
    (2): Conv2d(6464, kernel_size=(33), stride=(11), padding=(11))
    (3): ReLU(inplace)
    (4): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    (5): Conv2d(64128, kernel_size=(33), stride=(11), padding=(11))
    (6): ReLU(inplace)
    (7): Conv2d(128128, kernel_size=(33), stride=(11), padding=(11))
    (8): ReLU(inplace)
    (9): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    (10): Conv2d(128256, kernel_size=(33), stride=(11), padding=(11))
    (11): ReLU(inplace)
    (12): Conv2d(256256, kernel_size=(33), stride=(11), padding=(11))
    (13): ReLU(inplace)
    (14): Conv2d(256256, kernel_size=(33), stride=(11), padding=(11))
    (15): ReLU(inplace)
    (16): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    (17): Conv2d(256512, kernel_size=(33), stride=(11), padding=(11))
    (18): ReLU(inplace)
    (19): Conv2d(512512, kernel_size=(33), stride=(11), padding=(11))
    (20): ReLU(inplace)
    (21): Conv2d(512512, kernel_size=(33), stride=(11), padding=(11))
    (22): ReLU(inplace)
    (23): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    (24): Conv2d(512512, kernel_size=(33), stride=(11), padding=(11))
    (25): ReLU(inplace)
    (26): Conv2d(512512, kernel_size=(33), stride=(11), padding=(11))
    (27): ReLU(inplace)
    (28): Conv2d(512512, kernel_size=(33), stride=(11), padding=(11))
    (29): ReLU(inplace)
    (30): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
  )
  (classifier): Sequential(
    (0): Linear(in_features=25088, out_features=4096, bias=True)
    (1): ReLU(inplace)
    (2): Dropout(p=0.5)
    (3): Linear(in_features=4096, out_features=4096, bias=True)
    (4): ReLU(inplace)
    (5): Dropout(p=0.5)
    (6): Linear(in_features=4096, out_features=1000, bias=True)
  )
)
model.classifier = nn.Sequential(
    *list(model.classifier.children())[:-1])    # remove last fc layer
print(model)
summary(model,(3,224,224))

输出:

----------------------------------------------------------------
        Layer (type)               Output Shape         Param #
================================================================
            Conv2d-1         [-164224224]           1,792
              ReLU-2         [-164224224]               0
            Conv2d-3         [-164224224]          36,928
              ReLU-4         [-164224224]               0
         MaxPool2d-5         [-164112112]               0
            Conv2d-6        [-1128112112]          73,856
              ReLU-7        [-1128112112]               0
            Conv2d-8        [-1128112112]         147,584
              ReLU-9        [-1128112112]               0
        MaxPool2d-10          [-11285656]               0
           Conv2d-11          [-12565656]         295,168
             ReLU-12          [-12565656]               0
           Conv2d-13          [-12565656]         590,080
             ReLU-14          [-12565656]               0
           Conv2d-15          [-12565656]         590,080
             ReLU-16          [-12565656]               0
        MaxPool2d-17          [-12562828]               0
           Conv2d-18          [-15122828]       1,180,160
             ReLU-19          [-15122828]               0
           Conv2d-20          [-15122828]       2,359,808
             ReLU-21          [-15122828]               0
           Conv2d-22          [-15122828]       2,359,808
             ReLU-23          [-15122828]               0
        MaxPool2d-24          [-15121414]               0
           Conv2d-25          [-15121414]       2,359,808
             ReLU-26          [-15121414]               0
           Conv2d-27          [-15121414]       2,359,808
             ReLU-28          [-15121414]               0
           Conv2d-29          [-15121414]       2,359,808
             ReLU-30          [-15121414]               0
        MaxPool2d-31            [-151277]               0
           Linear-32                 [-14096]     102,764,544
             ReLU-33                 [-14096]               0
          Dropout-34                 [-14096]               0
           Linear-35                 [-14096]      16,781,312
             ReLU-36                 [-14096]               0
          Dropout-37                 [-14096]               0
================================================================
Total params: 134,260,544
Trainable params: 134,260,544
Non-trainable params: 0
----------------------------------------------------------------
Input size (MB): 0.57
Forward/backward pass size (MB): 218.58
Params size (MB): 512.16
Estimated Total Size (MB): 731.32
----------------------------------------------------------------

2、RNN介绍

2.1 引言

每个订票系统都会有一个空位填充(slot filling),有些slot是Destination,有些slot是time of arrival,系统要知道哪些词属于哪个slot;例如:

I would like to arrive Taipei on November 2nd;
这里的Taipei就是Destination,November 2nd就是time of arrival;

采用普通的神经网络,将Taipei这个词丢入到网络中,当然在丢入之前要将其转化成向量表示,如何表示成向量?方法很多此处采用:1-of-N Encoding,表示方式如下:

其他词向量方式如下:

但是,如果有如下情况,系统就会出错。

问: 怎么办?使有时输入Taipei时,输出dest概率高,有时输入Taipei时输出出发地概率高?

答: 此时就要使我们的网络有“记忆”,能记住前面输入的数据。例如:Taipei是目的地时看到了arrive,Taipei是出发地时看到了leave。那么这种有记忆的网络就叫做:Recurrent Neural Network(RNN)

2.2 RNN简介

RNN的隐藏层的输出会存储在内存中,当下次输入数据时会使用到内存中存储的上次的输出。图解如下:

图中,同样的weight用同样的颜色表示。当然hidden layer可以有很多层;以上介绍的RNN是最简单的,接下来介绍加强版的LSTM;

2.3 RNN之LSTM

现在常用的内存(memory)是Long short-term内存。

当外部信息需要输入到memory时需要一个“闸门”——input gate,而input gate什么时候打开和关闭是被神经网络学到的,同理output gate也是神经网络学习的,forget gate也是如此。

所以LSTM有四个input,1个output。简图如下:

公式如下:

2.4 LSTM例子

图中x2 = 1将x1送入memory中,如果x2=-1就清空memory的数值,如果x3=1,就将memory中的数据输出。如上图,第一列,x2=0不送入memory,第二列x2=1,将此刻x1=3送入memory中(注意memory中的数据是x1的累加,例如第四列,x2=1,此时有x1=4,memory中=3,所以一起就是7)第五列发现x3=1,可以输出,所以输出memory中的值7.

结合LSTM简图如下:

假设进来的是第一列:x1=3,x2=1,x3=0步骤:g—Tanh: x1w1+x2w2+x3w3 = 3f—sigmod: x1w1+x2w2+x3w3=90 sigmod后=1算好f和g后传入input gate=3*1=3,forget gate = 1,代表不需要清0,x3=0,代表output gate锁上,输出的还是0。

2.5 LSTM实战

pytorch中封装好了LSTM网络,直接采用nn.lstm即可使用,例如

class QstEncoder(nn.Module):

    def __init__(self, qst_vocab_size, word_embed_size, embed_size, num_layers, hidden_size):

        super(QstEncoder, self).__init__()
        self.word2vec = nn.Embedding(qst_vocab_size, word_embed_size)
        self.tanh = nn.Tanh()
        self.lstm = nn.LSTM(word_embed_size, hidden_size, num_layers)
        self.fc = nn.Linear(2*num_layers*hidden_size, embed_size)     # 2 for hidden and cell states
    def forward(self, question):

        qst_vec = self.word2vec(question)                             # [batch_size, max_qst_length=30, word_embed_size=300]
        qst_vec = self.tanh(qst_vec)
        qst_vec = qst_vec.transpose(01)                             # [max_qst_length=30, batch_size, word_embed_size=300]
        _, (hidden, cell) = self.lstm(qst_vec)                        # [num_layers=2, batch_size, hidden_size=512]
        qst_feature = torch.cat((hidden, cell), 2)                    # [num_layers=2, batch_size, 2*hidden_size=1024]
        qst_feature = qst_feature.transpose(01)                     # [batch_size, num_layers=2, 2*hidden_size=1024]
        qst_feature = qst_feature.reshape(qst_feature.size()[0], -1)  # [batch_size, 2*num_layers*hidden_size=2048]
        qst_feature = self.tanh(qst_feature)
        qst_feature = self.fc(qst_feature)                            # [batch_size, embed_size]

        return qst_feature

3、CNN与RNN的区别

CNN与RNN区别链接如下,引用了这个博客作者总结,(https://blog.csdn.net/lff1208/article/details/77717149)具体如下。

DNN形成

为了克服梯度消失,ReLU、maxout等传输函数代替了sigmoid,形成了如今DNN的基本形式。结构跟多层感知机一样,如下图所示:

我们看到全连接DNN的结构里下层神经元和所有上层神经元都能够形成连接,从而导致参数数量膨胀。假设输入的是一幅像素为1K*1K的图像,隐含层有1M个节点,光这一层就有10^12个权重需要训练,这不仅容易过拟合,而且极容易陷入局部最优。

CNN形成

由于图像中存在固有的局部模式(如人脸中的眼睛、鼻子、嘴巴等),所以将图像处理和神将网络结合引出卷积神经网络CNN。CNN是通过卷积核将上下层进行链接,同一个卷积核在所有图像中是共享的,图像通过卷积操作后仍然保留原先的位置关系。

通过一个例子简单说明卷积神经网络的结构。假设我们需要识别一幅彩色图像,这幅图像具有四个通道ARGB(透明度和红绿蓝,对应了四幅相同大小的图像),假设卷积核大小为100*100,共使用100个卷积核w1到w100(从直觉来看,每个卷积核应该学习到不同的结构特征)。

用w1在ARGB图像上进行卷积操作,可以得到隐含层的第一幅图像;这幅隐含层图像左上角第一个像素是四幅输入图像左上角100*/100区域内像素的加权求和,以此类推。

同理,算上其他卷积核,隐含层对应100幅“图像”。每幅图像对是对原始图像中不同特征的响应。按照这样的结构继续传递下去。CNN中还有max-pooling等操作进一步提高鲁棒性。

注意到最后一层实际上是一个全连接层,在这个例子里,我们注意到输入层到隐藏层的参数瞬间降低到了100100100=10^6个!这使得我们能够用已有的训练数据得到良好的模型。题主所说的适用于图像识别,正是由于CNN模型限制参数了个数并挖掘了局部结构的这个特点。顺着同样的思路,利用语音语谱结构中的局部信息,CNN照样能应用在语音识别中。

RNN形成

DNN无法对时间序列上的变化进行建模。然而,样本出现的时间顺序对于自然语言处理、语音识别、手写体识别等应用非常重要。为了适应这种需求,就出现了大家所说的另一种神经网络结构——循环神经网络RNN。

在普通的全连接网络或CNN中,每层神经元的信号只能向上一层传播,样本的处理在各个时刻独立,因此又被成为前向神经网络(Feed-forward Neural Networks)。而在RNN中,神经元的输出可以在下一个时间段直接作用到自身,即第i层神经元在m时刻的输入,除了(i-1)层神经元在该时刻的输出外,还包括其自身在(m-1)时刻的输出!表示成图就是这样的:

为方便分析,按照时间段展开如下图所示:

(t+1)时刻网络的最终结果O(t+1)是该时刻输入和所有历史共同作用的结果!这就达到了对时间序列建模的目的。RNN可以看成一个在时间上传递的神经网络,它的深度是时间的长度!正如我们上面所说,“梯度消失”现象又要出现了,只不过这次发生在时间轴上。

所以RNN存在无法解决长时依赖的问题。为解决上述问题,提出了LSTM(长短时记忆单元),通过cell门开关实现时间上的记忆功能,并防止梯度消失,LSTM单元结构如下图所示:

除了DNN、CNN、RNN、ResNet(深度残差)、LSTM之外,还有很多其他结构的神经网络。如因为在序列信号分析中,如果我能预知未来,对识别一定也是有所帮助的。因此就有了双向RNN、双向LSTM,同时利用历史和未来的信息。

事实上,不论是哪种网络,他们在实际应用中常常都混合着使用,比如CNN和RNN在上层输出之前往往会接上全连接层,很难说某个网络到底属于哪个类别。不难想象随着深度学习热度的延续,更灵活的组合方式、更多的网络结构将被发展出来。

简单总结如下:

来源:新机器视觉



申明:感谢原创作者的辛勤付出。本号转载的文章均会在文中注明,若遇到版权问题请联系我们处理。


 

----与智者为伍 为创新赋能----


【说明】欢迎企业和个人洽谈合作,投稿发文。欢迎联系我们
诚招运营合伙人 ,对新媒体感兴趣,对光电产业和行业感兴趣。非常有意者通过以下方式联我们!条件待遇面谈
投稿丨合作丨咨询

联系邮箱:uestcwxd@126.com

QQ:493826566




评论
  • 大模型的赋能是指利用大型机器学习模型(如深度学习模型)来增强或改进各种应用和服务。这种技术在许多领域都显示出了巨大的潜力,包括但不限于以下几个方面: 1. 企业服务:大模型可以用于构建智能客服系统、知识库问答系统等,提升企业的服务质量和运营效率。 2. 教育服务:在教育领域,大模型被应用于个性化学习、智能辅导、作业批改等,帮助教师减轻工作负担,提高教学质量。 3. 工业智能化:大模型有助于解决工业领域的复杂性和不确定性问题,尽管在认知能力方面尚未完全具备专家级的复杂决策能力。 4. 消费
    丙丁先生 2025-01-07 09:25 111浏览
  • 村田是目前全球量产硅电容的领先企业,其在2016年收购了法国IPDiA头部硅电容器公司,并于2023年6月宣布投资约100亿日元将硅电容产能提升两倍。以下内容主要来自村田官网信息整理,村田高密度硅电容器采用半导体MOS工艺开发,并使用3D结构来大幅增加电极表面,因此在给定的占位面积内增加了静电容量。村田的硅技术以嵌入非结晶基板的单片结构为基础(单层MIM和多层MIM—MIM是指金属 / 绝缘体/ 金属) 村田硅电容采用先进3D拓扑结构在100um内,使开发的有效静电容量面积相当于80个
    知白 2025-01-07 15:02 140浏览
  • 彼得·德鲁克被誉为“现代管理学之父”,他的管理思想影响了无数企业和管理者。然而,关于他的书籍分类,一种流行的说法令人感到困惑:德鲁克一生写了39本书,其中15本是关于管理的,而其中“专门写工商企业或为企业管理者写的”只有两本——《为成果而管理》和《创新与企业家精神》。这样的表述广为流传,但深入探讨后却发现并不完全准确。让我们一起重新审视这一说法,解析其中的矛盾与根源,进而重新认识德鲁克的管理思想及其著作的真正价值。从《创新与企业家精神》看德鲁克的视角《创新与企业家精神》通常被认为是一本专为企业管
    优思学院 2025-01-06 12:03 155浏览
  •  在全球能源结构加速向清洁、可再生方向转型的今天,风力发电作为一种绿色能源,已成为各国新能源发展的重要组成部分。然而,风力发电系统在复杂的环境中长时间运行,对系统的安全性、稳定性和抗干扰能力提出了极高要求。光耦(光电耦合器)作为一种电气隔离与信号传输器件,凭借其优秀的隔离保护性能和信号传输能力,已成为风力发电系统中不可或缺的关键组件。 风力发电系统对隔离与控制的需求风力发电系统中,包括发电机、变流器、变压器和控制系统等多个部分,通常工作在高压、大功率的环境中。光耦在这里扮演了
    晶台光耦 2025-01-08 16:03 48浏览
  • 本文介绍Linux系统更换开机logo方法教程,通用RK3566、RK3568、RK3588、RK3576等开发板,触觉智能RK3562开发板演示,搭载4核A53处理器,主频高达2.0GHz;内置独立1Tops算力NPU,可应用于物联网网关、平板电脑、智能家居、教育电子、工业显示与控制等行业。制作图片开机logo图片制作注意事项(1)图片必须为bmp格式;(2)图片大小不能大于4MB;(3)BMP位深最大是32,建议设置为8;(4)图片名称为logo.bmp和logo_kernel.bmp;开机
    Industio_触觉智能 2025-01-06 10:43 92浏览
  • 根据Global Info Research项目团队最新调研,预计2030年全球封闭式电机产值达到1425百万美元,2024-2030年期间年复合增长率CAGR为3.4%。 封闭式电机是一种电动机,其外壳设计为密闭结构,通常用于要求较高的防护等级的应用场合。封闭式电机可以有效防止外部灰尘、水分和其他污染物进入内部,从而保护电机的内部组件,延长其使用寿命。 环洋市场咨询机构出版的调研分析报告【全球封闭式电机行业总体规模、主要厂商及IPO上市调研报告,2025-2031】研究全球封闭式电机总体规
    GIRtina 2025-01-06 11:10 120浏览
  • 根据环洋市场咨询(Global Info Research)项目团队最新调研,预计2030年全球无人机锂电池产值达到2457百万美元,2024-2030年期间年复合增长率CAGR为9.6%。 无人机锂电池是无人机动力系统中存储并释放能量的部分。无人机使用的动力电池,大多数是锂聚合物电池,相较其他电池,锂聚合物电池具有较高的能量密度,较长寿命,同时也具有良好的放电特性和安全性。 全球无人机锂电池核心厂商有宁德新能源科技、欣旺达、鹏辉能源、深圳格瑞普和EaglePicher等,前五大厂商占有全球
    GIRtina 2025-01-07 11:02 115浏览
  • PLC组态方式主要有三种,每种都有其独特的特点和适用场景。下面来简单说说: 1. 硬件组态   定义:硬件组态指的是选择适合的PLC型号、I/O模块、通信模块等硬件组件,并按照实际需求进行连接和配置。    灵活性:这种方式允许用户根据项目需求自由搭配硬件组件,具有较高的灵活性。    成本:可能需要额外的硬件购买成本,适用于对系统性能和扩展性有较高要求的场合。 2. 软件组态   定义:软件组态主要是通过PLC
    丙丁先生 2025-01-06 09:23 95浏览
  • 故障现象一辆2017款东风风神AX7车,搭载DFMA14T发动机,累计行驶里程约为13.7万km。该车冷起动后怠速运转正常,热机后怠速运转不稳,组合仪表上的发动机转速表指针上下轻微抖动。 故障诊断 用故障检测仪检测,发动机控制单元中无故障代码存储;读取发动机数据流,发现进气歧管绝对压力波动明显,有时能达到69 kPa,明显偏高,推断可能的原因有:进气系统漏气;进气歧管绝对压力传感器信号失真;发动机机械故障。首先从节气门处打烟雾,没有发现进气管周围有漏气的地方;接着拔下进气管上的两个真空
    虹科Pico汽车示波器 2025-01-08 16:51 56浏览
  • 在智能家居领域中,Wi-Fi、蓝牙、Zigbee、Thread与Z-Wave等无线通信协议是构建短距物联局域网的关键手段,它们常在实际应用中交叉运用,以满足智能家居生态系统多样化的功能需求。然而,这些协议之间并未遵循统一的互通标准,缺乏直接的互操作性,在进行组网时需要引入额外的网关作为“翻译桥梁”,极大地增加了系统的复杂性。 同时,Apple HomeKit、SamSung SmartThings、Amazon Alexa、Google Home等主流智能家居平台为了提升市占率与消费者
    华普微HOPERF 2025-01-06 17:23 195浏览
  • 每日可见的315MHz和433MHz遥控模块,你能分清楚吗?众所周知,一套遥控设备主要由发射部分和接收部分组成,发射器可以将控制者的控制按键经过编码,调制到射频信号上面,然后经天线发射出无线信号。而接收器是将天线接收到的无线信号进行解码,从而得到与控制按键相对应的信号,然后再去控制相应的设备工作。当前,常见的遥控设备主要分为红外遥控与无线电遥控两大类,其主要区别为所采用的载波频率及其应用场景不一致。红外遥控设备所采用的射频信号频率一般为38kHz,通常应用在电视、投影仪等设备中;而无线电遥控设备
    华普微HOPERF 2025-01-06 15:29 160浏览
  • 「他明明跟我同梯进来,为什么就是升得比我快?」许多人都有这样的疑问:明明就战绩也不比隔壁同事差,升迁之路却比别人苦。其实,之间的差异就在于「领导力」。並非必须当管理者才需要「领导力」,而是散发领导力特质的人,才更容易被晓明。许多领导力和特质,都可以通过努力和学习获得,因此就算不是天生的领导者,也能成为一个具备领导魅力的人,进而被老板看见,向你伸出升迁的橘子枝。领导力是什么?领导力是一种能力或特质,甚至可以说是一种「影响力」。好的领导者通常具备影响和鼓励他人的能力,并导引他们朝着共同的目标和愿景前
    优思学院 2025-01-08 14:54 55浏览
  • By Toradex 秦海1). 简介嵌入式平台设备基于Yocto Linux 在开发后期量产前期,为了安全以及提高启动速度等考虑,希望将 ARM 处理器平台的 Debug Console 输出关闭,本文就基于 NXP i.MX8MP ARM 处理器平台来演示相关流程。 本文所示例的平台来自于 Toradex Verdin i.MX8MP 嵌入式平台。  2. 准备a). Verdin i.MX8MP ARM核心版配合Dahlia载板并
    hai.qin_651820742 2025-01-07 14:52 102浏览
  • 本文介绍编译Android13 ROOT权限固件的方法,触觉智能RK3562开发板演示,搭载4核A53处理器,主频高达2.0GHz;内置独立1Tops算力NPU,可应用于物联网网关、平板电脑、智能家居、教育电子、工业显示与控制等行业。关闭selinux修改此文件("+"号为修改内容)device/rockchip/common/BoardConfig.mkBOARD_BOOT_HEADER_VERSION ?= 2BOARD_MKBOOTIMG_ARGS :=BOARD_PREBUILT_DTB
    Industio_触觉智能 2025-01-08 00:06 87浏览
  • 这篇内容主要讨论三个基本问题,硅电容是什么,为什么要使用硅电容,如何正确使用硅电容?1.  硅电容是什么首先我们需要了解电容是什么?物理学上电容的概念指的是给定电位差下自由电荷的储藏量,记为C,单位是F,指的是容纳电荷的能力,C=εS/d=ε0εrS/4πkd(真空)=Q/U。百度百科上电容器的概念指的是两个相互靠近的导体,中间夹一层不导电的绝缘介质。通过观察电容本身的定义公式中可以看到,在各个变量中比较能够改变的就是εr,S和d,也就是介质的介电常数,金属板有效相对面积以及距离。当前
    知白 2025-01-06 12:04 212浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦