文章目录

  • 一、思路
    • 1.1 YOLO对图像缩放算法的实现
    • 1.2 做数据集(json/xml解析)
    • 1.3 配置文件(anchor box等)
    • 1.4 造数据集(Mydataset.py)
    • 1.5 搭建网络(model.py)
    • 1.6 训练(Train.py)
    • 1.7 工具iou,nms(tool.py)
    • 1.8 侦测(detector.py)
  • 二、总结

代码目录(代码包含大量注释,有疑问的可以看注释)
在这里插入图片描述

一、思路

1.1 YOLO对图像缩放算法的实现

1)先做一个过拟合版本的YOLOv3,再大批量增加数据,则我们需要先取我们进行训练的数据,在这里我取了4张猫和狗的图片,因为网络的输入是416x416,所以我们要先把所有的数据按比例缩放到要求的大小。

①thumbnail等比例缩放:

from PIL import Imagedef narrow_image(im):"""缩放图片成416*416:param im:  原图:return: 原图W、H、缩放比例、缩放后的416*416图片"""img = Image.new(mode="RGB", size=(416, 416), color=(128, 128, 128))     #生成416*416的灰色图片W,H = im.size             #获取原始图片宽高max_side = max(W,H)           #最大边长min_side = min(W,H)           #最短边长scale = 416/max_side          #得到缩放比例Z = max_side-min_side         #得到最大边和最短边差值im.thumbnail((416,416))   #按照最大边长缩放图片为416*416if W > H :               #如果宽大于高,填充高xy = (0,int((Z*scale)/2))else:                    #如果高大于宽,填充宽xy = (int((Z*scale)/2),0)img.paste(im, xy)       #把图片粘贴到灰色图区域,起始点为xyreturn W,H,scale,imgif __name__ == '__main__':import oslistpath=os.listdir("path")for path in listpath:image = Image.open(os.path.join("path",path))W,H,scale,img=narrow_image(image)img.save("images416/{}".format(path))# print(W,H,scale,img)

resize实现的缩放:

from PIL import Image
import osdef pad_image(image, target_size):iw, ih = image.size  # 原始图像的尺寸w, h = target_size  # 目标图像的尺寸scale = min(float(w) / float(iw), float(h) / float(ih))  # 转换的最小比例# 保证长或宽,至少一个符合目标图像的尺寸nw = int(iw * scale)nh = int(ih * scale)image = image.resize((nw, nh), Image.BICUBIC)  # 采用双三次插值算法缩小图new_image = Image.new('RGB', target_size, (128, 128, 128))  # 生成灰色图像new_image.paste(image, ((w - nw) // 2, (h - nh) // 2))  # 将图像填充为中间图像,两侧为灰色的样式# new_image.show()return new_imageif __name__ == '__main__':listpath= os.listdir("models")for path in listpath:image = Image.open(os.path.join("models",path))size = (416,416)new_images = pad_image(image,size)new_images.save("images416/{}".format(path))

做好的图像数据如下:
在这里插入图片描述
在这里插入图片描述

1.2 做数据集(json/xml解析)

2)有了转化为416x416的图像数据,我们就可以来进行框图打标签了,在这里我选择的是精灵标注助手在这里插入图片描述,标注好之后,选择导出(一般选择xml和json),我这里选择json格式导出,得到导出的数据outputs如下所示:在这里插入图片描述

{"path":"C:\\Users\\wdvbji\\Desktop\\images416\\1.jpg","outputs":{"object":[{"name":"1","bndbox":{"xmin":17,"ymin":71,"xmax":215,"ymax":295}},{"name":"0","bndbox":{"xmin":214,"ymin":114,"xmax":399,"ymax":321}}]},"time_labeled":1588260234463,"labeled":true,"size":{"width":416,"height":416,"depth":3}}
{"path":"C:\\Users\\wdvbji\\Desktop\\images416\\2.jpg","outputs":{"object":[{"name":"0","bndbox":{"xmin":4,"ymin":125,"xmax":233,"ymax":410}},{"name":"1","bndbox":{"xmin":141,"ymin":21,"xmax":411,"ymax":408}}]},"time_labeled":1588260263416,"labeled":true,"size":{"width":416,"height":416,"depth":3}}
{"path":"C:\\Users\\wdvbji\\Desktop\\images416\\3.jpg","outputs":{"object":[{"name":"1","bndbox":{"xmin":41,"ymin":102,"xmax":235,"ymax":356}},{"name":"0","bndbox":{"xmin":214,"ymin":200,"xmax":407,"ymax":353}}]},"time_labeled":1588260279045,"labeled":true,"size":{"width":416,"height":416,"depth":3}}
{"path":"C:\\Users\\wdvbji\\Desktop\\images416\\4.jpg","outputs":{"object":[{"name":"1","bndbox":{"xmin":10,"ymin":42,"xmax":249,"ymax":391}},{"name":"0","bndbox":{"xmin":209,"ymin":161,"xmax":399,"ymax":395}}]},"time_labeled":1588260305125,"labeled":true,"size":{"width":416,"height":416,"depth":3}}

