YOLOv8训练自定义数据集和运行参数解读

1、YOLOv8深度学习环境搭建及安装

1.1. Yolov8介绍

设置操作类型
YOLOv8模型可用于各种任务,包括检测、分割和分类。这些任务的不同之处在于它们产生的输出类型和它们要解决的特定问题。

**检测:**检测任务涉及识别和定位图像或视频中感兴趣的对象或区域。YOLO模型通过预测图像中物体的边界框和类标签,可以用于物体检测任务。
**分割:**分割任务包括将图像或视频划分为对应于不同对象或类的区域或像素。
**分类:**分类任务包括为输入(如图像或文本)分配类标签。YOLO模型可以通过预测输入图像的类别标签来进行图像分类任务
根据你要解决的特定问题,YOLOv8模型可以在不同的模式下使用。这些模式包括train、val和predict。

**训练(Train)😗*训练模式用于在数据集上训练模型。这种模式通常在模型的开发和测试阶段使用。
Val: Val模式用于评估模型在验证数据集上的性能。这种模式通常用于调整模型的超参数和检测过拟合。
Predict: Predict模式用于在新数据上使用模型进行预测。这种模式通常用于生产环境或将模型部署给用户时。

KeyValueDescription
taskdetect可选择:detect, segment, classify
modetrain可选择: train, val, predict
resumeFalse当设置为True时,恢复上一次的任务。当设置为False时,从给定的model.pt中恢复。
modelnull设置模型。格式因任务类型而异。支持model_name, model.yaml,model.pt
datanull设置数据,支持多数类型 data.yaml, data_folder, dataset_name

模型结构图:

在这里插入图片描述

1.2.环境详细配置

运行平台为联通云服务器,显卡配置为:T4(16GB),可设置单块和多块GPU
具体环境:

PyTorch 1.9.1
Python 3.8
Cuda 11.1
依赖库按照requirements.txt文件安装即可。

在YOLOv8代码包目录:pip install -r requirements.txt

1.3.安装YOLOv8所需要的ultralytics库

安装YOLOv8所需要的ultralytics库,在1.2的环境中,执行下述代码:

pip install ultralytics

1.4.下载YOLOv8代码包

下载YOLOv8代码,执行代码如下:

git clone https://github.com/ultralytics/ultralytics.git

自动下载

将服务器的文件目录cd到 path/your/ultralytics,激活配置的深度学习环境,至此,环境搭建结束!可开始模型的训练了。

YOLOv8代码包的内容如下图所示:

2、数据准备

2.1.数据集介绍及其结构

印刷电路板(PCB)瑕疵数据集:数据下载链接,是一个公共的合成PCB数据集,由北京大学发布,其中包含1386张图像以及6种缺陷(缺失孔,鼠标咬伤,开路,短路,杂散,伪铜),用于检测,分类和配准任务。

├── data
│   ├── Annotations  进行 detection 任务时的标签文件,xml 形式,文件名与图片名一一对应
│   ├── images  存放 .jpg 格式的图片文件
│   ├── ImageSets  存放的是分类和检测的数据集分割文件,包含 train.txt,val.txt,trainval.txt,test.txt
│   ├── labels  存放label标注信息的txt文件,与图片一一对应├── ImageSets(train,val,test建议按照811比例划分)
│   ├── train.txt  写着用于训练的图片名称
│   ├── val.txt  写着用于验证的图片名称
│   ├── trainval.txt  train与val的合集
│   ├── test.txt  写着用于测试的图片名称

2.2.数据集划分

用途:主要是将数据集分类成训练数据集和测试数据集,默认train,val,test按照比例进行随机分类,运行后ImagesSets文件夹中会出现四个文件,主要是生成的训练数据集和测试数据集的图片名称,如下图。同时data目录下也会出现这四个文件,内容是训练数据集和测试数据集的图片路径。

