Generative Model-Based Feature Knowledge Distillation for Action Recognition

标题:基于生成模型的特征知识蒸馏用于动作识别

源文链接:Generative Model-Based Feature Knowledge Distillation for Action Recognition| Proceedings of the AAAI Conference on Artificial Intelligenceicon-default.png?t=N7T8https://ojs.aaai.org/index.php/AAAI/article/view/29473

源码链接: aaai-24/Generative-based-KD (github.com)icon-default.png?t=N7T8https://github.com/aaai-24/Generative-based-KD

发表:AAAI-2024

摘要 

知识蒸馏(KD),一种在计算机视觉中广泛使用的技术,已经成为提高小型神经网络性能的事实标准。然而,在视频任务中,基于KD的主流方法主要集中在设计损失函数和融合跨模态信息上。这忽视了时空特征语义,导致模型压缩方面的进展有限。为了弥补这一差距,本文介绍了一种创新的基于生成模型的知识蒸馏框架,用于训练轻量级的学生模型。特别地,该框架分为两个步骤:首先是特征表示阶段,其中训练一个基于生成模型的注意力模块来表示特征语义;随后是基于生成的特征蒸馏阶段,包括生成蒸馏和注意力蒸馏,目的是使用生成模型来传递基于注意力的特征语义。通过在多种流行数据集上的综合实验,我们证明了所提方法在视频动作识别任务中的显著效果。此外,我们还在更复杂的视频动作检测任务的背景下验证了所提框架的有效性。我们的代码已公开可用,地址为:https://github.com/aaai-24/Generative-based-KD。

引言

近年来,各种深度学习技术在智能视频分析领域取得了显著的成功(Foo等人,2023;Yang等人,2022a)。特别地,动作识别作为智能视频分析中的一项关键任务,涉及将动作实例分类到相应的标签中。最近,动作识别的性能得到了实质性的提升(Sun等人,2022)。直观地看,一个更大的模型通常对应着更好的性能。这一观点促使许多研究人员设计复杂的骨干网络来捕捉以视频为中心的特征语义(例如,C3D(Xu、Das和Saenko,2017),I3D(Carreira和Zisserman,2017),S3D(Xie等人,2018))。这些努力在动作识别领域取得了令人称赞的结果。然而,部署一个更大的骨干网络引入了极高的资源和内存约束,使得它在资源有限的边缘设备上变得不切实际。为了解决这个问题,Hinton等人提出了知识蒸馏(KD)作为一种解决方案,它促进了从重型模型(教师模型)到轻量级模型(学生模型)的已学知识的转移

根据模型压缩的基本目标,知识蒸馏(KD)方法主要包括两种研究范式:基于logits的方法和基于特征的方法。基于logits的KD(Hinton, Vinyals, and Dean 2015; Li et al. 2023)涉及将大型教师模型压缩为更紧凑的学生模型,这通过传递来自教师模型输出的软标签(即“暗知识”)来实现。自2015年Romero等人引入该方法以来,比较评估始终验证了在各种任务(Zhao et al. 2022)中基于特征的KD方法的优越性(Xu et al. 2020; Zhang and Ma 2020; Yang et al. 2022c)。因此,学术界的关注明显转向了从模型中间层提取复杂特征中的知识。

然而,大多数基于特征的KD方法(Zhao et al. 2022; Zhang and Ma 2020; Xu et al. 2020)主要集中在设计各种损失函数以匹配特征图,忽视了变分特征语义的内在重要性。实际上,特别是在视频的背景下,特征本身包含强烈的语义信息(Quader et al. 2020),这主要来自于时间和空间的变化。这些特征语义在通过从教师模型转移特征变化来提高学生模型精度方面起着关键作用。遗憾的是,当前的方法往往忽视了这些语义,导致在视频任务中仅有微不足道的改进。因此,当前的KD方法主要适用于与图像相关的任务(Zhao et al. 2022; Yang et al. 2022b; Lin et al. 2022)。在视频动作识别领域,KD方法的主要焦点在于跨模态蒸馏,旨在提高模型的准确性(Liu et al. 2021; Thoker and Gall 2019; Dai, Das, and Bremond 2021)。

