前言

在遥感影像场景中,我们所面对的数据的尺寸大多都是成千上万像素的,这大大超出了目前显卡所能承受的范围。因此这篇博文将简单介绍下如何在大幅遥感影像中进行目标检测。
在这里插入图片描述

划框预测

简单描述下预测的过程:

  1. 设置划框的大小a,划框之间的重叠度b;
  2. 计算框的移动长度c,c=a-b;
  3. 对原图像进行两次镜像延展,第一次延展的长度为能够包含原图像的c的最大整数倍与原图像size的差值,第二次延展为重叠度b;
  4. 按照从左往右,从上到下的顺序进行划框预测,步长为c;
  5. 汇总所有的box,label,score,进行非极大值抑制;
  6. 对框进行过滤,对于左上角(xmin,ymin)的点,舍弃超出原图范围的框;
  7. 对框的大小进行限制,对于右下角(xmax,ymax)不能超出原图范围。
    在这里插入图片描述
    predict.py
import cv2
import gc
import osfrom torch.autograd import Variable
from eval.dataset_eval import build_dataloader
from effdet import EfficientDet, DetBenchEval
from effdet.config import get_efficientdet_config
from effdet.efficientdet import HeadNet
from eval.wbf import *
from itertools import product
from eval.tta import *def load_net(cfg):config = get_efficientdet_config(cfg.model_name)net = EfficientDet(config, pretrained_backbone=False)config.num_classes = cfg.num_classesconfig.image_size = cfg.image_sizenet.class_net = HeadNet(config, num_outputs=config.num_classes, norm_kwargs=dict(eps=.001, momentum=.01))checkpoint = torch.load(cfg.checkpoint_path)net.load_state_dict(checkpoint['model_state_dict'])del checkpointgc.collect()net = DetBenchEval(net, config)net.eval()return net.cuda()def make_predictions(images, net, score_threshold=0.11):images = Variable(torch.from_numpy(np.array(images)).cuda().float())predictions = []with torch.no_grad():det = net(images, torch.tensor([1]*images.shape[0]).float().cuda())for i in range(images.shape[0]):boxes = det[i].detach().cpu().numpy()[:, :4]scores = det[i].detach().cpu().numpy()[:, 4]indexes = np.where(scores > score_threshold)[0]boxes = boxes[indexes]boxes[:, 2] = boxes[:, 2] + boxes[:, 0]boxes[:, 3] = boxes[:, 3] + boxes[:, 1]predictions.append({'boxes': boxes[indexes],'scores': scores[indexes],})return [predictions]def make_tta_predictions(images, net, image_size, score_threshold=0.5):tta_transforms = []for tta_combination in product([TTAHorizontalFlip(image_size), None],[TTAVerticalFlip(image_size), None],[TTARotate90(image_size), None]):tta_transforms.append(TTACompose([tta_transform for tta_transform in tta_combination if tta_transform]))with torch.no_grad():images = Variable(torch.from_numpy(np.array(images)).cuda().float())predictions = []for tta_transform in tta_transforms:result = []det = net(tta_transform.batch_augment(images.clone()), torch.tensor([1]*images.shape[0]).float().cuda())for i in range(images.shape[0]):boxes = det[i].detach().cpu().numpy()[:,:4]scores = det[i].detach().cpu().numpy()[:,4]labels = det[i].detach().cpu().numpy()[:,5]indexes = np.where(scores > score_threshold)[0]boxes = boxes[indexes]boxes[:, 2] = boxes[:, 2] + boxes[:, 0]boxes[:, 3] = boxes[:, 3] + boxes[:, 1]boxes = tta_transform.deaugment_boxes(boxes.copy())result.append({'boxes': boxes,'scores': scores[indexes],'labels': labels[indexes],})predictions.append(result)return predictionsdef run_wbf(predictions, image_index, image_size=512, iou_thr=0.44, skip_box_thr=0.43, weights=None):boxes = [(prediction[image_index]['boxes']/(image_size-1)).tolist()  for prediction in predictions]scores = [prediction[image_index]['scores'].tolist() for prediction in predictions]labels = [prediction[image_index]['labels'].tolist() for prediction in predictions]boxes, scores, labels = weighted_boxes_fusion(boxes, scores, labels, weights=None, iou_thr=iou_thr, skip_box_thr=skip_box_thr)boxes = boxes*(image_size-1)return boxes, scores, labelsdef run_wbf2(boxes, scores, labels, image_size, iou_thr=0.44, skip_box_thr=0.43):boxes = [(box/(image_size-1)).tolist() for box in boxes]scores = [score.tolist() for score in scores]labels = [label.tolist() for label in labels]boxes, scores, labels = weighted_boxes_fusion(boxes, scores, labels, weights=None, iou_thr=iou_thr, skip_box_thr=skip_box_thr)boxes = boxes*(image_size-1)return boxes, scores, labels# Color map for bounding boxes of detected objects from https://sashat.me/2017/01/11/list-of-20-simple-distinct-colors/
distinct_colors = {1: (0, 0, 255), 2: (0, 255, 0), 3: (255, 0, 0), 4: (255, 255, 0), 5: (0, 255, 255),6: (50, 50, 50), 7: (0, 50, 50), 8: (50, 0, 50), 9: (100, 255, 100), 10: (255, 100, 255),11: (0, 50, 50), 12: (0, 0, 50), 13: (50, 0, 0), 14: (100, 0, 100), 15: (0, 100, 255),16: (0, 150, 255), 17: (150, 255, 0), 18: (255, 150, 0), 19: (255, 255, 150), 20: (150, 255, 255),}def get_key(dct, value):return [k for (k, v) in dct.items() if v == value]def mkdir(path):if not os.path.exists(path):os.mkdir(path)if __name__ == '__main__':import matplotlib.pyplot as pltimport globimport tqdmfrom eval.config_eval import Configcfg = Config()imglist = glob.glob(f'{cfg.DATA_ROOT_PATH}/*.jpg')mkdir(cfg.out_dir)net = load_net(cfg)font = cv2.FONT_HERSHEY_SIMPLEX  # 定义字体font_size = 1frame_size = cfg.image_size - cfg.gapfor j, imgPath in tqdm.tqdm(enumerate(imglist)):image_name = os.path.split(imgPath)[-1].split('.')[0]image = cv2.imread(imgPath, cv2.IMREAD_COLOR)image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB).astype(np.float32)raw_image = image.copy()raw_h, raw_w = image.shape[:2]row = raw_h // frame_size + 1col = raw_w // frame_size + 1radius_h = row * frame_size - raw_hradius_w = col * frame_size - raw_wimage = cv2.copyMakeBorder(image, 0, radius_h, 0, radius_w, cv2.BORDER_REFLECT)image = cv2.copyMakeBorder(image, 0, cfg.gap, 0, cfg.gap, cv2.BORDER_REFLECT)sample = raw_image.copy()boxes_, scores_, labels_ = [], [], []for i in tqdm.tqdm(range(row)):for j in range(col):image1 = image.copy()subImg = image1[i * frame_size:(i + 1) * frame_size + cfg.gap,j * frame_size:(j + 1) * frame_size + cfg.gap, :]subImg /= 255.0subImg = np.transpose(subImg, (2, 0, 1))predictions = make_tta_predictions([subImg], net, cfg.image_size)index = 0# subImg = subImg.transpose(1, 2, 0)boxes, scores, labels = run_wbf(predictions, image_index=index, image_size=cfg.image_size)print(labels)boxes = boxes.astype(np.int32).clip(min=0, max=cfg.image_size - 1)boxes[:, 0] = boxes[:, 0] + j * frame_sizeboxes[:, 1] = boxes[:, 1] + i * frame_sizeboxes[:, 2] = boxes[:, 2] + j * frame_sizeboxes[:, 3] = boxes[:, 3] + i * frame_sizeboxes_.append(boxes)scores_.append(scores)labels_.append(labels)# fig, ax = plt.subplots(1, 1, figsize=(16, 8))## for box, score, label in zip(boxes, scores, labels):#     color = distinct_colors[label]#     cv2.rectangle(sample, (box[0], box[1]), (box[2], box[3]), color, 3)#     text_location = (box[0] + 2, box[1] - 4)#     key = get_key(cfg.class_dict, label)[0]#     sample = cv2.putText(sample, f'{key} {score * 100:.2f}%', text_location, font,#                          fontScale=0.5, color=color)## plt.subplot(131)# plt.imshow(subImg)# plt.subplot(132)# plt.imshow(sample.astype(np.uint8))# plt.subplot(133)# plt.imshow(image.astype(np.uint8))# plt.show()boxes, scores, labels = run_wbf2(boxes_, scores_, labels_, image_size=cfg.image_size)fig, ax = plt.subplots(1, 1, figsize=(16, 8))all_annotations = np.array([[box[0], box[1], box[2], box[3], score, label] for box, score, label in zip(boxes, scores, labels)])# 丢弃原图像边界外的框keep = (all_annotations[:, 0] < raw_w) & (all_annotations[:, 1] < raw_h)result_annotations = all_annotations[keep]# 限制xmax和ymax的值result_annotations[:, 2] = np.clip(result_annotations[:, 2], 0, raw_w)result_annotations[:, 3] = np.clip(result_annotations[:, 3], 0, raw_h)for ann in result_annotations:color = distinct_colors[int(ann[5])]cv2.rectangle(sample, (int(ann[0]), int(ann[1])), (int(ann[2]), int(ann[3])), color, 3)text_location = (int(ann[0]) + 2, int(ann[1]) - 4)key = get_key(cfg.class_dict, ann[5])[0]sample = cv2.putText(sample, f'{key} {ann[4]*100:.2f}%', text_location, font,fontScale=0.5, color=color)plt.imshow(sample.astype(np.uint8))plt.show()