import os
import randomtrainval_percent = 0.9
train_percent = 0.9
xmlfilepath = '/home/PCB_detect_model/YOLOv8/ultralytics/PCB_dataSets/VOC_PCB/Annotations'
txtsavepath = '/home/PCB_detect_model/YOLOv8/ultralytics/PCB_dataSets/VOC_PCB/ImageSets'
total_xml = os.listdir(xmlfilepath)num = len(total_xml)
list = range(num)
tv = int(num * trainval_percent)
tr = int(tv * train_percent)
trainval = random.sample(list, tv)
train = random.sample(trainval, tr)ftrainval = open('/home/PCB_detect_model/YOLOv8/ultralytics/PCB_dataSets/VOC_PCB/ImageSets/trainval.txt', 'w')
ftest = open('/home/PCB_detect_model/YOLOv8/ultralytics/PCB_dataSets/VOC_PCB/ImageSets/test.txt', 'w')
ftrain = open('/home/PCB_detect_model/YOLOv8/ultralytics/PCB_dataSets/VOC_PCB/ImageSets/train.txt', 'w')
fval = open('/home/PCB_detect_model/YOLOv8/ultralytics/PCB_dataSets/VOC_PCB/ImageSets/val.txt', 'w')for i in list:name = total_xml[i][:-4] + '\n'if i in trainval:ftrainval.write(name)if i in train:ftrain.write(name)else:fval.write(name)else:ftest.write(name)ftrainval.close()
ftrain.close()
fval.close()
ftest.close()
  • 运行代码后,在VOC_PCB/ImageSets文件夹下生成下面四个txt文档:

在这里插入图片描述

  • txt文件里面的内容如下:

在这里插入图片描述

2.3.数据集格式转换

用途:用于yolo训练的txt格式代码。主要是将图片数据集标注后的xml文件中的标注信息读取出来并写入txt文件,运行后在labels文件夹中出现所有图片数据集的标注信息

# xml解析包
import xml.etree.ElementTree as ET
import pickle
import os
# os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表from os import listdir, getcwd
from os.path import joinsets = ['train', 'test', 'val']
classes = ['missing_hole', 'mouse_bite', 'open_circuit', 'short', 'spur', 'spurious_copper']# 进行归一化操作def convert(size, box):  # size:(原图w,原图h) , box:(xmin,xmax,ymin,ymax)dw = 1./size[0]     # 1/wdh = 1./size[1]     # 1/hx = (box[0] + box[1])/2.0   # 物体在图中的中心点x坐标y = (box[2] + box[3])/2.0   # 物体在图中的中心点y坐标w = box[1] - box[0]         # 物体实际像素宽度h = box[3] - box[2]         # 物体实际像素高度x = x*dw    # 物体中心点x的坐标比(相当于 x/原图w)w = w*dw    # 物体宽度的宽度比(相当于 w/原图w)y = y*dh    # 物体中心点y的坐标比(相当于 y/原图h)h = h*dh    # 物体宽度的宽度比(相当于 h/原图h)return (x, y, w, h)    # 返回 相对于原图的物体中心点的x坐标比,y坐标比,宽度比,高度比,取值范围[0-1]# year ='2012', 对应图片的id(文件名)def convert_annotation(image_id):'''将对应文件名的xml文件转化为label文件,xml文件包含了对应的bunding框以及图片长款大小等信息,通过对其解析,然后进行归一化最终读到label文件中去,也就是说一张图片文件对应一个xml文件,然后通过解析和归一化,能够将对应的信息保存到唯一一个label文件中去labal文件中的格式:calss x y w h  同时,一张图片对应的类别有多个,所以对应的bunding的信息也有多个'''# 对应的通过year 找到相应的文件夹,并且打开相应image_id的xml文件,其对应bund文件in_file = open('/home/PCB_detect_model/YOLOv8/ultralytics/PCB_dataSets/VOC_PCB/Annotations/%s.xml' % (image_id), encoding='utf-8')# 准备在对应的image_id 中写入对应的label,分别为# <object-class> <x> <y> <width> <height>out_file = open('/home/PCB_detect_model/YOLOv8/ultralytics/PCB_dataSets/VOC_PCB/labels/%s.txt' % (image_id), 'w', encoding='utf-8')# 解析xml文件tree = ET.parse(in_file)# 获得对应的键值对root = tree.getroot()# 获得图片的尺寸大小size = root.find('size')# 如果xml内的标记为空,增加判断条件if size != None:# 获得宽w = int(size.find('width').text)# 获得高h = int(size.find('height').text)# 遍历目标objfor obj in root.iter('object'):# 获得difficult ??difficult = obj.find('difficult').text# 获得类别 =string 类型cls = obj.find('name').text# 如果类别不是对应在我们预定好的class文件中,或difficult==1则跳过if cls not in classes or int(difficult) == 1:continue# 通过类别名称找到idcls_id = classes.index(cls)# 找到bndbox 对象xmlbox = obj.find('bndbox')# 获取对应的bndbox的数组 = ['xmin','xmax','ymin','ymax']b = (float(xmlbox.find('xmin').text), float(xmlbox.find('xmax').text), float(xmlbox.find('ymin').text),float(xmlbox.find('ymax').text))print(image_id, cls, b)# 带入进行归一化操作# w = 宽, h = 高, b= bndbox的数组 = ['xmin','xmax','ymin','ymax']bb = convert((w, h), b)# bb 对应的是归一化后的(x,y,w,h)# 生成 calss x y w h 在label文件中out_file.write(str(cls_id) + " " + " ".join([str(a) for a in bb]) + '\n')
# 返回当前工作目录
wd = getcwd()
print(wd)
for image_set in sets:'''对所有的文件数据集进行遍历做了两个工作:1.将所有图片文件都遍历一遍,并且将其所有的全路径都写在对应的txt文件中去,方便定位2.同时对所有的图片文件进行解析和转化,将其对应的bundingbox 以及类别的信息全部解析写到label 文件中去最后再通过直接读取文件,就能找到对应的label 信息'''# 先找labels文件夹如果不存在则创建if not os.path.exists('/home/PCB_detect_model/YOLOv8/ultralytics/PCB_dataSets/VOC_PCB/labels/'):os.makedirs('/home/PCB_detect_model/YOLOv8/ultralytics/PCB_dataSets/VOC_PCB/labels/')# 读取在ImageSets/Main 中的train、test..等文件的内容# 包含对应的文件名称image_ids = open('/home/PCB_detect_model/YOLOv8/ultralytics/PCB_dataSets/VOC_PCB/ImageSets/%s.txt' % (image_set)).read().strip().split()# 打开对应的2012_train.txt 文件对其进行写入准备list_file = open('/home/PCB_detect_model/YOLOv8/ultralytics/PCB_dataSets/VOC_PCB/%s.txt' % (image_set), 'w')# 将对应的文件_id以及全路径写进去并换行for image_id in image_ids:list_file.write('/home/PCB_detect_model/YOLOv8/ultralytics/PCB_dataSets/VOC_PCB/images/%s.jpg\n' % (image_id))# 调用  year = 年份  image_id = 对应的文件名_idconvert_annotation(image_id)# 关闭文件list_file.close()
  • labels文件夹里面的内容如下:
    在这里插入图片描述

  • txt文件每一行为一个目标的信息,包含class, x_center, y_center, width, height。格式如下:

    在这里插入图片描述