因此,在基于知识蒸馏(KD)的方法中,特别是在视频动作分析的背景下,针对压缩3D-CNN模型的研究领域出现了一个明显的空白。为了解决这些问题,我们提出了一种基于生成模型的特征知识蒸馏框架,用于视频动作识别。该框架能够在中间层之间有效地将特征语义从重型模型(教师模型)转移到轻量级模型(学生模型)。具体来说,我们提出的方法包含两个组件。首先,我们设计了一个特征表示模块,该模块利用基于生成的注意力模型在3D-CNN架构中获取特征语义。其次,我们构建了一个基于生成的KD模块,该模块包括生成蒸馏和注意力蒸馏两个过程。这个模块旨在从教师模型中提炼基于注意力的特征信息,如图1所示。生成蒸馏组件被定制为通过匹配重构特征来优化学生模型的特征表示模块,从而促进基于生成的注意力模型的学习。随后,注意力蒸馏过程被协调以通过匹配注意力图来转移基于注意力的特征语义,这以不变的基于注意力的特征分布为条件

图1:我们提出的框架包括两个阶段:阶段1增加了一个注意力模块来表示特征语义;阶段2构建了一个基于产生式的KD模块来从教师模型中提取特征知识

据我们所知,我们是首次考虑特征语义的时间变化并研究知识蒸馏(KD)中的生成模型机制的。我们设计了一个基于生成模型的知识蒸馏框架,有效提高了3D卷积神经网络(3D-CNN)模型的压缩性能。我们的主要贡献总结如下:

为了提取时空特征,我们设计了一个新颖的基于生成模型的注意力模块,以在3D-CNN架构内表示特征语义
我们构建了一个新框架,引入了利用生成模型来提炼基于注意力的特征的新概念。特别是,我们的知识蒸馏框架是首个在视频上压缩3D-CNN的框架,它使用生成模型来传递时空信息
• 通过广泛的实验,我们的方法在两个著名的动作识别数据集上展示了在各种网络架构中显著的性能提升。此外,我们还将我们的框架扩展到更复杂的任务——动作检测,这也提供了相当的性能提升。

相关工作

动作识别

大多数之前关于动作识别的卷积神经网络(CNN)架构可以分为两类:3D CNNs(Carreira 和 Zisserman 2017; Xu, Das, 和 Saenko 2017; Ji 等人 2012; Hara, Kataoka, 和 Satoh 2017)和部分 3D CNNs(Tran 等人 2018; Qiu, Yao, 和 Mei 2017; Xie 等人 2018)。3D CNNs 最初在(Carreira 和 Zisserman 2017; Tran 等人 2015)中被提出,它们将视频视为帧的堆叠,通过3D卷积核来学习动作的时空特征。此外,Carreira 和 Zisserman 提出了I3D(Carreira 和 Zisserman 2017),它通过基于3D卷积融合RGB和光流来捕获空间和时间信息。部分 3D CNNs 在(Tran 等人 2018; Qiu, Yao, 和 Mei 2017)中被提出,它们用深度可分离卷积替代了3D卷积以减少资源成本。同时,Xie 等人用2D卷积替代了3D卷积以降低计算复杂度。然而,3D CNNs消耗大量资源以达到高准确率,这使得它们不适合在资源受限的设备上部署。虽然部分 3D CNNs 的使用减轻了资源需求,但与功能完备的3D CNNs相比,它们仍然存在一定的准确率差距。

生成模型

近年来,生成模型(Goodfellow 等人 2014;Kingma 和 Welling 2014)通过与深度学习的结合得到了迅速发展。生成对抗网络(GAN,Goodfellow 等人 2014)最大化生成变量子集和识别网络输出之间的近似真实数据分布信息。然而,GAN 隐式地学习分布并缺乏样本多样性。变分自编码器(VAE,Kingma 和 Welling 2014)通过优化数据边缘似然性的变分下界来近似真实分布。然而,VAE 不适合建模多模态输出的分布(Sohn, Lee, 和 Yan 2015)。为了将注意力转移到指导知识蒸馏上,我们使用条件变分自编码器(Sohn, Lee, 和 Yan 2015)来建模基于注意力值的特征语义分布。

