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

[YOLOv7/YOLOv5系列改进NO.40]融入适配GPU的轻量级 G-GhostNet

文章目录

  • 前言
  • 一、解决问题
  • 二、基本原理
  • 三、​添加方法
  • 四、总结


前言

作为当前先进的深度学习目标检测算法YOLOv7,已经集合了大量的trick,但是还是有提高和改进的空间,针对具体应用场景下的检测难点,可以不同的改进方法。此后的系列文章,将重点对YOLOv7的如何改进进行详细的介绍,目的是为了给那些搞科研的同学需要创新点或者搞工程项目的朋友需要达到更好的效果提供自己的微薄帮助和参考。由于出到YOLOv7,YOLOv5算法2020年至今已经涌现出大量改进论文,这个不论对于搞科研的同学或者已经工作的朋友来说,研究的价值和新颖度都不太够了,为与时俱进,以后改进算法以YOLOv7为基础,此前YOLOv5改进方法在YOLOv7同样适用,所以继续YOLOv5系列改进的序号。另外改进方法在YOLOv5等其他算法同样可以适用进行改进。希望能够对大家有帮助。
具体改进办法请关注后私信留言!关注免费领取深度学习算法学习资料!


一、解决问题

之前出了很多轻量化网络的方法,包括C-GhostNet网络融入,替换原yolo算法中的主干特征提取网络,都或多或少取得一定效果,本次博客分享将G-GhostNet网络融入,GhostNet 可以在准确性和 GPU 延迟之间获得更好的权衡,实现轻量化实时快速检测的目的。

二、基本原理

由于内存和计算资源有限,在移动设备上部署卷积神经网络(CNN)很困难。我们的目标是通过利用特征图中的冗余,为包括CPU和GPU在内的异构设备设计高效的神经网络,这在神经架构设计中很少被研究。对于类似CPU的设备,我们提出了一种新的CPU高效Ghost(C-Ghost)模块,以从廉价操作中生成更多的特征图。基于一组内在特征图,我们以低廉的成本应用一系列线性变换来生成许多重影特征图,这些重影特征可以充分反映内在特征的信息。提出的C-Ghost模块可以作为即插即用组件来升级现有的卷积神经网络。C-Ghost瓶颈被设计为堆叠C-Ghost模块,然后可以轻松地构建轻量级C-GhostNet。我们进一步考虑GPU设备的高效网络。在构建阶段不涉及太多GPU低效操作(例如,深度卷积)的情况下,我们建议利用阶段特征冗余来模拟GPU高效Ghost(g-Ghost)阶段结构。一个阶段中的特征分为两部分,其中第一部分使用原始块进行处理,其中用于生成固有特征的输出通道较少,另一部分通过利用阶段冗余使用廉价操作生成。在基准测试上进行的实验证明了所提出的C-Ghost模型和G-Ghost阶段的有效性。
在这里插入图片描述在这里插入图片描述

三、​添加方法

第一步:确定添加的位置,作为即插即用的注意力模块,可以添加到YOLOv7网络中的任何地方。

第二步:common.py构建模块。部分代码如下,关注文章末尾,私信后领取。

