基于Yolov8网络进行目标检测(三)-训练自己的数据集

news2024/10/7 10:20:54

前一篇文章详细了讲解了如何构造自己的数据集,以及如何修改模型配置文件和数据集配置文件,本篇主要是如何训练自己的数据集,并且如何验证。

VOC2012数据集下载地址:

http://host.robots.ox.ac.uk/pascal/VOC/voc2012/

coco全量数据集下载地址:

http://images.cocodtaset.org/annotations/annotations_trainval2017.zip

本篇以以下图片为预测对象。

23ecb336a3a7c57f87981be4fd6e2841.png

一、对coco128数据集进行训练,coco128.yaml中已包括下载脚本,选择yolov8n轻量模型,开始训练

yolo detect train data=coco128.yaml model=model\yolov8n.pt epochs=100 imgsz=640

训练的相关截图,第一部分是展开后的命令行执行参数和网络结构

583621897c984173178f0a6af76d5ad6.png

第二部分是每轮训练过程

863bc98cb1f0cf75713d440f8a470092.png

第三部分是对各类标签的验证情况

7def8a66be66c9a412079ece89bfe787.png

二、对VOC2012数据集进行训练,使用我们定义的两个yaml配置文件,选择yolov8n轻量模型,开始训练

yolo detect train data=E:\JetBrains\PycharmProject\Yolov8Project\venv\Lib\site-packages\ultralytics\cfg\datasets\VOC2012.yaml model=E:\JetBrains\PycharmProject\Yolov8Project\venv\Lib\site-packages\ultralytics\cfg\models\v8\VOC2012.yaml  pretrained=model\yolov8n.pt epochs=10 imgsz=640

以下为运行日志,和上述一样

(venv) PS E:\JetBrains\PycharmProject\Yolov8Project> yolo detect train data=E:\JetBrains\PycharmProject\Yolov8Project\venv\Lib\site-packages\ultralytics\cfg\datasets\VOC2012.yaml model=E:\JetBrains\PycharmProject\Yolov8Project\venv\
Lib\site-packages\ultralytics\cfg\models\v8\VOC2012.yaml  pretrained=model\yolov8n.pt epochs=10 imgsz=640
WARNING  no model scale passed. Assuming scale='n'.
                   from  n    params  module                                       arguments                     