知识蒸馏

知识蒸馏最初由(Hinton, Vinyals, 和 Dean 2015)提出,它通过教师产生的软标签来转移输出概率分布。进一步地,Romero 等人提出了从倒数第二层蒸馏特征表示,称为特征知识蒸馏。Xu 等人提出了特征归一化知识蒸馏,以减少标签噪声的影响。此外,Zagoruyko 和 Komodakis 提出了注意力知识蒸馏,它试图匹配注意力图来传递特征知识。同时,还有将基于 logits 的方法与基于特征的方法相结合的努力(Zhao 等人 2020;Shen 等人 2019),所有这些方法的目标都是提高整体模型性能。然而,这些方法主要集中在对齐特征和注意力图上,因此可能忽略了潜在的特征语义

方法

在这一部分中,我们首先介绍了特征KD在动作识别任务中的原理。然后,我们给出了KD框架的框架,并介绍了两个子模块。

定义

特征蒸馏   知识蒸馏的理念是训练一个紧凑的学生模型以近似一个复杂教师模型的能力。具体来说,假设我们有一个预训练的教师模型T和一个未训练的学生模型S,它们在这项工作中都被参数化为神经网络。我们用F ∈ RT×C×HW来表示3D-CNN的输出特征图,其中T、C和HW分别代表时间、通道和空间维度。为了更好地说明,我们用FT和FS分别表示教师模型和学生模型某一层的特征图

对于特征知识蒸馏(KD),学生模型和教师模型之间的蒸馏距离是通过两个特征图来计算的:

\mathcal{L}_{KD}=\frac{1}{n}\|f(F_T)-f(F_S)\|_2^2,\quad(1)

其中f(·)是一个明确的映射函数,n是时间维度。学生模型被鼓励最小化目标函数LKD以模仿教师模型。然而,由于这种方式忽略了特征的语义,学生在动作识别中无法从教师那里学习到时序依赖关系

特征表示 对于动作识别任务,我们首先定义了一个注意力模块来表示特征的语义,这同时也能有效提高识别性能。我们学习了一个生成模型来通过利用特征F和动作类别C来优化注意力λ。为了简化问题,我们使用贝叶斯定理来转换优化目标:

\begin{aligned} \max_{\lambda\in[0,1]}\log p(\lambda|F,C)& =\max_{\lambda\in[0,1]}\log p\left(C|F,\lambda\right)+\log p\left(F|\lambda\right) \\ &+\log p\left(\lambda\right)-\log p\left(F,C,\lambda\right) \\ &\simeq\max_{\lambda\in[0,1]}\log p(C|F,\lambda)+\log p(\lambda|F), \end{aligned}(2)

在最后一步中,我们丢弃了常数项log p(F, C, λ)并将λ设为均匀分布。

正如等式(2)所示,当我们优化注意力值时,我们不仅使用特征语义和注意力来提高分类性能(第一项),还确保基于注意力的特征分布与原始特征分布一致(第二项)。

特征知识蒸馏

这项工作采用了特征知识蒸馏来帮助学生模型学习特征表示我们从训练好的教师模型中提取出以注意力图形式表达的语义,并要求学生模型去模仿它。我们的知识蒸馏框架的流程如图2所示,包含两个步骤(即生成蒸馏和注意力蒸馏)给定一个视频特征F,在第一步中,教师模型利用一个预训练的生成模型CVAE(条件变分自编码器)来传递特征和注意力的知识,以确保分类的准确性。在第二步中,教师会产生一个注意力图λ,它代表了教师模型的特征语义

