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

Python精选200Tips:181-182

针对图像的经典卷积网络结构进化史及可视化

  • 针对图像的经典卷积网络结构进化史及可视化(续)
    • P181--MobileNet【2017】
      • 模型结构及创新性说明
      • 模型结构代码
        • MobileNet V1版本
        • MobileNet V2版本
        • MobileNet V3 版本
          • Small版本
          • Large版本
    • P182--EfficientNet【2019】
      • 模型结构及创新性说明
      • 模型结构代码
        • B1--B7版本

运行系统:macOS Sequoia 15.0
Python编译器:PyCharm 2024.1.4 (Community Edition)
Python版本:3.12
TensorFlow版本:2.17.0
Pytorch版本:2.4.1

往期链接:

1-56-1011-2021-3031-4041-50
51-60:函数61-70:类71-80:编程范式及设计模式
81-90:Python编码规范91-100:Python自带常用模块-1
101-105:Python自带模块-2106-110:Python自带模块-3
111-115:Python常用第三方包-频繁使用116-120:Python常用第三方包-深度学习
121-125:Python常用第三方包-爬取数据126-130:Python常用第三方包-为了乐趣
131-135:Python常用第三方包-拓展工具1136-140:Python常用第三方包-拓展工具2

Python项目实战

141-145146-150151-155156-160161-165166-170171-175176-180

针对图像的经典卷积网络结构进化史及可视化(续)

P181–MobileNet【2017】

模型结构及创新性说明

MobileNet是一系列为移动和嵌入式视觉应用设计的轻量级卷积神经网络。以下是MobileNet各个版本的的主要特点:

(1)MobileNetV1版本

主要特点

  • 引入深度可分离卷积(Depthwise Separable Convolution)
  • 使用宽度乘子(Width Multiplier)和分辨率乘子(Resolution Multiplier)调整模型大小和复杂度

创新点

  • 深度可分离卷积将标准卷积分解为深度卷积和逐点卷积,大大减少了计算量
  • 使用ReLU6作为激活函数,有利于低精度计算

(2)MobileNetV2版本

主要特点

  • 引入倒置残差结构(Inverted Residual Structure)
  • 设计线性瓶颈(Linear Bottleneck)

创新点

  • 倒置残差结构先扩展通道数,再做深度卷积,最后压缩回原来的通道数
  • 去掉了最后一个ReLU,使用线性激活,有助于保留低维特征

(3)MobileNetV3

主要特点

  • 网络结构搜索(NAS)优化的网络架构
  • 引入新的激活函数:h-swish
  • 集成Squeeze-and-Excitation (SE) 模块
  • 提供Small和Large两个版本

创新点

  • 使用NAS自动搜索最优网络结构
  • h-swish激活函数提高了精度,同时计算效率高
  • SE模块增强了特征的表达能力
  • 优化了网络的首尾层,进一步提高效率

模型结构代码

