从头开始复现YOLOv3(一)模型搭建
YOLOv3训练模型搭建过程
- 1 解析模型的配置文件
- 2 搭建模型
YOLOv3和YOLOv1,YOLOv2比起来,有了较大的改变,后面的v4和v5都是在v3的基础上进行改进的。要想学会如何使用YOLOv3很简单,只需要在github上按照readme.md操作一遍就行,但想彻底搞明白YOLOv3的实现过程,单单将程序debug一遍还是不够的,最好的方式就是自己动手把整个模型给实现一遍。
本文做的就是这样一个工作,阅读本文之前,必须对YOLOv3的主体结构、大致过程有基本的了解,知道配置文件yolov3.cfg中的conventional、route、shortcut、upsample、yolo等这些模块各代表什么。
好的,让我们开始复现之旅。
1 解析模型的配置文件
先建立如图所示的目录结构
config中存放YOLOv3的配置文件,utils存放搭建模型所需的零部件
yolov3.cfg是yolov3的配置文件,parse_config.py用于解析配置文件
先在parse_config.py中写入下面的解析方法
def parse_model_config(path):"""Parses the yolo-v3 layer configuration file and returns module definitions该函数以配置文件作为输入,即解析配置文件解析时将每个块存储为字典,这些块的属性和值都以键值对的形式存储在字典中。解析过程中,我们将这些字典(由代码中的变量 block 表示)添加到列表 blocks 中。我们的函数将返回该 blocks。"""file = open(path, 'r')lines = file.read().split('\n')lines = [x for x in lines if x and not x.startswith('#')] # 去掉空行和注释lines = [x.rstrip().lstrip() for x in lines] # get rid of fringe whitespacesmodule_defs = []for line in lines:if line.startswith('['): # This marks the start of a new blockmodule_defs.append({}) # 往列表里添加一个空字典module_defs[-1]['type'] = line[1:-1].rstrip() # module_defs[-1]是一个字典,# 上面这条语句的意思是去掉空字符,并加入到字典里,因为方括号开头的行是像这个样子的:[convolutional]if module_defs[-1]['type'] == 'convolutional':module_defs[-1]['batch_normalize'] = 0 # TODO 为何这里BN要预先设为0?else:# 如果不是模块开始的标志,那么就直接去掉两侧的空字符,然后用等号将一行分割成键值对加入到字典中key, value = line.split("=")value = value.strip()module_defs[-1][key.rstrip()] = value.strip()return module_defs
可以写一个测试函数测试一下上面的解释函数:
if __name__ == '__main__':config_path = "../config/yolov3.cfg"module_defs = parse_model_config(config_path)print(module_defs)
输出:
2 搭建模型
在当前目录下建立一个名为 models.py的文件
在models.py的开头,导入需要的模块
import numpy as np
import torch
import torch.nn as nn
from utils.parse_config import parse_model_config
当然,除了上面这些,还需要一些模块,后面会讲
建立Darknet类,此为YOLOv3模型的主干,先在初始化函数中,写出模型所需要的属性
class Darknet(nn.Module):"""YOLOv3 object detection model"""def __init__(self, config_path, img_size=416):super(Darknet, self).__init__()self.module_defs = parse_model_config(config_path) # 解析配置文件,返回由block构成的列表self.hyperparams, self.module_list = create_modules(self.module_defs)# create_modules方法是将每个block转化为nn.Sequential()对象,然后再加入到nn.ModuleList()对象中self.yolo_layers = [layer[0] for layer in self.module_list if hasattr(layer[0], "metrics")]self.img_size = img_sizeself.seen = 0 #self.header_info = np.array([0, 0, 0, self.seen, 0], dtype=np.int32)
这里, config_path是配置文件的路径,img_size是图像的尺寸,self.yolo_layers,self.seen和self.header_info后面会将,这里先讲讲create_modules方法
在models.py文件中,加入下面的函数
def create_modules(blocks):"""将blocks中的模块,都转换为模型,存入到nn.ModuleList()对象中其中shortcut和route模块,使用的都是EmptyLayer类,yolo模块使用的是DetectionLayer类:param blocks: cfg文件被解析后,每个模块的属性和值,都以键值对的形式存储在一个字典中,然后这些字典又被装入一个列表中,blocks就是这个列表:return:返回模型的超参数信息,和nn.ModuleList()对象(因为模型的输入尺寸、学习率、batch_size等,也都被存储在了cfg文件中)"""net_info = blocks[0] # Captures the information about the input and pre-processing,即[net]层module_list = nn.ModuleList() #prev_filters = 3 # 初始通道数,因为彩色图片是RGB三通道,所以这里是3output_filters = [] # 每一层的输出通道,方便路由层(route层)追踪for index, x in enumerate(blocks[1:]): # 之所以从第1块开始,是因为第0块是[net]层module = nn.Sequential()# 之所以要在这里建立一个nn.Sequential对象,是因为一个模块可能有卷积层、BN层、激活层等,# 所以需要先统一装到一个容器中,这样才能装入到模型列表里面# check the type of block# create a new module for the block# append to module_listif (x["type"] == "convolutional"): # 如果是卷积模块# Get the info about the layer# 获取卷积层(Conv2d)的相关参数try:batch_normalize = int(x["batch_normalize"])# 为了防止卷积模块没有BN层,所以加入到try当中bias = False # 只要有BN,那么就相当于没有偏置,因为即便有,也会被BN给抹平except:batch_normalize = 0bias = Truefilters = int(x["filters"])padding = int(x["pad"]) # backbone中只要是卷积模块,就都会设置padkernel_size = int(x["size"])stride = int(x["stride"])if padding:# 如果设置 pad=0,那么padding就是0,说明没有填充pad = (kernel_size - 1) // 2else:pad = 0# Add the convolutional layerconv = nn.Conv2d(prev_filters, filters, kernel_size, stride, pad, bias=bias)module.add_module("conv_{0}".format(index), conv) # 将卷积层加入到容器中# Add the Batch Norm Layerif batch_normalize:bn = nn.BatchNorm2d(filters)module.add_module("batch_norm_{0}".format(index), bn) # 将BN层加入到容器中# Check the activation.# It is either Linear or a Leaky ReLU for YOLOactivation = x["activation"]if activation == "leaky":activn = nn.LeakyReLU(0.1, inplace=True)module.add_module("leaky_{0}".format(index), activn) # 将激活层加入到容器中# If it's an upsampling layer# We use Bilinear2dUpsamplingelif (x["type"] == "upsample"):stride = int(x["stride"])upsample = nn.Upsample(scale_factor=2, mode="bilinear") # TODO 这里会出现警告module.add_module("upsample_{}".format(index), upsample)# If it is a route layerelif (x["type"] == "route"):x["layers"] = x["layers"].split(',')# Start of a routestart = int(x["layers"][0]) # 路由层可能从前面第4层牵出一条线# end, if there exists one.如果只有一条线,那么到这里就结束了# 因为也有可能存在第二条线,所以这里使用异常机制try:end = int(x["layers"][1])except:end = 0# Positive annotation,如果route定位用的数字是正的,比如61,那么说明是第61层if start > 0:start = start - index # 第一条线的层数,减当前层数,得到的start为第一条线相对于本层的相对位置if end > 0:end = end - index # 第二条线的层数,减当前层数,得到的start为第二条线相对于本层的相对位置route = EmptyLayer() # 一个空层对象,在其他文件中定义module.add_module("route_{0}".format(index), route)# 获得route层的输出通道if end < 0:# 说明存在第二条线,因为当存在第二条线时,# 如果为绝对层数(位置),那么必然已经执行了end = end - index的操作,end必然已变为为负# 如果为相对层数(位置),那么end本身就是负的filters = output_filters[index + start] + output_filters[index + end]else:# 如果不存在第二条线# 如果不是负的,那么必然为0,因为不可能是正的,end为0说明不存在第二条线filters = output_filters[index + start]# shortcut corresponds to skip connectionelif x["type"] == "shortcut":shortcut = EmptyLayer()module.add_module("shortcut_{}".format(index), shortcut)# Yolo is the detection layerelif x["type"] == "yolo":mask = x["mask"].split(",")mask = [int(x) for x in mask]# 比如yolo1,mask = 0,1,2,经过上面的命令之后,变为[0, 1, 2]anchors = x["anchors"].split(",")anchors = [int(a) for a in anchors]anchors = [(anchors[i], anchors[i + 1]) for i in range(0, len(anchors), 2)]anchors = [anchors[i] for i in mask]# 最初anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326# yolo1的mask为[0, 1, 2],经过上面的操作# yolo1的anchors为[[10,13], [16,30], [30,61]]detection = DetectionLayer(anchors)module.add_module("Detection_{}".format(index), detection)# 将上面解析得到的模块加入到module_list(即循环之前定义的nn.ModuleList对象)中module_list.append(module)# 上面的各个模块,只有拼接模块和卷积模块会改变通道,# 所以只在 route 和 convolutional 中有给 filters 赋值# 其他模块仍然使用上一轮循环得到的通道output_filters.append(filters) # 将当前模块的输出通道数存入output_filters中# 将当前模块的输出通道赋值给 prev_filters,用于下一轮循环prev_filters = filtersreturn (net_info, module_list)
create_modules方法中,有三个地方需要注意一下,分别是EmptyLayer、Upsample和YOLOLayer
我们先来说说EmptyLayer,因为整个backbone模型被整合成了一个nn.Model_list()对象,而route模块做的仅仅是级联(torch.cat操作),shortcut模块做的仅仅是将不同模块的结果进行相加,它们的共同特点是:未必需要上一个模块的输出,但需要上好几个模块的输出,至于需要的是第几个模块,一个模块还是多个模块,这个暂时无法知道,所以直接在create_modules方法中,很难实习这个功能。
这个问题暂时先不处理,而是先定义一个空层来占位,由于nn.ModuleList中的元素必须为nn.Module的子类,所以在models.py中,可以这么定义EmptyLayer
class EmptyLayer(nn.Module): # 这个类是用来给route和shortcut模块凑数的,解析cfg文件时用到def __init__(self):super(EmptyLayer, self).__init__()# 为何没有forward函数?请仔细看Darknet类forward方法中的module_type == "route"的实现代码# 相当于将EmptyLayer的forward放到了Darknet类的forward中# 无论是route模块还是shortcut模块,都需要获得前面层的输出,这个在这里不太好实现# 所以这里写了一个加模块凑数,因为nn.ModuleList中的元素必须为nn.Module的子类
我们再来说说Upsample模块,要实现特征融合,那么必须将不同分支的网格处理成一样,这样才能进行级联,即torch.cat操作,对于backbone后面的分支,假设其网格为13×13,那么要和26×26的的分支进行级联,那么必须进行上采样,即Upsample操作。
下面是Upsample的实现代码:
import torch.nn.functional as F
class Upsample(nn.Module):""" nn.Upsample is deprecated """def __init__(self, scale_factor, mode="nearest"):super(Upsample, self).__init__()self.scale_factor = scale_factorself.mode = modedef forward(self, x):# 通过插值实现上采样x = F.interpolate(x, scale_factor=self.scale_factor, mode=self.mode)return x
关于F.interpolate用法,可以看这两个连接:
https://www.jianshu.com/p/0a30b2a3c103
https://www.cnblogs.com/wanghui-garcia/p/11399034.html
我们再来说一下YOLOLayer模块。我们要先明白,YOLOLayer模块到底在干什么?YOLO层主要干了两件事:
(1)解码;
(2)计算损失函数;
数据经过卷积模块后,在数据输入到YOLOLayer之前,其维度为(batch_size, 3*(5+num_classes), grid_size, grid_size),要将其转化为(batch_size, 3grid_sizegrid_size, 5+num_classes),不单单是维度的变换,还要讲目标框中心点坐标、高宽,置信度,各个类别的概率解析出来。比如,目标置信度、各个类别的概率,不在0-1之间,必须使用sigmoid函数将其转化到0-1之间。
解码的目的是为了计算损失函数,Redmon J在论文中并没有进行讲解YOLOv3的损失函数,不同版本的YOLOv3实现代码,其损失函数也不一样,这里我们选用教程代码的损失函数(暂时不管损失函数是什么,这个对我们搭建模型不影响):
YOLOLayer类的定义如下:
class YOLOLayer(nn.Module):"""Detection layer"""def __init__(self, anchors, num_classes, img_dim=416):super(YOLOLayer, self).__init__()self.anchors = anchorsself.num_anchors = len(anchors) # anchors的数量,一般是3self.num_classes = num_classes # 类别数量self.ignore_thres = 0.5 # 置信度阈值self.mse_loss = nn.MSELoss() # 均方差损失计算器self.bce_loss = nn.BCELoss() # 二分类交叉熵损失计算器self.obj_scale = 1 # 有目标的权重self.noobj_scale = 100 # TODO 无目标的权重,这么大不会导致样本不均衡吗?self.metrics = {} # 度量指标self.img_dim = img_dim # 输入图像的尺寸self.grid_size = 0 # 网格的长宽
接下来是forward函数,
def forward(self, x, targets=None, img_dim=None):"""yolo模块的功能主要有两个,一是对前面的模块进行解码,二是将不同分值的解码结果进行级联:param x: 其维度为(batch_size, num_anchors*anchor_attr, grid_size, grid_size):param targets:其维度为(6, 6):param img_dim:320:return: 维度为(batch_size, num_anchors*anchor_attr, grid_size, grid_size)"""print (x.shape) # 查看x的维度# Tensors for cuda supportFloatTensor = torch.cuda.FloatTensor if x.is_cuda else torch.FloatTensorLongTensor = torch.cuda.LongTensor if x.is_cuda else torch.LongTensorByteTensor = torch.cuda.ByteTensor if x.is_cuda else torch.ByteTensorself.img_dim = img_dimnum_samples = x.size(0) # 一个batch中样本的数量,即batch_sizegrid_size = x.size(2) # 获得输入数据的网格大小prediction = (x.view(num_samples, self.num_anchors, self.num_classes + 5, grid_size, grid_size).permute(0, 1, 3, 4, 2).contiguous())# (batch_size, 3, grid_size, grid_size, 85)print (prediction.shape) # 输出prediction的维度# Get outputs,注意,是在最后一个维度取切片x = torch.sigmoid(prediction[..., 0]) # Center x,维度为(batch_size, 3, grid_size, grid_size)y = torch.sigmoid(prediction[..., 1]) # Center y,维度为(batch_size, 3, grid_size, grid_size)w = prediction[..., 2] # Width,维度为(batch_size, 3, grid_size, grid_size)h = prediction[..., 3] # Height,维度为(batch_size, 3, grid_size, grid_size)pred_conf = torch.sigmoid(prediction[..., 4]) # Conf,维度为(batch_size, 3, grid_size, grid_size)pred_cls = torch.sigmoid(prediction[..., 5:]) # Cls pred.,维度为(batch_size, 3, grid_size, grid_size, 80)# If grid size does not match current we compute new offsetsif grid_size != self.grid_size:self.compute_grid_offsets(grid_size, cuda=x.is_cuda)
这里出现了一个self.compute_grid_offsets,这是在输入图片上加上网格,它的代码如下
def compute_grid_offsets(self, grid_size, cuda=True):"""该方法是给原图打上网格,该方法得到调用之后,将会多出如下属性:self.stride,self.grid_x,self.grid_y,self.scaled_anchors,self.anchor_h,self.anchor_w这里self.stride是一个数字,self.grid_x和self.grid_y的维度为(1, 1, g, g),g就是gred_sizeself.scaled_anchors的维度为(self.num_anchors,2),通常是(3, 2)self.anchor_h和self.anchor_w的维度均为(1, self.num_anchors, 1, 1)"""FloatTensor = torch.cuda.FloatTensor if cuda else torch.FloatTensor# 确定网格数量self.grid_size = grid_sizeg = self.grid_size# 计算步长self.stride = self.img_dim / self.grid_size# 生成一个网格矩阵self.grid_x = torch.arange(g).repeat(g, 1).view([1, 1, g, g]).type(FloatTensor)# torch.arange(g)生成一个一维数组,.repeat(g, 1)将其维度变成(g, g)# .view([1, 1, g, g])将其变成维度为[1, 1, g, g]的张量# .type(FloatTensor),张量转换# 将y方向的网格像上面一样处理self.grid_y = torch.arange(g).repeat(g, 1).t().view([1, 1, g, g]).type(FloatTensor)# 将anchor的高宽除以步长,即转化为相对于网格的长度self.scaled_anchors = FloatTensor([(a_w / self.stride, a_h / self.stride) for a_w, a_h in self.anchors])# 经过上述转化后,self.scaled_anchors的维度为(self.num_anchors,2),# 因为self.num_anchors通常为3,因此self.scaled_anchors的维度为(3,2)# 获得缩放后的anchor的宽和高,并变维self.anchor_w = self.scaled_anchors[:, 0:1].view((1, self.num_anchors, 1, 1))self.anchor_h = self.scaled_anchors[:, 1:2].view((1, self.num_anchors, 1, 1))# 上述两条命令字后,self.anchor_w和self.anchor_h的维度都是(1, self.num_anchors, 1, 1)
现在回到YOLOLayer类的forward的函数中
# Add offset and scale with anchors #特征图中的实际位置pred_boxes = FloatTensor(prediction[..., :4].shape)# pred_boxes的维度为(batch_size, 3, grid_size, grid_size, 4)# 将相对网格的位置转化为相对于整个特征图的位置,比如将0.5,0.5变为 11.5,11.5这样pred_boxes[..., 0] = x.data + self.grid_x# 维度为(batch_size, 3, grid_size, grid_size)的张量与维度为(1, 1, g, g)的张量之和# g等于grid_size# x.data的维度为(batch_size, 3, grid_size, grid_size)# x.data+self.grid_x 是为了把预测边框(阈值筛选和NMS前的预测结果)的中心坐标# 加上所在的网格数,得到每个边框相当于特征层的位置# 将边框中心点的纵坐标也作相似的处理pred_boxes[..., 1] = y.data + self.grid_y# 根据映射信息得到边框相对于特征图的高宽pred_boxes[..., 2] = torch.exp(w.data) * self.anchor_wpred_boxes[..., 3] = torch.exp(h.data) * self.anchor_h# 将边框、置信度、分类信息进行级联output = torch.cat((pred_boxes.view(num_samples, -1, 4) * self.stride, #还原到原始图中pred_conf.view(num_samples, -1, 1),pred_cls.view(num_samples, -1, self.num_classes),),-1,)if targets is None:# 如果输入的参数中没有标签,那么就可以直接返回了return output, 0else:# 如果有标签,那么需要计算损失函数iou_scores, class_mask, obj_mask, noobj_mask, tx, ty, tw, th, tcls, tconf = build_targets(pred_boxes=pred_boxes,pred_cls=pred_cls,target=targets,anchors=self.scaled_anchors,ignore_thres=self.ignore_thres,)# iou_scores:真实值与最匹配的anchor的IOU得分值 class_mask:分类正确的索引 obj_mask:目标框所在位置的最好anchor置为1 noobj_mask obj_mask那里置0,还有计算的iou大于阈值的也置0,其他都为1 tx, ty, tw, th, 对应的对于该大小的特征图的xywh目标值也就是我们需要拟合的值 tconf 目标置信度# Loss : Mask outputs to ignore non-existing objects (except with conf. loss)
这里出现了build_targets,这是标签转化函数,我们在utils文件夹中,新建一个utils.py文件,如下图所示:
在这里,我们写入 标签转化函数(关于 标签转化函数,这个我们在训练的时候再详细讨论,这里先把函数的贴过来,不让IDE报错),函数体仅用pass表示
import torchdef build_targets(pred_boxes, pred_cls, target, anchors, ignore_thres):pass
让我们回到forward函数中,现在可以计算损失函数和评价指标了
loss_x = self.mse_loss(x[obj_mask], tx[obj_mask]) # 只计算有目标的# self.mse_loss是一个nn.MSELoss()对象,其可以像函数一样调用loss_y = self.mse_loss(y[obj_mask], ty[obj_mask])loss_w = self.mse_loss(w[obj_mask], tw[obj_mask])loss_h = self.mse_loss(h[obj_mask], th[obj_mask])loss_conf_obj = self.bce_loss(pred_conf[obj_mask], tconf[obj_mask])loss_conf_noobj = self.bce_loss(pred_conf[noobj_mask], tconf[noobj_mask])loss_conf = self.obj_scale * loss_conf_obj + self.noobj_scale * loss_conf_noobj #loss_cls = self.bce_loss(pred_cls[obj_mask], tcls[obj_mask]) #分类损失total_loss = loss_x + loss_y + loss_w + loss_h + loss_conf + loss_cls #总损失# Metrics度量指标cls_acc = 100 * class_mask[obj_mask].mean() # 平均准确率,在乘100之前,class_mask就在0-1区间conf_obj = pred_conf[obj_mask].mean() # 平均置信度(有目标)conf_noobj = pred_conf[noobj_mask].mean()conf50 = (pred_conf > 0.5).float()iou50 = (iou_scores > 0.5).float()iou75 = (iou_scores > 0.75).float()detected_mask = conf50 * class_mask * tconfprecision = torch.sum(iou50 * detected_mask) / (conf50.sum() + 1e-16)recall50 = torch.sum(iou50 * detected_mask) / (obj_mask.sum() + 1e-16)recall75 = torch.sum(iou75 * detected_mask) / (obj_mask.sum() + 1e-16)self.metrics = {"loss": to_cpu(total_loss).item(),"x": to_cpu(loss_x).item(),"y": to_cpu(loss_y).item(),"w": to_cpu(loss_w).item(),"h": to_cpu(loss_h).item(),"conf": to_cpu(loss_conf).item(),"cls": to_cpu(loss_cls).item(),"cls_acc": to_cpu(cls_acc).item(),"recall50": to_cpu(recall50).item(),"recall75": to_cpu(recall75).item(),"precision": to_cpu(precision).item(),"conf_obj": to_cpu(conf_obj).item(),"conf_noobj": to_cpu(conf_noobj).item(),"grid_size": grid_size,}return output, total_loss
上面的代码中,出现了to_cpu,可以把这个函数写在utils/utils.py中,其定义如下:
def to_cpu(tensor):return tensor.detach().cpu()
让我们回到Darknet类中,刚刚在create_modules方法中,仅仅是将各个子模块放入到了nn.Module_List中,但并没有将各个具体子模块串联起来,当传入数据之后,数据是如何流动的,这个需要在forward中实现,在Darknet类中加入下面的函数:
def forward(self, x, targets=None):img_dim = x.shape[2]loss = 0layer_outputs = [] # 记录每一个模块的输出,方面route和shortcut模块的追踪yolo_outputs = [] # 记录每一个yolo模块的输出,方便将不同yolo模块的输出进行级联for i, (module_def, module) in enumerate(zip(self.module_defs, self.module_list)):# 这里module_def是一个解析cfg文件后的块,module是一个module_list对象if module_def["type"] in ["convolutional", "upsample", "maxpool"]:x = module(x)elif module_def["type"] == "route":x = torch.cat([layer_outputs[int(layer_i)] for layer_i in module_def["layers"].split(",")], 1)elif module_def["type"] == "shortcut":layer_i = int(module_def["from"])x = layer_outputs[-1] + layer_outputs[layer_i]elif module_def["type"] == "yolo":x, layer_loss = module[0](x, targets, img_dim) # 计算输出和损失函数loss += layer_lossyolo_outputs.append(x)layer_outputs.append(x)yolo_outputs = to_cpu(torch.cat(yolo_outputs, 1)) # 将几个yolo_outputs进行级联,yolo_ouput是列表return yolo_outputs if targets is None else (loss, yolo_outputs)
好了,到此为止,模型的搭建已经完成,这里可以写一个测试函数:
if __name__ == '__main__':file_path = r"config/yolov3.cfg"model = Darknet(file_path)test_input = torch.rand((2, 3, 416, 416))pred = model(test_input)print('-'*50)print(pred.shape)print(pred)
输出
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- 中国呼叫中心产业投资潜力及运营策略建议报告2021-2027年
中国呼叫中心产业投资潜力及运营策略建议报告2021-2027年 HS--HS--HS--HS--HS--HS--HS--HS--HS--HS--HS--HS--HS--HS-- 【修订日期】:2021年10月 【搜索鸿晟信合研究院查看官网更多内容!】 第一章 呼叫中心概述 1.1 呼叫中心的概念 1.1.1 呼叫中心…...
2024/4/20 8:34:04 - pip安装mayavi:卡在 building wheel for mayavi
复现代码时遇到no module named mayavi情况 直接pip install mayavi会出错 building wheel for mayavi 搜了一下一般是因为VTK版本过高 install自动下载的版本是9.0.2 网上还建议最好使用python3.7,3.8 3.9可能会失败 解决办法:安装低版本VTK8.1.2 直接…...
2024/4/19 20:36:41 - 【优化】MATLAB中用yalmip建模求解优化问题命令行无任何输出
正常来说无论有解还是无解都是会有一些提示信息的: 但是今天出现了无任何输出的情况,用value输出一些变量值也都是Nan,其实之前出现过同样的问题,但我忘了怎么解决的了。 最后用yalmiptest测试了一下,发现有gurobi许…...
2024/4/15 18:54:57 - DIY蓝牙键盘(2) - 理解HID报文描述符
1. 前情回顾 上篇主要讲了键盘报文的分类与格式,并留下了一个问题:那主机为什么知道我这些报文的格式?那肯定是主机要提前知道我们发的报文的格式,那么问题就变成了:在发送报文前我们要怎么通知主机,让它知…...
2024/4/19 4:51:18 - web概述
Web概念概述JavaWeb软件架构C/S:Client/Server 客户端/服务器端B/S:Browser/Server 浏览器/服务器资源分类静态资源动态资源:JavaWeb 使用java语言开发基于互联网的项目 软件架构 C/S:Client/Server 客户端/服务器端 在用户本…...
2024/4/20 2:00:15 - go 发送邮件 (支持发送多人、多文件)
背景:job执行作业需要同步一些数据,每天需要拉取最新的数据,并发送给负责人 1 自动生成文件 .txt .xls (不用管) 2 写一个能发邮件的接口 3 能做到发送给多个用户 4 能够支持发送多个文件 我用的是网易邮箱 前提:需要…...
2024/4/6 10:44:15 - html学习5
表单的初步认识 表单form <!doctype html> <html><head><title>表单的初步认识</title></head><body><!--form为表单,action的值为服务器的地址格式:action?namevalue&namevalue&namevalue&…...
2024/4/19 9:10:05 - 某高校计算机编程教授教你如何快速入门python,一文带你进入编程
如何快速入门Python 学习任何一门语言都是从入门(1年左右),通过不间断练习达到熟练水准(3到5年),少数人最终能精通语言,成为执牛耳者,他们是金字塔的最顶层。虽然万事开头难,但好的开始是成功的一半,今天这…...
2024/4/15 18:54:57 - 攻防世界,Misc:this_is_flag
根据题目提示 得到flag...
2024/4/15 18:55:57 - python log日志
#!usr/bin/env python # -*- coding:utf-8 _*- 日志功能:1、返回logger2、日志级别排序:CRITICAL > ERROR > WARNING > INFO > DEBUG3、避免重复打印日志,要及时清理句柄:# 每次被调用前,清空已经存在handler# self.logger.han…...
2024/4/20 16:29:02 - 如果只考虑有序树的情形,那么具有7个结点的不同形态的树共有(132)棵。
如果只考虑有序树的情形,那么具有7个结点的不同形态的树共有()棵。 A 132 B 154 C 429 D 均不正确 答案:A 解析过程: 结论一:具有n个结点有不同形态的树的数目和具有n-1个结点互不相似的二叉树的数目相同 分…...
2024/4/15 18:56:02 - go 发送邮件 (发送多人,多文件)
背景:job执行作业需要同步一些数据,每天需要拉取最新的数据,并发送给负责人 1 自动生成文件 .txt .xls (不用管) 2 写一个能发邮件的接口 3 能做到发送给多个用户 4 能够支持发送多个文件 我用的是网易邮箱 前提:需要…...
2024/4/15 18:55:47 - PCIE——地址空间访问机制
一、 PCI地址空间划分 1.1 CPU域和PCI总线域 PCI spec规定了PCI设备必须提供的单独地址空间,因此PCIe设备的地址空间和SoC(CPU)域的地址空间是分开的,根据王齐老师的**《PCI Express体系结构导读》**一书,存储器域包…...
2024/4/21 16:52:47 - SkyWalking中是如何统计方法调用时间的
1 前言 SkyWalKing中对每个方法和调用时间都进行了统计。那么他是如何实现的呢? 其实他是用了ByteBuddy和Java agent技术来统计方法的调用时长。 1.1 javaagent我在上一篇博客中已经提到过链接地址: https://blog.csdn.net/qq_50652600/articl…...
2024/4/18 4:38:57 - 2021-10-30 MarkDown学习
MarkDown学习 标题 字体 Hello world Hello world Hello world Hello world 引用 选择虾爆之怒 团战分割你和我 分割线 #### 图片 超链接 点击跳转到csgo官网 列表 a c a b c 表格 武器品质耐久太刀极品60阔刀优品50长枪良品40 代码 system.out.println("…...
2024/4/15 18:55:52 - pg逻辑复制和数据同步
本文主要讲如何通过pg的逻辑复制功能,利用kafka,同步数据到第三方数据库(比如elassticsearch)。 pg逻辑复制 关于pg逻辑复制需要先看以下文章:《PostgreSQL变更事件捕获 》《pg的时间线解析》 逻辑复制几个比较重要…...
2024/4/19 8:47:59 - 【填坑之旅-hadoop-03】hadoop2.10.1 wordcount(Mapper,Reducer,Job,ToolRunner,Tool,InputFormat,OutputFormat)
注意 eclipse 最后在有hadoop的centos的机器上直接跑,不然问题会比较多 或者打成jar包,通过 hadoop jar XXX.jar cn.itcast.hadoop.mr.wordcount.WCRunner 在yarn上跑 job运行流程 input->split->map->buffer->partition->merge->s…...
2024/4/22 15:55:18 - 不锈钢304、316、316L、304L、321、303、410、430的化学成分
不锈钢304、316、316L、304L、321、303、410、430的化学成分 不锈钢化学成分表 下表列出了各种不锈钢的化学成分图,包括奥氏体如SS 304、304L 316、316L、321、303、302、301、904L、201等,马氏体SS如440A、440C、440B 420等,铁素体SS 430&…...
2024/4/15 18:56:02 - 孤尽31天-day02
前言 第二天:数据库 一、建表规约 解决数据库相关名称的纠结选择合适的数据类型和长度 1、建表强制规约 1.1 表、字段命名: • 必须使用小写字母或数字 • 禁止出现数字开头 • 禁止两个下划线中间只出现数字 • 不使用复数名词 • 禁用保留字 • 是与…...
2024/4/15 18:55:37 - zzulioj:1064:加密字符:这题学好了很有意思
1064: 加密字符 时间限制: 1 Sec 内存限制: 128 MB 题目描述 从键盘输入一批字符,以结束,按要求加密并输出。 输入 从键盘输入一批字符,占一行,以结束。 输出 输出占一行 加密规则: 1)所有字母均转换为小写。 …...
2024/4/27 8:24:34
最新文章
- Linux防火墙相关命令以及ip白名单配置
Linux防火墙相关命令以及ip白名单配置 firewall防火墙基础命令查看防火墙的服务状态查看防火墙的状态服务的开启、关闭和重启查看防火墙规则端口的查询、开放和关闭重启防火墙 防火墙白名单配置部分参数介绍 firewall防火墙基础命令 查看防火墙的服务状态 systemctl status f…...
2024/4/27 12:39:52 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/3/20 10:50:27 - Go语言中如何实现继承
完整课程请点击以下链接 Go 语言项目开发实战_Go_实战_项目开发_孔令飞_Commit 规范_最佳实践_企业应用代码-极客时间 Go语言中没有传统意义上的类和继承的概念,但可以通过嵌入类型(embedded types)来实现类似的功能。嵌入类型允许一个结构…...
2024/4/23 6:14:42 - 腾讯云容器与Serverless的融合:探索《2023技术实践精选集》中的创新实践
腾讯云容器与Serverless的融合:探索《2023技术实践精选集》中的创新实践 文章目录 腾讯云容器与Serverless的融合:探索《2023技术实践精选集》中的创新实践引言《2023腾讯云容器和函数计算技术实践精选集》整体评价特色亮点分析Serverless与Kubernetes的…...
2024/4/23 0:21:15 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/4/26 18:09:39 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/4/26 20:12:18 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/4/26 23:05:52 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/4/27 4:00:35 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/4/25 18:39:22 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/4/25 18:39:22 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/4/26 21:56:58 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/4/27 9:01:45 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/4/26 16:00:35 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/4/25 18:39:16 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/4/25 18:39:16 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/4/26 19:03:37 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/4/26 22:01:59 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/4/25 18:39:14 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/4/26 23:04:58 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/4/25 2:10:52 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/4/25 18:39:00 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/4/26 19:46:12 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/4/27 11:43:08 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/4/27 8:32:30 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...
2022/11/19 21:17:16 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在iPhone上关闭“请勿打扰”
Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...
2022/11/19 21:16:57