class GGhostRegNet(nn.Module):def __init__(self, block, layers, widths, num_classes=1000, zero_init_residual=True,group_width=1, replace_stride_with_dilation=None,norm_layer=None):super(GGhostRegNet, self).__init__()if norm_layer is None:norm_layer = nn.BatchNorm2dself._norm_layer = norm_layerself.inplanes = 32self.dilation = 1if replace_stride_with_dilation is None:# each element in the tuple indicates if we should replace# the 2x2 stride with a dilated convolution insteadreplace_stride_with_dilation = [False, False, False, False]if len(replace_stride_with_dilation) != 4:raise ValueError("replace_stride_with_dilation should be None ""or a 4-element tuple, got {}".format(replace_stride_with_dilation))self.group_width = group_widthself.conv1 = nn.Conv2d(3, self.inplanes, kernel_size=3, stride=2, padding=1,bias=False)self.bn1 = norm_layer(self.inplanes)self.relu = nn.ReLU(inplace=True)self.layer1 = self._make_layer(block, widths[0], layers[0], stride=2,dilate=replace_stride_with_dilation[0])self.inplanes = widths[0]if layers[1] > 2:self.layer2 = Stage(block, self.inplanes, widths[1], group_width, layers[1], stride=2,dilate=replace_stride_with_dilation[1], cheap_ratio=0.5) else:      self.layer2 = self._make_layer(block, widths[1], layers[1], stride=2,dilate=replace_stride_with_dilation[1])self.inplanes = widths[1]self.layer3 = Stage(block, self.inplanes, widths[2], group_width, layers[2], stride=2,dilate=replace_stride_with_dilation[2], cheap_ratio=0.5)self.inplanes = widths[2]if layers[3] > 2:self.layer4 = Stage(block, self.inplanes, widths[3], group_width, layers[3], stride=2,dilate=replace_stride_with_dilation[3], cheap_ratio=0.5) else:self.layer4 = self._make_layer(block, widths[3], layers[3], stride=2,dilate=replace_stride_with_dilation[3])self.avgpool = nn.AdaptiveAvgPool2d((1, 1))self.dropout = nn.Dropout(0.2)self.fc = nn.Linear(widths[-1] * block.expansion, num_classes)for m in self.modules():if isinstance(m, nn.Conv2d):nn.init.kaiming_normal_(m.weight, mode='fan_out', nonlinearity='relu')elif isinstance(m, (nn.BatchNorm2d, nn.GroupNorm)):nn.init.constant_(m.weight, 1)nn.init.constant_(m.bias, 0)def _make_layer(self, block, planes, blocks, stride=1, dilate=False):norm_layer = self._norm_layerdownsample = Noneprevious_dilation = self.dilationif dilate:self.dilation *= stridestride = 1if stride != 1 or self.inplanes != planes:downsample = nn.Sequential(conv1x1(self.inplanes, planes, stride),norm_layer(planes),)layers = []layers.append(block(self.inplanes, planes, stride, downsample, self.group_width,previous_dilation, norm_layer))self.inplanes = planesfor _ in range(1, blocks):layers.append(block(self.inplanes, planes, group_width=self.group_width,dilation=self.dilation,norm_layer=norm_layer))return nn.Sequential(*layers)def _forward_impl(self, x):# See note [TorchScript super()]x = self.conv1(x)x = self.bn1(x)x = self.relu(x)x = self.layer1(x)x = self.layer2(x)x = self.layer3(x)x = self.layer4(x)x = self.avgpool(x)x = torch.flatten(x, 1)x = self.dropout(x)x = self.fc(x)return xdef forward(self, x):return self._forward_impl(x)

第三步:yolo.py中注册GGhost模块。
第四步:修改yaml文件,本文以修改backbone为例,将原C3模块后加入该模块。
第五步:将train.py中改为本文的yaml文件即可,开始训练。

四、总结

结 果:本人在遥感数据集上进行实验,有涨点效果。需要请关注留言。

预告一下:下一篇内容将继续分享深度学习算法相关改进方法。有兴趣的朋友可以关注一下我,有问题可以留言或者私聊我哦

PS:该方法不仅仅是适用改进YOLOv5,也可以改进其他的YOLO网络以及目标检测网络,比如YOLOv7、v6、v4、v3,Faster rcnn ,ssd等。


最后,有需要的请关注私信我吧。关注免费领取深度学习算法学习资料!