MobileNet V1版本
import tensorflow as tf
from tensorflow.keras import layers, modelsdef depthwise_conv_block(inputs, pointwise_conv_filters, alpha,depth_multiplier=1, strides=(1, 1), block_id=1):"""Adds a depthwise convolution block.A depthwise convolution block consists of a depthwise conv,batch normalization, ReLU6, pointwise convolution,batch normalization and ReLU6 activation."""channel_axis = -1pointwise_conv_filters = int(pointwise_conv_filters * alpha)x = layers.DepthwiseConv2D((3, 3),padding='same',depth_multiplier=depth_multiplier,strides=strides,use_bias=False,name='conv_dw_%d' % block_id)(inputs)x = layers.BatchNormalization(axis=channel_axis, name='conv_dw_%d_bn' % block_id)(x)x = layers.ReLU(6., name='conv_dw_%d_relu' % block_id)(x)x = layers.Conv2D(pointwise_conv_filters, (1, 1),padding='same',use_bias=False,strides=(1, 1),name='conv_pw_%d' % block_id)(x)x = layers.BatchNormalization(axis=channel_axis, name='conv_pw_%d_bn' % block_id)(x)return layers.ReLU(6., name='conv_pw_%d_relu' % block_id)(x)def MobileNetV1(input_shape=(224, 224, 3),alpha=1.0,depth_multiplier=1,dropout=1e-3,classes=1000):"""Instantiates the MobileNet architecture.Arguments:input_shape: Optional shape tuple, to be specified if you wouldlike to use a model with an input img resolution that is not(224, 224, 3).alpha: Controls the width of the network. This is known as thewidth multiplier in the MobileNet paper.- If `alpha` < 1.0, proportionally decreases the numberof filters in each layer.- If `alpha` > 1.0, proportionally increases the numberof filters in each layer.- If `alpha` = 1, default number of filters from the paperare used at each layer.depth_multiplier: Depth multiplier for depthwise convolution.This is called the resolution multiplier in the MobileNet paper.dropout: Dropout rate.classes: Optional number of classes to classify images into.Returns:A Keras model instance."""img_input = layers.Input(shape=input_shape)x = layers.Conv2D(int(32 * alpha), (3, 3),strides=(2, 2),padding='same',use_bias=False,name='conv1')(img_input)x = layers.BatchNormalization(axis=-1, name='conv1_bn')(x)x = layers.ReLU(6., name='conv1_relu')(x)x = depthwise_conv_block(x, 64, alpha, depth_multiplier, block_id=1)x = depthwise_conv_block(x, 128, alpha, depth_multiplier, strides=(2, 2), block_id=2)x = depthwise_conv_block(x, 128, alpha, depth_multiplier, block_id=3)x = depthwise_conv_block(x, 256, alpha, depth_multiplier, strides=(2, 2), block_id=4)x = depthwise_conv_block(x, 256, alpha, depth_multiplier, block_id=5)x = depthwise_conv_block(x, 512, alpha, depth_multiplier, strides=(2, 2), block_id=6)x = depthwise_conv_block(x, 512, alpha, depth_multiplier, block_id=7)x = depthwise_conv_block(x, 512, alpha, depth_multiplier, block_id=8)x = depthwise_conv_block(x, 512, alpha, depth_multiplier, block_id=9)x = depthwise_conv_block(x, 512, alpha, depth_multiplier, block_id=10)x = depthwise_conv_block(x, 512, alpha, depth_multiplier, block_id=11)x = depthwise_conv_block(x, 1024, alpha, depth_multiplier, strides=(2, 2), block_id=12)x = depthwise_conv_block(x, 1024, alpha, depth_multiplier, block_id=13)x = layers.GlobalAveragePooling2D()(x)x = layers.Reshape((1, 1, int(1024 * alpha)))(x)x = layers.Dropout(dropout, name='dropout')(x)x = layers.Conv2D(classes, (1, 1),padding='same',name='conv_preds')(x)x = layers.Reshape((classes,), name='reshape_2')(x)x = layers.Activation('softmax', name='act_softmax')(x)model = models.Model(img_input, x, name='mobilenet_v1')return model# 创建MobileNet V1模型
model = MobileNetV1(input_shape=(224, 224, 3), classes=1000)# 打印模型摘要
model.summary()

可以通过调整alpha参数来创建不同大小的MobileNetV1模型:

custom_model = MobileNetV1(input_shape=(224, 224, 3), classes=10, alpha=0.75)
custom_model.summary()

这将创建一个稍微窄一些(alpha=0.75)的MobileNet模型,用于10类分类任务。