①代码解析json格式,得到我们需要的标签:(json2txt.py)

import os
import json
from cfg import *LABEL_FILE_PATH = "data/labels.txt"
IMG_BASE_DIR = "data/images416"with open(LABEL_FILE_PATH,"w+") as f:for json_file in os.listdir("data/outputs"):with open(os.path.join("data/outputs",json_file),"r",encoding="utf-8") as jf:j = json.load(jf)print(j)pic = j["path"].split("\\")[-1]boxes = j["outputs"]["object"]wh= j["size"]w,h = wh["width"],wh["height"]w_scale , h_scale = w/IMG_WIDTH , h/IMG_HEIGHTf.write(pic)for box in boxes:bndbox = box["bndbox"]_x1, _y1, _x2, _y2 = bndbox["xmin"], bndbox["ymin"], bndbox["xmax"], bndbox["ymax"]_w, _h = _x2 - _x1, _y2 - _y1_w0_5, _h0_5 = _w / 2, _h / 2_cx, _cy = _x1 + _w0_5, _y1 + _h0_5x1, y1, w, h = int(_cx / w_scale), int(_cy / h_scale), int(_w / w_scale), int(_h / h_scale)f.write(" {} {} {} {} {}".format(str(box["name"]), x1, y1, w, h))f.write("\n")f.flush()

②代码解析json格式,得到我们需要的标签:(parse_xml.py)

from xml.dom.minidom import parse
xml_doc = r"./data/1.xml"dom = parse(xml_doc)
root = dom.documentElement
img_name = root.getElementsByTagName("path")[0].childNodes[0].data
img_size= root.getElementsByTagName("size")[0]
objects = root.getElementsByTagName("object")
img_w = img_size.getElementsByTagName("width")[0].childNodes[0].data
img_h = img_size.getElementsByTagName("height")[0].childNodes[0].data
img_c = img_size.getElementsByTagName("depth")[0].childNodes[0].data
print(img_name)
print(img_w,img_h,img_c)
for box in objects:cls_name = box.getElementsByTagName("name")[0].childNodes[0].datax1 = int(box.getElementsByTagName("xmin")[0].childNodes[0].data)y1 = int(box.getElementsByTagName("ymin")[0].childNodes[0].data)x2 = int(box.getElementsByTagName("xmax")[0].childNodes[0].data)y2 = int(box.getElementsByTagName("ymax")[0].childNodes[0].data)print(cls_name,x1,y1,x2,y2)cls_name = box.getElementsByTagName("name")[1].childNodes[0].datax1 = int(box.getElementsByTagName("xmin")[1].childNodes[0].data)y1 = int(box.getElementsByTagName("ymin")[1].childNodes[0].data)x2 = int(box.getElementsByTagName("xmax")[1].childNodes[0].data)y2 = int(box.getElementsByTagName("ymax")[1].childNodes[0].data)print(cls_name,x1,y1,x2,y2)

得到的标签labels.txt为:
在这里插入图片描述
大工告成!当然我们可以检测一下我们的标签是否是正确的:(测试很好,可以下一步了)

from PIL import Image
from PIL import ImageDraw
import osIMG_DIR = r"data/images416"
ANO_DIR = r"data/labels.txt"img = Image.open(os.path.join(IMG_DIR, "2.jpg"))
imgDraw = ImageDraw.Draw(img)
imgDraw.rectangle((4,  125,  233,  410),outline="red")
img.show()

在这里插入图片描述

1.3 配置文件(anchor box等)

3)在这个部分,我们需要有coco数据集聚类得到的anchor box(也可以使用K-Means自己聚类自己的数据集)、anchor box面积的计算方式、图像宽高、类别等。


IMG_HEIGHT = 416
IMG_WIDTH = 416
CLASS_NUM = 2"anchor box是对coco数据集聚类获得"
ANCHORS_GROUP_KMEANS = {52: [[10,13],  [16,30],  [33,23]],26: [[30,61],  [62,45],  [59,119]],13: [[116,90],  [156,198],  [373,326]]}ANCHORS_GROUP = {13: [[360, 360], [360, 180], [180, 360]],26: [[180, 180], [180, 90], [90, 180]],52: [[90, 90], [90, 45], [45, 90]]}ANCHORS_GROUP_AREA = {13: [x * y for x, y in ANCHORS_GROUP[13]],26: [x * y for x, y in ANCHORS_GROUP[26]],52: [x * y for x, y in ANCHORS_GROUP[52]],
}
if __name__ == '__main__':for feature_size, anchors in ANCHORS_GROUP.items():print(feature_size)print(anchors)for feature_size, anchor_area in ANCHORS_GROUP_AREA.items():print(feature_size)print(anchor_area)

