1D/2D/3D卷积详解

概述

1D/2D/3D卷积计算方式都是一样的,其中2D卷积应用范围最广。与全连接层相比,卷积层的主要优点是参数共享和稀疏连接,这使得卷积操作所需要学习的参数数量大大减少。卷积计算方式如下:
在这里插入图片描述

1D卷积

在这里插入图片描述
计算方式

1、图中的输入的数据维度为8,过滤器的维度为5。与二维卷积类似,卷积后输出的数据维度为8−5+1=4。

2、如果过滤器数量仍为1,输入数据的channel数量变为16,即输入数据维度为8×16。这里channel的概念相当于自然语言处理中的embedding,而该输入数据代表8个单词,其中每个单词的词向量维度大小为16。在这种情况下,过滤器的维度由5变为5×16,最终输出的数据维度仍为4。

3、如果过滤器数量为n,那么输出的数据维度就变为4×n。

应用领域

一维卷积常用于序列模型,自然语言处理领域

2D卷积

在这里插入图片描述
计算方式

1、图中的输入的数据维度为14×14,过滤器大小为5×5,二者做卷积,输出的数据维度为10×10(14−5+1=10)。

2、上述内容没有引入channel的概念,也可以说channel的数量为1。如果将二维卷积中输入的channel的数量变为3,即输入的数据维度变为(14×14×3)。由于卷积操作中过滤器的channel数量必须与输入数据的channel数量相同,过滤器大小也变为5×5×3。在卷积的过程中,过滤器与数据在channel方向分别卷积,之后将卷积后的数值相加,即执行10×10次3个数值相加的操作,最终输出的数据维度为10×10。

3、以上都是在过滤器数量为1的情况下所进行的讨论。如果将过滤器的数量增加至16,即16个大小为10×10×3的过滤器,最终输出的数据维度就变为10×10×16。可以理解为分别执行每个过滤器的卷积操作,最后将每个卷积的输出在第三个维度(channel 维度)上进行拼接。

应用领域

二维卷积常用于计算机视觉、图像处理领域

3D卷积

在这里插入图片描述
计算方式

1、假设输入数据的大小为a1×a2×a3,channel数为c,过滤器大小为f×f×f×c(一般不写channel的维度),过滤器数量为n。

2、基于上述情况,三维卷积最终的输出为(a1−f+1)×(a2−f+1)×(a3−f+1)×n。

应用领域

三维卷积常用于医学领域(CT影响),视频处理领域(检测动作及人物行为)

### STM32驱动YT8521芯片的方法 对于STM32单片机而言,要实现对YT8521以太网物理层(PHY)设备的支持,通常涉及几个关键方面:硬件连接、初始化设置以及数据传输处理。基于现有资源[^1],可以构建一个适用于STM32H743型号的非操作系统轮询模式下的DHCP客户端实例来说明如何操作。 #### 硬件接口配置 为了使能STM32与YT8521之间的通信,需确保两者通过MII/RMII接口正确相连。具体来说: - RMII_REF_CLK (来自PHY) - RMII_MDIO - RMII_MDC - RXD0, RXD1 (接收端口) - TX_EN, TXD0, TXD1 (发送端口) 这些信号线应当按照官方文档中的指导进行布板设计并焊接至相应管脚上。 #### 初始化过程 在软件层面,启动阶段应完成如下工作: ```c // 假设已经定义好了必要的外设句柄 `heth` 和 PHY 地址常量 `ETH_PHY_ADDRESS` /* Step 1: Enable clocks and reset the Ethernet MAC */ __HAL_RCC_ETH_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE(); /* For ETH pins */ /* Step 2: Configure GPIOs as alternate function push-pull */ static void MX_GPIO_Init(void){ // ...省略其他GPIO配置... } /* Step 3: Initialize HAL Library*/ HAL_Init(); /* Step 4: Configure the system clock to achieve higher performance */ SystemClock_Config(); /* Step 5: Initialize the Ethernet peripheral with default parameters */ if(HAL_ETH_Init(&heth)!= HAL_OK){ Error_Handler(); } else{ uint32_t phyregvalue=0; /* Read PHY ID register twice according to datasheet recommendation */ if((HAL_ETH_ReadPHYRegister(&heth, ETH_PHY_ADDRESS, PHY_IDR_LOW,&phyregvalue)==HAL_OK)&&\ ((phyregvalue & YT8521_ID_MASK)==YT8521_ID_VALUE)){ // 成功识别到YT8521 /* Perform additional configuration steps specific to this PHY chip here... */ /* Start Auto Negotiation process */ if(HAL_ETH_StartAutonegotiation(&heth)!= HAL_OK){ Error_Handler(); } while(__HAL_ETH_IS_FLAG_SET(&heth, ETH_FLAG_AUTONEGO_SUCCESS)== RESET); /* Get link status after negotiation completes successfully */ if(!__HAL_ETH_GET_LINK_STATUS(&heth)){ Error_Handler(); } else { printf("Link UP\n"); /* Now ready for data transmission/reception operations */ } } else { Error_Handler(); } } ``` 上述代码片段展示了从时钟使能到最后确认链路状态的一系列动作。值得注意的是,在实际应用中可能还需要针对特定需求调整某些寄存器位或参数值。 #### 数据收发流程 一旦完成了前面提到的基础准备工作之后,就可以利用标准库函数来进行网络包的发送和接收了。例如: ```c uint8_t buffer[64]; // 缓冲区大小取决于最大帧长度 struct eth_frame *frame=(void*)buffer; while(1){ /* Wait until a complete frame has been received into DMA SRAM buffers */ if (__HAL_ETH_DMA_RX_NOT_EMPTY (&heth)) { size_t length=__HAL_ETH_GetReceivedFrameSize(&heth); /* Copy incoming packet from internal memory to user space */ memcpy(frame,__HAL_ETH_GetRxBufferPointer(&heth),length); /* Process the received message here...*/ __HAL_ETH_DiscardCurrentPacket(&heth); // 清理当前已读取的数据包以便下次接收 } /* Prepare outgoing packets similarly using Tx descriptors etc.*/ } ``` 这段伪代码描述了一个简单的循环用于持续监听是否有新的消息到达,并对其进行适当解析;同时也提到了准备待发出的信息的方式。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值