MobileNet V2版本
import tensorflow as tf
from tensorflow.keras import layers, modelsdef inverted_residual_block(inputs, filters, stride, expand_ratio, alpha):input_channels = inputs.shape[-1]pointwise_filters = int(filters * alpha)# Expansion phasex = layers.Conv2D(int(input_channels * expand_ratio), kernel_size=1, padding='same', use_bias=False)(inputs)x = layers.BatchNormalization()(x)x = layers.ReLU(6.)(x)# Depthwise Convolutionx = layers.DepthwiseConv2D(kernel_size=3, strides=stride, padding='same', use_bias=False)(x)x = layers.BatchNormalization()(x)x = layers.ReLU(6.)(x)# Projectionx = layers.Conv2D(pointwise_filters, kernel_size=1, padding='same', use_bias=False)(x)x = layers.BatchNormalization()(x)# Residual connection if possibleif stride == 1 and input_channels == pointwise_filters:return layers.Add()([inputs, x])return xdef MobileNetV2(input_shape=(224, 224, 3), num_classes=1000, alpha=1.0, include_top=True):inputs = layers.Input(shape=input_shape)# First Convolution Layerx = layers.Conv2D(int(32 * alpha), kernel_size=3, strides=(2, 2), padding='same', use_bias=False)(inputs)x = layers.BatchNormalization()(x)x = layers.ReLU(6.)(x)# Inverted Residual Blocksx = inverted_residual_block(x, filters=16, stride=1, expand_ratio=1, alpha=alpha)x = inverted_residual_block(x, filters=24, stride=2, expand_ratio=6, alpha=alpha)x = inverted_residual_block(x, filters=24, stride=1, expand_ratio=6, alpha=alpha)x = inverted_residual_block(x, filters=32, stride=2, expand_ratio=6, alpha=alpha)x = inverted_residual_block(x, filters=32, stride=1, expand_ratio=6, alpha=alpha)x = inverted_residual_block(x, filters=32, stride=1, expand_ratio=6, alpha=alpha)x = inverted_residual_block(x, filters=64, stride=2, expand_ratio=6, alpha=alpha)x = inverted_residual_block(x, filters=64, stride=1, expand_ratio=6, alpha=alpha)x = inverted_residual_block(x, filters=64, stride=1, expand_ratio=6, alpha=alpha)x = inverted_residual_block(x, filters=64, stride=1, expand_ratio=6, alpha=alpha)x = inverted_residual_block(x, filters=96, stride=1, expand_ratio=6, alpha=alpha)x = inverted_residual_block(x, filters=96, stride=1, expand_ratio=6, alpha=alpha)x = inverted_residual_block(x, filters=96, stride=1, expand_ratio=6, alpha=alpha)x = inverted_residual_block(x, filters=160, stride=2, expand_ratio=6, alpha=alpha)x = inverted_residual_block(x, filters=160, stride=1, expand_ratio=6, alpha=alpha)x = inverted_residual_block(x, filters=160, stride=1, expand_ratio=6, alpha=alpha)x = inverted_residual_block(x, filters=320, stride=1, expand_ratio=6, alpha=alpha)# Last Convolution Layerx = layers.Conv2D(int(1280 * alpha), kernel_size=1, use_bias=False)(x)x = layers.BatchNormalization()(x)x = layers.ReLU(6.)(x)if include_top:x = layers.GlobalAveragePooling2D()(x)x = layers.Dense(num_classes, activation='softmax')(x)model = models.Model(inputs, x, name='MobileNetV2')return model# 创建MobileNet V2模型
model = MobileNetV2(input_shape=(224, 224, 3), num_classes=1000)# 打印模型摘要
model.summary()
MobileNet V3 版本
Small版本
import tensorflow as tf
from tensorflow.keras import layers, modelsclass HSwish(layers.Layer):def call(self, x):return x * tf.nn.relu6(x + 3) / 6class HSigmoid(layers.Layer):def call(self, x):return tf.nn.relu6(x + 3) / 6def squeeze_excite_block(inputs, se_ratio=0.25):x = layers.GlobalAveragePooling2D()(inputs)filters = inputs.shape[-1]x = layers.Dense(max(1, int(filters * se_ratio)), activation='relu')(x)x = layers.Dense(filters, activation=HSigmoid())(x)x = layers.Reshape((1, 1, filters))(x)return layers.multiply([inputs, x])def bneck(inputs, out_channels, exp_channels, kernel_size, stride, se_ratio, activation, alpha=1.0):x = layers.Conv2D(int(exp_channels * alpha), 1, padding='same', use_bias=False)(inputs)x = layers.BatchNormalization()(x)x = activation(x)x = layers.DepthwiseConv2D(kernel_size, stride, padding='same', use_bias=False)(x)x = layers.BatchNormalization()(x)x = activation(x)if se_ratio:x = squeeze_excite_block(x, se_ratio)x = layers.Conv2D(int(out_channels * alpha), 1, padding='same', use_bias=False)(x)x = layers.BatchNormalization()(x)if stride == 1 and inputs.shape[-1] == int(out_channels * alpha):return layers.Add()([inputs, x])return xdef MobileNetV3Small(input_shape=(224, 224, 3), num_classes=1000, alpha=1.0, include_top=True):inputs = layers.Input(shape=input_shape)x = layers.Conv2D(16, 3, strides=2, padding='same', use_bias=False)(inputs)x = layers.BatchNormalization()(x)x = HSwish()(x)x = bneck(x, 16, 16, 3, 2, 0.25, layers.ReLU(), alpha)x = bneck(x, 24, 72, 3, 2, None, layers.ReLU(), alpha)x = bneck(x, 24, 88, 3, 1, None, layers.ReLU(), alpha)x = bneck(x, 40, 96, 5, 2, 0.25, HSwish(), alpha)x = bneck(x, 40, 240, 5, 1, 0.25, HSwish(), alpha)x = bneck(x, 40, 240, 5, 1, 0.25, HSwish(), alpha)x = bneck(x, 48, 120, 5, 1, 0.25, HSwish(), alpha)x = bneck(x, 48, 144, 5, 1, 0.25, HSwish(), alpha)x = bneck(x, 96, 288, 5, 2, 0.25, HSwish(), alpha)x = bneck(x, 96, 576, 5, 1, 0.25, HSwish(), alpha)x = bneck(x, 96, 576, 5, 1, 0.25, HSwish(), alpha)x = layers.Conv2D(int(576 * alpha), 1, padding='same', use_bias=False)(x)x = layers.BatchNormalization()(x)x = HSwish()(x)x = layers.GlobalAveragePooling2D()(x)x = layers.Reshape((1, 1, int(576 * alpha)))(x)x = layers.Conv2D(int(1024 * alpha), 1, padding='same')(x)x = HSwish()(x)if include_top:x = layers.Conv2D(num_classes, 1, padding='same', activation='softmax')(x)x = layers.Reshape((num_classes,))(x)model = models.Model(inputs, x, name='MobileNetV3Small')return model# 创建MobileNet V3 Small模型
model = MobileNetV3Small(input_shape=(224, 224, 3), num_classes=1000)# 打印模型摘要
model.summary()
Large版本
import tensorflow as tf
from tensorflow.keras import layers, modelsclass HSwish(layers.Layer):def call(self, x):return x * tf.nn.relu6(x + 3) / 6class HSigmoid(layers.Layer):def call(self, x):return tf.nn.relu6(x + 3) / 6def squeeze_excite_block(inputs, se_ratio=0.25):x = layers.GlobalAveragePooling2D()(inputs)filters = inputs.shape[-1]x = layers.Dense(max(1, int(filters * se_ratio)), activation='relu')(x)x = layers.Dense(filters, activation=HSigmoid())(x)x = layers.Reshape((1, 1, filters))(x)return layers.multiply([inputs, x])def bneck(inputs, out_channels, exp_channels, kernel_size, stride, se_ratio, activation, alpha=1.0):x = layers.Conv2D(int(exp_channels * alpha), 1, padding='same', use_bias=False)(inputs)x = layers.BatchNormalization()(x)x = activation(x)x = layers.DepthwiseConv2D(kernel_size, stride, padding='same', use_bias=False)(x)x = layers.BatchNormalization()(x)x = activation(x)if se_ratio:x = squeeze_excite_block(x, se_ratio)x = layers.Conv2D(int(out_channels * alpha), 1, padding='same', use_bias=False)(x)x = layers.BatchNormalization()(x)if stride == 1 and inputs.shape[-1] == int(out_channels * alpha):return layers.Add()([inputs, x])return xdef MobileNetV3Large(input_shape=(224, 224, 3), num_classes=1000, alpha=1.0, include_top=True):inputs = layers.Input(shape=input_shape)x = layers.Conv2D(16, 3, strides=2, padding='same', use_bias=False)(inputs)x = layers.BatchNormalization()(x)x = HSwish()(x)x = bneck(x, 16, 16, 3, 1, None, layers.ReLU(), alpha)x = bneck(x, 24, 64, 3, 2, None, layers.ReLU(), alpha)x = bneck(x, 24, 72, 3, 1, None, layers.ReLU(), alpha)x = bneck(x, 40, 72, 5, 2, 0.25, layers.ReLU(), alpha)x = bneck(x, 40, 120, 5, 1, 0.25, layers.ReLU(), alpha)x = bneck(x, 40, 120, 5, 1, 0.25, layers.ReLU(), alpha)x = bneck(x, 80, 240, 3, 2, None, HSwish(), alpha)x = bneck(x, 80, 200, 3, 1, None, HSwish(), alpha)x = bneck(x, 80, 184, 3, 1, None, HSwish(), alpha)x = bneck(x, 80, 184, 3, 1, None, HSwish(), alpha)x = bneck(x, 112, 480, 3, 1, 0.25, HSwish(), alpha)x = bneck(x, 112, 672, 3, 1, 0.25, HSwish(), alpha)x = bneck(x, 160, 672, 5, 2, 0.25, HSwish(), alpha)x = bneck(x, 160, 960, 5, 1, 0.25, HSwish(), alpha)x = bneck(x, 160, 960, 5, 1, 0.25, HSwish(), alpha)x = layers.Conv2D(int(960 * alpha), 1, padding='same', use_bias=False)(x)x = layers.BatchNormalization()(x)x = HSwish()(x)x = layers.GlobalAveragePooling2D()(x)x = layers.Reshape((1, 1, int(960 * alpha)))(x)x = layers.Conv2D(int(1280 * alpha), 1, padding='same')(x)x = HSwish()(x)if include_top:x = layers.Conv2D(num_classes, 1, padding='same', activation='softmax')(x)x = layers.Reshape((num_classes,))(x)model = models.Model(inputs, x, name='MobileNetV3Large')return model# 创建MobileNet V3 Large模型
model = MobileNetV3Large(input_shape=(224, 224, 3), num_classes=1000)# 打印模型摘要
model.summary()

