当前位置: 首页 > news >正文

YOLOv5结合BiFPN,如何替换YOLOv5的Neck实现更强的检测能力?

一、BiFPN是什么?
1、什么是BiFPN
BiFPN是一种基于特征金字塔网络(FPN)和双向特征金字塔网络(BiFPN)的对象检测神经网络结构,它被用于提高目标检测的准确度和速度。在目标检测领域,FPN用于将不同分辨率的特征图进行融合,以便更好地捕捉对象的不同尺度和细节。然而,FPN只是在单向上进行融合,可能会导致低分辨率的特征图被忽略或过度压缩。因此,BiFPN被引入,以便更好地保留低分辨率特征图的细节信息。
在这里插入图片描述
BiFPN采用了双向金字塔结构,可以同时进行向上和向下的特征融合。通过不断地迭代,BiFPN可以有效地提高特征图的质量,并捕捉对象的多尺度信息。BiFPN中使用的自适应特征选择机制可以自动确定哪些特征需要进一步融合,哪些不需要。

2、BiFPN的优势
在这里插入图片描述
BiFPN相较于其他结构有以下优势:

高效:BiFPN不仅可以提高目标检测的准确度,还可以在不增加过多计算成本的情况下提高速度。
灵活:BiFPN能够适应不同的输入分辨率和目标大小,可用于各种不同的目标检测任务。
多尺度信息:BiFPN可以捕捉到多尺度的对象信息,并保留低分辨率特征图的细节信息。
二、为什么要用BiFPN替换YOLOv5的Neck?
1、YOLOv5原有的Neck存在的问题
在这里插入图片描述
在YOLOv5的网络结构中,Neck部分主要由三个部分构成,即SPP、PAN和CSP。其中,PAN是整个Neck部分中最重要的一个部分,它可以将来自不同特征层的信息融合在一起,从而提高检测精度。

但是,PAN也存在一些问题,具体如下:

需要大量计算:由于PAN需要对不同特征层的信息进行融合,所以需要进行大量的计算。这不仅会增加训练和推理的时间成本,还会增加模型的计算复杂度,降低了模型的效率。
容易产生过拟合:由于PAN会将来自不同特征层的信息融合在一起,因此很容易产生过拟合的情况。当模型的训练数据不足或者训练数据中存在噪声时,就容易产生过拟合,从而导致检测结果不准确。
不够灵活:PAN是基于金字塔结构的,因此对输入分辨率和目标大小比较敏感,不够灵活。这意味着当输入分辨率和目标大小发生变化时,PAN需要重新训练,从而降低了模型的适用性。
2、BiFPN的适用场景
目标检测算法中的Neck(也称为特征融合层)是连接主干网络与检测头的关键组件。它能够将来自不同层级的特征图融合成更加丰富的特征,提供更全面的信息给检测头,从而提高目标检测算法的准确率。然而,传统的Neck存在一些问题,如融合不充分、计算量大等。针对这些问题,BiFPN成为了目标检测领域的一种热门的Neck结构,下面将对BiFPN的适用场景进行详细介绍。

(1)高效地利用不同分辨率的特征图

目标检测算法中,不同层级的特征图通常具有不同的分辨率,这些特征图提供了不同尺度的信息。在传统的Neck结构中,常常只选择其中一个分辨率的特征图作为输入,丢弃其他的特征图,这样会造成信息的损失。而BiFPN通过对不同分辨率的特征图进行多层级的融合,可以充分地利用不同分辨率的特征图提供的信息。另外,BiFPN通过自适应的权重调整机制,可以自动学习到每个特征图对最终的检测结果的重要性,从而更加精确地融合特征图。

(2)提高模型对特征细节的感知能力

在目标检测算法中,对于一些小目标或者遮挡严重的目标,需要模型有更强的特征细节感知能力才能进行准确的检测。而传统的Neck结构由于缺乏多层级的信息融合机制,常常无法充分地利用不同层级的特征图提供的信息,导致对目标细节的感知能力较弱。BiFPN通过对不同层级的特征图进行多次的信息融合,可以增强模型对特征细节的感知能力,从而提高检测算法的准确率。