3、模型训练

3.1.新建一个PCB数据集yaml文件—PCB.yaml

train: /home/xuh/AI_Industrial_Internet/PCB_detect_model/YOLOv8/ultralytics/PCB_dataSets/VOC_PCB/train.txt
val: /home/xuh/AI_Industrial_Internet/PCB_detect_model/YOLOv8/ultralytics/PCB_dataSets/VOC_PCB/val.txt
test: /home/xuh/AI_Industrial_Internet/PCB_detect_model/YOLOv8/ultralytics/PCB_dataSets/VOC_PCB/test.txt# number of classes
nc: 6# class names
names: ['missing_hole', 'mouse_bite', 'open_circuit', 'short', 'spur', 'spurious_copper']

3.2 训练代码

YOLOv8模型的训练设置是指用于在数据集上训练模型的各种超参数和配置。这些设置会影响模型的性能、速度和精度。一些常见的YOLO训练设置包括批量大小、学习率、动量和权重衰减。其他可能影响训练过程的因素包括优化器的选择、损失函数的选择、训练数据集的大小和组成。重要的是要仔细调整和试验这些设置,以实现给定任务的最佳性能。

YOLOv8关于模型训练和预测的超参数在ultralytics/yolo/cfg/default.yaml中设置,这是与先前版本的最大的不同,通过使用这些指令我们就可以实现各种我们所需的操作。

default.yaml内容