P182–EfficientNet【2019】

模型结构及创新性说明

EfficientNet是由Google研究人员在2019年提出的一系列卷积神经网络模型,旨在提高模型效率和准确性。以下是EfficientNet的主要特点:

模型结构

  • 基于MobileNetV2的倒置残差结构
  • 使用Squeeze-and-Excitation (SE) 块
  • 采用复合缩放方法

创新性:

  • 提出了复合缩放方法,同时缩放网络的宽度、深度和分辨率
  • 通过神经架构搜索(NAS)优化基础网络结构
  • 在同等计算资源下,实现了更高的准确率

模型结构代码

B0版本

import matplotlib.pyplot as plt
import tensorflow as tf
from keras.utils import plot_model
from tensorflow.keras import layers, models# macos系统显示中文
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']def swish(x):return x * tf.nn.sigmoid(x)def se_block(inputs, se_ratio):channels = inputs.shape[-1]x = layers.GlobalAveragePooling2D()(inputs)x = layers.Dense(max(1, int(channels * se_ratio)), activation=swish)(x)x = layers.Dense(channels, activation='sigmoid')(x)return layers.Multiply()([inputs, x])def mbconv_block(inputs, out_channels, expand_ratio, stride, kernel_size, se_ratio):channels = inputs.shape[-1]x = inputs# Expansion phaseif expand_ratio != 1:expand_channels = channels * expand_ratiox = layers.Conv2D(expand_channels, 1, padding='same', use_bias=False)(x)x = layers.BatchNormalization()(x)x = layers.Activation(swish)(x)# Depthwise Convx = layers.DepthwiseConv2D(kernel_size, stride, padding='same', use_bias=False)(x)x = layers.BatchNormalization()(x)x = layers.Activation(swish)(x)# Squeeze and Excitationif se_ratio:x = se_block(x, se_ratio)# Output phasex = layers.Conv2D(out_channels, 1, padding='same', use_bias=False)(x)x = layers.BatchNormalization()(x)if stride == 1 and channels == out_channels:x = layers.Add()([inputs, x])return xdef efficientnet(width_coefficient, depth_coefficient, resolution, dropout_rate):base_architecture = [# expansion, channels, repeats, stride, kernel_size[1, 16, 1, 1, 3],[6, 24, 2, 2, 3],[6, 40, 2, 2, 5],[6, 80, 3, 2, 3],[6, 112, 3, 1, 5],[6, 192, 4, 2, 5],[6, 320, 1, 1, 3]]inputs = layers.Input(shape=(resolution, resolution, 3))x = layers.Conv2D(32, 3, strides=2, padding='same', use_bias=False)(inputs)x = layers.BatchNormalization()(x)x = layers.Activation(swish)(x)for i, (expansion, channels, repeats, stride, kernel_size) in enumerate(base_architecture):channels = int(channels * width_coefficient)repeats = int(repeats * depth_coefficient)for j in range(repeats):x = mbconv_block(x, channels, expansion, stride if j == 0 else 1, kernel_size, se_ratio=0.25)x = layers.Conv2D(1280, 1, padding='same', use_bias=False)(x)x = layers.BatchNormalization()(x)x = layers.Activation(swish)(x)x = layers.GlobalAveragePooling2D()(x)if dropout_rate > 0:x = layers.Dropout(dropout_rate)(x)outputs = layers.Dense(1000, activation='softmax')(x)model = tf.keras.Model(inputs, outputs)return model# EfficientNet-B0 configuration
def efficientnet_b0():return efficientnet(width_coefficient=1.0,depth_coefficient=1.0,resolution=224,dropout_rate=0.2)# Create the model
model_b0 = efficientnet_b0()# Print model summary
model_b0.summary()# 将模型结构输出到pdf
plot_model(model_b0, to_file='model_b0.pdf', show_shapes=True,show_layer_names=True)
B1–B7版本
def efficientnet_b1():return efficientnet(width_coefficient=1.0, depth_coefficient=1.1, resolution=240, dropout_rate=0.2)def efficientnet_b2():return efficientnet(width_coefficient=1.1, depth_coefficient=1.2, resolution=260, dropout_rate=0.3)def efficientnet_b3():return efficientnet(width_coefficient=1.2, depth_coefficient=1.4, resolution=300, dropout_rate=0.3)def efficientnet_b4():return efficientnet(width_coefficient=1.4, depth_coefficient=1.8, resolution=380, dropout_rate=0.4)def efficientnet_b5():return efficientnet(width_coefficient=1.6, depth_coefficient=2.2, resolution=456, dropout_rate=0.4)def efficientnet_b6():return efficientnet(width_coefficient=1.8, depth_coefficient=2.6, resolution=528, dropout_rate=0.5)def efficientnet_b7():return efficientnet(width_coefficient=2.0, depth_coefficient=3.1, resolution=600, dropout_rate=0.5)