YOLO系列算法改进方法 | 目录一览表
💡🎈☁️1. 添加SE注意力机制
💡🎈☁️2.添加CBAM注意力机制
💡🎈☁️3. 添加CoordAtt注意力机制
💡🎈☁️4. 添加ECA通道注意力机制
💡🎈☁️5. 改进特征融合网络PANET为BIFPN
💡🎈☁️6. 增加小目标检测层
💡🎈☁️7. 损失函数改进
💡🎈☁️8. 非极大值抑制NMS算法改进Soft-nms
💡🎈☁️9. 锚框K-Means算法改进K-Means++
💡🎈☁️10. 损失函数改进为SIOU
💡🎈☁️11. 主干网络C3替换为轻量化网络MobileNetV3
💡🎈☁️12. 主干网络C3替换为轻量化网络ShuffleNetV2
💡🎈☁️13. 主干网络C3替换为轻量化网络EfficientNetv2
💡🎈☁️14. 主干网络C3替换为轻量化网络Ghostnet
💡🎈☁️15. 网络轻量化方法深度可分离卷积
💡🎈☁️16. 主干网络C3替换为轻量化网络PP-LCNet
💡🎈☁️17. CNN+Transformer——融合Bottleneck Transformers
💡🎈☁️18. 损失函数改进为Alpha-IoU损失函数
💡🎈☁️19. 非极大值抑制NMS算法改进DIoU NMS
💡🎈☁️20. Involution新神经网络算子引入网络
💡🎈☁️21. CNN+Transformer——主干网络替换为又快又强的轻量化主干EfficientFormer
💡🎈☁️22. 涨点神器——引入递归门控卷积(gnConv)
💡🎈☁️23. 引入SimAM无参数注意力
💡🎈☁️24. 引入量子启发的新型视觉主干模型WaveMLP(可尝试发SCI)
💡🎈☁️25. 引入Swin Transformer
💡🎈☁️26. 改进特征融合网络PANet为ASFF自适应特征融合网络
💡🎈☁️27. 解决小目标问题——校正卷积取代特征提取网络中的常规卷积
💡🎈☁️28. ICLR 2022涨点神器——即插即用的动态卷积ODConv
💡🎈☁️29. 引入Swin Transformer v2.0版本
💡🎈☁️30. 引入10月4号发表最新的Transformer视觉模型MOAT结构
💡🎈☁️31. CrissCrossAttention注意力机制
💡🎈☁️32. 引入SKAttention注意力机制
💡🎈☁️33. 引入GAMAttention注意力机制
💡🎈☁️34. 更换激活函数为FReLU
💡🎈☁️35. 引入S2-MLPv2注意力机制
💡🎈☁️36. 融入NAM注意力机制
💡🎈☁️37. 结合CVPR2022新作ConvNeXt网络
💡🎈☁️38. 引入RepVGG模型结构
💡🎈☁️39. 引入改进遮挡检测的Tri-Layer插件 | BMVC 2022
💡🎈☁️40. 轻量化mobileone主干网络引入
💡🎈☁️41. 引入SPD-Conv处理低分辨率图像和小对象问题
💡🎈☁️42. 引入V7中的ELAN网络
💡🎈☁️43. 结合最新Non-local Networks and Attention结构

相关文章:

Grid 布局

文章目录 容器属性display 属性grid-template-columns 和 grid-template-rows 属性row-gap、column-gap、gap 属性grid-template-areas 属性grid-auto-flow 属性justify-items、align-items、place-items 属性justify-content、align-content、place-content 属性grid-auto-col…...

cdq分治/逆序对 一点点总结

cdq分治/逆序对 一点点总结 归并排序求普通逆序对问题#include<bits/stdc++.h> #define IN inline #define R register int using namespace std; const int N=5e5+5; typedef long long ll; IN int read() {int f=1;char ch;while((ch=getchar())<0||ch>9) if…...

电视音频中应用的音频放大器

电视机声音的产生原理是将电视信号转化为声音&#xff0c;然后通过扬声器将声音播放出来。当我们打开电视并选择频道时&#xff0c;电视机首先从天线或有线电视信号中获取声音信号。声音信号经过放大器放大之后&#xff0c;就能够通过扬声器发出声音。电视机声音的产生原理和音…...

LVM逻辑卷与磁盘分配

LVM逻辑卷与磁盘分配 目录LVM逻辑卷与磁盘分配一、 LVM逻辑卷1、LVM概述2、LVM机制的概念3、LVM的管理命令4、LVM操作所需的命令4.1 实例4.1.1 初级设置:建立分区4.1.2 创建物理卷4.1.3 建立vg01组4.1.4 建立逻辑卷4.1.5 格式化4.1.6 临时挂载4.1.7 永久挂载4.1.8 扩容分区二、…...

vite和webpack对比

定位分析 打包工具:webpack、rollup、parcel、esbuild 作用:可以对代码进行压缩、合并、转换、分割、打包 衍生:vue-cli、create-react-app、umi 等是基于 webpack 的上层封装,用于快速创建项目 vite:开发环境依赖 esbuild 进行预构建,生产环境则依赖 rollup 进行打包 差…...

设计双向链表的接口