0-11464  ultralytics.nn.modules.conv.Conv[3, 16, 3, 2]                 
1-114672  ultralytics.nn.modules.conv.Conv[16, 32, 3, 2]                
2-117360  ultralytics.nn.modules.block.C2f             [32, 32, 1, True]             
3-1118560  ultralytics.nn.modules.conv.Conv[32, 64, 3, 2]                
4-1249664  ultralytics.nn.modules.block.C2f             [64, 64, 2, True]             
5-1173984  ultralytics.nn.modules.conv.Conv[64, 128, 3, 2]               
6-12197632  ultralytics.nn.modules.block.C2f             [128, 128, 2, True]           
7-11295424  ultralytics.nn.modules.conv.Conv[128, 256, 3, 2]              
8-11460288  ultralytics.nn.modules.block.C2f             [256, 256, 1, True]
9-11164608  ultralytics.nn.modules.block.SPPF            [256, 256, 5]
10-110  torch.nn.modules.upsampling.Upsample[None, 2, 'nearest']
11[-1, 6]  10  ultralytics.nn.modules.conv.Concat[1]
12-11148224  ultralytics.nn.modules.block.C2f             [384, 128, 1]
13-110  torch.nn.modules.upsampling.Upsample[None, 2, 'nearest']
14[-1, 4]  10  ultralytics.nn.modules.conv.Concat[1]
15-1137248  ultralytics.nn.modules.block.C2f             [192, 64, 1]
16-1136992  ultralytics.nn.modules.conv.Conv[64, 64, 3, 2]
17[-1, 12]  10  ultralytics.nn.modules.conv.Concat[1]
18-11123648  ultralytics.nn.modules.block.C2f             [192, 128, 1]
19-11147712  ultralytics.nn.modules.conv.Conv[128, 128, 3, 2]              
20[-1, 9]  10  ultralytics.nn.modules.conv.Concat[1]
21-11493056  ultralytics.nn.modules.block.C2f             [384, 256, 1]
22[15, 18, 21]  1755212  ultralytics.nn.modules.head.Detect[20, [64, 128, 256]]
VOC2012 summary: 225 layers, 3014748 parameters, 3014732 gradients
Transferred319/355 items from pretrained weights
UltralyticsYOLOv8.0.178Python-3.10.11 torch-2.0.1+cu118 CUDA:0(Quadro P2200, 5120MiB)
engine\trainer: task=detect, mode=train, model=E:\JetBrains\PycharmProject\Yolov8Project\venv\Lib\site-packages\ultralytics\cfg\models\v8\VOC2012.yaml, data=E:\JetBrains\PycharmProject\Yolov8Project\venv\Lib\site-packages\ultralytic
s\cfg\datasets\VOC2012.yaml, epochs=10, patience=50, batch=16, imgsz=640, save=True, save_period=-1, cache=False, device=None, workers=8, project=None, name=None, exist_ok=False, pretrained=model\yolov8n.pt, optimizer=auto, verbose=
True, seed=0, deterministic=True, single_cls=False, rect=False, cos_lr=False, close_mosaic=10, resume=False, amp=True, fraction=1.0, profile=False, freeze=None, overlap_mask=True, mask_ratio=4, dropout=0.0, val=True, split=val, save
_json=False, save_hybrid=False, conf=None, iou=0.7, max_det=300, half=False, dnn=False, plots=True, source=None, show=False, save_txt=False, save_conf=False, save_crop=False, show_labels=True, show_conf=True, vid_stride=1, stream_bu
ffer=False, line_width=None, visualize=False, augment=False, agnostic_nms=False, classes=None, retina_masks=False, boxes=True, format=torchscript, keras=False, optimize=False, int8=False, dynamic=False, simplify=False, opset=None, w
orkspace=4, nms=False, lr0=0.01, lrf=0.01, momentum=0.937, weight_decay=0.0005, warmup_epochs=3.0, warmup_momentum=0.8, warmup_bias_lr=0.1, box=7.5, cls=0.5, dfl=1.5, pose=12.0, kobj=1.0, label_smoothing=0.0, nbs=64, hsv_h=0.015, hs
v_s=0.7, hsv_v=0.4, degrees=0.0, translate=0.1, scale=0.5, shear=0.0, perspective=0.0, flipud=0.0, fliplr=0.5, mosaic=1.0, mixup=0.0, copy_paste=0.0, cfg=None, tracker=botsort.yaml, save_dir=runs\detect\train8
WARNING  no model scale passed. Assuming scale='n'.
                   from  n    params  module                                       arguments