1.4 造数据集(Mydataset.py)

类别使用one_hot编码,属于当前类的编码为1即可。

import torch
from torch.utils.data import Dataset,DataLoader
import torchvision
import numpy as np
import cfg
import os
from PIL import Image
import math# 标签路径
LABEL_FILE_PATH = "data/person_label.txt"
# 图片路径
IMG_BASE_DIR = "data"
# 预处理变tensor
transforms = torchvision.transforms.Compose([torchvision.transforms.ToTensor()
])
# 对类别进行one-hot编码
def one_hot(cls_num, i):b = np.zeros(cls_num)b[i] = 1.return bclass MyDataset(Dataset):def __init__(self):# with open()自动调用close,不占内存with open(LABEL_FILE_PATH) as f:# 调用readlines()一次读取所有内容并按行返回listself.dataset = f.readlines()def __len__(self):# 返回数据集的长度return len(self.dataset)def __getitem__(self, index):# 定义标签的格式为字典labels = {}# 根据索引取到数据line = self.dataset[index]# 切割数据,返回字符串strs = line.split()# 打开图片_img_data = Image.open(os.path.join(IMG_BASE_DIR, strs[0]))# 经处理得到图片数据img_data = transforms(_img_data)# 得到所有框# _boxes = np.array(float(x) for x in strs[1:])_boxes = np.array(list(map(float, strs[1:])))# 5个元素分为一组boxes = np.split(_boxes, len(_boxes) // 5)# 遍历尺寸和建议框for feature_size, anchors in cfg.ANCHORS_GROUP.items():# 每个尺寸下建议框用零矩阵填充labels[feature_size] = np.zeros(shape=(feature_size, feature_size, 3, 5 + cfg.CLASS_NUM))# 遍历类别和中心点、宽高for box in boxes:cls, cx, cy, w, h = box# 得到中心点的偏移量和索引cx_offset, cx_index = math.modf(cx * feature_size / cfg.IMG_WIDTH)cy_offset, cy_index = math.modf(cy * feature_size / cfg.IMG_WIDTH)# 遍历每个尺寸下的每个建议框for i, anchor in enumerate(anchors):# 建议框的面积anchor_area = cfg.ANCHORS_GROUP_AREA[feature_size][i]# 宽高的偏移量p_w, p_h = w / anchor[0], h / anchor[1]# 实际框的面积p_area = w * h# 计算置信度(用IOU代表),最小面积/最大面积得到的值在[0,1]之间iou = min(p_area, anchor_area) / max(p_area, anchor_area)# 每个尺寸下每个建议框的标签labels[feature_size][int(cy_index), int(cx_index), i] = np.array([iou, cx_offset, cy_offset, np.log(p_w), np.log(p_h), *one_hot(cfg.CLASS_NUM, int(cls))])#10,ireturn labels[13], labels[26], labels[52], img_data# 返回的是每个尺寸下的标签和图片数据
if __name__ == '__main__':x=one_hot(10,2)print(x)data = MyDataset()dataloader = DataLoader(data,3,shuffle=True)# for i,x in enumerate(dataloader):#     print(x[0].shape)#     print(x[1].shape)#     print(x[2].shape)#     print(x[3].shape)for target_13, target_26, target_52, img_data in dataloader:print(target_13.shape)print(target_26.shape)print(target_52.shape)print(img_data.shape)

1.5 搭建网络(model.py)

这部分根据网络结构图完成代码。
网络结构梳理:
1)卷积_BN_激活,我们可以做成一个类(反复使用,简化代码),LeakyReLU的斜率为0.1;
2)下采样层做成一个类,kernel_size=3,stride=2,padding=1;
2)残差层做成一个类,先缩小为通道的一半(kernel_size=1,stride=1,padding=0),再扩通道到原来的大小(kernel_size=3,stride=1,padding=1)
3)上采样层做成一个类,选择最邻近插值法,比例为2;
4)卷积块做成一个类,1x1(kernel_size=1,stride=1,padding=0),3x3(kernel_size=3,stride=1,padding=1)
主网络梳理:
①主干52:1个卷积层,1个下采样层,1个残差层,1个下采样层,2个残差层,1个下采样层,8个残差层
②主干26:1个下采样层,8个残差层
③主干13:1个下采样层,4个残差层
④卷积块13:1024–>512
侦测13:3x3(kernel_size=3,stride=1,padding=1),1x1(kernel_size=1,stride=1,padding=0)
⑥上采样26:512–>256(kernel_size=1,stride=1,padding=0)+上采样层
⑦卷积块26:768–>256
侦测26:3x3(kernel_size=3,stride=1,padding=1),1x1(kernel_size=1,stride=1,padding=0)
⑨上采样52:256–>128(kernel_size=1,stride=1,padding=0)+上采样层
⑩卷积块52:384–>128
侦测52:3x3(kernel_size=3,stride=1,padding=1),1x1(kernel_size=1,stride=1,padding=0)