/********************************************************************************** *file name: 004_双向链表.cauthor : A13326981379@163.comdate : 2024/04/24function : 设计双向循环链表的接口note : NoneCopyRight (c) 2024-2024 A13326981379@163…...

[YOLOv7/YOLOv5系列改进NO.40]融入适配GPU的轻量级 G-GhostNet

文章目录前言一、解决问题二、基本原理三、​添加方法四、总结前言 作为当前先进的深度学习目标检测算法YOLOv7&#xff0c;已经集合了大量的trick&#xff0c;但是还是有提高和改进的空间&#xff0c;针对具体应用场景下的检测难点&#xff0c;可以不同的改进方法。此后的系列…...

Windows x64隐藏可执行内存

文章目录实现效果实现原理VAD内存什么是VAD内存查看VAD内存VAD属性VAD内存可利用的点x64分页机制W7 x64下任意地址PDT PTE算法W10 x64定位随机化页表基址实现隐藏可执行内存隐藏内存对抗实现效果 驱动程序在Test进程中申请一块内存地址并打印&#xff0c;然后控制台程序在接收到…...

map容器/multimap容器

目录 1.map基本概念 简介 本质 优点 map和multimap区别 2.map构造和赋值 功能描述: 函数原型 3.map大小和交换 功能描述 函数原型 4 map插入和删除 功能描述 函数原型 5. map查找和统计 功能描述 函数原型 6 map容器排序 学习目标 主要技术点 1.map基本概念…...

SpringBoot+Vue项目便捷洗衣服务平台

文末获取源码 开发语言&#xff1a;Java 使用框架&#xff1a;spring boot 前端技术&#xff1a;JavaScript、Vue.js 、css3 开发工具&#xff1a;IDEA/MyEclipse/Eclipse、Visual Studio Code 数据库&#xff1a;MySQL 5.7/8.0 数据库管理工具&#xff1a;phpstudy/Navicat JD…...

[激光原理与应用-36]:《光电检测技术-3》- 光学测量基础 - 光电效应与光电探测器的基本原理

目录 一、概述 二、光电检测的理论基础&#xff1a;光电效应 三、分类 3.1 光子效应 3.2 热效应 四、光电检测器的参数 五、常见的光电探测器 5.1 光电倍增管&#xff1a;微弱光信号转换成电信号 5.2 光电导器件&#xff1a;电阻或电流随着光强的变化而变化 5.3 光伏…...

给定一个字符串str,求最长回文子序列长度。

问题描述&#xff1a; 给定一个字符串str&#xff0c;求最长回文子序列长度。 思想&#xff1a; 思想一&#xff1a; 根据回文串的性质&#xff0c;我们可以生成一个新的字符串&#xff0c;新字符串的顺序是原来字符串的倒序。本题可以转化为两个字符串求最长的公共子序列。 …...

40 个机器学习面试问题(文末福利送书)

原创 文章目录初学者问题 (10)1. 偏差和方差之间的权衡是什么&#xff1f;2.解释有监督和无监督机器学习的区别3. 监督学习和无监督学习最常用的算法是什么&#xff1f;4.解释KNN和k-means聚类的区别5. 什么是贝叶斯定理&#xff1f;我们为什么用它&#xff1f;6. 什么是朴素贝…...

Springboot流浪动物管理系统p2326计算机毕业设计-课程设计-期末作业-毕设程序代做

Springboot流浪动物管理系统p2326计算机毕业设计-课程设计-期末作业-毕设程序代做 【免费赠送源码】Springboot流浪动物管理系统p2326计算机毕业设计-课程设计-期末作业-毕设程序代做本源码技术栈&#xff1a; 项目架构&#xff1a;B/S架构 开发语言&#xff1a;Java语言 开…...

Request和Response基础知识入门

文章目录1&#xff0c;Request和Response的概述2&#xff0c;Request对象2.1 Request继承体系2.2 Request获取请求数据2.2.1 获取请求行数据2.2.2 获取请求头数据2.2.3 获取请求体数据2.2.4 获取请求参数的通用方式2.3 IDEA快速创建Servlet2.4 请求参数中文乱码问题2.4.1 POST请…...

实战Docker未授权访问提权

1、fofa关键字 port“2375” && body“page not found” 2、docker -H tcp://ip:port 可查看到当前所有的实例 3、docker -H tcp://ip:port pull alpine 4、docker -H tcp://ip:port run -it --privileged alpine bin/sh 5、fdisk -l 查看其分区结构 6、创建一个…...

【微信小程序】页面跳转、组件自定义、获取页面参数值

&#x1f3c6;今日学习目标&#xff1a;第十七期——页面跳转、组件自定义、获取页面参数值 &#x1f603;创作者&#xff1a;颜颜yan_ ✨个人主页&#xff1a;颜颜yan_的个人主页 ⏰预计时间&#xff1a;25分钟 &#x1f389;专栏系列&#xff1a;我的第一个微信小程序 文章目…...

数据结构:二叉树的链式结构

文章目录一.前言二.二叉树遍历2.1前序遍历/先根遍历2.2中序遍历/中根遍历2.3后序遍历/后根遍历2.4层序遍历2.5二叉树的销毁三.二叉树节点个数四.二叉树叶子节点的个数五.二叉树的高度六.二叉树第K层的节点个数七.找二叉树的节点八.题目8.1判断单值二叉树8.2相同的树8.3另一棵子…...

[附源码]计算机毕业设计小区疫情事件处理系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…...

03、自定义镜像上传阿里云

目录 1、alpine Linux简介 2、基于alpine制作JDK8镜像 1.1 下载镜像 1.2 创建并编辑dockerfile 1.3 执行dockerfile创建镜像 1.4 创建并启动容器 1.5 进入容器 1.6 测试jdk 3、Docker容器之最小JRE基础镜像 4、将Docker镜像上传至阿里云(或从阿云下载镜像) 5、Docke…...

机器学习之过拟合和欠拟合

文章目录前言什麽是过拟合和欠拟合?过拟合和欠拟合产生的原因&#xff1a;欠拟合(underfitting)&#xff1a;过拟合(overfitting)&#xff1a;解决欠拟合(高偏差)的方法1、模型复杂化2、增加更多的特征&#xff0c;使输入数据具有更强的表达能力3、调整参数和超参数4、增加训练…...

【Linux网络编程】服务端编程初体验

文章目录前言服务端是啥、有什么特点核心函数socket的简介服务器编程客户端代码The End前言 在上节课(Linux网络编程初体验)中我们实现了连接bilibili的功能&#xff0c;并获取其html源码 如图所示. 今天我们要自己编写个服务端来服务我们的客户端 提示&#xff1a;以下是本篇…...

《人类简史》笔记四—— 想象构建的秩序

目录 一、盖起金字塔 1、未来的来临 2、 由想象构建的秩序 3、如何维持构建的秩序 二、 记忆过载 三、亚当和夏娃的一天 一、盖起金字塔 1、未来的来临 原始社会&#xff1a; 人口少&#xff1b; 狩猎和采集&#xff1b; 整体活动范围大&#xff08;有几十甚至上百平方…...

TIDB在centos7.9上通过docker-compose进行安装、备份

1.环境介绍&#xff1a; 在centos7.9上安装tidb docker-compose版本 虚拟机配置2C/8G/40G 最小化安装 2.安装步骤 2.1 安装centos7.9 略 2.2 安装docker &#xff08;1&#xff09;安装依赖包 yum install -y yum-utils device-mapper-persistent-data lvm2&#xff08;2…...

Spring中Bean的生命周期

先直接说出过程&#xff0c;再来演示具体的操作 过程 简化来说就是 1、首先是实例化Bean&#xff0c;当客户向容器请求一个尚未初始化的bean时&#xff0c;或初始化bean的时候需要注入另一个尚末初始化的依赖时&#xff0c;容器就会调用doCreateBean()方法进行实例化&#xf…...

ACM第三周---周训---题目合集.

&#x1f680;write in front&#x1f680; &#x1f4dd;个人主页&#xff1a;认真写博客的夏目浅石.CSDN &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd;​ &#x1f4e3;系列专栏&#xff1a;ACM周训练题目合集.CSDN &#x1f4ac;总结&#xff1a…...

VUE+Spring Boot前后端分离开发实战(六):基于RABC权限通用后台管理系统-给角色动态分配权限和用户

文章目录 前言功能设计后端实现前端实现写在后面前言 本文记录了通用后台管理系统中RABC权限中两个功能:给角色分配权限、给角色设置用户。 给角色分配用户:前端使用到了elementUI中的tree,包括加载树以及给已选配权限给默认值等。给角色设置用户:前端用到了elementUI中的…...

Dockerfile自定义镜像实操【镜像结构、Dockerfile语法、构建Java项目】

要自定义镜像&#xff0c;就必须先了解镜像的结构才行。 1 镜像结构 镜像是将应用程序及其需要的系统函数库、环境、配置、依赖打包而成。 以MySQL为例&#xff0c;镜像的组成结构&#xff1a; 简单讲&#xff0c;镜像就是在系统函数库、运行环境基础上&#xff0c;添加应用…...

javaScript 进阶之路 --- 《加深理解回调函数》

前言&#xff1a; 回想当初第一次看到“回调函数”这个名词的时候&#xff0c;真的快把我难哭了。所有视频教程在讲到某个知识点的时候&#xff0c;大概都会说一句&#xff1a;“啊&#xff0c;这里怎么办呢&#xff1f;这里我们就需要用到一个回调函数...”。 等等&#xff0…...

Linux开发常用ps命令选项详解

【摘要】本文介绍了在Linux应用/内核开发调试中&#xff0c;经常需要用到的两个选项组合&#xff0c;当然&#xff0c;如果你需要查看更多更详尽的选项说明&#xff0c;可以参考man说明文档&#xff0c;即命令行下输入man ps进行查看。 aux选项组合 使用场景&#xff1a;更多…...

【ceph】分布式存储ceph

1 块存储&#xff0c;文件存储&#xff0c;对象存储 1.1 简介 文件存储&#xff1a;分层次存储&#xff0c;文件存储在文件夹中&#xff1b;访问文件时系统需要知道文件所在的路径。 举例&#xff1a;企业部门之间运用网络存储器&#xff08;NAS&#xff09;进行文件共享。 …...

Spring框架(九):Spring注解开发Annotation

Spring注解开发引子如何用注解替代xml基础配置Bean可以加一些注解来实现原有的xml文件的功能Component注解及其衍生注解依赖注入AutowireSpring非自定义的注解开发Spring其他注解注解的原理解析-xml方式注解的原理解析-注解方式引子 痛定思痛&#xff0c;主要问题出现在自己雀…...

python隶属关系图模型:基于模型的网络中密集重叠社区检测方法

隶属关系图模型 是一种生成模型&#xff0c;可通过社区联系产生网络。下图描述了一个社区隶属关系图和网络的示例&#xff08;图1&#xff09;。最近我们被客户要求撰写关于社区检测的研究报告&#xff0c;包括一些图形和统计输出。 图1.左&#xff1a;社区关系图&#xff08;圆…...

Java实现猜数游戏

1 问题 编写一个Java程序&#xff0c;实现以下功能&#xff1a; 2 方法 首先导入java.util包下的Random&#xff0c;让程序随便分配给用户一个数。 再导入java.util包下的Scanner类&#xff0c;构建Scanner对象&#xff0c;以便输入。 利用Random().nextInt()生成一个随机的i…...

阿里云安装mysql、nginx、redis

目录 安装mysql 安装nginx ​编辑安装redis 先看一下系统基本信息 安装mysql rpm -qa | grep mariadb 卸载mariadb rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64 下载mysql源 wget -i http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm yum…...

毕业设计-基于机器视觉的行人车辆跟踪出入双向检测计数

目录 前言 课题背景和意义 实现技术思路 实现效果图样例 前言 &#x1f4c5;大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科…...

linux 安装nginx

1.安装依赖包 //一键安装上面四个依赖 yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel 2.下载并解压安装包 /或上传解压包 //创建一个文件夹 cd /usr/local mkdir nginx cd nginx //下载tar包 wget http://nginx.org/download/nginx-1.13.7.tar.gz t…...

javaee之黑马旅游网1

这是一个用来锻炼javaweb基础知识的项目&#xff0c;先来导入一些我们准备好的文件 下面这些东西是我们项目必备的&#xff0c;我们提前准备好了 &#xff0c;这个我会上传到我的资源&#xff0c;你们可以自己去下载 利用maven来创建一个项目 选择无骨架创建项目&#xff0c;域…...

【高并发基础】理解 MVCC 及提炼实现思想

文章目录1. 前言2. MVCC 概念2.1 MVCC 版本链2.2 MVCC trx_id2.3 MVCC Read View3. 提出问题4. 解决问题4.1 不读未提交的数据4.1.1 一般的并发情况4.1.2 特殊的并发情况4.1.3 剩下的并发情况4.2 如果自己修改了数据&#xff0c;要第一时间读到5. MySQL RC 使用 MVCC5.1 MVCC D…...

Flow-vue源码中的应用

认识 Flow Flow 是 facebook 出品的 JavaScript 静态类型检查工具。Vue.js 的源码利用了 Flow 做了静态类型检查&#xff0c;所以了解 Flow 有助于我们阅读源码。 #为什么用 Flow JavaScript 是动态类型语言&#xff0c;它的灵活性有目共睹&#xff0c;但是过于灵活的副作用…...

学习python第一天(数据类型)

关于Python的数据类型 Python数据类型包括&#xff1a; 数字类型&#xff0c;字符类型&#xff0c;布尔类型&#xff0c;空类型&#xff0c;列表类型&#xff0c;元组类型&#xff0c;字典类型 1、数字类型 包括&#xff1a;整型int 浮点型float(有小数位的都是是浮点型) 注…...

echarts:nuxt项目使用echarts

一、项目环境 nuxt 2.X vue2.X vuex webpack 二、安装 yarn add echarts 三、使用 3.1、plugins目录下创建echarts.js import Vue from vue import * as echarts from echarts // 引入echarts Vue.prototype.$echarts echarts // 引入组件&#xff08;将echarts注册为全…...

认证服务-----技术点及亮点

大技术 Nacos做注册中心 把新建的微服务注册到Nacos上去 两个步骤 在配置文件中配置应用名称、nacos的发现注册ip地址&#xff0c;端口号在启动类上用EnableDiscoveryClient注解开启注册功能 使用Redis存验证码信息 加入依赖配置地址和端口号即可 直接注入StringRedisTempla…...

【计算机毕业设计】74.家教平台系统源码

一、系统截图&#xff08;需要演示视频可以私聊&#xff09; 摘 要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐…...

Hbase的SQL接口之Phoenix使用心得

PHOENIX 官方定义 A SQL layer over HBase delivered as a client-embedded JDBC drivertargeting low latency queries over HBase data 不同于Hive on HBase的方式&#xff0c;Phoenix将Query Plan直接使用HBaseAPI实现&#xff0c;目的是规避MapReduce框架&#xff0c;减少…...

Springboot萌宠社交分享系统的设计与实现hfdwz计算机毕业设计-课程设计-期末作业-毕设程序代做

Springboot萌宠社交分享系统的设计与实现hfdwz计算机毕业设计-课程设计-期末作业-毕设程序代做 【免费赠送源码】Springboot萌宠社交分享系统的设计与实现hfdwz计算机毕业设计-课程设计-期末作业-毕设程序代做本源码技术栈&#xff1a; 项目架构&#xff1a;B/S架构 开发语言…...

线性代数与解析几何——Part4 欧式空间 酉空间

线性代数与解析几何——Part4 欧式空间 & 酉空间 1. 欧氏空间 1. 定义 & 性质2. 内积表示与标准正交基3. 欧氏空间的同构4. 欧氏空间的线性变换5. 欧氏空间的子空间 2. 酉空间 1. 定义 & 性质2. 酉变换3. Hermite变换4. 规范变换 1. 欧氏空间 1. 定义 & 性质…...

带头双向循环链表的实现

目录前言节点声明链表的初始化尾插打印链表头插尾删头删查找节点指定位置插入指定位置删除链表销毁前言 之前讲过单链表的实现&#xff0c;在实现的过程中&#xff0c;我们会发现每次删除或者在前面插入节点的时候&#xff0c;都要提前保存上一个节点的地址。这样做十分麻烦&a…...

07【C语言 趣味算法】最佳存款方案(采用 从后往前 递推解决)

目录 一、前情回顾二、Problem:最佳存款方案2.1 Description of the problem2.2 Analysis of the problem2.3 Algorithm design2.4 The complete code and the results of the run(完整的代码 以及 运行结果)一、前情回顾 06【C语言 & 趣味算法】牛顿迭代法求方程根(可…...

游戏开发36课 cocoscreator scrollview优化

在cocoscreator内&#xff0c;ScrollView控件封装的挺完美的了&#xff0c;不过对于一些对性能要求比较高的场景&#xff0c;会存在问题&#xff0c;以top100排行榜排行榜举例子 1、应用卡顿甚至崩溃 按照官方用例使用ScrollView&#xff0c;插入100个玩家的item&#xff0c;理…...

屏幕开发学习 -- 迪文串口屏

一 前言 最近学习了一款基于图形化开发的屏幕&#xff0c;在摸索一周后&#xff0c;基本熟悉了这款产品的一个开发过程&#xff0c;今天给大家分享一下迪文串口屏的学习过程&#xff0c;有不足之处&#xff0c;还请见谅&#x1f601;&#xff0c;包含了环境搭建和功能DEMO 二 …...

微机-------CPU与外设之间的数据传送方式

目录 一、无条件方式二、查询方式三、中断方式四、DMA方式一、无条件方式 外设要求:简单、数据变化缓慢。 外设被认为始终处于就绪状态。始终准备好数据或者始终准备好接收数据。 IN AL,数据端口 数据端口的地址通过CPU的地址总线送到地址译码器进行译码,同时该指令进行的是…...

从源码上解决rosdep update失败问题

&#xff08;一&#xff09;卸载官方的rosdep、rosdistro 卸载rosdistro # python2 sudo apt-get purge python-rosdistro# python3 sudo apt-get purge python3-rosdistro卸载rosdep # python2 sudo apt-get purge python-rosdep# python3 sudo apt-get purge python3-rosd…...

常用的shell命令

常用的shell命令 1、ls命令 功能&#xff1a;显示文件和目录的信息 ls 以默认方式显示当前目录文件列表 ls -a 显示所有文件包括隐藏文件 ls -l 显示文件属性&#xff0c;包括大小&#xff0c;日期&#xff0c;符号连接&#xff0c;是否可读写及是否可执行 ls -lh 显示文件的…...

新手入门SLAM必备资料

新手入门SLAM必备资料 文章目录 新手入门SLAM必备资料一、SLAM学习书籍1.必读经典2.有很多期,跟着会议一起出的文集3.入门书籍,简单实现及代码4.SLAM入门教材吐血推荐,对深入理解SLAM实质非常有帮助5.作者Joan Sola关于Graph-SLAM的教程,包含位姿变换、传感器模型、图优化以…...

如何选择和使用腾讯云服务器的方法新手教程

本文将介绍如何选择和使用腾讯云服务器的方法新手教程。云服务器能帮助快速构建更稳定、安全的应用&#xff0c;降低开发运维的难度和整体IT成本。腾讯云CVM云服务器提供多种类型的实例、操作系统和软件包。各实例中的 CPU、内存、硬盘和带宽可以灵活调整&#xff0c;以满足应用…...

Unity 中(提示框Tweet)

using UnityEngine; using UnityEngine.UI; using DG.Tweening; using System; public class Message : MonoBehaviour {public float dropDuration 0.5f; // 掉落持续时间public float persisterDuration 1f; // 持续显示时间public float dorpHeight;public static Message…...

如何配置 ProFTPd 以使用 SFTP 而不是 FTP

简介 FTP&#xff08;文件传输协议&#xff09;是在本地和远程服务器之间传输文件的一种流行方式。虽然过去FTP是首选的传输方法&#xff0c;但它使用明文进行身份验证&#xff0c;因此不安全。 ProFTPd 是一种流行的FTP服务器&#xff0c;可以配置为使用SFTP协议&#xff0c;…...

[C++17]std::optional

1.std::optional是什么 C17新特性。表示一个可能有值的对象&#xff0c;没有值时就是std::nullopt。 2.为什么引入std::optional 因为C底层缺少None这个表示&#xff0c;所以将std::nullopt和某种特定类型的变量合并在一起构造成一个std::optional对象。 比如实现返回数组中…...

Qt 使用qm文件

背景&#xff1a; 多个子项目&#xff0c;分别翻译生成的qm文件&#xff0c;如何一键加载&#xff1f; .h #include <QtCore/QObject> #include <QtCore/QTranslator>class LanguageSelector:public QObeject{Q_OBJECT public:~LanguageSelector() override defa…...

MyBatis 框架学习(II)

MyBatis 框架学习(II) 文章目录 MyBatis 框架学习(II)1. 介绍2. 准备&测试2.1 配置数据库连接字符串和MyBatis2.2 编写持久层代码 3. MyBatis XML基础操作3.1 Insert 操作3.2 Delete 操作3.3 Update 操作3.4 Select 操作 4. #{} 与 ${}的使用5. 动态SQL操作5.1 < if >…...

socket套接字在tcp客户端与tcp服务器之间的通信,以及socket中常用的高效工具epoll

1.socket&#xff08;套接字&#xff09;的概念 Socket是对TCP/IP协议的封装&#xff0c;Socket本身并不是协议&#xff0c;而是一个调用接口&#xff08;API&#xff09;&#xff0c;通过Socket&#xff0c;我们才能使用TCP/IP协议,主要利用三元组【ip地址&#xff0c;协议&am…...