相关文章:

Python精选200Tips:181-182

针对图像的经典卷积网络结构进化史及可视化 针对图像的经典卷积网络结构进化史及可视化&#xff08;续&#xff09;P181--MobileNet【2017】模型结构及创新性说明模型结构代码MobileNet V1版本MobileNet V2版本MobileNet V3 版本Small版本Large版本 P182--EfficientNet【2019】…...

SpringCloud 配置 feign.hystrix.enabled: true 不生效

SpringCloud 配置 feign.hystrix.enabled: true 不生效的原因 feign 启用 hystrix feign 默认没有启用 hystrix&#xff0c;添加配置&#xff0c;启用 hystrix feign.hystrix.enabledtrue application.yml 添加配置 feign:hystrix:enabled: true启用 hystrix 后&#xff0c;访…...

9.24-k8s服务发布

Ingress 使用域名发布 K8S 服务 部署项目 一、先部署mariadb [rootk8s-master ~]# mkdir aaa [rootk8s-master ~]# cd aaa/ [rootk8s-master aaa]# # 先部署mariadb [rootk8s-master aaa]# # configmap [rootk8s-master aaa]# vim mariadb-configmap.yaml apiVersion: v1 ki…...

UI设计师面试整理-作品集展示

在UI设计师的面试中,作品集展示是非常关键的一环。它不仅展示了你的设计技能和风格,也让面试官了解你的设计思维和解决问题的能力。下面是如何有效地准备和展示你的作品集的建议: 1. 选择合适的项目 ● 多样性:选择能展示你在不同领域或平台上的设计能力的项目。确保作品集…...