(3)可以适用于不同的网络架构

BiFPN作为一种通用的特征融合结构,可以应用于不同的目标检测网络架构中。例如,它可以作为骨干网络EfficientNet的Neck结构,用于目标检测任务。另外,它也可以作为YOLOv5的Neck结构,提高YOLOv5在目标检测任务上的性能。

除此之外,BiFPN还可以与其他网络结构相结合,以满足不同的应用需求。例如,在一些特定的目标检测任务中,我们可能需要更深、更复杂的网络结构来提高检测性能,而这种情况下,我们可以将BiFPN与其他特征提取网络结构相结合,以构建更加强大的目标检测网络。

三、如何在YOLOv5中实现BiFPN
1、下载并替换BiFPN代码
首先,需要从GitHub上下载EfficientDet-Pytorch代码库,该库是一个基于PyTorch的EfficientDet实现,其中包含了BiFPN的实现。我们可以在该代码库中找到effdet文件夹,并将其中的bifpn.py文件拷贝到YOLOv5代码库的models文件夹中,用于替换原有的Neck实现。

2、修改配置文件
接下来,需要修改YOLOv5的配置文件,将Neck配置修改为BiFPN。

具体步骤如下:

打开YOLOv5的配置文件,通常为yolov5s.yaml,可以在YOLOv5代码库的models文件夹中找到该文件;
找到Neck配置,通常为如下代码段:

YOLOv5 neck

neck:

FPN or PAN, None for YOLOv3

type: FPN

in_channels: [256, 512, 1024]

out_channels: 256

将type字段的值修改为BiFPN,并将in_channels和out_channels字段的值根据实际需要进行调整,通常情况下可以保持默认值不变;
保存配置文件。
3、遇到的问题及解决方法
在实现BiFPN时,可能会遇到以下问题:

(1)缺少依赖包

如果在执行上述代码时出现缺少依赖包的错误,可以使用以下命令安装依赖包:

!pip install -r requirements.txt
(2)BiFPN的运行速度较慢

由于BiFPN比传统的Neck结构更加复杂,因此可能会导致模型的运行速度较慢。为了解决这个问题,我们可以使用以下方法:

使用GPU进行训练和推理
减少堆叠BiFPN的数量
调整epsilon值
四、BiFPN超参数调整
超参数是指在模型训练过程中需要手动设定的参数,如学习率、批大小等。在使用BiFPN时,需要对一些超参数进行调整以达到更好的效果。

1、学习率
学习率是模型训练过程中最为重要的超参数之一,它决定了模型在每一次迭代中更新参数的速度。在使用BiFPN时,需要根据实际情况对学习率进行调整。一般来说,可以先设置一个较大的学习率,然后通过观察训练损失的变化来调整学习率的大小。如果损失没有下降,说明学习率太大,需要减小学习率;如果损失下降缓慢,说明学习率太小,需要增大学习率。
在这里插入图片描述
下面是使用PyTorch进行学习率调整的示例代码:

import torch.optim as optim

定义模型和损失函数

model = …
criterion = …

定义优化器和初始学习率

optimizer = optim.SGD(model.parameters(), lr=0.1)

定义学习率调整器,每30个epoch将学习率除以10

scheduler = optim.lr_scheduler.StepLR(optimizer, step_size=30, gamma=0.1)

训练模型

for epoch in range(num_epochs):
for batch_idx, (data, target) in enumerate(train_loader):
# 前向传播、计算损失和反向传播

    # 更新参数optimizer.step()# 调整学习率scheduler.step()# 在验证集上测试模型,并记录损失和准确率
...

这里使用了optim.lr_scheduler.StepLR调整学习率,该调整器每隔一定步数将学习率乘以一个指定的因子(这里是0.1),从而实现学习率的下降。step_size参数指定了学习率下降的步数,这里是每30个epoch下降一次。如果损失没有下降,可以考虑将gamma参数设为一个更小的值,以减缓学习率的下降速度。如果损失下降缓慢,可以将gamma参数设为一个更大的值,以加速学习率的下降速度。