0-11464  ultralytics.nn.modules.conv.Conv[3, 16, 3, 2]
1-114672  ultralytics.nn.modules.conv.Conv[16, 32, 3, 2]
2-117360  ultralytics.nn.modules.block.C2f             [32, 32, 1, True]             
train: Scanning E:\JetBrains\PyCharm Project\ObjectDetectionProject\datasets\VOC2012\labels\train.cache... 17125 images, 195 backgrounds, 0 corrupt: 100%|██████████| 17125/17125[00:00<?, ?it/s]
val: Scanning E:\JetBrains\PyCharm Project\ObjectDetectionProject\datasets\VOC2012\labels\train.cache... 17125 images, 195 backgrounds, 0 corrupt: 100%|██████████| 17125/17125[00:00<?, ?it/s]
Plotting labels to runs\detect\train8\labels.jpg...
optimizer: 'optimizer=auto' found, ignoring 'lr0=0.01' and 'momentum=0.937' and determining best 'optimizer', 'lr0' and 'momentum' automatically...
optimizer: AdamW(lr=0.000417, momentum=0.9) with parameter groups 57 weight(decay=0.0), 64 weight(decay=0.0005), 63 bias(decay=0.0)
Image sizes 640 train, 640 val
Using8 dataloader workers
Logging results to runs\detect\train8
Starting training for10 epochs...
Closing dataloader mosaic
Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  InstancesSize
1/102.41G0.91562.5721.24410640: 100%|██████████| 1071/1071[07:06<00:00,  2.51it/s]
ClassImagesInstancesBox(P          R      mAP50  mAP50-95): 100%|██████████| 536/536[02:44<00:00,  3.26it/s]
                   all      17125349130.6210.5720.6050.436
Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  InstancesSize
2/102.53G1.0061.8691.31110640: 100%|██████████| 1071/1071[07:06<00:00,  2.51it/s]
ClassImagesInstancesBox(P          R      mAP50  mAP50-95): 100%|██████████| 536/536[02:40<00:00,  3.35it/s]
                   all      17125349130.6440.540.5920.414
Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  InstancesSize
3/102.49G1.0381.6611.3449640: 100%|██████████| 1071/1071[07:02<00:00,  2.54it/s]
ClassImagesInstancesBox(P          R      mAP50  mAP50-95): 100%|██████████| 536/536[02:44<00:00,  3.25it/s]
                   all      17125349130.6160.5620.5940.419
Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  InstancesSize
4/102.47G1.0211.4931.33112640: 100%|██████████| 1071/1071[07:00<00:00,  2.55it/s]
ClassImagesInstancesBox(P          R      mAP50  mAP50-95): 100%|██████████| 536/536[02:42<00:00,  3.29it/s]
                   all      17125349130.6510.5880.6380.457
Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  InstancesSize
5/102.48G1.0051.4031.3184640: 100%|██████████| 1071/1071[07:00<00:00,  2.54it/s]
ClassImagesInstancesBox(P          R      mAP50  mAP50-95): 100%|██████████| 536/536[02:41<00:00,  3.31it/s]
                   all      17125349130.6730.5920.650.467
Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  InstancesSize
6/102.46G0.96821.2991.299640: 100%|██████████| 1071/1071[06:55<00:00,  2.58it/s]
ClassImagesInstancesBox(P          R      mAP50  mAP50-95): 100%|██████████| 536/536[02:29<00:00,  3.58it/s]
                   all      17125349130.7090.6230.6930.511
Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  InstancesSize
7/102.48G0.9321.2091.2618640: 100%|██████████| 1071/1071[06:57<00:00,  2.56it/s]
ClassImagesInstancesBox(P          R      mAP50  mAP50-95): 100%|██████████| 536/536[02:39<00:00,  3.37it/s]
                   all      17125349130.7210.6610.7220.542
Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  InstancesSize
8/102.49G0.89611.1271.2329640: 100%|██████████| 1071/1071[07:00<00:00,  2.55it/s]
ClassImagesInstancesBox(P          R      mAP50  mAP50-95): 100%|██████████| 536/536[02:40<00:00,  3.35it/s]
                   all      17125349130.7350.670.7460.567
Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  InstancesSize
9/102.47G0.85651.0581.2028640: 100%|██████████| 1071/1071[06:58<00:00,  2.56it/s]
ClassImagesInstancesBox(P          R      mAP50  mAP50-95): 100%|██████████| 536/536[02:29<00:00,  3.59it/s]
                   all      17125349130.7660.6960.7730.597
Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  InstancesSize
10/102.45G0.82780.98891.17911640: 100%|██████████| 1071/1071[06:55<00:00,  2.58it/s]
ClassImagesInstancesBox(P          R      mAP50  mAP50-95): 100%|██████████| 536/536[02:28<00:00,  3.61it/s]
                   all      17125349130.7770.7180.7950.621
