现在 做网站 技术路线/百度网页推广
文章目录
- 0 前言
- 1 课题背景
- 2 实现效果
- 3 卷积神经网络
- 3.1卷积层
- 3.2 池化层
- 3.3 激活函数:
- 3.4 全连接层
- 3.5 使用tensorflow中keras模块实现卷积神经网络
- 4 inception_v3网络
- 5 最后
0 前言
🔥 优质竞赛项目系列,今天要分享的是
🚩 **基于深度学习的动物识别算法 **
该项目较为新颖,适合作为竞赛课题方向,学长非常推荐!
🥇学长这里给一个题目综合评分(每项满分5分)
- 难度系数:3分
- 工作量:3分
- 创新点:3分
🧿 更多资料, 项目分享:
https://gitee.com/dancheng-senior/postgraduate
1 课题背景
利用深度学习对野生动物进行自动识别分类,可以大大提高野生动物监测效率,为野生动物保护策略的制定提供可靠的数据支持。但是目前野生动物的自动识别仍面临着监测图像背景信息复杂、质量低造成的识别准确率低的问题,影响了深度学习技术在野生动物保护领域的应用落地。为了实现高准确率的野生动物自动识别,本项目基于卷积神经网络实现图像动物识别。
2 实现效果
3 卷积神经网络
受到人类大脑神经突触结构相互连接的模式启发,神经网络作为人工智能领域的重要组成部分,通过分布式的方法处理信息,可以解决复杂的非线性问题,从构造方面来看,主要包括输入层、隐藏层、输出层三大组成结构。每一个节点被称为一个神经元,存在着对应的权重参数,部分神经元存在偏置,当输入数据x进入后,对于经过的神经元都会进行类似于:y=w*x+b的线性函数的计算,其中w为该位置神经元的权值,b则为偏置函数。通过每一层神经元的逻辑运算,将结果输入至最后一层的激活函数,最后得到输出output。
3.1卷积层
卷积核相当于一个滑动窗口,示意图中3x3大小的卷积核依次划过6x6大小的输入数据中的对应区域,并与卷积核滑过区域做矩阵点乘,将所得结果依次填入对应位置即可得到右侧4x4尺寸的卷积特征图,例如划到右上角3x3所圈区域时,将进行0x0+1x1+2x1+1x1+0x0+1x1+1x0+2x0x1x1=6的计算操作,并将得到的数值填充到卷积特征的右上角。
3.2 池化层
池化操作又称为降采样,提取网络主要特征可以在达到空间不变性的效果同时,有效地减少网络参数,因而简化网络计算复杂度,防止过拟合现象的出现。在实际操作中经常使用最大池化或平均池化两种方式,如下图所示。虽然池化操作可以有效的降低参数数量,但过度池化也会导致一些图片细节的丢失,因此在搭建网络时要根据实际情况来调整池化操作。
3.3 激活函数:
激活函数大致分为两种,在卷积神经网络的发展前期,使用较为传统的饱和激活函数,主要包括sigmoid函数、tanh函数等;随着神经网络的发展,研宄者们发现了饱和激活函数的弱点,并针对其存在的潜在问题,研宄了非饱和激活函数,其主要含有ReLU函数及其函数变体
3.4 全连接层
在整个网络结构中起到“分类器”的作用,经过前面卷积层、池化层、激活函数层之后,网络己经对输入图片的原始数据进行特征提取,并将其映射到隐藏特征空间,全连接层将负责将学习到的特征从隐藏特征空间映射到样本标记空间,一般包括提取到的特征在图片上的位置信息以及特征所属类别概率等。将隐藏特征空间的信息具象化,也是图像处理当中的重要一环。
3.5 使用tensorflow中keras模块实现卷积神经网络
class CNN(tf.keras.Model):def __init__(self):super().__init__()self.conv1 = tf.keras.layers.Conv2D(filters=32, # 卷积层神经元(卷积核)数目kernel_size=[5, 5], # 感受野大小padding='same', # padding策略(vaild 或 same)activation=tf.nn.relu # 激活函数)self.pool1 = tf.keras.layers.MaxPool2D(pool_size=[2, 2], strides=2)self.conv2 = tf.keras.layers.Conv2D(filters=64,kernel_size=[5, 5],padding='same',activation=tf.nn.relu)self.pool2 = tf.keras.layers.MaxPool2D(pool_size=[2, 2], strides=2)self.flatten = tf.keras.layers.Reshape(target_shape=(7 * 7 * 64,))self.dense1 = tf.keras.layers.Dense(units=1024, activation=tf.nn.relu)self.dense2 = tf.keras.layers.Dense(units=10)def call(self, inputs):x = self.conv1(inputs) # [batch_size, 28, 28, 32]x = self.pool1(x) # [batch_size, 14, 14, 32]x = self.conv2(x) # [batch_size, 14, 14, 64]x = self.pool2(x) # [batch_size, 7, 7, 64]x = self.flatten(x) # [batch_size, 7 * 7 * 64]x = self.dense1(x) # [batch_size, 1024]x = self.dense2(x) # [batch_size, 10]output = tf.nn.softmax(x)return output
4 inception_v3网络
简介
如果 ResNet 是为了更深,那么 Inception 家族就是为了更宽。Inception
的作者对训练更大型网络的计算效率尤其感兴趣。换句话说:怎样在不增加计算成本的前提下扩展神经网络?
网路结构图
主要改动
- 将7×7卷积分解为3个3×3的卷积。
- 35×35的Inception模块采用图1所示结构,之后采用图5类似结构进行下采样
- 17×17的Inception模块采用图2所示结构,也是采用图5类似结构下采样
- 8×8的Inception模块采用图3所示结构,进行较大维度的提升。
Tensorflow实现代码
import osimport kerasimport numpy as npimport tensorflow as tffrom tensorflow.keras import layersfrom tensorflow.keras.models import Modelconfig = tf.compat.v1.ConfigProto()config.gpu_options.allow_growth = True # TensorFlow按需分配显存config.gpu_options.per_process_gpu_memory_fraction = 0.5 # 指定显存分配比例inceptionV3_One={'1a':[64,48,64,96,96,32],'2a':[64,48,64,96,96,64],'3a':[64,48,64,96,96,64]}inceptionV3_Two={'1b':[192,128,128,192,128,128,128,128,192,192],'2b':[192,160,160,192,160,160,160,160,192,192],'3b':[192,160,160,192,160,160,160,160,192,192],'4b':[192,192,192,192,192,192,192,192,192,192]}keys_two=(list)(inceptionV3_Two.keys())inceptionV3_Three={'1c':[320,384,384,384,448,384,384,384,192],'2c':[320,384,384,384,448,384,384,384,192]}keys_three=(list)(inceptionV3_Three.keys())def InceptionV3(inceptionV3_One,inceptionV3_Two,inceptionV3_Three):keys_one=(list)(inceptionV3_One.keys())keys_two = (list)(inceptionV3_Two.keys())keys_three = (list)(inceptionV3_Three.keys())input=layers.Input(shape=[299,299,3])# 输入部分conv1_one = layers.Conv2D(32, kernel_size=[3, 3], strides=[2, 2], padding='valid')(input)conv1_batch=layers.BatchNormalization()(conv1_one)conv1relu=layers.Activation('relu')(conv1_batch)conv2_one = layers.Conv2D(32, kernel_size=[3, 3], strides=[1,1],padding='valid')(conv1relu)conv2_batch=layers.BatchNormalization()(conv2_one)conv2relu=layers.Activation('relu')(conv2_batch)conv3_padded = layers.Conv2D(64, kernel_size=[3, 3], strides=[1,1],padding='same')(conv2relu)conv3_batch=layers.BatchNormalization()(conv3_padded)con3relu=layers.Activation('relu')(conv3_batch)pool1_one = layers.MaxPool2D(pool_size=[3, 3], strides=[2, 2])(con3relu)conv4_one = layers.Conv2D(80, kernel_size=[3,3], strides=[1,1], padding='valid')(pool1_one)conv4_batch=layers.BatchNormalization()(conv4_one)conv4relu=layers.Activation('relu')(conv4_batch)conv5_one = layers.Conv2D(192, kernel_size=[3, 3], strides=[2,2], padding='valid')(conv4relu)conv5_batch = layers.BatchNormalization()(conv5_one)x=layers.Activation('relu')(conv5_batch)"""filter11:1x1的卷积核个数filter13:3x3卷积之前的1x1卷积核个数filter33:3x3卷积个数filter15:使用3x3卷积代替5x5卷积之前的1x1卷积核个数filter55:使用3x3卷积代替5x5卷积个数filtermax:最大池化之后的1x1卷积核个数"""for i in range(3):conv11 = layers.Conv2D((int)(inceptionV3_One[keys_one[i]][0]), kernel_size=[1, 1], strides=[1, 1], padding='same')(x)batchnormaliztion11 = layers.BatchNormalization()(conv11)conv11relu = layers.Activation('relu')(batchnormaliztion11)conv13 = layers.Conv2D((int)(inceptionV3_One[keys_one[i]][1]), kernel_size=[1, 1], strides=[1, 1], padding='same')(x)batchnormaliztion13 = layers.BatchNormalization()(conv13)conv13relu = layers.Activation('relu')(batchnormaliztion13)conv33 = layers.Conv2D((int)(inceptionV3_One[keys_one[i]][2]), kernel_size=[5, 5], strides=[1, 1], padding='same')(conv13relu)batchnormaliztion33 = layers.BatchNormalization()(conv33)conv33relu = layers.Activation('relu')(batchnormaliztion33)conv1533 = layers.Conv2D((int)(inceptionV3_One[keys_one[i]][3]), kernel_size=[1, 1], strides=[1, 1], padding='same')(x)batchnormaliztion1533 = layers.BatchNormalization()(conv1533)conv1522relu = layers.Activation('relu')(batchnormaliztion1533)conv5533first = layers.Conv2D((int)(inceptionV3_One[keys_one[i]][4]), kernel_size=[3, 3], strides=[1, 1], padding='same')(conv1522relu)batchnormaliztion5533first = layers.BatchNormalization()(conv5533first)conv5533firstrelu = layers.Activation('relu')(batchnormaliztion5533first)conv5533last = layers.Conv2D((int)(inceptionV3_One[keys_one[i]][4]), kernel_size=[3, 3], strides=[1, 1], padding='same')(conv5533firstrelu)batchnormaliztion5533last = layers.BatchNormalization()(conv5533last)conv5533lastrelu = layers.Activation('relu')(batchnormaliztion5533last)maxpool = layers.AveragePooling2D(pool_size=[3, 3], strides=[1, 1], padding='same')(x)maxconv11 = layers.Conv2D((int)(inceptionV3_One[keys_one[i]][5]), kernel_size=[1, 1], strides=[1, 1], padding='same')(maxpool)batchnormaliztionpool = layers.BatchNormalization()(maxconv11)convmaxrelu = layers.Activation('relu')(batchnormaliztionpool)x=tf.concat([conv11relu,conv33relu,conv5533lastrelu,convmaxrelu],axis=3)conv1_two = layers.Conv2D(384, kernel_size=[3, 3], strides=[2, 2], padding='valid')(x)conv1batch=layers.BatchNormalization()(conv1_two)conv1_tworelu=layers.Activation('relu')(conv1batch)conv2_two = layers.Conv2D(64, kernel_size=[1, 1], strides=[1, 1], padding='same')(x)conv2batch=layers.BatchNormalization()(conv2_two)conv2_tworelu=layers.Activation('relu')(conv2batch)conv3_two = layers.Conv2D( 96, kernel_size=[3, 3], strides=[1,1], padding='same')(conv2_tworelu)conv3batch=layers.BatchNormalization()(conv3_two)conv3_tworelu=layers.Activation('relu')(conv3batch)conv4_two = layers.Conv2D( 96, kernel_size=[3, 3], strides=[2, 2], padding='valid')(conv3_tworelu)conv4batch=layers.BatchNormalization()(conv4_two)conv4_tworelu=layers.Activation('relu')(conv4batch)maxpool = layers.MaxPool2D(pool_size=[3, 3], strides=[2, 2])(x)x=tf.concat([conv1_tworelu,conv4_tworelu,maxpool],axis=3)"""filter11:1x1的卷积核个数filter13:使用1x3,3x1卷积代替3x3卷积之前的1x1卷积核个数filter33:使用1x3,3x1卷积代替3x3卷积的个数filter15:使用1x3,3x1,1x3,3x1卷积卷积代替5x5卷积之前的1x1卷积核个数filter55:使用1x3,3x1,1x3,3x1卷积代替5x5卷积个数filtermax:最大池化之后的1x1卷积核个数"""for i in range(4):conv11 = layers.Conv2D((int)(inceptionV3_Two[keys_two[i]][0]), kernel_size=[1, 1], strides=[1, 1], padding='same')(x)batchnormaliztion11 = layers.BatchNormalization()(conv11)conv11relu=layers.Activation('relu')(batchnormaliztion11)conv13 = layers.Conv2D((int)(inceptionV3_Two[keys_two[i]][1]), kernel_size=[1, 1], strides=[1, 1], padding='same')(x)batchnormaliztion13 = layers.BatchNormalization()(conv13)conv13relu=layers.Activation('relu')(batchnormaliztion13)conv3313 = layers.Conv2D((int)(inceptionV3_Two[keys_two[i]][2]), kernel_size=[1, 7], strides=[1, 1], padding='same')(conv13relu)batchnormaliztion3313 = layers.BatchNormalization()(conv3313)conv3313relu=layers.Activation('relu')(batchnormaliztion3313)conv3331 = layers.Conv2D((int)(inceptionV3_Two[keys_two[i]][3]), kernel_size=[7, 1], strides=[1, 1], padding='same')(conv3313relu)batchnormaliztion3331 = layers.BatchNormalization()(conv3331)conv3331relu=layers.Activation('relu')(batchnormaliztion3331)conv15 = layers.Conv2D((int)(inceptionV3_Two[keys_two[i]][4]), kernel_size=[1, 1], strides=[1, 1], padding='same')(x)batchnormaliztion15 = layers.BatchNormalization()(conv15)conv15relu=layers.Activation('relu')(batchnormaliztion15)conv1513first = layers.Conv2D((int)(inceptionV3_Two[keys_two[i]][5]), kernel_size=[1, 7], strides=[1, 1], padding='same')(conv15relu)batchnormaliztion1513first = layers.BatchNormalization()(conv1513first)conv1513firstrelu=layers.Activation('relu')(batchnormaliztion1513first)conv1531second = layers.Conv2D((int)(inceptionV3_Two[keys_two[i]][6]), kernel_size=[7, 1], strides=[1, 1], padding='same')(conv1513firstrelu)batchnormaliztion1531second = layers.BatchNormalization()(conv1531second)conv1531second=layers.Activation('relu')(batchnormaliztion1531second)conv1513third = layers.Conv2D((int)(inceptionV3_Two[keys_two[i]][7]), kernel_size=[1, 7], strides=[1, 1], padding='same')(conv1531second)batchnormaliztion1513third = layers.BatchNormalization()(conv1513third)conv1513thirdrelu=layers.Activation('relu')(batchnormaliztion1513third)conv1531last = layers.Conv2D((int)(inceptionV3_Two[keys_two[i]][8]), kernel_size=[7, 1], strides=[1, 1], padding='same')(conv1513thirdrelu)batchnormaliztion1531last = layers.BatchNormalization()(conv1531last)conv1531lastrelu=layers.Activation('relu')(batchnormaliztion1531last)maxpool = layers.AveragePooling2D(pool_size=[3, 3], strides=[1, 1], padding='same')(x)maxconv11 = layers.Conv2D((int)(inceptionV3_Two[keys_two[i]][9]), kernel_size=[1, 1], strides=[1, 1], padding='same')(maxpool)maxconv11relu = layers.BatchNormalization()(maxconv11)maxconv11relu = layers.Activation('relu')(maxconv11relu)x=tf.concat([conv11relu,conv3331relu,conv1531lastrelu,maxconv11relu],axis=3)conv11_three=layers.Conv2D(192, kernel_size=[1, 1], strides=[1, 1], padding='same')(x)conv11batch=layers.BatchNormalization()(conv11_three)conv11relu=layers.Activation('relu')(conv11batch)conv33_three=layers.Conv2D(320, kernel_size=[3, 3], strides=[2, 2], padding='valid')(conv11relu)conv33batch=layers.BatchNormalization()(conv33_three)conv33relu=layers.Activation('relu')(conv33batch)conv7711_three=layers.Conv2D(192, kernel_size=[1, 1], strides=[1, 1], padding='same')(x)conv77batch=layers.BatchNormalization()(conv7711_three)conv77relu=layers.Activation('relu')(conv77batch)conv7717_three=layers.Conv2D(192, kernel_size=[1, 7], strides=[1, 1], padding='same')(conv77relu)conv7717batch=layers.BatchNormalization()(conv7717_three)conv7717relu=layers.Activation('relu')(conv7717batch)conv7771_three=layers.Conv2D(192, kernel_size=[7, 1], strides=[1, 1], padding='same')(conv7717relu)conv7771batch=layers.BatchNormalization()(conv7771_three)conv7771relu=layers.Activation('relu')(conv7771batch)conv33_three=layers.Conv2D(192, kernel_size=[3, 3], strides=[2, 2], padding='valid')(conv7771relu)conv3377batch=layers.BatchNormalization()(conv33_three)conv3377relu=layers.Activation('relu')(conv3377batch)convmax_three=layers.MaxPool2D(pool_size=[3, 3], strides=[2, 2])(x)x=tf.concat([conv33relu,conv3377relu,convmax_three],axis=3)"""filter11:1x1的卷积核个数filter13:使用1x3,3x1卷积代替3x3卷积之前的1x1卷积核个数filter33:使用1x3,3x1卷积代替3x3卷积的个数filter15:使用3x3卷积代替5x5卷积之前的1x1卷积核个数filter55:使用3x3卷积代替5x5卷积个数filtermax:最大池化之后的1x1卷积核个数"""for i in range(2):conv11 = layers.Conv2D((int)(inceptionV3_Three[keys_three[i]][0]), kernel_size=[1, 1], strides=[1, 1], padding='same')(x)batchnormaliztion11 = layers.BatchNormalization()(conv11)conv11relu=layers.Activation('relu')(batchnormaliztion11)conv13 = layers.Conv2D((int)(inceptionV3_Three[keys_three[i]][1]), kernel_size=[1, 1], strides=[1, 1], padding='same')(x)batchnormaliztion13 = layers.BatchNormalization()(conv13)conv13relu=layers.Activation('relu')(batchnormaliztion13)conv33left = layers.Conv2D((int)(inceptionV3_Three[keys_three[i]][2]), kernel_size=[1, 3], strides=[1, 1], padding='same')(conv13relu)batchnormaliztion33left = layers.BatchNormalization()(conv33left)conv33leftrelu=layers.Activation('relu')(batchnormaliztion33left)conv33right = layers.Conv2D((int)(inceptionV3_Three[keys_three[i]][3]), kernel_size=[3, 1], strides=[1, 1], padding='same')(conv33leftrelu)batchnormaliztion33right = layers.BatchNormalization()(conv33right)conv33rightrelu=layers.Activation('relu')(batchnormaliztion33right)conv33rightleft=tf.concat([conv33leftrelu,conv33rightrelu],axis=3)conv15 = layers.Conv2D((int)(inceptionV3_Three[keys_three[i]][4]), kernel_size=[1, 1], strides=[1, 1], padding='same')(x)batchnormaliztion15 = layers.BatchNormalization()(conv15)conv15relu=layers.Activation('relu')(batchnormaliztion15)conv1533 = layers.Conv2D((int)(inceptionV3_Three[keys_three[i]][5]), kernel_size=[3, 3], strides=[1, 1], padding='same')(conv15relu)batchnormaliztion1533 = layers.BatchNormalization()(conv1533)conv1533relu=layers.Activation('relu')(batchnormaliztion1533)conv1533left = layers.Conv2D((int)(inceptionV3_Three[keys_three[i]][6]), kernel_size=[1, 3], strides=[1, 1], padding='same')(conv1533relu)batchnormaliztion1533left = layers.BatchNormalization()(conv1533left)conv1533leftrelu=layers.Activation('relu')(batchnormaliztion1533left)conv1533right = layers.Conv2D((int)(inceptionV3_Three[keys_three[i]][6]), kernel_size=[3, 1], strides=[1, 1], padding='same')(conv1533leftrelu)batchnormaliztion1533right = layers.BatchNormalization()(conv1533right)conv1533rightrelu=layers.Activation('relu')(batchnormaliztion1533right)conv1533leftright=tf.concat([conv1533right,conv1533rightrelu],axis=3)maxpool = layers.AveragePooling2D(pool_size=[3, 3], strides=[1, 1],padding='same')(x)maxconv11 = layers.Conv2D((int)(inceptionV3_Three[keys_three[i]][8]), kernel_size=[1, 1], strides=[1, 1], padding='same')(maxpool)batchnormaliztionpool = layers.BatchNormalization()(maxconv11)maxrelu = layers.Activation('relu')(batchnormaliztionpool)x=tf.concat([conv11relu,conv33rightleft,conv1533leftright,maxrelu],axis=3)x=layers.GlobalAveragePooling2D()(x)x=layers.Dense(1000)(x)softmax=layers.Activation('softmax')(x)model_inceptionV3=Model(inputs=input,outputs=softmax,name='InceptionV3')return model_inceptionV3model_inceptionV3=InceptionV3(inceptionV3_One,inceptionV3_Two,inceptionV3_Three)model_inceptionV3.summary()
5 最后
🧿 更多资料, 项目分享:
https://gitee.com/dancheng-senior/postgraduate
相关文章:

大创项目推荐 深度学习+python+opencv实现动物识别 - 图像识别
文章目录 0 前言1 课题背景2 实现效果3 卷积神经网络3.1卷积层3.2 池化层3.3 激活函数:3.4 全连接层3.5 使用tensorflow中keras模块实现卷积神经网络 4 inception_v3网络5 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 *…...

Debezium系列之:Flink SQL消费Debezium数据格式,同步数据到下游存储系统
Debezium系列之:Flink SQL消费Debezium数据格式,同步数据到下游存储系统 一、Debezium二、依赖三、使用Debezium Format四、可用元数据五、Format参数六、重复的变更事件七、消费 Debezium Postgres Connector 产生的数据八、数据类型映射一、Debezium Debezium 是一个 CDC(…...

webrtc支持的最小宽度和高度
代码在:h264/sps_parser.cc // // IMPORTANT ONES! Now were getting to resolution. First we read the pic // width/height in macroblocks (16x16), which gives us the base resolution, // and then we continue on until we hit the frame crop offsets, wh…...

虚拟机对象的创建
虚拟机对象 虚拟机在Java堆中对象分配、布局和访问的访问过程 对象的创建 Java对象的创建步骤: 1)类加载检查 虚拟机遇到一条 new 指令时,首先将去检查这个指令的参数是否能在常量池中定位到这个类的符号引用,并且检查这个符号…...

阿里云吴结生:云计算是企业实现数智化的阶梯
云布道师 近年来,越来越多人意识到,我们正处在一个数据爆炸式增长的时代。IDC 预测 2027 年全球产生的数据量将达到 291 ZB,与 2022 年相比,增长了近 2 倍。其中 75% 的数据来自企业,每一个现代化的企业都是一家数据公…...

MySQL——复合查询
目录 一.基本查询回顾 二. 多表查询 三.自连接 四.子查询 1.单行子查询 2.多行子查询 3.多列子查询 4.在from子句中使用子查询 5.合并查询 一.基本查询回顾 准备数据库: 查询工资高于500或岗位为MANAGER的雇员,同时还要满足他们的姓名首字母为…...

mysql 23-3day 数据库授权(DCL)
目录 创建一个用户 并授权(grant)设置最大连接数客户端链接服务器创建用户删除用户修改用户修改密码root修改自己密码授予 mysql 权限收回权限收回权限刷新一下授权表mydql 知识点确保 mysql 用户为普通用户删除空口令账号安全建议 创建一个用户 并授权&…...

OpenHarmony之内核层解析~
OpenHarmony简介 技术架构 OpenHarmony整体遵从分层设计,从下向上依次为:内核层、系统服务层、框架层和应用层。系统功能按照“系统 > 子系统 > 组件”逐级展开,在多设备部署场景下,支持根据实际需求裁剪某些非必要的组件…...

Chatgpt如何共享可以防止封号!
ChatGPT 是一个基于 GPT-3.5/GPT-4 模型的对话系统,它主要用于处理自然语言对话。通过训练模型来模拟人类的语言行为,ChatGPT 可以通过文本交流与用户互动。每个新版本的 GPT 通常都会在模型规模、性能和其他方面有一些改进。在目前免费版GPT-3.5 中&…...

智能优化算法应用:基于社交网络算法3D无线传感器网络(WSN)覆盖优化 - 附代码
智能优化算法应用:基于社交网络算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于社交网络算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.社交网络算法4.实验参数设定5.算法结果6.…...

thinkphp+vue+mysql酒店客房管理系统 b1g8z
本系统包括前台界面、用户界面和管理员界面、员工界面。在前台界面里游客和用户可以浏览客房信息、公告信息等,用户可以预定客房,在用户中心界面里,用户可以管理预定信息,管理员负责用户预定的审核以及客房的发布、用户的入住等。…...

nodejs+vue+ElementUi摄影作品图片分享工作室管理系统
第1周 2.21~2.27 查阅资料,学习vscode开发平台和vue框架技术 第2周 2.28~3.6 对软件功能需求进行分析, 软件功能模块划分及软件界面设计 第3周 3.7~3.13 撰写并提交毕业设计开题报告、英文资料翻译 第4周 3.14࿵…...

详解FreeRTOS:专栏总述
目录 1、理论篇 2、基础篇 3、进阶篇 4、高级篇 5、拓展篇 本专栏基于FreeRTOS底层源码介绍了嵌入式实时操作系统的概念,FreeRTOS任务创建、任务调度、任务同步与消息传递,软件定时器、事件通知等知识。 主要分为5方面内容:理论篇、基础…...

在 linux 服务器上安装Redis数据库
先打开我们的Linux服务器 终端执行 安装redis sudo yum install redis然后 他会提示你要占多少磁盘空间 例如 我这里是 1.7 M 没问题就 y 然后回车就可以了 然后 我们这里执行 redis-cli --version这样 就能看到版本了 然后 我们可以根据版本选择启动命令 使用systemctl命…...

阿里云经济型、通用算力型、计算型、通用型、内存型云服务器最新活动报价
阿里云作为国内领先的云计算服务提供商,提供了多种规格的云服务器供用户选择。为了满足不同用户的需求,阿里云推出了经济型、通用算力型、计算型、通用型和内存型等不同类型的云服务器。下面将详细介绍这些云服务器的最新活动报价。 一、阿里云特惠云服…...

回溯算法 典型习题
vector<vector<int>> res; vector<int> path;void dfs() {if (递归终止条件){res.push_back(path);return;}// 递归方向for (xxx) {path.push_back(val);dfs();path.pop_back();} } 1.涉及枚举 2.不确定 for 循环的次数 总结 枚举各种可能的情况。 0.直接…...

14. 从零用Rust编写正反向代理, HTTP文件服务器的实现过程及参数
wmproxy wmproxy是由Rust编写,已实现http/https代理,socks5代理, 反向代理,静态文件服务器,内网穿透,配置热更新等, 后续将实现websocket代理等,同时会将实现过程分享出来ÿ…...

【随笔】MD5加密字符串、文件apache、springframework实现
文章目录 一、引入依赖二、工具代码三、测试代码四、输出结果 一、引入依赖 commons-codec <dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId><version>1.13</version> </dependency>二…...

java八股 设计模式
企业场景篇-03-设计模式-工厂设计模式-工厂方法模式_哔哩哔哩_bilibili 1.简单工厂模式 新加咖啡类的时候需要在唯一的那个工厂类里加代码,这样就耦合了 2.工厂模式 相对于简单模式的一个工厂生产所有咖啡,这里只定义了一个抽象咖啡工厂,然…...

Docker安装(CentOS)+简单使用
Docker安装(CentOS) 一键卸载旧的 sudo yum remove docker* 一行代码(自动安装) 使用官方安装脚本 curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun 启动 docker并查看状态 运行镜像 hello-world docker run hello-world 简单使用 使用 docker run …...

Mybatis配置-环境配置(environments)
MyBatis支持配置多个环境,这有助于将您的SQL映射应用于多个数据库,无论出于何种原因。例如,您可能希望为开发、测试和生产环境使用不同的配置。或者,您可能有多个共享相同模式的生产数据库,并且想要在两者上使用相同的…...

Android模拟器的安装和adb连接
一、前置说明 APP 自动化可以使用真机进行测试,也可以使用模拟器来模拟安卓设备。我们可以根据个人喜好安装模拟器,个人推荐安装两款模拟器:网易 MuMu 模拟器、夜神模拟器。 MuMu模拟器可以支持 Android 12 版本,优点是…...

引领创新潮流,武汉灰京文化开创游戏行业新推广标杆
作为市场引领者,武汉灰京文化通过多渠道、多维度的市场推广手段,不仅助力游戏产品广泛传播,更为整个游戏行业树立了新的推广标杆。公司的成功经验为其他游戏发行商提供了有力的借鉴,推动了行业向更创新、更多元的方向发展。 引领…...

HTML5文档
目录 HTML5文档结构1.HTML5页面结构2.HTML5新增结构元素 HTML5新增页面元素1.hgroup标记2.figure标记与figcaption标记3.mark标记与time标记4.details标记与summary标记5.progress标记与meter标记6.input标记与datalist标记 HTML5文档结构 HTML5文档结构同样是由头部和主体两部…...

springboot实现发送邮件开箱即用
springboot实现发送邮件开箱即用 环境依赖包yml配置Service层Controller层测试 环境 jdk17 springboot版本3.2.1 依赖包 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId><ver…...

论文阅读——RS DINO
RS DINO: A Novel Panoptic Segmentation Algorithm for High Resolution Remote Sensing Images 基于MASKDINO模型,加了两个模块: BAM:Batch Attention Module 遥感图像切分的时候把一个建筑物整体比如飞机场切分到不同图片中,…...

【即插即用篇】YOLOv8改进实战 | 引入 Involution(内卷),用于视觉识别的新一代神经网络!涨点神器!
YOLOv8专栏导航:点击此处跳转 前言 YOLOv8 是由 YOLOv5 的发布者 Ultralytics 发布的最新版本的 YOLO。它可用于对象检测、分割、分类任务以及大型数据集的学习,并且可以在包括 CPU 和 GPU 在内的各种硬件上执行。 YOLOv8是一种尖端的、最先进的 (SOTA) 模型,它建立在以前成…...

在Excel中,如何简单快速地删除重复项,这里提供详细步骤
当你在Microsoft Excel中使用电子表格时,意外地复制了行,或者如果你正在制作其他几个电子表格的合成电子表格,你将遇到需要删除的重复行。这可能是一项非常无脑、重复、耗时的任务,但有几个技巧可以让它变得更简单。 删除重复项 …...

【Kafka-Eagle】EFAK告警配置与实践
Kafka-Eagle是一个开源的Kafka集群监控与告警系统,可以帮助用户实现对Kafka集群的实时监控、性能指标收集以及异常告警等功能。下面是关于Kafka-Eagle的告警配置和实践的一般步骤: 安装和配置Kafka-Eagle: 下载最新版本的Kafka-Eagle安装包&a…...

机器学习 | 概率图模型
见微知著,睹始知终。 见到细微的苗头就能预知事物的发展方向,能透过微小的现象看到事物的本质,推断结论或者结果。 概率模型为机器学习打开了一扇新的大门,将学习的任务转变为计算变量的概率分布。 实际情况中,各个变量…...