2、批大小
批大小是指在每一次模型训练中使用的样本数。批大小的设置通常需要平衡内存限制和训练效果。在使用BiFPN时,需要根据GPU内存大小和模型复杂度来确定合适的批大小。一般来说,批大小可以设置为32或64。
在这里插入图片描述

这里是一个示例代码,用于在训练过程中设置批大小为64:

定义训练批次大小

batch_size = 64

创建训练数据生成器

train_datagen = ImageDataGenerator(
rescale=1./255,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True)

train_generator = train_datagen.flow_from_directory(
train_dir,
target_size=(img_width, img_height),
batch_size=batch_size,
class_mode=‘binary’)
在上述代码中,我们使用ImageDataGenerator从训练数据目录中读取图像数据,并将每个批次的大小设置为64。注意,批大小需要根据训练数据的数量和GPU内存大小来设置,以达到最佳的训练效果。

3、正则化参数
正则化是防止模型过拟合的一种常用技术,通过在损失函数中引入正则项来约束模型的复杂度。在使用BiFPN时,需要根据实际情况调整正则化参数的大小。一般来说,可以先将正则化参数设为较小的值,然后通过观察训练损失和验证损失的变化来调整正则化参数的大小。
在这里插入图片描述
这里是一个使用PyTorch实现L2正则化的示例代码:

import torch.nn as nn

class Model(nn.Module):
def init(self, regularization=0.001):
super(Model, self).init()
self.regularization = regularization
self.fc1 = nn.Linear(10, 5)
self.fc2 = nn.Linear(5, 1)

def forward(self, x):x = self.fc1(x)x = nn.functional.relu(x)x = self.fc2(x)return xdef loss(self, y_pred, y_true):l2_regularization = 0.for param in self.parameters():l2_regularization += torch.norm(param, 2)return nn.functional.mse_loss(y_pred, y_true) + self.regularization * l2_regularization

在这个示例中,我们使用L2正则化对模型的权重进行约束。在模型的构造函数中,我们定义了一个名为regularization的参数,它控制了正则化的强度。在forward方法中,我们使用了PyTorch提供的nn.functional.relu函数作为激活函数,并使用nn.Linear定义了两个全连接层。在loss方法中,我们首先计算了所有参数的L2范数之和,并将其乘以正则化参数,然后将其添加到均方误差损失中,得到最终的损失函数。

要使用这个模型进行训练,我们可以使用以下代码:

import torch.optim as optim

model = Model(regularization=0.001)
optimizer = optim.Adam(model.parameters(), lr=0.001)

for epoch in range(num_epochs):
for x, y in data_loader:
y_pred = model(x)
loss = model.loss(y_pred, y)
optimizer.zero_grad()
loss.backward()
optimizer.step()
在这个示例中,我们使用Adam优化器对模型进行训练。在每一个训练迭代中,我们首先通过调用模型的loss方法计算出损失,然后使用优化器的zero_grad方法清除梯度,并调用backward方法计算梯度,最后使用step方法更新模型的参数。

相关文章:

YOLOv5结合BiFPN,如何替换YOLOv5的Neck实现更强的检测能力?

一、BiFPN是什么? 1、什么是BiFPN BiFPN是一种基于特征金字塔网络(FPN)和双向特征金字塔网络(BiFPN)的对象检测神经网络结构,它被用于提高目标检测的准确度和速度。在目标检测领域,FPN用于将不同…...

3.PyTorch——常用神经网络层

import numpy as np import pandas as pd import torch as t from PIL import Image from torchvision.transforms import ToTensor, ToPILImaget.__version__2.1.13.1 图像相关层 图像相关层主要包括卷积层(Conv)、池化层(Pool)…...

状态机的练习:按键控制led灯