#只展示了一部分超参数task: detect  # (str) YOLO task, i.e. detect, segment, classify, pose
mode: train  # (str) YOLO mode, i.e. train, val, predict, export, track, benchmark# Train settings -------------------------------------------------------------------------------------------------------
model:  # (str, optional) path to model file, i.e. yolov8n.pt, yolov8n.yaml
data:  # (str, optional) path to data file, i.e. coco128.yaml
epochs: 100  # (int) number of epochs to train for
patience: 50  # (int) epochs to wait for no observable improvement for early stopping of training
batch: 16  # (int) number of images per batch (-1 for AutoBatch)
imgsz: 640  # (int | list) input images size as int for train and val modes, or list[w,h] for predict and export modes
save: True  # (bool) save train checkpoints and predict results
save_period: -1 # (int) Save checkpoint every x epochs (disabled if < 1)
cache: False  # (bool) True/ram, disk or False. Use cache for data loading
device:  # (int | str | list, optional) device to run on, i.e. cuda device=0 or device=0,1,2,3 or device=cpu
workers: 8  # (int) number of worker threads for data loading (per RANK if DDP)
project:  # (str, optional) project name
name:  # (str, optional) experiment name, results saved to 'project/name' directory
exist_ok: False  # (bool) whether to overwrite existing experiment
pretrained: True  # (bool | str) whether to use a pretrained model (bool) or a model to load weights from (str)
optimizer: auto  # (str) optimizer to use, choices=[SGD, Adam, Adamax, AdamW, NAdam, RAdam, RMSProp, auto]
verbose: True  # (bool) whether to print verbose output
seed: 0  # (int) random seed for reproducibility
deterministic: True  # (bool) whether to enable deterministic mode
single_cls: False  # (bool) train multi-class data as single-class
rect: False  # (bool) rectangular training if mode='train' or rectangular validation if mode='val'
cos_lr: False  # (bool) use cosine learning rate scheduler
close_mosaic: 10  # (int) disable mosaic augmentation for final epochs (0 to disable)
resume: False  # (bool) resume training from last checkpoint
amp: True  # (bool) Automatic Mixed Precision (AMP) training, choices=[True, False], True runs AMP check
fraction: 1.0  # (float) dataset fraction to train on (default is 1.0, all images in train set)
profile: False  # (bool) profile ONNX and TensorRT speeds during training for loggers
freeze: None  # (int | list, optional) freeze first n layers, or freeze list of layer indices during training
# Segmentation
overlap_mask: True  # (bool) masks should overlap during training (segment train only)
mask_ratio: 4  # (int) mask downsample ratio (segment train only)
# Classification
dropout: 0.0  # (float) use dropout regularization (classify train only)

YOLOv8提供CLI和python两种训练方式

CLI就是直接在终端运行指令

python需要新建一个python文件,然后运行代码

yolov8命令行的统一运行格式为:

yolo TASK MODE ARGS

其中主要是三部分传参:

TASK(可选) :含义是选择任务类型,从[detect、segment、classification]中选一个。如果没有显式传递,YOLOv8将尝试从模型类型中猜测TASK。
MODE(必选) :是训练、验证还是预测的任务,可从[train, val, predict, export]中选一个
ARGS(可选) : 是任意数量的自定义arg=value对,如imgsz=320,覆盖默认值。

1.CLI指令

命令行中执行代码:

yolo task=detect mode=train model=/home/xuh/AI_Industrial_Internet/PCB_detect_model/YOLOv8/ultralytics/weights/yolov8s.pt data=/home/xuh/AI_Industrial_Internet/PCB_detect_model/YOLOv8/ultralytics/PCB_dataSets/VOC_PCB/PCB.yaml batch=32 epochs=100 imgsz=640 workers=16 device='0,1'

2.python指令训练方式

在YOLOv8包中,新建train.py,代码如下:

from ultralytics import YOLO# Load a model
# model = YOLO('yolov8n.yaml')  # build a new model from YAML   从YAML中构建一个新模型
# model = YOLO('yolov8n.pt')  # load a pretrained model (recommended for training) 加载预训练的模型(推荐用于训练)
model = YOLO('yolov8s.yaml').load('ultralytics/weights/yolov8s.pt ')  # build from YAML and transfer weights 从YAML构建并传递权重# Train the model
model.train(data='ultralytics/PCB_dataSets/VOC_PCB/PCB.yaml', epochs=100, imgsz=640)

model类方法train(训练)的参数:

KeyValueDescription
device“1”Cuda设备,即0或0、1、2、3或cpu。选择可用的cuda0设备
epochs100需要训练的epoch数
workers8每个进程使用的cpu worker数。使用DDP自动伸缩
batch16Dataloader的batch大小
imgsz640Dataloader中图像数据的大小
optimizerSGD支持的优化器:Adam, SGD, RMSProp
single_clsFalse将多类数据作为单类进行训练
image_weightsFalse使用加权图像选择进行训练
rectFalse启用矩形训练
cos_lrFalse使用cosine LR调度器
lr00.01初始化学习率
lrf0.01最终的OneCycleLR学习率
momentum0.937作为SGD的momentum和Adam的beta1
weight_decay0.0005优化器权重衰减
warmup_epochs3.0Warmup的epoch数,支持分数
warmup_momentum0.8warmup的初始动量
warmup_bias_lr0.1Warmup的初始偏差lr
box0.05Box loss gain
cls0.5cls loss gain
cls_pw1.0cls BCELoss positive_weight
obj1.0bj loss gain (scale with pixels)
obj_pw1.0obj BCELoss positive_weight
iou_t0.20iou训练时的阈值
anchor_t4.0anchor-multiple阈值
fl_gamma0.0focal loss gamma
label_smoothing0.0
nbs64nominal batch size
overlap_maskTrue分割:在训练中使用掩码重叠
mask_ratio4分割:设置掩码下采样
dropoutFalse分类:训练时使用dropout

4、模型预测

YOLO模型的预测设置是指用于在新数据上使用模型进行预测的各种超参数和配置。这些设置会影响模型的性能、速度和精度。一些常见的YOLO预测设置包括置信度阈值、非最大抑制(NMS)阈值和要考虑的类别数量。其他可能影响预测过程的因素包括输入数据的大小和格式,是否存在额外的特征(如掩码或每个框的多个标签),以及模型正在用于的特定任务。重要的是要仔细调整和试验这些设置,以实现给定任务的最佳性能。

1.predcit方法的参数

KeyValueDescription
sourceultralytics/assets输入源。支持图片、文件夹、视频、网址
showFalse查看预测图片
save_txtFalse保存结果到txt文件中
save_confFalse保存condidence scores
save_cropFasle
hide_labelsFalse隐藏labels
hide_confFalse隐藏confidence scores
vid_strideFalse输入视频帧率步长
line_thickness3边框厚度(单位:像素)
visualizeFalse可视化模型特征
augmentFalse增强推理
agnostic_nmsFalseClass-agnostic NMS
retina_masksFalse分割:高分辨率掩模

1.CLI指令

yolo task=detect mode=predict model=runs/detect/train2/weights/best.pt source=data/images device=0

2.python指令预测方式

在YOLOv8包中,新建predict.py,代码如下:

from ultralytics import YOLO
# Load a model
model = YOLO('runs/detect/train4/weights/best.pt')  # load a custom model# Predict with the model
results = model.predict(source='ultralytics/PCB_dataSets/test_img/l_light_01_missing_hole_05_2_600.jpg',save=True)  # predict on an image

2. model类predcit方法的返回值

返回值是一个对象列表,具有如下属性:

属性类型描述
orig_imgnumpy.ndarray原始图像的numpy数组。
orig_shapetuple原始图像的形状,格式为(高度,宽度)。
boxesBoxes, 可选包含检测边界框的Boxes对象。
masksMasks, 可选包含检测掩码的Masks对象。
probsProbs, 可选包含每个类别的概率的Probs对象,用于分类任务。
keypointsKeypoints, 可选包含每个对象检测到的关键点的Keypoints对象。
speeddict以毫秒为单位的每张图片的预处理、推理和后处理速度的字典。
namesdict类别名称的字典。
pathstr图像文件的路径。

5、模型验证

CLI指令验证方式

yolo task=detect mode=val model=yolov8n.pt
# mode=val 就是看验证集
yolo task=detect mode=val split=val model=runs/detect/train2/weights/best.pt data=ultralytics/datasets/MoonCake.yaml
# mode=test 就是看测试集
yolo task=detect mode=val split=test model=runs/detect/train2/weights/best.pt data=ultralytics/datasets/MoonCake.yaml

Python指令验证方式

在YOLOv8代码包中,新建val.py,代码如下:

from ultralytics import YOLO# Load a model
# model = YOLO('yolov8n.pt')  # load an official model
model = YOLO('runs/detect/train4/weights/best.pt')  # load a custom model# Validate the model
metrics = model.val()  # no arguments needed, dataset and settings remembered
metrics.box.map    # map50-95
metrics.box.map50  # map50
metrics.box.map75  # map75
metrics.box.maps   # a list contains map50-95 of each category

model类方法val(验证)的参数:

一些比较常用的传参:

model	需要评估的pt模型文件路径
data	需要评估的数据集yaml文件
imgsz	评估图片推理大小,默认640
batch	评估推理批次,默认16
save_json	是否保存评估结果为json输出,默认False
save_hybrid	是否保存混合版本的标签(标签+额外的预测)
conf	模型评估置信度阈值,默认0.001
iou	模型评估iou阈值,默认0.6
max_det	单张图最大检测目标数量,默认300
half	是否使用fp16推理,默认True
device	要运行的设备,即cuda device =0或Device =0,1,2,3或device = cpu
dnn	是否使用use OpenCV DNN for ONNX inference,默认Flase
rect	是否使用矩形推理,默认False
split	数据集分割用于验证,即val、 test、train,默认val

6、参考文章

1.YOLOv8官方文档
2.YOLOv8运行参数解读
3.YOLOV8模型训练+部署(实战)
4.Jetson nano部署YOLOv8
5.YOLOv8训练自己的数据集(超详细)
6.【YOLO】YOLOv8训练自定义数据集(4种方式)
这几篇文章写的都很棒,受益良多。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/583004.shtml

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

相关文章

多模态大模型-CogVLm 论文阅读笔记

多模态大模型-CogVLm 论文阅读笔记 COGVLM: VISUAL EXPERT FOR LARGE LANGUAGEMODELS 论文地址 :https://arxiv.org/pdf/2311.03079.pdfcode地址 : https://github.com/THUDM/CogVLM时间 : 2023-11机构 : zhipuai,tsinghua关键词: visual language model效果:&#xff08;2023…

一键访问多功能数据解决方案:如何轻松构建和管理APITable智能多维表格

文章目录 前言1. 部署APITable2. cpolar的安装和注册3. 配置APITable公网访问地址4. 固定APITable公网地址 前言 vika维格表作为新一代数据生产力平台&#xff0c;是一款面向 API 的智能多维表格。它将复杂的可视化数据库、电子表格、实时在线协同、低代码开发技术四合为一&am…

《数据库开发实践》之触发器

一、什么是触发器&#xff1f; 1.概念&#xff1a; 简单来说触发器就是一种特殊的存储过程&#xff0c;在数据库服务器触发事件的时候会自动执行其SQL语句集。 2.构成四要素&#xff1a; &#xff08;1&#xff09;名称&#xff1a;要符合标识符命名规则 &#xff08;2&am…

[OCR]Python 3 下的文字识别CnOCR

目录 1 CnOCR 2 安装 3 实践 1 CnOCR CnOCR 是 Python 3 下的文字识别&#xff08;Optical Character Recognition&#xff0c;简称OCR&#xff09;工具包。 工具包支持简体中文、繁体中文&#xff08;部分模型&#xff09;、英文和数字的常见字符识别&#xff0c;支持竖…

基于Java+SpringBoot+vue实现图书借阅管理系统

基于JavaSpringBootvue实现图书借阅和销售商城一体化系统 &#x1f345; 作者主页 程序设计 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; 文章目录 基于JavaSpringBootvue实现图书借阅和销售商城一体化…

elasticsearch-hadoop.jar 6.8版本编译异常

## 背景 重新编译 elasticsearch-hadoop 包&#xff1b; GitHub - elastic/elasticsearch-hadoop at 6.8 编译 7.17 版本时很正常&#xff0c;注意设置下环境变量就好&#xff0c;JAVA8_HOME/.... 编译 6.8 版本时&#xff08;要求jdk8 / jdk9&#xff09;&#xff0c;出现…

腾讯云轻量服务器和云服务器CVM该怎么选?区别一览

腾讯云轻量服务器和云服务器CVM该怎么选&#xff1f;不差钱选云服务器CVM&#xff0c;追求性价比选择轻量应用服务器&#xff0c;轻量真优惠呀&#xff0c;活动 https://curl.qcloud.com/oRMoSucP 轻量应用服务器2核2G3M价格62元一年、2核2G4M价格118元一年&#xff0c;540元三…

Qt(二):使用udp发送与接收图片

使用Qt来通过UDP协议发送和接收图片可以分为几个步骤。以下是一个基本的指南&#xff1a; 发送图片准备图片数据&#xff1a;首先&#xff0c;你需要将图片转换为可以在网络上传输的数据格式。通常&#xff0c;这涉及到将图片转换为字节数组。设置UDP套接字&#xff1a;在Qt中…