CMU 10423 Generative AI:lec10(few-shot、提示工程、上下文学习)

文章目录 1 概述2 摘录2.1 zero-shot 和 few-shot一、Zero-shot Learning&#xff08;零样本学习&#xff09;特点&#xff1a;工作原理&#xff1a;优点&#xff1a;缺点&#xff1a; 二、Few-shot Learning&#xff08;少样本学习&#xff09;特点&#xff1a;工作原理&#…...

做数据抓取工作要如何选择ip池

选择合适的IP池对于数据抓取工作至关重要。一个优质的IP池可以提高抓取的效率和成功率&#xff0c;同时减少被目标网站封禁的风险。以下是选择IP池时需要考虑的一些关键因素&#xff1a; 1. IP类型 住宅IP&#xff1a;住宅IP通常来自真实用户&#xff0c;难以被识别为代理。它…...

防止电脑电池老化,禁止usb或者ac接口调试时充电

控制android系统&#xff0c;开发者模式&#xff0c;开启和禁止充电 连接 Android 手机到电脑的 USB 端口。 下载并安装 Android Debug Bridge (ADB) 工具[1]。 USB&#xff1a; 在命令行中输入 adb shell dumpsys battery set usb 0&#xff0c;以禁止 USB 充电。 在命令…...

智权半导体/SmartDV力助高速发展的中国RISC-V CPU IP厂商走上高质量发展之道

作者&#xff1a;Karthik Gopal SmartDV Technologies亚洲区总经理 智权半导体科技&#xff08;厦门&#xff09;有限公司总经理 进入2024年&#xff0c;全球RISC-V社群在技术和应用两个方向上都在加快发展&#xff0c;中国国内的RISC-V CPU IP提供商也在内核性能和应用扩展…...

利用vue-capper封装一个可以函数式调用图片裁剪组件