图2:我们知识蒸馏(KD)框架的流程。我们的KD模型通过两个阶段交替进行训练。在第一阶段,生成蒸馏通过自重构损失LCVAE和生成蒸馏损失LKD−gen进行训练,以匹配重构特征。在第二阶段,注意力蒸馏通过表示损失Lrecon、注意力蒸馏损失LKD−att和分类损失Lclf进行更新,以提炼基于注意力的特征语义

生成蒸馏:为了重构特征语义,我们引入了一个生成蒸馏模块,通过从教师模型转移基于注意力的特征来实现。此外,条件变分自编码器(CVAE)通过学习特征图和注意力图之间的对应关系来有效地重构特征语义。具体来说,如图2(a)所示,我们冻结了学生模型和注意力模块,利用教师模型的CVAE来更新CVAE模块。为了更新CVAE,我们构建了一个基于动作的生成问题

p_\phi(F_t|\lambda_t)=\mathbb{E}_{p_\phi(z_t|\lambda_t)}[p_\phi(F_t|\lambda_t,z_t)],\quad(3)

其中zt是潜在变量,ϕ表示可学习的模型,pϕ(zt|λt)表示先验模型,而pϕ(Ft|λt, zt)是生成模型的后验模型,即解码过程。值得注意的是,潜在变量zt是从学习到的先验分布中采样的,这被设置为特征重构的过程。

在训练过程中,我们的目标是让学生模型学习教师模型重构的特征,这旨在拟合教师模型的分布并提高学生模型的重构质量。具体来说,我们提出了生成损失LKD−gen来优化特征重构:

\mathcal{L}_{KD-gen}=\|f^T(F^T,A^T)-f^S(F^S,A^S)\|_2^2,\quad(4)

其中S和T分别表示学生模型和教师模型,F表示特征图,A是注意力图,f(·)是基于注意力的重构特征函数。值得注意的是,我们在教师模型和学生模型的CVAE模块中设置了相同的输入,即学生模型的特征图和注意力图。相同的输入是为了让学生专注于教师基于注意力的特征重构,而不受不同模型提取的特征和注意力图差异的影响。在CVAE训练过程中,如图2(a)所示,我们的目标是最小化证据下界(ELBO)损失Lcvae:

\mathcal{L}_{cvae}=\log p_{\psi}(F_{t}|\lambda_{t},z_{t})+\alpha\cdot KL(q_{\phi}(z_{t}|F_{t},\lambda_{t})||p_{\psi}(z_{t}|\lambda_{t})),(5)

其中zt是潜在变量,α=0.1是一个经验超参数。

具体来说,如图3(a)所示,首先,我们使用编码器通过特征Ft和注意力λt生成中间变量zt,函数fz如下:
z=f_z\left(f_{fc_i}\left(\lambda_i,\theta_i\left(f_i\right)\right)\right),\quad(6)
其中ffci是线性模型,θi是一个1×1×1的3D卷积,旨在通过减少通道数并添加可学习模型参数来为fz连接λi。fz是中间变量z的均值和方差函数,用于生成潜在变量Z然后,我们使用解码器生成重构的特征图Fb,它利用潜在变量Z和注意力λ,如下:
\widehat{F}=\theta_i'\left(f_{fc_i}\left(Z,\lambda_i\right)\right),\quad(7)
其中θ′i是一个1×n×n(n是核大小)的3D反卷积,旨在通过增加通道数来生成重构的特征图\widehat{F}。我们使用Lcvae来衡量\widehat{F}和F之间的差异。

注意力蒸馏  如公式2所示,生成蒸馏(Generative Distillation)主要优化第一项logp(C∣F,λ),而本节主要关注第二项logp(λ∣F)。注意力(Attention)代表了视频的特征分布,因此学生模型可以通过学习注意力图来学习教师模型的表示能力(Quader 等人 2020;Zagoruyko 和 Komodakis 2017)。

具体来说,如图2(b)所示,我们冻结了条件变分自编码器(CVAE),通过利用注意力蒸馏来更新学生模型和注意力模块

对于视频特征F,我们使用注意力A来表示特征的语义,如下所示:

A=Sigmod(GN(f_{Conv1D}(F))),\quad(8)

其中,GN表示组归一化(Group Normalization)。

进一步,我们计算基于注意力的特征F′,如下所示:

F'=\sigma\times(A\times\theta(F)),\quad(9)

其中,θ(⋅)表示3D转置卷积(3D transposed convolution),σ是缩放因子,定义为:

\sigma=\frac{\|F\|}{\|A\times\theta(F)\|}.\quad(10)

如图2(b)所示,为了蒸馏注意力,我们提出了注意力蒸馏损失LKD−att​,定义为:

L_{KD-att}=\|A^T-A^S\|_2^2,\quad(11)

其中,AT​和AS​分别表示教师模型和学生模型的注意力图。

在训练过程中,对于动作识别,我们鼓励提高动作分类的能力。这相当于最小化以下损失

\begin{aligned}\mathcal{L}_{clf}=\sum_{c=1}^{C+1}-y_c(x)\log(p_c(x)),\quad&(12)\end{aligned}

其中,yc​(x)和pc​(x)分别表示真实标签和预测结果的动作概率分布

同时,如图3(b)所示,我们使用解码器(Decoder)来生成重构的特征图,其目标是在特征表示过程中保持基于注意力的特征的分布。这相当于最小化重构损失Lrecon​:

\begin{aligned}\mathcal{L}_{recon}&=-\log(\sum_{l=1}^{L}p_{\psi}\left(f_{t}|\lambda_{t},z_{t}\right))\\&&\text{(13)}\\&\simeq-\sum_{t=1}^{T}\log\left\{\frac{1}{L}\sum_{l=1}^{L}p_{\psi}\left(f_{t}|\lambda_{t},z_{t}^{(l)}\right)\right\}\\&\simeq\|f_{t}-f_{\psi}\left(\lambda_{t},z_{t}\right)\|^{2},\end{aligned}

其中,zt(l)​是由生成模型的编码器中的zt​和λt​生成的。特别地,按照(Shi等人 2020)的做法,在最后一步,我们设定L为1。

训练与推理 在我们提出的框架中,注意力模块需要基于注意力的特征作为输入。因此,如图2所示,我们考虑交替训练注意力模块和主干模块。如图2(a)所示,在第一阶段,我们冻结学生主干模型并激活CVAE模块,以通过从主干模型提取的特征和生成的注意力来优化生成蒸馏过程。第一阶段的整体损失函数如下:

\mathcal{L}_{GD}=\mathcal{L}_{CVAE}+\beta\cdot\mathcal{L}_{KD-gen},\quad(14)

其中,β是一个经验超参数,我们设定β=0.01。

如图2(b)所示,在第二阶段,我们冻结CVAE模块并激活学生主干模型,以通过基于注意力的重构特征、注意力分布和预测的动作概率来优化注意力蒸馏过程,如下:

\mathcal{L}_{AD}=\mathcal{L}_{recon}+\mathcal{L}_{clf}+\gamma\cdot\mathcal{L}_{KD-att},\quad(15)

其中,γ是一个经验超参数,我们设定γ=0.1。

值得注意的是,在推理过程中,我们只利用带有注意力模块的学生模型来预测动作标签,不包括生成模型

实验

结论

在本文中,我们提出了一种新颖的基于生成模型的知识蒸馏框架,通过注意力表示来传递视频特征语义。我们的框架主要包括两个步骤:特征表示和基于生成的知识蒸馏(特征蒸馏和注意力蒸馏)通过利用注意力机制,我们捕获特征语义并通过生成建模实现知识蒸馏。在3D卷积神经网络(3D-CNNs)蒸馏领域,我们的方法相较于现有方法在视频动作识别领域取得了显著的性能提升。结果证明了我们的方法在通过基于生成模型的特征蒸馏来增强知识蒸馏性能方面的有效性。因此,本研究为专注于3D模型蒸馏的创新知识蒸馏框架奠定了基础。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/36605.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python笔记 json数据格式的转换