Java 缓存中间件

Java 缓存中间件 关键词&#xff1a;Spring Cache、J2Cache、JetCache 一 、JSR 107 JSR107 中制订了 Java 缓存的规范。 因此&#xff0c;在很多缓存框架、缓存库中&#xff0c;其 API 都参考了 JSR 107 规范。 img Java Caching 定义了 5 个核心接口 CachingProvider - 定义…

合并区间(LeetCode 56)

文章目录 1.问题描述2.难度等级3.热门指数4.解题思路参考文献 1.问题描述 以数组 intervals 表示若干个区间的集合&#xff0c;其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间&#xff0c;并返回 一个不重叠的区间数组&#xff0c;该数组需恰好覆盖输…

MetalLB:本地Kubernetes集群的LoadBalancer负载均衡利器

背景 在本地集群进行测试时&#xff0c;我们常常面临一个棘手的问题&#xff1a;Service Type不支持LoadBalancer&#xff0c;而我们只能选择使用NodePort作为替代。这种情况下&#xff0c;我们通常会配置Service为NodePort&#xff0c;并使用externalIPs将流量导入Kubernetes…

SpringBoot多线程与任务调度总结

一、前言 多线程与任务调度是java开发中必须掌握的技能&#xff0c;在springBoot的开发中&#xff0c;多线程和任务调度变得越来越简单。实现方式可以通过实现ApplicationRunner接口&#xff0c;重新run的方法实现多线程。任务调度则可以使用Scheduled注解 二、使用示例 Slf…

微软发布安卓版Copilot,可免费使用GPT-4、DALL-E 3

12月27日&#xff0c;微软的Copilot助手&#xff0c;可在谷歌应用商店下载。目前&#xff0c;只有安卓版&#xff0c;ios还无法使用。 Copilot是一款类ChatGPT助手支持中文&#xff0c;可生成文本/代码/图片、分析图片、总结内容等&#xff0c;二者的功能几乎没太大差别。 值…

【小程序】如何获取特定页面的小程序码

一、进入到小程序管理后台&#xff0c;进入后点击上方的“工具”》“生成小程序码” 小程序管理后台 二、进入开发者工具&#xff0c;打开对应的小程序项目&#xff0c;复制底部小程序特定页面的路径 三、粘贴到对应位置的文本框&#xff0c;点击确定即可

Starling-LM-7B与GPT-4:开源AI的新纪录

引言 在人工智能的前沿领域&#xff0c;Starling-LM-7B的出现标志着开源大型语言模型&#xff08;LLM&#xff09;的一大突破。与GPT-4的近距离竞争不仅展示了Starling-LM-7B的技术实力&#xff0c;也突显了开源社区在推动AI发展方面的重要作用。 模型特点 Starling-LM-7B&a…

django之drf框架(排序、过滤、分页、异常处理)

排序 排序的快速使用 1.必须是继承GenericAPIView及其子类才能是用排序 导入OrderingFilter类&#xff0c;from rest_framework.filters import OrderingFilter 2.在类中配置类属性 filter_backends[OrderingFilter] 3.类中写属性 ordering_fields [price,id] # 必须是表的…

某后台管理系统加密参数逆向分析

前言 在我们日常的渗透中经常会遇到开局一个登录框的情况&#xff0c;弱口令爆破当然是我们的首选。但是有的网站会对账号密码等登录信息进行加密处理&#xff0c;这一步不由得阻碍了很多人的脚步。前端的加解密是比较常见的&#xff0c;无论是 web 后台还是小程序&#xff0c…

k8s之部署kubeadm

master 20.0.0.71&#xff08;4核8G&#xff09; docker、kubelet、kubectl、kubeadm、flannel node1 20.0.0.73&#xff08;最少2核4G&#xff09; docker、kubelet、kubectl、kubeadm、flannel node2 20.0.0.74&#xff08;最少2核4G&#xff09; docker、kubelet、kube…

检查Excel内容是否符合规范

代码一&#xff1a; package com.ly.cloud.config;import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; import org.apache.poi.ss.f…

【MySQL库的操作】

1.库的操作 1.1 创建数据库 语法&#xff1a; create databases [IF NOT EXISTS] 数据库名;注意&#xff1a; [] 是可选项 1.2 创建数据库案例 创建名为 db1 的数据库 create databases db1;说明&#xff1a;当我们创建数据库没有指定字符集和校验规则时&#xff0c;系统…