1. 效果 const cropData await wqCrop({prop:{img,autoCrop: true, // 是否开启截图框maxImgSize: 600,autoCropWidth: 30,canMove: true, // 图片是否可移动canMoveBox: true, // 截图框是否可移动fixedBox: false, // 截图框是否固定}});console.log(cropData);使用wqCrop会…...

在系统开发中提升 Excel 数据导出一致性与可维护性的统一规范与最佳实践

背景&#xff1a; 在系统开发过程中&#xff0c;数据导出为 Excel 格式是一个常见的需求。然而&#xff0c;由于各个开发人员的编码习惯和实现方式不同&#xff0c;导致导出代码风格不一。有的人使用第三方库&#xff0c;有的人则自定义实现。这种多样化不仅影响了代码的一致性…...

SpringAOP学习

面向切面编程&#xff0c;指导开发者如何组织程序结构 增强原始设计的功能 oop:面向对象编程 1.导入aop相关坐标&#xff0c;创建 <!--spring依赖--><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spri…...

智能网联汽车飞速发展,安全危机竟如影随形,如何破局?

随着人工智能、5G通信、大数据等技术的飞速发展&#xff0c;智能网联汽车正在成为全球汽车行业的焦点。特别是我国智能网联汽车市场规模近年来呈现快速增长态势&#xff0c;彰显了行业蓬勃发展的活力与潜力。然而&#xff0c;车联网技术的广泛应用也带来了一系列网络安全问题&a…...

Android常用C++特性之std::function

声明&#xff1a;本文内容生成自ChatGPT&#xff0c;目的是为方便大家了解学习作为引用到作者的其他文章中。 std::function 是 C 标准库中的一个 函数包装器&#xff0c;用于存储、复制、调用任何可以调用的目标&#xff08;如普通函数、lambda 表达式、函数对象、成员函数等&…...

人工智能与机器学习原理精解【27】

文章目录 集成学习集成学习概述集成学习的定义集成学习的性质集成学习的算法过程集成学习的算法描述集成学习的例子和例题Julia实现集成学习 集成学习数学原理一、基学习器的生成Bagging&#xff08;装袋法&#xff09;Boosting&#xff08;提升法&#xff09; 二、基学习器的结…...

XXL-JOB在SpringBoot中的集成

在SpringBoot中&#xff0c;XXL-JOB作为一个轻量级的分布式任务调度平台&#xff0c;提供了灵活的任务分片处理功能&#xff0c;这对于处理大规模、复杂的任务场景尤为重要。以下将详细探讨如何在SpringBoot中利用XXL-JOB实现灵活控制的分片处理方案&#xff0c;涵盖配置、代码…...

前端工程规范-3:CSS规范(Stylelint)

样式规范工具&#xff08;StyleLint&#xff09; Stylelint 是一个灵活且强大的工具&#xff0c;适用于保持 CSS 代码的质量和一致性。结合其他工具&#xff08;如 Prettier 和 ESLint&#xff09;&#xff0c;可以更全面地保障前端代码的整洁性和可维护性。 目录 样式规范工具…...

Qt系列-1.Qt安装

Qt安装 0 简介 1.安装步骤 1.1 下载 进入qt中文网站:https://www.qt.io/zh-cn/ Qt开源社区版本:https://www.qt.io/download-open-source#source 1.2 安装 chmod +x qt-online-installer-linux-x64-4.8.0.run ./qt-online-installer-linux-x64-4.8.0.run 外网不能下载…...

《自控原理》最小相位系统

在复平面右半平面既没有零点&#xff0c;也没有极点的系统&#xff0c;称为最小相位系统&#xff0c;其余均为非最小相位系统。 从知乎看了一篇答案&#xff1a; https://www.zhihu.com/question/24163919 证明过程大概率比较难&#xff0c;我翻了两本自控的教材&#xff0c;…...

SpringBoot3脚手架

MySpringBootAPI SpringBoot3脚手架&#xff0c;基于SpringBoot3DruidPgSQLMyBatisPlus13FastJSON2Lombok&#xff0c;启动web容器为Undertow(非默认tomcat)&#xff0c;其他的请自行添加和配置。 <java.version>17</java.version> <springboot.version>3.3…...

【C语言软开面经】

C语言软开面经 malloc calloc realloc free动态分配内存malloccalloc函数&#xff1a;realloc 函数&#xff1a;free函数&#xff1a; 堆栈-内存分区栈区&#xff08;Stack&#xff09;&#xff1a;堆区&#xff08;Heap&#xff09;&#xff1a;全局&#xff08;静态&#xff…...

YOLOv11训练自己的数据集(从代码下载到实例测试)

文章目录 前言一、YOLOv11模型结构图二、环境搭建三、构建数据集四、修改配置文件①数据集文件配置②模型文件配置③训练文件配置 五、模型训练和测试模型训练模型验证模型推理 总结 前言 提示&#xff1a;本文是YOLOv11训练自己数据集的记录教程&#xff0c;需要大家在本地已…...

HTML粉色烟花秀

目录 系列文章 写在前面 完整代码 下载代码 代码分析 写在最后 系列文章 序号目录1HTML满屏跳动的爱心(可写字)2HTML五彩缤纷的爱心3HTML满屏漂浮爱心4...

从零开发操作系统

没有操作系统 要考虑放到什么位置 org 07c00h 我用nasm&#xff08;汇编编译&#xff09; 放到7c00处 ibm兼容机 AX发生变化 -寄存器 不可能做存储 内存- 代码段数据段 if else --指令 代码 int a -数据段 必须告诉计算机代码段从哪里开始 改变cs寄存器里面的值可以改变推进寄…...

SigmaStudio中部分滤波器算法有效性频谱分析

一、各类滤波器参数如下图设置 1.1、输入源白噪音经过如下算法处理后Notch\Band Pass\Band Stop&#xff0c;如下频谱分析图 1.2、输入源白噪音经过low pass后处理前后的频谱分析如如下 二、Notch滤波器配置图&#xff0c;如下 2.1、两串联、五个串联和未串联的Notch对白噪音…...

ArcGIS与ArcGIS Pro去除在线地图服务名单

我们之前给大家分享了很多在线地图集&#xff0c;有些地图集会带有制作者信息&#xff0c;在布局制图的时候会带上信息影响出图美观。 一套GIS图源集搞定&#xff01;清新规划底图、影像图、境界、海洋、地形阴影图、导航图 比如ArcGIS&#xff1a; 比如ArcGIS Pro&#xff1a…...

滚雪球学MySQL[10.1讲]:常见问题与解决

全文目录&#xff1a; 前言10. 常见问题与解决10.1 数据库连接问题10.1.1 无法连接到数据库10.1.2 连接超时10.1.3 连接数过多 10.2 性能问题10.2.1 查询速度慢10.2.2 数据库锁等待 10.3 数据完整性问题10.3.1 违反外键约束10.3.2 重复记录 10.4 安全问题10.4.1 SQL注入攻击10.…...

利用 Llama-3.1-Nemotron-51B 推进精度-效率前沿的发展

今天&#xff0c;英伟达™&#xff08;NVIDIA&#xff09;发布了一款独特的语言模型&#xff0c;该模型具有无与伦比的准确性和效率性能。Llama 3.1-Nemotron-51B 源自 Meta 的 Llama-3.1-70B&#xff0c;它采用了一种新颖的神经架构搜索&#xff08;NAS&#xff09;方法&#…...

SpringBoot+Thymeleaf发票系统

> 这是一个基于SpringBootSpringSecurityThymeleafBootstrap实现的简单发票管理系统。 > 实现了用户登录&#xff0c;权限控制&#xff0c;客户管理&#xff0c;发票管理等功能。 > 并且支持导出为 CSV / PDF / EXCEL 文件。 > 本项目是一个小型发票管理系统…...

Updates were rejected because the tip of your current branch is behind 的解决方法

1. 问题描述 当我们使用 git push 推送代码出现以下问题时&#xff1a; 2. 原因分析 这个错误提示表明当前本地分支落后于远程分支&#xff0c;因此需要先拉取远程的更改。 3. 解决方法 1、拉取远程更改 在终端中执行以下命令&#xff0c;拉取远程分支的更新并合并到本地…...

Redis桌面工具:Tiny RDM

1.Tiny RDM介绍 Tiny RDM&#xff08;Tiny Redis Desktop Manager&#xff09;是一个现代化、轻量级的Redis桌面客户端&#xff0c;支持Linux、Mac和Windows操作系统。它专为开发和运维人员设计&#xff0c;使得与Redis服务器的交互操作更加便捷愉快。Tiny RDM提供了丰富的Red…...

做任务领黄钻的网站/网络运营培训

删除逻辑 boolean del(taskName任务名称, busNo业务编号) keyqlscf_taskName_busNo 如果key存在 getRedisTemplate().delete(key) 获取逻辑 boolean get(taskName任务名称, busNo业务编号) keyqlscf_taskName_busNo 如果key存在 取出redis中key对应的value&#xff1a;getRe…...

wordpress 新安装 慢/金戈西地那非片

复制文件。 语法 FileCopy源&#xff0c;目标 FileCopy 语句语法包含以下命名参数&#xff1a; 部分说明source必需。 指定要复制的文件的名称的字符串表达式。 _源_可能包含目录或文件夹&#xff0c;和驱动器。目标必需。 指定的目标文件名称的字符串表达式。 _目标_可能包含目…...

哪个网站名片做的号/网站seo方案

随机生成姓名 public function getChar($num2) // $num为生成汉字的数量{$first array(赵,钱,孙,李,周,吴,郑,王,冯,陈,褚,卫,蒋,沈,韩,杨,朱,秦,尤,许,何,吕,施,张,孔,曹,严,华,金,魏,陶,姜,戚,谢,邹,喻,柏,水,窦,章,云,苏,潘,葛,奚,范,彭,郎,鲁,韦,昌,马,苗,凤,花,方,任,袁…...

php源码建站 一品资源/手游推广平台代理

本文通过列举出一些常见的实例来分析Python3.0与2.X版本的区别&#xff0c;是作者经验的总结&#xff0c;对于Python程序设计人员来说有不错的参考价值。具体如下&#xff1a;做为一个前端开发的码农&#xff0c;最近通过阅读最新版的《A byte of Python》并与老版本的《A byte…...

网站开发 实习报告/steam交易链接在哪

第一、二轮&#xff0c;由于家里有急事&#xff0c;弃权。 第三轮 后手拿下一盘 第四轮 先手再拿下一盘 第五轮 9&#xff1a;30要汇报一个项目&#xff0c;推也推不掉&#xff0c;想早点把棋结束&#xff0c;只想走激烈的变化&#xff0c;输掉了。 第六轮&#xff0c;汇报去了…...

建设银行招聘网站甘肃分行/信息流优化师证书

管理 Linux 系统中的文件和目录&#xff0c;除了可以设定普通权限和特殊权限外&#xff0c;还可以利用文件和目录具有的一些隐藏属性。chattr 命令&#xff0c;专门用来修改文件或目录的隐藏属性&#xff0c;只有 root 用户可以使用。该命令的基本格式为&#xff1a;[rootlocal…...