一、json数据格式 1.什么是json json是一种轻量级的数据交互格式。可以按照json指定的格式去组织和封装数据 json本质上是一个带有特定格式的字符串 主要功能:json就是一种在各个编程语言中流通的数据格式,负责不同编程语言中的数据传递和交互。类似…

计算机网络 DHCP以及防护

一、理论知识 1.DHCP:用于在网络中自动分配IP地址及其他网络参数(如DNS、默认网关)给客户端设备。 2.VLAN:逻辑上的局域网分段,用于隔离和管理不同的网络流量。 3.DHCP地址池:为每个VLAN配置不同的DHCP地…

MySQL锁和使用

在MySQL中,锁用于控制并发访问,以保证数据的一致性和完整性。MySQL提供了多种类型的锁,包括表级锁、行级锁和页面级锁。以下是MySQL中各种锁的详细介绍及其使用方法: 1. 表级锁(Table Locks) 表级锁用于锁…

输出100以内的质数

质数&#xff1a;只能被1和自身整除的数 let count; for(let i2; i<100; i){for(let j1; j<i; j){if(i % j 0){// 只要能被整除&#xff0c;count就加1count;}} if(count 2) {// 从1到自身被整除完之后&#xff0c;如果count只有两次&#xff0c;则说明i为质数co…

大数据------JavaWeb------Maven(完整知识点汇总)

额外知识点 IDE IDE是集成开发环境的缩写&#xff0c;它是一种软件应用程序&#xff0c;提供了编码、调试和部署软件的一站式解决方案。这些功能集成在一起&#xff0c;使开发人员能够在一个环境中完成整个软件开发过程&#xff0c;从编写代码到调试和测试&#xff0c;直到最终…

掌握SEO:如何优化用ChatGPT生成的文章以提升搜索排名

在数字化时代&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;已经成为网站流量的重要来源。随着人工智能技术的进步&#xff0c;越来越多的人开始使用ChatGPT等AI工具来生成文章。然而&#xff0c;虽然这些工具可以快速生成内容&#xff0c;但要确保这些内容在搜索引擎中…

MK米客方德SD NAND磨损均衡技术

上次MK给大家讲解了MK SD NAND异常掉电保护机制&#xff0c;不少的工程师朋友们对此挺感兴趣&#xff0c;今天再和大家聊一聊SD NAND内部的另外一个核心技术SD NAND&#xff1a;磨损均衡&#xff08;Wear Leveling&#xff09;。 SD NAND内部主要由NAND Flash和Flash Controll…

Python操作MySQL数据库--使用pymysql模块

Python操作MySQL数据库--使用pymysql模块 一、新建数据库和数据表1.1 新建book数据库1.2 新建bookprice数据表二、连接数据库2.1 建立数据库连接三、新增数据3.1 新增单条数据3.2 新增多条数据3.3 批量新增四、修改数据4.1 修改单条数据4.2 修改多条数据五、删除数据5.1 删除单…

【Android Studio】Notification通知提醒功能完整代码以及踩坑记录

前言&#xff1a;在最近学习安卓通知功能的开发中&#xff0c;遇到了一些坑&#xff0c;困扰了我一些时间&#xff0c;搜集了大量资料写个博客总结一下&#xff0c;希望对大家有帮助。 目录 一、启动项目闪退 1.1、问题详情 1.2、解决方法 二、点击通知无法跳转 2.1、问题…

ONLYOFFICE8.1新版本桌面编辑器测评

什么是 ONLYOFFICE 文档 ONLYOFFICE 文档是一套功能强大的文档编辑器&#xff0c;支持编辑处理文本文档、电子表格、演示文稿、可填写的表单、PDF&#xff0c;可多人在线协作&#xff0c;支持 AI 集成。 该套件可在 Windows、Linux、Android 和 iOS上使用&#xff0c;包括网页…

最大团问题--回溯法

一、相关定义 给定一个无向图 &#xff0c;其中 V 是图的顶点集&#xff0c;E图的边集 完全图&#xff1a;如果无向图中的任何一对顶点之间都有边&#xff0c;这种无向图称为完全图 完全子图&#xff1a;给定无向图 &#xff0c;如果 &#xff0c;且对应任意 且 &#xff0c;则…