wbf.py

# coding: utf-8
__author__ = 'ZFTurbo: https://kaggle.com/zfturbo'import numpy as npdef bb_intersection_over_union(A, B):xA = max(A[0], B[0])yA = max(A[1], B[1])xB = min(A[2], B[2])yB = min(A[3], B[3])# compute the area of intersection rectangleinterArea = max(0, xB - xA) * max(0, yB - yA)if interArea == 0:return 0.0# compute the area of both the prediction and ground-truth rectanglesboxAArea = (A[2] - A[0]) * (A[3] - A[1])boxBArea = (B[2] - B[0]) * (B[3] - B[1])iou = interArea / float(boxAArea + boxBArea - interArea)return ioudef prefilter_boxes(boxes, scores, labels, weights, thr):# Create dict with boxes stored by its labelnew_boxes = dict()for t in range(len(boxes)):for j in range(len(boxes[t])):score = scores[t][j]if score < thr:continuelabel = int(labels[t][j])box_part = boxes[t][j]b = [int(label), float(score) * weights[t], float(box_part[0]), float(box_part[1]), float(box_part[2]), float(box_part[3])]if label not in new_boxes:new_boxes[label] = []new_boxes[label].append(b)# Sort each list in dict by score and transform it to numpy arrayfor k in new_boxes:current_boxes = np.array(new_boxes[k])new_boxes[k] = current_boxes[current_boxes[:, 1].argsort()[::-1]]return new_boxesdef get_weighted_box(boxes, conf_type='avg'):"""Create weighted box for set of boxes:param boxes: set of boxes to fuse :param conf_type: type of confidence one of 'avg' or 'max':return: weighted box"""box = np.zeros(6, dtype=np.float32)conf = 0conf_list = []for b in boxes:box[2:] += (b[1] * b[2:])conf += b[1]conf_list.append(b[1])box[0] = boxes[0][0]if conf_type == 'avg':box[1] = conf / len(boxes)elif conf_type == 'max':box[1] = np.array(conf_list).max()box[2:] /= confreturn boxdef find_matching_box(boxes_list, new_box, match_iou):best_iou = match_ioubest_index = -1for i in range(len(boxes_list)):box = boxes_list[i]if box[0] != new_box[0]:continueiou = bb_intersection_over_union(box[2:], new_box[2:])if iou > best_iou:best_index = ibest_iou = ioureturn best_index, best_ioudef weighted_boxes_fusion(boxes_list, scores_list, labels_list, weights=None, iou_thr=0.55, skip_box_thr=0.0, conf_type='avg', allows_overflow=False):''':param boxes_list: list of boxes predictions from each model, each box is 4 numbers. It has 3 dimensions (models_number, model_preds, 4)Order of boxes: x1, y1, x2, y2. We expect float normalized coordinates [0; 1]:param scores_list: list of scores for each model :param labels_list: list of labels for each model:param weights: list of weights for each model. Default: None, which means weight == 1 for each model:param iou_thr: IoU value for boxes to be a match:param skip_box_thr: exclude boxes with score lower than this variable  :param conf_type: how to calculate confidence in weighted boxes. 'avg': average value, 'max': maximum value:param allows_overflow: false if we want confidence score not exceed 1.0 :return: boxes: boxes coordinates (Order of boxes: x1, y1, x2, y2). :return: scores: confidence scores:return: labels: boxes labels'''if weights is None:weights = np.ones(len(boxes_list))if len(weights) != len(boxes_list):print('Warning: incorrect number of weights {}. Must be: {}. Set weights equal to 1.'.format(len(weights), len(boxes_list)))weights = np.ones(len(boxes_list))weights = np.array(weights)if conf_type not in ['avg', 'max']:print('Unknown conf_type: {}. Must be "avg" or "max"'.format(conf_type))exit()filtered_boxes = prefilter_boxes(boxes_list, scores_list, labels_list, weights, skip_box_thr)if len(filtered_boxes) == 0:return np.zeros((0, 4)), np.zeros((0,)), np.zeros((0,))overall_boxes = []for label in filtered_boxes:boxes = filtered_boxes[label]new_boxes = []weighted_boxes = []# Clusterize boxesfor j in range(0, len(boxes)):index, best_iou = find_matching_box(weighted_boxes, boxes[j], iou_thr)if index != -1:new_boxes[index].append(boxes[j])weighted_boxes[index] = get_weighted_box(new_boxes[index], conf_type)else:new_boxes.append([boxes[j].copy()])weighted_boxes.append(boxes[j].copy())# Rescale confidence based on number of models and boxesfor i in range(len(new_boxes)):if not allows_overflow:weighted_boxes[i][1] = weighted_boxes[i][1] * min(weights.sum(), len(new_boxes[i])) / weights.sum()else:weighted_boxes[i][1] = weighted_boxes[i][1] * len(new_boxes[i]) / weights.sum()overall_boxes.append(np.array(weighted_boxes))overall_boxes = np.concatenate(overall_boxes, axis=0)overall_boxes = overall_boxes[overall_boxes[:, 1].argsort()[::-1]]boxes = overall_boxes[:, 2:]scores = overall_boxes[:, 1]labels = overall_boxes[:, 0]return boxes, scores, labels
查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. 报错:No module named ‘torch_scatter.scatter_cuda‘ 适用gpu版的pytorch环境的torch_geometric安装

    2020/9/16 安装 安装目的&#xff1a;跑CGC-Net(FATURE_EXTRACT) 报错&#xff1a;No module named torch_scatter.scatter_cuda 参考&#xff1a;https://www.cnblogs.com/yqpy/p/13498200.html 参考&#xff1a;https://zhuanlan.zhihu.com/p/138826540 参考&#xff1a;h…...

    2024/4/25 21:29:04
  2. 剑指offer66题python实现 25-31

    目录A. 知识点&#xff1a;------- 二叉树25.重建二叉树26.树的子结构27.二叉树的镜像28.从上往下打印二叉树29.二叉搜索树的后序遍历序列30.二叉树中和为某一值的路径31.二叉搜索树与双向链表A. 知识点&#xff1a;------- 二叉树 什么叫做树&#xff1f;树状图是一种数据结构…...

    2024/4/24 7:19:15
  3. mysql自定义变量,自定义变量显示行号、简化查询、赋值

    前言 有时我们需要导出成绩单&#xff0c;并按分数由高到底进行排序&#xff0c;并展示排名&#xff0c;这里就需要自定义变量&#xff0c;如图所示&#xff1a; 有时我们在数据库中通过好几张表查找数据时&#xff0c;每张表的信息都要展示出来&#xff0c;这样就需要一个共有…...

    2024/4/21 21:29:53
  4. 记录一下NW-ZX1折腾过程

    问题背景解决方法总结 阅读之前注意&#xff1a; 本文阅读建议用时&#xff1a;10min 本文阅读结构如下表&#xff1a; 项目下属项目测试用例数量问题背景无0解决方法无0总结无0 问题背景 需求非常简单&#xff0c;一款挺早的音乐播放器——索尼NW-ZX1&#xff0c;其自带的音…...

    2024/4/21 21:29:53
  5. (JavaScript学习记录):作用域

    写在前面&#xff1a;参考哔哩哔哩黑马程序员pink老师教程 地址&#xff1a;https://www.bilibili.com/video/BV1Sy4y1C7ha?t41&p4目录 作用域 作用域概述 全局作用域 局部作用域 &#xff08;函数作用域&#xff09; JS 没有块级作用域 变量的作用域 变量作用域的分类 全…...

    2024/4/21 19:36:31
  6. Python编程:从入门到实践第六章练习6.3

    Python编程&#xff1a;从入门到实践第六章练习6.3 #coding:gbk#6-4词汇表2 #参照6.3练习.py#6-5河流 rivers {nile: egypt,yellow river: china,amazon river: brazil,} for river,country in rivers.items():print("The " river.title() " runs through &q…...

    2024/4/28 4:55:03
  7. hdu-------2028

    Lowest Common Multiple Plus Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 101684 Accepted Submission(s): 42166 Problem Description 求n个数的最小公倍数。 Input 输入包含多个测试实例&#xff0c;每个测试…...

    2024/4/21 21:29:49
  8. Java基础之循环控制语句

    for 与 foreach for 语句是一种在程序执行前就要先判断条件表达式是否为真的循环语句。 public static void main(String[] args) {/*建议在循环外先定义变量&#xff0c;尤其是 变量为比较复杂的对象&#xff0c;在一定程度上可以节约资源、提高效率*/int i ; for (i 0; i …...

    2024/4/21 21:29:49
  9. 解决:‘webpack-dev-server‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。

    最近在做项目的时候&#xff0c;使用webpack-dev-server时遇到一些问题&#xff08;如下图所示&#xff09;&#xff0c;输入npm run dev之后&#xff0c;会出现以下错误 我在学习vue框架的时候因为要使用到webpack工具&#xff0c;但这个工具又是基于node&#xff0c;而我对…...

    2024/4/21 21:29:47
  10. Python|使用腾讯云函数功能解决每日打卡、答题等问题

    1、登陆腾讯云 地址&#xff1a;https://cloud.tencent.com 新用户需要注册&#xff0c;并实名认证 2、进入腾讯云控制台&#xff0c;搜索云函数&#xff0c;进入云函数功能模块 3、进入函数服务&#xff0c;新建函数&#xff0c;此处新建一个python3.6环境的空白helloword函…...

    2024/4/21 21:29:46
  11. ansible--描述角色结构

    描述角色结构 1.利用角色构造ansible playbook 角色(roles)是指某一段写好的通用的playbook代码。 通用简单角色&#xff1a;所有的角色&#xff0c;不管在哪里做都是一样的&#xff0c;不会发生改变。 不通用的用户数据、项目数据、业务数据&#xff0c;是针对不同用户&…...

    2024/4/21 21:29:47
  12. 缓存中间件-redis的RDB持久化细节

    世界上并没有完美的程序&#xff0c;但是我们并不因此而沮丧&#xff0c;因为写程序就是一个不断追求完美的过程。 RDB持久化可以通过调用两个方法实现&#xff1a;save和bgsave&#xff1b; 调用save方法生成rdb文件时&#xff0c;使用的是主进程&#xff0c;所以在rdb文件生成…...

    2024/4/21 21:29:44
  13. Ubuntu设置启动器向下停靠

    gsettings set com.canonical.Unity.Launcher launcher-position Bottom 最后一个单词为停靠的位置 如Left...

    2024/4/24 16:12:48
  14. lamda表达式演进

    Java8新特性 lamba 1.lambda表达式是匿名函数&#xff0c;只不过长得不太像而已&#xff0c;可以看成是进化版。 2.lambda表达式是用来创建委托或者目录树的匿名函数。 package com.haohao.test;/*** author zhh* description* date 2020/9/16*/ public class Test3 {pub…...

    2024/4/24 11:17:25
  15. Linux系统常用操作

    Linux常用命令用户系统MYSQL用户 创建用户组 groupadd 用户组创建文件夹 mkdir /home/用户名创建用户 useradd -g 用户组 -d /home/用户组/用户名 用户名修改密码 passwd 用户名进行目录权限配置 chown -R 用户名:用户组 /home/用户组/用户名/修改shell(Optional) usermod --s…...

    2024/4/27 0:01:05
  16. 聚集的疫情小区

    给你一个由’1’(疫情小区&#xff09;和0’(正常小区&#xff09;组成的二维矩阵&#xff0c;请你计算数组中的有几处疫情聚集地。疫情小区地总是被正常小区包围着&#xff0c;并且每个疫情聚集地只能由水平方向或竖直方向上相邻的疫情小区连接形成。单个孤立的疫情小区也视为…...

    2024/4/28 3:58:33
  17. scp用户迁移rsync

    本文将为熟悉 scp 的人提供一个介绍和过渡的指南。让我们跳进最常见的场景&#xff1a;复制文件和复制目录。在 SSH 8.0 预发布公告中&#xff0c;OpenSSH 项目表示&#xff0c;他们认为 scp 协议已经过时&#xff0c;不灵活&#xff0c;而且不容易修复&#xff0c;然后他们继而…...

    2024/4/26 12:38:04
  18. 蓝桥杯电子类单片机组模块——事件监测器

    在多次的省赛和国赛中&#xff0c;“事件监测器”这种题型都被考察过&#xff0c;其原理相对比较简单。 以第十一届省赛&#xff08;第一次&#xff09;为例&#xff0c;参入事件状态判断模型&#xff08;如下图&#xff09;。 我们可以看到&#xff0c;题目中设定了一个电压…...

    2024/4/26 3:07:39
  19. 详细:centos 查看mysql数据库命令

    centos 查看mysql数据库命令 使用MySQL时&#xff0c;需要了解当前数据库的情况&#xff0c;例如当前的数据库大小、字符集、用户等等。下面总结了一些查看数据库相关信息的命令 1&#xff1a;查看显示所有数据库 mysql> show databases; -------------------- | Databa…...

    2024/4/21 21:17:47
  20. 选球员案例

    选球员案例 所有球员海报显示在前台页面,选中球员,就显示具体是谁被选中的案例 知识点 html css vue 前期准备 创建vue项目 1、node与npm环境的配置 2、vue脚手架的安装 vue项目初始化 1、APP.vue根组件的初始化,router-view标签的占位五行加各个样式的总和 2、…...

    2024/4/29 23:33:18

最新文章

  1. 不坑盒子2024.0501版,Word朗读、Word表格计算、Word中代码高亮显示行号、Excel中正则提取内容……

    通过“听”来审阅Word中的内容&#xff0c;能轻松找出那些容易被眼看忽视的错字。 不坑盒子2024.0501版来了&#xff0c;很多奇妙的事情&#xff0c;正在发生…… 功能一览 此版本共带来10余项变动&#xff0c;来看看有没有你感兴趣的吧~ 接入Azure的“语音”能力 接入“语…...

    2024/5/2 9:55:17
  2. 梯度消失和梯度爆炸的一些处理方法

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

    2024/3/20 10:50:27
  3. JVM学习笔记

    文章目录 一、内存模型1. 程序计数器2. 栈3. 本地方法栈4. 堆5. 方法区方法区位置字符串常量池位置 6. 直接内存 二、虚拟机参数设置三、类的生命周期1. 加载2. 连接1&#xff09;验证2&#xff09;准备3&#xff09;解析 3. 初始化4. 卸载 四、类加载器1. 启动类加载器2. 扩展…...

    2024/5/1 13:33:02
  4. Redis分区

    Redis分区是一种数据分片技术&#xff0c;用于将数据分布到多个Redis实例&#xff08;节点&#xff09;上以提高性能和扩展性。分区使得Redis能够处理比单个实例更大的数据集&#xff0c;并允许并行处理客户端请求。 原理&#xff1a; Redis分区通过一致性哈希算法&#xff08;…...

    2024/4/30 23:21:56
  5. 416. 分割等和子集问题(动态规划)

    题目 题解 class Solution:def canPartition(self, nums: List[int]) -> bool:# badcaseif not nums:return True# 不能被2整除if sum(nums) % 2 ! 0:return False# 状态定义&#xff1a;dp[i][j]表示当背包容量为j&#xff0c;用前i个物品是否正好可以将背包填满&#xff…...

    2024/5/1 10:25:26
  6. 【Java】ExcelWriter自适应宽度工具类(支持中文)

    工具类 import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellType; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet;/*** Excel工具类** author xiaoming* date 2023/11/17 10:40*/ public class ExcelUti…...

    2024/5/1 13:20:04
  7. Spring cloud负载均衡@LoadBalanced LoadBalancerClient

    LoadBalance vs Ribbon 由于Spring cloud2020之后移除了Ribbon&#xff0c;直接使用Spring Cloud LoadBalancer作为客户端负载均衡组件&#xff0c;我们讨论Spring负载均衡以Spring Cloud2020之后版本为主&#xff0c;学习Spring Cloud LoadBalance&#xff0c;暂不讨论Ribbon…...

    2024/5/1 21:18:12
  8. TSINGSEE青犀AI智能分析+视频监控工业园区周界安全防范方案

    一、背景需求分析 在工业产业园、化工园或生产制造园区中&#xff0c;周界防范意义重大&#xff0c;对园区的安全起到重要的作用。常规的安防方式是采用人员巡查&#xff0c;人力投入成本大而且效率低。周界一旦被破坏或入侵&#xff0c;会影响园区人员和资产安全&#xff0c;…...

    2024/5/2 9:47:31
  9. VB.net WebBrowser网页元素抓取分析方法

    在用WebBrowser编程实现网页操作自动化时&#xff0c;常要分析网页Html&#xff0c;例如网页在加载数据时&#xff0c;常会显示“系统处理中&#xff0c;请稍候..”&#xff0c;我们需要在数据加载完成后才能继续下一步操作&#xff0c;如何抓取这个信息的网页html元素变化&…...

    2024/5/2 9:47:31
  10. 【Objective-C】Objective-C汇总

    方法定义 参考&#xff1a;https://www.yiibai.com/objective_c/objective_c_functions.html Objective-C编程语言中方法定义的一般形式如下 - (return_type) method_name:( argumentType1 )argumentName1 joiningArgument2:( argumentType2 )argumentName2 ... joiningArgu…...

    2024/5/2 6:03:07
  11. 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】

    &#x1f468;‍&#x1f4bb;博客主页&#xff1a;花无缺 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】&#x1f30f;题目描述&#x1f30f;输入格…...

    2024/5/2 9:47:30
  12. 【ES6.0】- 扩展运算符(...)

    【ES6.0】- 扩展运算符... 文章目录 【ES6.0】- 扩展运算符...一、概述二、拷贝数组对象三、合并操作四、参数传递五、数组去重六、字符串转字符数组七、NodeList转数组八、解构变量九、打印日志十、总结 一、概述 **扩展运算符(...)**允许一个表达式在期望多个参数&#xff0…...

    2024/5/1 11:24:00
  13. 摩根看好的前智能硬件头部品牌双11交易数据极度异常!——是模式创新还是饮鸩止渴?

    文 | 螳螂观察 作者 | 李燃 双11狂欢已落下帷幕&#xff0c;各大品牌纷纷晒出优异的成绩单&#xff0c;摩根士丹利投资的智能硬件头部品牌凯迪仕也不例外。然而有爆料称&#xff0c;在自媒体平台发布霸榜各大榜单喜讯的凯迪仕智能锁&#xff0c;多个平台数据都表现出极度异常…...

    2024/5/2 5:31:39
  14. Go语言常用命令详解(二)

    文章目录 前言常用命令go bug示例参数说明 go doc示例参数说明 go env示例 go fix示例 go fmt示例 go generate示例 总结写在最后 前言 接着上一篇继续介绍Go语言的常用命令 常用命令 以下是一些常用的Go命令&#xff0c;这些命令可以帮助您在Go开发中进行编译、测试、运行和…...

    2024/5/1 20:22:59
  15. 用欧拉路径判断图同构推出reverse合法性:1116T4

    http://cplusoj.com/d/senior/p/SS231116D 假设我们要把 a a a 变成 b b b&#xff0c;我们在 a i a_i ai​ 和 a i 1 a_{i1} ai1​ 之间连边&#xff0c; b b b 同理&#xff0c;则 a a a 能变成 b b b 的充要条件是两图 A , B A,B A,B 同构。 必要性显然&#xff0…...

    2024/5/2 9:47:28
  16. 【NGINX--1】基础知识

    1、在 Debian/Ubuntu 上安装 NGINX 在 Debian 或 Ubuntu 机器上安装 NGINX 开源版。 更新已配置源的软件包信息&#xff0c;并安装一些有助于配置官方 NGINX 软件包仓库的软件包&#xff1a; apt-get update apt install -y curl gnupg2 ca-certificates lsb-release debian-…...

    2024/5/2 9:47:27
  17. Hive默认分割符、存储格式与数据压缩

    目录 1、Hive默认分割符2、Hive存储格式3、Hive数据压缩 1、Hive默认分割符 Hive创建表时指定的行受限&#xff08;ROW FORMAT&#xff09;配置标准HQL为&#xff1a; ... ROW FORMAT DELIMITED FIELDS TERMINATED BY \u0001 COLLECTION ITEMS TERMINATED BY , MAP KEYS TERMI…...

    2024/5/2 0:07:22
  18. 【论文阅读】MAG:一种用于航天器遥测数据中有效异常检测的新方法

    文章目录 摘要1 引言2 问题描述3 拟议框架4 所提出方法的细节A.数据预处理B.变量相关分析C.MAG模型D.异常分数 5 实验A.数据集和性能指标B.实验设置与平台C.结果和比较 6 结论 摘要 异常检测是保证航天器稳定性的关键。在航天器运行过程中&#xff0c;传感器和控制器产生大量周…...

    2024/5/2 8:37:00
  19. --max-old-space-size=8192报错

    vue项目运行时&#xff0c;如果经常运行慢&#xff0c;崩溃停止服务&#xff0c;报如下错误 FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory 因为在 Node 中&#xff0c;通过JavaScript使用内存时只能使用部分内存&#xff08;64位系统&…...

    2024/5/2 9:47:26
  20. 基于深度学习的恶意软件检测

    恶意软件是指恶意软件犯罪者用来感染个人计算机或整个组织的网络的软件。 它利用目标系统漏洞&#xff0c;例如可以被劫持的合法软件&#xff08;例如浏览器或 Web 应用程序插件&#xff09;中的错误。 恶意软件渗透可能会造成灾难性的后果&#xff0c;包括数据被盗、勒索或网…...

    2024/5/2 9:47:25
  21. JS原型对象prototype

    让我简单的为大家介绍一下原型对象prototype吧&#xff01; 使用原型实现方法共享 1.构造函数通过原型分配的函数是所有对象所 共享的。 2.JavaScript 规定&#xff0c;每一个构造函数都有一个 prototype 属性&#xff0c;指向另一个对象&#xff0c;所以我们也称为原型对象…...

    2024/5/1 14:33:22
  22. C++中只能有一个实例的单例类

    C中只能有一个实例的单例类 前面讨论的 President 类很不错&#xff0c;但存在一个缺陷&#xff1a;无法禁止通过实例化多个对象来创建多名总统&#xff1a; President One, Two, Three; 由于复制构造函数是私有的&#xff0c;其中每个对象都是不可复制的&#xff0c;但您的目…...

    2024/5/1 11:51:23
  23. python django 小程序图书借阅源码

    开发工具&#xff1a; PyCharm&#xff0c;mysql5.7&#xff0c;微信开发者工具 技术说明&#xff1a; python django html 小程序 功能介绍&#xff1a; 用户端&#xff1a; 登录注册&#xff08;含授权登录&#xff09; 首页显示搜索图书&#xff0c;轮播图&#xff0…...

    2024/5/2 7:30:11
  24. 电子学会C/C++编程等级考试2022年03月(一级)真题解析

    C/C++等级考试(1~8级)全部真题・点这里 第1题:双精度浮点数的输入输出 输入一个双精度浮点数,保留8位小数,输出这个浮点数。 时间限制:1000 内存限制:65536输入 只有一行,一个双精度浮点数。输出 一行,保留8位小数的浮点数。样例输入 3.1415926535798932样例输出 3.1…...

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

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

    2022/11/19 21:17:18
  26. 错误使用 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
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

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

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

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

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

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

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

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

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

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

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

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

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,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
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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