设计思路: 三个按键控制led输出。 三个按键经过滤波(消抖),产生三个按键标志信号。 三个led数据的产生模块(流水,跑马,闪烁模块),分别产生led信号。 这六路信号(三路按键信号&am…...

看图学源码之 CopyOnWriteArraySet源码分析

基本介绍 使用内部CopyOnWriteArrayList进行所有操作的Set 特点 它最适合以下应用程序:集合大小通常较小、只读操作的数量远远多于可变操作,并且您需要在遍历期间防止线程之间的干扰。它是线程安全的。突变操作( add 、 set 、 remove等&…...

almaLinux centos8 下载ffmpeg离线安装包、离线安装

脚本 # 添加RPMfusion仓库 sudo yum install https://download1.rpmfusion.org/free/el/rpmfusion-free-release-8.noarch.rpm wget -ymkdir -p /root/ffmpeg cd /root/ffmpegwget http://rpmfind.net/linux/epel/7/x86_64/Packages/s/SDL2-2.0.14-2.el7.x86_64.rpmyum instal…...

CSS3 属性: transition过渡 与 transform动画

CSS3 提供了很多强大的功能,使开发人员可以创建更加吸引人的视觉效果,而不需要依赖于 JavaScript 或 Flash。其中,transition 和 transform 是两个常用的属性,它们分别用于创建平滑的过渡效果和元素的变形效果。下面我们将详细介绍…...

TCP通讯

第二十一章 网络通信 本章节主要讲解的是TCP和UDP两种通信方式它们都有着自己的优点和缺点 这两种通讯方式不通的地方就是TCP是一对一通信 UDP是一对多的通信方式 接下来会一一讲解 TCP通信 TCP通信方式呢 主要的通讯方式是一对一的通讯方式,也有着优点和缺点 …...

(NeRF学习)3D Gaussian Splatting Instant-NGP

学习参考: 3D Gaussian Splatting入门指南【五分钟学会渲染自己的NeRF模型,有手就行!】 三维重建instant-ngp环境部署与colmap、ffmpeg的脚本参数使用 一、3D Gaussian Splatting (一)3D Gaussian Splatting环境配置…...

uni-app 微信小程序之好看的ui登录页面(三)

文章目录 1. 页面效果2. 页面样式代码 更多登录ui页面 uni-app 微信小程序之好看的ui登录页面(一) uni-app 微信小程序之好看的ui登录页面(二) uni-app 微信小程序之好看的ui登录页面(三) uni-app 微信小程…...

Android 默认打开应用的权限

有项目需要客户要安装第三方软件,但是要手动点击打开权限,就想不动手就打开。 //安装第三方软件,修改方式 frameworks\base\services\core\java\com\android\server\pm\PackageManagerService.java //找到如下源码: //有三种方…...

2023年广东工业大学腾讯杯新生程序设计竞赛

E.不知道叫什么名字 题意:找一段连续的区间,使得区间和为0且区间长度最大,输出区间长度。 思路:考虑前缀和,然后使用map去记录每个前缀和第一次出现的位置,然后对数组进行扫描即可。原理:若 s …...

FFmpeg开发笔记(六)如何访问Github下载FFmpeg源码

学习FFmpeg的时候,经常要到GitHub下载各种开源代码,比如FFmpeg的源码页面位于https://github.com/FFmpeg/FFmpeg。然而国内访问GitHub很不稳定,经常打不开该网站,比如在命令行执行下面的ping命令。 ping github.com 上面的ping结…...

SpringCloud | Dubbo 微服务实战——注册中心详解

前言 「作者主页」:雪碧有白泡泡 「个人网站」:雪碧的个人网站 |Eureka,Nacos,Consul,Zookeeper在Spring Cloud和Dubbo中实战 引言 在项目开发过程中,随着项目不断扩大,也就是业务的不断增多,我们将采用集群&#xf…...

PostGIS学习教程十一:投影数据

PostGIS学习教程十一:投影数据 地球不是平的,也没有简单的方法把它放在一张平面纸地图上(或电脑屏幕上),所以人们想出了各种巧妙的解决方案(投影)。 每种投影方案都有优点和缺点,一…...

jQuery ajax读取本地json文件 三级联动下拉框

步骤 1:创建本地JSON文件 {"departments": [{"name": "会计学院","code": "052"},{"name": "金融学院","code": "053"},{"name": "财税学院",&qu…...

Kubernetes(K8s 1.27.x) 快速上手+实践,无废话纯享版(视频笔记)

视频源:1.03-k8s是什么?_哔哩哔哩_bilibili 1 基础知识 1.1 K8s 有用么? K8s有没有用 K8s要不要学? 参考资料: https://www.infoq.com/articles/devops-and-cloud-trends-2022/?itm_sourcearticles_about_InfoQ-trends-report…...

深度学习实战66-基于计算机视觉的自动驾驶技术,利用YOLOP模型实现车辆区域检测框、可行驶区域和车道线分割图

大家好,我是微学AI,今天给大家介绍一下深度学习实战66-基于计算机视觉的自动驾驶技术,利用YOLOP模型实现车辆区域检测框、可行驶区域和车道线分割图。本文我将介绍自动驾驶技术及其应用场景,并重点阐述了基于计算机视觉技术下的自动驾驶。自动驾驶技术是一种利用人工智能和…...

Stable Diffusion 系列教程 - 1 基础准备(针对新手)

使用SD有两种方式: 本地: 显卡要求:硬件环境推荐NVIDIA的具有8G显存的独立显卡,这个显存勉勉强强能摸到门槛。再往下的4G可能面临各种炸显存、炼丹失败、无法生成图片等各种问题。对于8G显存,1.0模型就不行&#xff0…...

听GPT 讲Rust源代码--src/tools(8)

File: rust/src/tools/rust-analyzer/crates/ide-assists/src/handlers/add_missing_match_arms.rs 在Rust源代码中,rust-analyzer是一个Rust编程语言的语言服务器。它提供了代码补全、代码重构和代码导航等功能来帮助开发者提高编码效率。 在rust-analyzer的代码目…...

Linux硬链接和软连接是什么?

在Linux操作系统中,文件管理是一个基本且重要的概念。其中,软链接(Symbolic Link)和硬链接(Hard Link)是文件系统中两种不同类型的链接方式,它们在文件管理和操作中扮演着重要的角色。软链接 软…...

LangChain 23 Agents中的Tools用于增强和扩展智能代理agent的功能

LangChain系列文章 LangChain 实现给动物取名字,LangChain 2模块化prompt template并用streamlit生成网站 实现给动物取名字LangChain 3使用Agent访问Wikipedia和llm-math计算狗的平均年龄LangChain 4用向量数据库Faiss存储,读取YouTube的视频文本搜索I…...

VS2015编译GDAL3.2.0+opencl+C#

参考借鉴https://www.cnblogs.com/litou/p/15004877.html 参考借鉴https://www.cnblogs.com/xiaowangba/p/6313903.html 参考借鉴gdal、proj、geos、sqlite等在VS2015下编译和配置_vs2015编译sqlite3-CSDN博客 参考借鉴Windows下GDAL3.1.2编译 (VS2015)_gdal windows编译-CS…...

3、Linux_系统用户管理

1.Linux 用户管理 1.1概述 Linux系统是一个多用户多任务的操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。root用户是系统默认创建的管理员账号。 1.2添加用户 语法 useradd […...

C语言指针详解上

1 野指针 int main01(){//野指针就是没有初始化的指针,指针的指向是随机的,不可以 操作野指针//int a 0;//指针p保存的地址一定是定义过的(向系统申请过的)int *p;//野指针*p 200;printf("%d\n",*p);system("pause");return 0;}2 空指针 空指针的作用…...

力扣面试150题 | 27.移除元素

力扣面试150题 | 27.移除元素 题目描述解题思路代码实现复杂度分析 题目描述 27.移除元素 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必…...

JAVA 通过get,post访问远程接口

get请求 参数拼接在url ?namevalue&sexvalue // httpurlhttp:127.0.0.1/project public static String doGet(String httpurl){HttpURLConnection connection nul;Inputstream is null;BufferedReader br null;String result null;//返回结果字…...

Spark例子

Spark例子 以下是一个简单的AI Spark例子: 假设我们有一个数据集,包含房屋大小、卧室数量和售价。我们想使用Spark来预测房屋售价。 首先,我们需要导入所需的库和数据。在这个例子中,我们将使用Pyspark。 python from pyspark…...

linux下ls和df卡死

1. strace看下卡在哪里 https://lokie.wang/article/43 strace ls strace df -h 2. 原因 https://segmentfault.com/a/1190000040620740 3. fuser 和 umount都不行,最后只能重启 重启机器还起不来了垃圾...

iOS(swiftui)——系统悬浮窗( 可在其他应用上显示,可实时更新内容)

因为ios系统对权限的限制是比较严格的,ios系统本身是不支持全局悬浮窗(可在其他app上显示)。在iphone14及之后的iPhone机型中提供了一个叫 灵动岛的功能,可以在手机上方可以添加一个悬浮窗显示内容并实时更新,但这个功能有很多局限性 如:需要iPhone14及之后的机型且系统…...

css弹窗动画效果,示例弹窗从底部弹出

从底部弹出来,有过渡动画效果 用max-height可以自适应内容的高度,当内容会超过最大高度时可以在弹窗里加个scroll-view 弹窗不能用v-if来隐藏,不然transition没效果,transition只能对已有dom元素起效果,所以用透明和v…...

STM32CubeIDE(CUBE-MX hal库)----RTC时钟,时钟实时显示

系列文章目录 STM32CubeIDE(CUBE-MX hal库)----初尝点亮小灯 STM32CubeIDE(CUBE-MX hal库)----按键控制 STM32CubeIDE(CUBE-MX hal库)----串口通信 STM32CubeIDE(CUBE-MX hal库)----定时器 STM32CubeIDE(CUBE-MX hal库)----蓝牙模块HC-05(详细配置) 前言…...

ubuntu 安装Nvidia驱动

官网下载 sudo bash NVIDIA。。。。。跟着b站机器人工匠阿杰即可。...

『亚马逊云科技产品测评』活动征文|基于亚马逊云EC2搭建PG开源数据库

授权声明:本篇文章授权活动官方亚马逊云科技文章转发、改写权,包括不限于在 Developer Centre, 知乎,自媒体平台,第三方开发者媒体等亚马逊云科技官方渠道 亚马逊EC2云服务器(Elastic Compute Cloud)是亚马…...

【开题报告】基于J2EE的高校水电费管理系统的设计与实现

1.选题背景 随着高校规模的扩大和信息化建设的深入,学生宿舍的水电费管理成为一项复杂而重要的任务。传统的水电费管理方式通常依赖于人工操作,存在着管理效率低下、数据处理繁琐、费用统计不准确等问题。因此,设计和实现一款基于J2EE的高校…...

Revisiting Proposal-based Object Detection阅读笔记

Revisiting Proposal-based Object Detection阅读笔记 论文地址:link Abstract For any object detector, the obtained box proposals or queries need to be classified and regressed towards ground truth boxes. 对于任何物体检测器来说,获得的…...

Docker部署NFS服务

创建基础镜像 mkdir /data/nfs -p chmod 755 /data/nfs# NFS默认端口: 111、2049、20048 docker run -d \ --privileged \ --name nfs_server \ -p 111:111/tcp \ -p 111:111/udp \ -p 2049:2049/tcp \ -p 2049:2049/udp \ -p 30001-30005:30001-30005/tcp \ -p 30001-30005:3…...

深度学习TensorFlow2基础知识学习后半部分

介绍几个重要操作: 1.范数 a tf.fill([1,2], value2.) b tf.norm(a)# 二范数#第二种计算方法 # 计算验证 a tf.square(a) log("a的平方:", a) a tf.reduce_sum(a) log("a平方后的和:", a) b tf.sqrt(a) log("a平方和后开根号:"…...

电脑系统重装Win10专业版操作教程

用户想给自己的电脑重新安装上Win10专业版系统,但不知道具体的重装步骤。接下来小编将详细介绍Win10系统重新安装的步骤方法,帮助更多的用户完成Win10专业版的重装,重装后用户即可体验到Win10专业版系统带来的丰富功能。 准备工作 1. 一台正常…...

打包Python项目

打包Python项目 本教程将指导您如何打包一个简单的Python项目。它将 向您展示如何添加必要的文件和结构来创建包,如何 构建包,以及如何将其上传到Python包索引(PyPI)。 尖端 如果您在运行本教程中的命令时遇到问题,请…...

使用Python实现爬虫IP负载均衡和高可用集群

做大型爬虫项目经常遇到请求频率过高的问题,这里需要说的是使用爬虫IP可以提高抓取效率,那么我们通过什么方法才能实现爬虫IP负载均衡和高可用集群,并且能快速的部署并且完成爬虫项目。 通常在Python中实现爬虫ip负载均衡和高可用集群需要一…...

Jenkins+Maven+Gitlab+Tomcat 自动化构建打包,部署

环境准备 1、安装服务 Jenkins工具、环境、插件配置 全局变量配置 Manage Jenkins>tools>JDK 安装 安装插件 Deploy to container 安装此插件,才能将打好的包部署到tomcat上 配置国内mvn源 创建maven项目 1 2 3 4 5 6 7 8 9 10...

泰凌微(Telink)8258配置串口收发自定义数据

在官网下载SDK后(以Mesh SDK为例)使用Eclipse打开,对应MCU的配置文件在app_config_8258.h,默认的HCI接口是HCI_USE_NONE,如果改成HCI_USE_UART后可以通过串口收发数据,此时默认接收函数处理的是以Telink的协…...

入门低代码开发:快速构建应用程序的方法

一、什么是低代码 低代码开发是一种通过可视化建模和拖拽式设计工具来快速构建应用程序的方法。传统软件开发通常需要编写大量的代码,而低代码开发则提供了更高层次的抽象,使开发过程更加简单和高效。通过可视化界面,用户可以通过拖拽组件、配…...

常见客户端消息推送服务【Java后端】

客户端消息推送 1、推送服务 苹果 APNs(Apple Push Notification service) 谷歌 FCM(Firebase Cloud Messaging)GCM(Google Cloud Messaging) 第三方 个推(Getui)UniApp&#xff…...

C++11(下)

可变参数模板 C11的新特性可变参数模板能够创建可以接受可变参数的函数模板和类模板. 相比C98/03, 类模版和函数模版中只能含固定数量的模版参数, 可变模版参数无疑是一个巨大的改进, 然而由于可变模版参数比较抽象, 使用起来需要一定的技巧, 所以这块还是比较晦涩的.掌握一些基…...

深度学习与逻辑回归模型的融合--TensorFlow多元分类的高级应用

手写数字识别 文章目录 手写数字识别1、线性回归VS逻辑回归Sigmoid函数 2、逻辑回归的基本模型-神经网络模型3、多元分类基本模型4、TensorFlow实战解决手写数字识别问题准备数据集数据集划分 特征数据归一化归一化方法归一化场景 标签数据独热编码One-Hot编码构建模型损失函数…...

水库大坝安全监测参数与设备

智慧水利中,水库大坝的安全监测必不可少。做好水库大坝的安全监测,是确保水库大坝结构安全和预防灾害的重要手段。对于预防灾害、保护人民生命财产安全、优化工程管理、改进工程设计、保护环境资源和提高公众信任等方面有着重要的意义。 水利水库大坝安全…...

要求CHATGPT高质量回答的艺术:提示工程技术的完整指南—第 22 章:情感分析提示

要求CHATGPT高质量回答的艺术:提示工程技术的完整指南—第 22 章:情感分析提示 情感分析是一种可以让模型确定一段文字的情感基调或态度的技术,比如它是正面的、负面的还是中性的。 要在 ChatGPT 中使用情感分析提示,应向模型提…...

数据清洗、特征工程和数据可视化、数据挖掘与建模的主要内容

1.4 数据清洗、特征工程和数据可视化、数据挖掘与建模的内容 视频为《Python数据科学应用从入门到精通》张甜 杨维忠 清华大学出版社一书的随书赠送视频讲解1.4节内容。本书已正式出版上市,当当、京东、淘宝等平台热销中,搜索书名即可。内容涵盖数据科学…...

C++ STL容器与常用库函数

STL是提高C编写效率的一个利器 STL容器&#xff1a; 一、#include <vector> 英文翻译&#xff1a;vector &#xff1a;向量 vector是变长数组(动态变化)&#xff0c;支持随机访问&#xff0c;不支持在任意位置O(1)插入。为了保证效率&#xff0c;元素的增删一般应该在末尾…...