x264 码率控制 VBV 算法原理:数学模型与数据流转

x264 码率控制 VBV 算法原理 关于 VBV原理的分析可以参考:x264 码率控制 VBV 原理。关于 VBV 算法的源码分析可以参考:x264 码率控制中实现 VBV 算法源码分析。VBV算法介绍 x264中的VBV(Video Buffering Verifier)算法是H.264编码标准的一部分,主要用于码率控制,确保视频…

【CPP】交换排序:冒泡排序、快速排序

目录 1.冒泡排序简介代码分析 2.快速排序2.1霍尔版本简介代码分析 2.2挖坑版本2.3前后指针版本2.4非递归的快排思路代码 什么是交换排序&#xff1f; 基本思想&#xff1a;所谓 交换&#xff0c;就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置&#xff0…

2.树莓派4b+ubuntu18.04(ros版本melodic)+arduino mega自制两轮差速小车,实现建图导航功能

这篇文章介绍arduino使用和安装arduino_bridge 将arduino与树莓派连接 查看arduino的端口号&#xff0c;我们这里查看到的时ttyUSB0 ll /dev/ttyUSB*将当前用户添加进dialout组 sudo usermod -a -G dialout your_user_name然后重启树莓派&#xff0c;然后才能生效 然后如果你…

PyCharm2024 for mac Python编辑开发

Mac分享吧 文章目录 效果一、下载软件二、开始安装1、双击运行软件&#xff08;适合自己的M芯片版或Intel芯片版&#xff09;&#xff0c;将其从左侧拖入右侧文件夹中&#xff0c;等待安装完毕2、应用程序显示软件图标&#xff0c;表示安装成功3、打开访达&#xff0c;点击【文…

机器人控制系列教程之URDF自动生成工具

URDF文件的编写较为复杂&#xff0c;ROS官方提供了URDF的SolidWorks插件&#xff0c;可方便地将 SW 零件和装配体导出为 URDF 文件。导出器将创建一个类似 ROS 的软件包&#xff0c;其中包含网格、纹理和机器人&#xff08;URDF 文件&#xff09;目录。对于单一的 SolidWorks 零…

Python生成图形验证码

文章目录 安装pillow基本用法生成代码 安装pillow pip install pillow 基本用法 特殊字体文字 如下所示&#xff0c;将下载下来的ttf字体文件放到py文件同一文件夹下 分享一个免费下载字体网站&#xff1a;http://www.webpagepublicity.com/free-fonts.html 我选的字体是Baj…

Linux 基于sqlite3数据库的学生管理系统

一、数据库 sqlite官网&#xff1a;www.sqlite.org 1.1 数据库的安装 离线安装&#xff1a; sudo dpkg -i sqlite3_3.22.0-1ubuntu0.4_amd64.deb //数据库软件 sudo dpkg -i libsqlite3-dev_3.22.0-1ubuntu0.4_amd64.deb //数据库的库函数 在线安装&#xff1a; sudo apt-get …

推荐系统三十六式学习笔记:原理篇.模型融合13|经典模型融合办法:线性模型和树模型的组合拳

目录 为什么要融合&#xff1f;“辑度组合”原理逻辑回归梯度提升决策树GBDT二者结合 总结 推荐系统在技术实现上一般划分为三个阶段&#xff1a;挖掘、召回、排序 。 为什么要融合&#xff1f; 挖掘的工作是对用户和物品做非常深入的结构化分析&#xff0c;各个角度各个层面…

MySQL之可扩展性(六)

可扩展性 向外扩展 12.重新均衡分片数据 如有必要&#xff0c;可以通过在分片间移动数据来达到负载均衡。举个例子&#xff0c;许多读者可能听一些大型图片分享网站或流行社区网站的开发者提到过用于分片间移动用户数据的工具。在分片间移动数据的好处很明显。例如&#xff…