10 epochs completed in 1.620 hours.
Optimizer stripped from runs\detect\train8\weights\last.pt, 6.2MB
Optimizer stripped from runs\detect\train8\weights\best.pt, 6.2MB
Validating runs\detect\train8\weights\best.pt...
UltralyticsYOLOv8.0.178Python-3.10.11 torch-2.0.1+cu118 CUDA:0(Quadro P2200, 5120MiB)
VOC2012 summary (fused): 168 layers, 3009548 parameters, 0 gradients
ClassImagesInstancesBox(P          R      mAP50  mAP50-95): 100%|██████████| 536/536[02:31<00:00,  3.54it/s]
                   all      17125349130.7770.7180.7950.621
             aeroplane      171259110.9240.8130.9020.731
               bicycle      171257530.7650.5780.7370.582
                  bird      1712511690.8940.7570.8620.651
                  boat      171259020.7560.6410.7260.506
                bottle      1712513290.7230.5940.6790.489
                   bus      171256380.8930.8180.8940.775
                   car      1712521050.7860.690.7990.618
                   cat      1712512660.8520.880.9210.763
                 chair      1712524430.7060.5610.660.482
                   cow      171256420.7820.8040.8580.673
           diningtable      171256350.5910.7180.690.517
                   dog      1712515710.8460.7950.8830.727
                 horse      171257600.6730.6340.740.61
                person      17125157530.790.8390.8750.691
           pottedplant      1712510550.7010.5250.6140.404
                 sheep      171258780.7750.8230.8580.665
                  sofa      171255920.7030.6440.730.592
                 train      171256720.8820.8440.9140.735
             tvmonitor      171258390.730.6770.7650.595
Speed: 0.2ms preprocess, 3.9ms inference, 0.0ms loss, 0.7ms postprocess per image
Results saved to runs\detect\train8
Learn more at https://docs.ultralytics.com/modes/train
(venv) PS E:\JetBrains\PycharmProject\Yolov8Project>

三、将run\detect\trainx\best.pt拷贝到model目录下,并改为相关可辨识的模型名称

四、执行测试代码,验证一下几个训练模型的预测结果

from ultralytics import YOLO
from PIL importImage
filepath='test\eat.png'
# 直接加载预训练模型
model = YOLO('model\yolov8x.pt')
# Run inference on 'bus.jpg'
results = model(filepath)  # results list
# Show the results
for r in results:
    im_array = r.plot()  # plot a BGR numpy array of predictions
    im = Image.fromarray(im_array[..., ::-1])  # RGB PIL image
    im.show()  # show image
    im.save('yolov8x.jpg')  # save image
# 直接加载预训练模型
model = YOLO('model\yolov8n.pt')
# Run inference on 'bus.jpg'
results = model(filepath)  # results list
# Show the results
for r in results:
    im_array = r.plot()  # plot a BGR numpy array of predictions
    im = Image.fromarray(im_array[..., ::-1])  # RGB PIL image
    im.show()  # show image
    im.save('yolov8n.jpg')  # save image
# 直接加载预训练模型
model = YOLO('model\coco128.pt')
# Run inference on 'bus.jpg'
results = model(filepath)  # results list
# Show the results
for r in results:
    im_array = r.plot()  # plot a BGR numpy array of predictions
    im = Image.fromarray(im_array[..., ::-1])  # RGB PIL image
    im.show()  # show image
    im.save('coco128.jpg')  # save image
# 直接加载预训练模型
model = YOLO('model\VOC2012.pt')
# Run inference on 'bus.jpg'
results = model(filepath)  # results list
# Show the results
for r in results:
    im_array = r.plot()  # plot a BGR numpy array of predictions
    im = Image.fromarray(im_array[..., ::-1])  # RGB PIL image
    im.show()  # show image
    im.save('VOC2012.jpg')  # save image

基于yolov8x.pt预训练模型预测情况如下:

1355189e51ea01045b281c0ce229ee2f.png

基于yolov8n.pt预训练模型预测情况如下:

8dc01c40742a46063699c165076ca20c.png

基于coco128数据集训练的模型预测情况如下:

fb62c6a7e263170fa33a10654d5f8533.png

基于VOC2012数据集训练的模型预测情况如下:

ef0e876cc7436ee2662f2413127de64b.png

结论:

1、基于yolov8x.pt预训练模型预测的最全最准,但也最慢。

2、基于yolov8n.pt预训练模型预测和yolov8x在概率上有些不一致,80类中的极少数类别识别不出来,毕竟网络模型参数相差太多。