在这里插入图片描述

import torch
import torch.nn as nn
import torch.nn.functional as Fclass ConvolutionalLayer(nn.Module):def __init__(self, in_channels, out_channels, kernel_size, stride, padding, bias=False):super().__init__()self.sub_module = nn.Sequential(nn.Conv2d(in_channels, out_channels, kernel_size, stride, padding, bias=bias),nn.BatchNorm2d(out_channels),nn.LeakyReLU(0.1))def forward(self, x):return self.sub_module(x)class DownsampleLayer(nn.Module):def __init__(self, in_channels, out_channels):super().__init__()self.sub_module = nn.Sequential(ConvolutionalLayer(in_channels, out_channels, 3, 2, 1))def forward(self, x):return self.sub_module(x)class ResidualLayer(nn.Module):def __init__(self, in_channels):super().__init__()self.sub_moduel = nn.Sequential(ConvolutionalLayer(in_channels, in_channels // 2, 1, 1, 0),ConvolutionalLayer(in_channels // 2, in_channels, 3, 1, 1))def forward(self, x):return x + self.sub_moduel(x)class UpsampleLayer(nn.Module):def __init__(self):super().__init__()def forward(self, x):return F.interpolate(x, scale_factor=2, mode="nearest")class ConvolutionalSet(nn.Module):def __init__(self, in_channels, out_channels):super().__init__()self.sub_module = nn.Sequential(ConvolutionalLayer(in_channels, out_channels, 1, 1, 0),ConvolutionalLayer(out_channels, in_channels, 3, 1, 1),ConvolutionalLayer(in_channels, out_channels, 1, 1, 0),ConvolutionalLayer(out_channels, in_channels, 3, 1, 1),ConvolutionalLayer(in_channels, out_channels, 1, 1, 0),)def forward(self, x):return self.sub_module(x)class MainNet(nn.Module):def __init__(self):super().__init__()self.trunk52 = nn.Sequential(ConvolutionalLayer(3, 32, 3, 1, 1),DownsampleLayer(32, 64),ResidualLayer(64),DownsampleLayer(64, 128),ResidualLayer(128),ResidualLayer(128),DownsampleLayer(128, 256),ResidualLayer(256),ResidualLayer(256),ResidualLayer(256),ResidualLayer(256),ResidualLayer(256),ResidualLayer(256),ResidualLayer(256),ResidualLayer(256),)self.trunk26 = nn.Sequential(DownsampleLayer(256, 512),ResidualLayer(512),ResidualLayer(512),ResidualLayer(512),ResidualLayer(512),ResidualLayer(512),ResidualLayer(512),ResidualLayer(512),ResidualLayer(512))self.trunk13 = nn.Sequential(DownsampleLayer(512, 1024),ResidualLayer(1024),ResidualLayer(1024),ResidualLayer(1024),ResidualLayer(1024))self.convset_13 = nn.Sequential(ConvolutionalSet(1024, 512))self.detection_13 = nn.Sequential(ConvolutionalLayer(512, 1024, 3, 1, 1),ConvolutionalLayer(1024, 21, 1, 1, 0))self.up_26 = nn.Sequential(ConvolutionalLayer(512,256,1,1,0),UpsampleLayer())self.convset_26 = nn.Sequential(ConvolutionalSet(768,256))self.detcetion_26 = nn.Sequential(ConvolutionalLayer(256, 512, 3, 1, 1),nn.Conv2d(512, 21, 1, 1, 0))self.up_52 = nn.Sequential(ConvolutionalLayer(256, 128, 1, 1, 0),UpsampleLayer())self.convset_52 = nn.Sequential(ConvolutionalSet(384, 128))self.detcetion_52 = nn.Sequential(ConvolutionalLayer(128, 256, 3, 1, 1),nn.Conv2d(256, 21, 1, 1, 0))def forward(self,x):h_52 = self.trunk52(x)h_26 = self.trunk26(h_52)h_13 = self.trunk13(h_26)convset_out_13 = self.convset_13(h_13)detection_out_13 = self.detection_13(convset_out_13)up_out_26 = self.up_26(convset_out_13)route_out_26 = torch.cat((up_out_26,h_26),dim=1)convset_out_26 = self.convset_26(route_out_26)detection_out_26 = self.detcetion_26(convset_out_26)up_out_52 = self.up_52(convset_out_26)route_out_52 = torch.cat((up_out_52, h_52), dim=1)convset_out_52 = self.convset_52(route_out_52)detection_out_52 = self.detcetion_52(convset_out_52)return detection_out_13, detection_out_26, detection_out_52if __name__ == '__main__':trunk = MainNet()x = torch.randn([2, 3, 416, 416], dtype=torch.float32)# 测试网络y_13, y_26, y_52 = trunk(x)print(y_13.shape)print(y_26.shape)print(y_52.shape)print(y_13.view(-1, 3, 7, 13, 13).shape)

1.6 训练(Train.py)

from Mydataset import MyDataset
from model import *
import torch
from torch.utils.data import DataLoader
import osdef loss_fn(output, target, alpha):conf_loss_fn = nn.BCEWithLogitsLoss()crood_loss_fn = nn.MSELoss()cls_loss_fn = nn.CrossEntropyLoss()output = output.permute(0, 2, 3, 1)output = output.reshape(output.size(0), output.size(1), output.size(2), 3, -1)output = output.cpu().double()mask_obj = target[..., 0] > 0output_obj = output[mask_obj]target_obj = target[mask_obj]loss_obj_conf = conf_loss_fn(output_obj[:, 0], target_obj[:, 0])loss_obj_crood = crood_loss_fn(output_obj[:, 1:5], target_obj[:, 1:5])loss_obj_cls = conf_loss_fn(output_obj[:, 5:], target_obj[:, 5:])loss_obj = loss_obj_conf + loss_obj_crood + loss_obj_clsmask_noobj = target[..., 0] == 0output_nonbj = output[mask_noobj]target_noobj = target[mask_noobj]loss_noobj = conf_loss_fn(output_nonbj[:, 0], target_noobj[:, 0])loss = alpha * loss_obj + (1 - alpha) * loss_noobjreturn lossclass Trainer:def __init__(self):self.device = torch.device("cuda" if torch.cuda.is_available() else "cpu")self.net = MainNet().to(self.device)self.opt = torch.optim.Adam(self.net.parameters())def train(self):save_path = "models/net_yolo.pth"if not os.path.exists("models"):os.mkdir("models")if os.path.exists(save_path):self.net.load_state_dict(torch.load(save_path))else:print("NO Param")BATCH_SIZE = 4EPOCH = 0mydataset = MyDataset()train_loader = DataLoader(mydataset, batch_size=BATCH_SIZE, shuffle=True)while True:for target_13, target_26, target_52, img_data in train_loader:img_data = img_data.to(self.device)output_13, output_26, output_52 = self.net(img_data)loss_13 = loss_fn(output_13, target_13, 0.9)loss_26 = loss_fn(output_26, target_26, 0.9)loss_52 = loss_fn(output_52, target_52, 0.9)loss = loss_13 + loss_26 + loss_52self.opt.zero_grad()loss.backward()self.opt.step()if EPOCH % 10 == 0:torch.save(self.net.state_dict(),save_path)print("save {}".format(EPOCH))print(loss.item())EPOCH += 1if __name__ == '__main__':t = Trainer()t.train()

1.7 工具iou,nms(tool.py)

import numpy as np
import torchdef ious(box, boxes, isMin = False):box_area = (box[3] - box[1]) * (box[4] - box[2])area = (boxes[:, 3] - boxes[:, 1]) * (boxes[:, 4] - boxes[:, 2])xx1 = torch.max(box[1], boxes[:, 1])yy1 = torch.max(box[2], boxes[:, 2])xx2 = torch.min(box[3], boxes[:, 3])yy2 = torch.min(box[4], boxes[:, 4])w = torch.clamp(xx2 - xx1, min=0)h = torch.clamp(yy2 - yy1, min=0)inter = w * hovr2 = inter/ (box_area + area - inter)return ovr2def nms(boxes, thresh=0.3, isMin = True):if boxes.shape[0] == 0:return np.array([])_boxes = boxes[(-boxes[:, 0]).argsort()]r_boxes = []while _boxes.shape[0] > 1:a_box = _boxes[0]b_boxes = _boxes[1:]r_boxes.append(a_box)index = np.where(ious(a_box, b_boxes,isMin) < thresh)_boxes = b_boxes[index]if _boxes.shape[0] > 0:r_boxes.append(_boxes[0])return torch.stack(r_boxes)if __name__ == '__main__':# a = np.array([1,1,11,11])# bs = np.array([[1,1,10,10],[11,11,20,20]])# print(iou(a,bs))bs = torch.tensor([[1, 1, 10, 10, 40,8], [1, 1, 9, 9, 10,9], [9, 8, 13, 20, 15,3], [6, 11, 18, 17, 13,2]])# print(bs[:,3].argsort())print(nms(bs))

1.8 侦测(detector.py)

from model import MainNet
import cfg
import torch
import numpy as np
import PIL.Image as pimg
import PIL.ImageDraw as draw
import toolclass Detector(torch.nn.Module):def __init__(self,save_path):super(Detector, self).__init__()# 实例化网络self.net = MainNet()# 加载保存的参数self.net.load_state_dict(torch.load(save_path))# 固定BN,Dropoutself.net.eval()def forward(self, input, thresh, anchors):# 输入图像传到网络 得到预测output_13, output_26, output_52 = self.net(input)# 预测,阈值传到过滤器,得到索引和置信度,偏移量,类别idxs_13, vecs_13 = self._filter(output_13, thresh)# 索引和15个值经过分析,得到13的预测(置信度,偏移量,类别)boxes_13 = self._parse(idxs_13, vecs_13, 32, anchors[13])idxs_26, vecs_26 = self._filter(output_26, thresh)boxes_26 = self._parse(idxs_26, vecs_26, 16, anchors[26])idxs_52, vecs_52 = self._filter(output_52, thresh)boxes_52 = self._parse(idxs_52, vecs_52, 8, anchors[52])return torch.cat([boxes_13, boxes_26, boxes_52], dim=0)def _filter(self, output, thresh):# 输出形状是(NCHW),变形为(NHWC)output = output.permute(0, 2, 3, 1)# NHWC变形为NHW3(5+类别)output = output.reshape(output.size(0), output.size(1), output.size(2), 3, -1)# 变形后,最后一个维度的第0个元素是置信度,置信度大于阈值的为有物体的掩码mask = output[..., 0] > thresh# 根据掩码获取索引idxs = mask.nonzero()# 花式索引取到符合有物体的(5+类别)个值vecs = output[mask]return idxs, vecs# 返回索引和(5+类别)个值def _parse(self, idxs, vecs, t, anchors):# 建议框变tensoranchors = torch.Tensor(anchors)# 得到NHW3中3的索引a = idxs[:, 3]# 置信度为第0个元素confidence = vecs[:, 0]# 类别为第5个元素到最后_classify = vecs[:, 5:]# 如果类别的长度为0,返回一个空tensor,否则取最大值的索引if len(_classify) == 0:classify = torch.Tensor([])else:classify = torch.argmax(_classify, dim=1).float()# 实际框中心点坐标 = (索引+相对于当前格子左上角的偏移量)*(图像大小/分的格子数)cy = (idxs[:, 1].float() + vecs[:, 2]) * tcx = (idxs[:, 2].float() + vecs[:, 1]) * t# 实际框宽高 = 建议框的宽高*e^(宽高的偏移量)w = anchors[a, 0] * torch.exp(vecs[:, 3])h = anchors[a, 1] * torch.exp(vecs[:, 4])# 算出左上右下坐标,并堆叠起来x1 = cx - w / 2y1 = cy - h / 2x2 = x1 + wy2 = y1 + hout = torch.stack([confidence,x1,y1,x2,y2,classify], dim=1)return outif __name__ == '__main__':save_path = "models/net_yolo.pth"detector = Detector(save_path)# y = detector(torch.randn(3, 3, 416, 416), 0.3, cfg.ANCHORS_GROUP)# print(y.shape)img1 = pimg.open(r'data\image\1.jpg')img = img1.convert('RGB')img = np.array(img) / 255img = torch.Tensor(img)img = img.unsqueeze(0)img = img.permute(0, 3, 1, 2)img = img.cuda()out_value = detector(img, 0.3, cfg.ANCHORS_GROUP)boxes = []for j in range(10):classify_mask = (out_value[..., -1] == j)_boxes = out_value[classify_mask]boxes.append(tool.nms(_boxes))for box in boxes:try:img_draw = draw.ImageDraw(img1)c,x1, y1, x2, y2 = box[0, 0:5]print(c,x1, y1, x2, y2)img_draw.rectangle((x1, y1, x2, y2))except:continueimg1.show()

二、总结

如果在小数据量上,过拟合测试效果不错,那么我们就可以加大数据量进行训练 。

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

相关文章

  1. go工程的运行

    1)设置GOROOT2)设置GOPATH(也就是自己在某个地方新建的工程)3)在工程下新建src文件,完成逻辑编码4)编译生成二进制文件5)发现在src统计目录下生成了bin文件夹,然后执行./ch02 即可运行代码...

    2024/4/16 23:30:41
  2. Ubuntu 18.04安装k8s 集群

    实际生产环境集群或单机AllInOne安装推荐参照easzlab/kubeasz项目https://github.com/easzlab/kubeasz注意:该项目的kubernetes_dashboard的服务对外暴露采用的是NodePort方式访问kubernetes_dashboard需要使用firefox浏览器 分块手动安装便于理解和学习环境: 两台装有Ubuntu的…...

    2024/4/15 3:06:54
  3. RabbitMq Queue队列

    queue 队列是rabblt做流量肖峰最常用的一个队列了吧? 首先我们要封装个工厂类用于创建连接关闭连接使用public class MqConnect {public static Connection connect() throws IOException, TimeoutException {ConnectionFactory connectionFactory=new ConnectionFactory();…...

    2024/4/24 14:42:24
  4. 解决java项目localhost打不开,而127.0.0.1能打开的问题

    解决java项目localhost打不开,而127.0.0.1能打开的问题参考文章: (1)解决java项目localhost打不开,而127.0.0.1能打开的问题 (2)https://www.cnblogs.com/liuxiansheng/p/4223406.html 备忘一下。...

    2024/4/24 14:42:24
  5. 使用Linux的Crontab定时执行PHP脚本的方法

    先说说cron,它是一个linux下的定时执行工具。根用户以外的用户可以使用 crontab 工具来配置 cron 任务。所有用户定义的 crontab 都被保存在/var/spool/cron 目录中,并使用创建它们的用户身份来执行。 要以某用户身份创建一个 crontab 项目,登录为该用户,然后键入 crontab -…...

    2024/4/24 14:42:22
  6. python中的GIL锁和互斥锁

    Python中的GIL锁 在Python中,可以通过多进程、多线程和多协程来实现多任务。 在多线程的实现过程中,为了避免出现资源竞争问题,可以使用互斥锁来使线程同步(按顺序)执行。 但是,其实Python的CPython(C语言实现的)解释器上有一把GIL锁,也就是说Python的程序是处于一个解释器…...

    2024/4/24 14:42:21
  7. 要学好 C 语言 / C++ ,Makefile 可少不了

    一、Makefile 简介 1. Makefile 是什么? Makefile 通常指的是一个含有一系列命令(directive)的,通过 Make 自动化编译工具,帮助 C/C++ 程序实现自动编译目标文件的文件。这个文件的默认命名是 “Makefile”。 2. 为什么要使用 Makefile? Makefile 文件描述了整个工程的编…...

    2024/4/30 9:19:22
  8. 使用BulkProcessor批量插入ES

    话不多少,贴上代码类实现2个接口implements Flushable, Closeableprivate BulkProcessor bulkProcessor;/*** 初始化静态配置*/@PostConstructpublic void init() {bulkProcessor = BulkProcessor.builder(client, new BulkProcessor.Listener() {@Overridepublic void before…...

    2024/4/28 23:47:17
  9. tensorflow转caffemodel之环境和权限问题

    在pycharm中直接运行tf113tocaffe.py报错如下: cudnn_conv_layer.cpp:52] Check failed: error == cudaSuccess (30 vs. 0) unknown error 如下图所示:解决方法: 在tf113tocaffe.py所在目录下,打开终端: sudo python3 tf113tocaffe.py (重点是sudo python3)问题2: …...

    2024/4/24 14:42:19
  10. 【XBEE手册】AT命令

    【XBEE手册】AT命令 寻址命令 DH(Destination address High ) DL(Destination address Low) MY(16-bit Network Address) MP(16-bit Parent Address) NC(Number of remaining Children) SH(Serial Number High) SL(Serial Number Low) NI(Node Identifier) SE(…...

    2024/4/24 14:42:17
  11. flutter 学习(一)Image 组件

    Image.asset 加载本地图片的时候如下: Image.asset("assets/images/sakura.jpg",width: width,fit: BoxFit.fitHeight,),图片的目录应该在pubspec.yaml 文件中 设置assets:- assets/images/如果是这种的需要在文件中声明 assets:- images/logo.png- images/2.0x/log…...

    2024/5/7 14:44:11
  12. 前端性能优化(包含js、css性能优化--笔记)

    1、前端优化js和css优化相同、重复的部分放到此处。1、script标签放在body标签尾部,css link标签引用放在head标签内,减少白屏时间。2、合理使用http缓存,js、css文件资源合并,使用精灵图,图片使用base64编码,懒加载等,减少http请求数。js、css文件压缩,gzip压缩,去除…...

    2024/4/24 14:42:15
  13. 1.3 PHP使用ODBC连接sqlserver进行增删改查遇到的坑,详细记录--by changer

    PHP连接sql server会比较麻烦,更改配置文件这一方法我没有细致去了解,我选择是用ODBC数据源进行连接,本文适合有一定基础的人员进行阅读哈。 1.设置ODBC数据源,设置你的远程数据库IP,账号密码,默认数据库,设置数据源名字,并测试连接是否成功。 2.使用PHP查询数据库 <…...

    2024/4/24 14:42:15
  14. 零钱兑换 II

    给定不同面额的硬币和一个总金额。写出函数来计算可以凑成总金额的硬币组合数。假设每一种面额的硬币有无限个。 示例 1: 输入: amount = 5, coins = [1, 2, 5] 输出: 4 解释: 有四种方式可以凑成总金额: 5=5 5=2+2+1 5=2+1+1+1 5=1+1+1+1+1 示例 2: 输入: amount = 3, coins =…...

    2024/5/2 3:58:42
  15. Keil 4 和 Keil 5 完美共存的简单方法

    遇到的问题 安装Keil 5 后,以前用Keil 4 建立的工程都会默认用Keil 5打开,即使打开方式里选择了用Keil 4 打开也无济于事。 解决方法 这里有个非常简单的方法避免这个问题安装Keil 5 时,将两个软件的目录分开,不要放在一起。进入Keil 5 安装目录 找到 UV4.exe,把UV4改成UV…...

    2024/5/6 4:56:27
  16. float与overflow

    float <body><img src="./imgs/doraemon.gif"><div>哆啦A梦(日语:ドラえもん),旧译为机器猫,是藤子F不二雄的漫画作品《哆啦A梦》中登场的猫型机器人,本作的主人公。名字的意思是铜锣(ドラ)卫门(えもん)。哆啦A梦肚子上拥有四次元口袋,…...

    2024/4/24 14:42:11
  17. 持久化、持久层简单介绍

    持久化就是将程序数据在持久化状态和瞬时状态间转换的机制。 即把数据保存到可永久保存的存储磁盘中 持久层 完成持久化工作的代码块 > > dao层(数据访问对象) 大多数情况下,数据持久化往往就意味着内存中的数据保存到磁盘上加以固化,而持久化的实现过程则大多通过各…...

    2024/5/2 3:58:27
  18. 建站行业乱象:盗版源码宣称自主研发

    网站的本质是软件,而软件就会存在版权,通俗易懂的说就会存在正版和盗版,使用专业术语描述就会存在免费版、商业版、定制版、盗版等版本区别。 建站实践中,甲方委托建站公司搭建网站时,鲜有人问及版权,即使甲方关注版权,一般建站公司都会告知甲方自己使用的建站系统源于自…...

    2024/4/24 14:42:10
  19. I3D Finetune

    背景介绍在现有的的行为分类数据集(UCF-101 and HMDB-51)中,视频数据的缺乏使得确定一个好的视频结构很困难,大部分方法在小规模数据集上取得差不多的效果。这......

    2024/5/5 5:38:35
  20. Jmeter(十二) - 从入门到精通 - JMeter逻辑控制器 - 终篇(详解教程)

    1.简介 Jmeter官网对逻辑控制器的解释是:“Logic Controllers determine the order in which Samplers are processed.”。 意思是说,逻辑控制器可以控制采样器(samplers)的执行顺序。由此可知,控制器需要和采样器一起使用,否则控制器就没有什么意义了。放在控制器下面的所…...

    2024/4/18 11:46:34

最新文章

  1. 002 validation自定义校验器

    文章目录 pom.xmlValidatorUtil.javaIsMobileValidator.javaIsMobile.javaLoginVo.javaLoginController.java pom.xml <!-- 引入validation依赖,完成校验 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-s…...

    2024/5/7 22:36:00
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/5/7 10:36:02
  3. ubuntu添加固定路由

    方法&#xff1a; 我的解决方法 添加路由 sudo ip route add 10.xxx.xxx.0/25 via 1.xxx.xxx.xxx&#xff08;我的是虚拟机&#xff09;dev ens65 proto static metric122 删除路由 sudo ip route delete 10.xxx.xxx.0/25 gpt答案 添加路由 要在Ubuntu上添加路由&#xff0c;您…...

    2024/5/7 15:40:08
  4. FreeRTOS学习 -- 再识

    工作中一直使用FreeRTOS进行着开发&#xff0c;但是没有进行过系统的总结过。现在将快速使用几天时间将FreeRTOS相关知识点加以总结。 官网&#xff1a; https://www.freertos.org/zh-cn-cmn-s/ 参看资料&#xff1a; 正点原子 STM32F1 FreeRTOS开发手册_V1.2.pdf The FreeRTOS…...

    2024/5/7 4:32:40
  5. 字符串匹配算法之BF与KMP算法

    目录 BF算法(暴力匹配算法) KMP算法 核心思想&#xff1a; next数组 next数组的优化 BF算法(暴力匹配算法) #include <assert.h> int BF(const char* str, const char* sub) {assert(str ! NULL && sub ! NULL);if (str NULL || sub NULL){return -1;}int…...

    2024/5/4 9:41:01
  6. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/5/7 5:50:09
  7. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/5/7 9:45:25
  8. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/5/4 23:54:56
  9. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/5/7 14:25:14
  10. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/5/4 23:54:56
  11. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/5/4 23:55:05
  12. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/5/4 23:54:56
  13. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/5/7 11:36:39
  14. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/5/4 23:54:56
  15. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/5/6 1:40:42
  16. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/5/4 23:54:56
  17. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/5/4 23:55:17
  18. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/5/7 9:26:26
  19. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/5/4 23:54:56
  20. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/5/4 23:55:06
  21. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/5/5 8:13:33
  22. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/5/4 23:55:16
  23. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/5/4 23:54:58
  24. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/5/6 21:42:42
  25. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/5/4 23:54:56
  26. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  27. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; 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
  28. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  29. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  30. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  31. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  32. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  33. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  34. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  35. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  36. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  37. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  38. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  39. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  40. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  41. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  42. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  43. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  44. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  45. 如何在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