3、基于coco128数据集训练的模型预测类别比yolov8n少,毕竟只有128张训练样本,估计会缺失一些标签。

4、基于VOC2012数据集训练的模型预测类别最少,毕竟只有20种类别,和coco数据集有交叉也有不同,VOC2012数据集没有水果样本,所以无法识别出水果。

基本上后边就可以愉快的训练各种目标检测了,但是数据集和标注数据才是比较耗人的。

最后欢迎关注公众号:python与大数据分析

638402d7b0e4a36fee4183d77e2bb290.jpeg

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

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

相关文章

推荐书目:Python从入门到精通(文末送书)

目录 编辑推荐 内容简介 作者简介 前言/序言 本书特点 编辑推荐 “软件开发视频大讲堂”丛书是清华社计算机专业基础类零售图书畅销品牌之一。 &#xff08;1&#xff09;2008—2023年&#xff0c;丛书累计修订7次&#xff0c;销售400万册&#xff0c;深受广大程序员喜爱。…

Vulnhub系列靶机---The Planets: Earth(行星-地球)

文章目录 信息收集主机发现端口扫描目录扫描dirsearch 漏洞利用反弹shellnc文件传输strace调试工具 靶机文档&#xff1a;The Planets: Earth 下载地址&#xff1a;Download (Mirror) 难易程度&#xff1a;Easy 信息收集 主机发现 端口扫描 80端口 需要做映射/etc/hosts https…

【算法|虚拟头节点|链表】移除链表元素

Leetcode203 移除链表元素 题目描述&#xff1a; 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,6,3,4,5,6], val 6 输出&#xf…

Python入门教学——类和对象

目录 一、面向过程和面向对象 1、面向过程 2、面向对象 二、类 三、类对象与类属性 1、类对象 2、类属性 四、类方法与静态方法 1、类方法 2、静态方法 一、面向过程和面向对象 1、面向过程 是一种以过程为中心的编程思想&#xff0c;强调事件的流程和顺序。思想&…

驱动开发,IO模型,信号驱动IO实现过程

1.信号驱动IO框架图 分析&#xff1a; 信号驱动IO是一种异步IO方式。linux预留了一个信号SIGIO用于进行信号驱动IO。进程主程序注册一个SIGIO信号的信号处理函数&#xff0c;当硬件数据准备就绪后会发起一个硬件中断&#xff0c;在中断的处理函数中向当前进程发送一个SIGIO信号…

高内聚低耦合

低耦合 元素(方法、类)与元素依赖度不要太高&#xff1b;我们在设计程序时应该降低元素与元素之间的直接关系&#xff1b;降低元素与元素之间的耦合性&#xff1b; 若当前有方法A与方法B&#xff0c;A依赖与B&#xff0c;当B不存在的时候A就不能正常工作&#xff0c;那么就说…

高可用集群HA、LVS+Keepalived、健康检测

keepalived是集群管理中保证集群高可用(HA)的一个服务软件&#xff0c;其功能类似于heartbeat&#xff0c;用来防止单点故障。 2.工作原理 keepalived是以VRRP协议为实现基础的,当backup收不到vrrp包时就认为master宕掉了&#xff0c;这时就需要根据VRRP的优先级来选举一个ba…

机器学习笔记之无约束优化问题——(阶段性收尾)共轭方向法与Wolfe准则优化方法Python示例

机器学习笔记之无约束优化问题——基于共轭方向法与Wolfe准则优化方法的Python示例 引言小插曲&#xff1a;画图——非标准二次型的等值线算法在图像中的表示基于精确搜索的共轭梯度法基于Wolfe准则的共轭梯度法 附&#xff1a;共轭梯度法完整代码 引言 本节使用 Python \text…

SQL优化--分组优化(group by)

分组操作&#xff0c;我们主要来看看索引对于分组操作的影响。 在没有索引的情况下&#xff0c;执行如下SQL&#xff0c;查询执行计划&#xff1a; explain select profession , count(*) from tb_user group by profession ;然后&#xff0c;我们在针对于 profession &#…

Linux 上的 Wayland 是什么?它与 X 有何不同?

导读Wayland 是 Linux 发行版的替代窗口系统。它取代了老化的 X11 标准。由于它需要修改应用程序才能使用它&#xff0c;因此迄今为止采用速度很慢。在撰写本文时&#xff0c;增强的安全性是相对于 X11 的主要优势。 X11 或 X Window 系统可让您的图形桌面环境显示和控制窗口。…

【C语言】指针的进阶(一)

目录 前言 1. 字符指针 2. 指针数组 3. 数组指针 3.1 数组指针的定义 3.2 &数组名VS数组名 3.3 数组指针的使用 4. 数组参数、指针参数 4.1 一维数组传参 4.2 二维数组传参 4.3 一级指针传参 4.4 二级指针传参 5. 函数指针 前言 指针在C语言中可谓是有着举足轻重的…

MySQL夺命20连问

博主介绍&#xff1a;✌全网粉丝3W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

Seata 源码篇之核心思想 - 01

Seata 源码篇之核心思想 - 01 引言基础架构数据源代理分支事务提交和回滚隔离级别解决脏写读未提交读已提交 小结 笔者个人项目中使用到了seata来做分布式事务管理&#xff0c;面试过程中也经常被问到seata的原理&#xff0c;seata源码本身也不是很复杂&#xff0c;所以准备出一…

FWT小结

核心思想&#xff1a;把 a , b a,b a,b 化成 f w t ( a ) , f w t ( b ) fwt(a),fwt(b) fwt(a),fwt(b)&#xff0c;相乘后再化为 a a a 化的过程用的是分治 所以和FFT其实一模一样 OR / AND 卷积 不需要什么技巧&#xff0c;暴力分治转移即可 每次分治下去&#xff0c;…

瑞萨MCU入门教程(非常详细的瑞萨单片机入门教程)

瑞萨MCU零基础入门系列教程 前言 得益于瑞萨强大的MCU、强大的软件开发工具(e studio)&#xff0c;也得益于瑞萨和RA生态工作室提供的支持&#xff0c;我们团队编写了《ARM嵌入式系统中面向对象的模块编程方法》&#xff0c;全书37章&#xff0c;将近500页: 讲解面向对象编程…

硬件笔记:组装“固态 U 盘”的八年,从 100 块到 1000 块

这篇文章&#xff0c;聊聊自从 2015 年开始&#xff0c;到目前为止&#xff0c;我使用固态硬盘组装的高速 U 盘&#xff0c;以及它们的使用体验&#xff0c;以及一些明显的坑。 写在前面 2015 年的 8 月&#xff0c;我剁手下单了一块 32G 大小&#xff0c;NGFF接口的三星 22x…

关于 C/C++ 中在指针前加 const 关键字的作用说明

1. 作用说明&#xff1a; 在指针前加 const 的用途为&#xff1a;不可改变指针指向的内存的值&#xff0c;即将该指向指向的内存中的变量置为只读&#xff08;read-only) 变量。 但是&#xff0c;可以给 const 的指针赋值&#xff0c;即将具有 const 属性的指针指向别的内存地…

Linux 内核镜像分析

文章目录 前言一、概述二、bzImage2.1 镜像分析 三、zImage3.1 镜像分析参考链接 前言 介绍了vmlinux的来源&#xff0c;以及分析方法&#xff1b; 一、概述 在linux系统中&#xff0c;vmlinux&#xff08;vmlinuz&#xff09;是一个包含linux kernel的静态链接的可执行文件…

JavaScript中的原型继承和类继承之间的区别

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 原型继承&#xff08;Prototype Inheritance&#xff09;⭐ 类继承&#xff08;Class Inheritance&#xff09;⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启…

MySQL开启安全审计日志,开启查询日志

MySQL 查询开启日志 在 MySQL 数据库中&#xff0c;开启查询日志是一个非常有用的技术&#xff0c;它能帮助你追踪每一个执行的查询语句&#xff0c;以便更好地优化 SQL 语句和性能。本文将介绍如何在 MySQL 数据库中开启查询日志。 开启查询日志 MySQL 中的查询日志是一种记…