深度学习与应用:人体关键点检测

实验二 深度学习与应用:人体关键点检测

1、 实验目的

  • 了解人体关键点检测基础流程
  • 熟悉YOLOV7-pose模型结构
  • 掌握 YOLOv7-pose 模型的训练、Fine-tuning 以及推理的能力
  • 掌握YOLOV7-pose模型对实际问题的应用能力,了解如何在特定的场景和任务中应用该模型

2、实验环境

[镜像详情]
虚拟机数量:1个(需GPU >=4GB)
虚拟机信息:

  1. 操作系统:Ubuntu20.04
  2. 代码位置:/home/zkpk/experiment/YOLOV7-POSE
  3. MS COCO 2017数据集存储位置:/home/zkpk/experiment/YOLOV7-POSE/images
    (数据集下载地址:https://cocodataset.org/#download)
    提供tiny版测试数据集,位于:./data/coco 128
  4. 已安装软件:python版本:python 3.9,显卡驱动,cuda版本:cuda11.3 cudnn 版本:8.4.1,torch==1.12.1+cu113,torchvision= 0.13.1+cu113
  5. 根据requirements.txt,合理配置python环境

3、实验内容

  • 准备MS COCO 2017 数据集 或者 tiny 版数据集:coco-128 (./data/coco128)
  • 根据训练参数,训练YOLOV7-pose模型
  • 测试YOLOV7-pose模型
  • 输入单张图片调用训练后的模型推理检测图片中人体关键点
  • 设计输入离线视频,实时对视频进行人体关键点检测

4、实验关键点

  • 数据集索引文件位置必须为数据集配置文件(coco_kpts.yaml)中指定位置;
  • 数据集存储位置必须为数据集索引文件中指定的路径一致,如下图所示
  • 在这里插入图片描述
    图 1
  • 训练过程中出现 OOM错误时, 需将–batch-size参数设置为较小的数值(一般为2的次幂)

5、实验效果图

在这里插入图片描述
在这里插入图片描述

6、实验步骤

  • 6.1 根据上文提供的下载地址下载MS COCO 2017数据集,存储位置:/home/zkpk/experiment/YOLOV7-POSE/images
    (数据集下载地址:https://cocodataset.org/#download)
    或者使用(data\coco128)路径下tiny版数据集,测试训练、推理过程;
  • 6.2 打开命令行窗口进入当前代码工程目录下

cd /home/zkpk/experiment/YOLOV7-POSE
  • 6.3 训练YOLOV7-POSE模型
#   使用coco128 tiny版数据集在 GPU  训练上训练模型
python --weights  weights/yolov7-w6-person.pt  --cfg  cfg/yolov7-w6-pose.yaml  --data  data/coco_kpts_128.yaml --hyp data/hyp.pose.yaml --batch-size 1 --img-size 960 --device "0" --kpt-label # 使用coco128 tiny版数据集在 CPU 训练上训练模型
python --weights  weights/yolov7-w6-person.pt  --cfg  cfg/yolov7-w6-pose.yaml  --data  data/coco_kpts_128.yaml --hyp data/hyp.pose.yaml --batch-size 1 --img-size 960 --device "cpu" --kpt-label # 使用ms coco版数据集在 CPU 训练上训练模型
python --weights  weights/yolov7-w6-person.pt  --cfg  cfg/yolov7-w6-pose.yaml  --data  data/coco_kpts.yaml --hyp data/hyp.pose.yaml --batch-size 1 --img-size 960 --device "cpu" --kpt-label # 使用ms coco128 版数据集在 GPU 训练上训练模型
python --weights  weights/yolov7-w6-person.pt  --cfg  cfg/yolov7-w6-pose.yaml  --data  data/coco_kpts.yaml --hyp data/hyp.pose.yaml --batch-size 1 --img-size 960 --device "0" --kpt-label

运行日志输出如下:

tensorboard: Start with 'tensorboard --logdir runs/train', view at http://localhost:6006/
hyperparameters: lr0=0.01, lrf=0.1, momentum=0.937, weight_decay=0.0005, warmup_epochs=3.0, warmup_momentum=0.8, warmup_bias_lr=0.1, box=0.05, kpt=0.1, cls=0.3, cls_pw=1.0, obj=0.7, obj_pw=1.0, iou_t=0.2, anchor_t=4.0, fl_gamma=0.0, hsv_h=0.015, hsv_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
wandb: Install Weights & Biases for YOLOv5 logging with 'pip install wandb' (recommended)from  n    params  module                                  arguments                     0                -1  1         0  models.common.ReOrg                     []                            1                -1  1      7040  models.common.Conv                      [12, 64, 3, 1]                2                -1  1     73984  models.common.Conv                      [64, 128, 3, 2]               3                -1  1      8320  models.common.Conv                      [128, 64, 1, 1]               4                -2  1      8320  models.common.Conv                      [128, 64, 1, 1]               5                -1  1     36992  models.common.Conv                      [64, 64, 3, 1]                6                -1  1     36992  models.common.Conv                      [64, 64, 3, 1]                7                -1  1     36992  models.common.Conv                      [64, 64, 3, 1]                8                -1  1     36992  models.common.Conv                      [64, 64, 3, 1]                9  [-1, -3, -5, -6]  1         0  models.common.Concat                    [1]                           10                -1  1     33024  models.common.Conv                      [256, 128, 1, 1]              11                -1  1    295424  models.common.Conv                      [128, 256, 3, 2]              12                -1  1     33024  models.common.Conv                      [256, 128, 1, 1]              13                -2  1     33024  models.common.Conv                      [256, 128, 1, 1]              14                -1  1    147712  models.common.Conv                      [128, 128, 3, 1]              15                -1  1    147712  models.common.Conv                      [128, 128, 3, 1]              16                -1  1    147712  models.common.Conv                      [128, 128, 3, 1]              17                -1  1    147712  models.common.Conv                      [128, 128, 3, 1]              18  [-1, -3, -5, -6]  1         0  models.common.Concat                    [1]                           19                -1  1    131584  models.common.Conv                      [512, 256, 1, 1]              20                -1  1   1180672  models.common.Conv                      [256, 512, 3, 2]              21                -1  1    131584  models.common.Conv                      [512, 256, 1, 1]              22                -2  1    131584  models.common.Conv                      [512, 256, 1, 1]              23                -1  1    590336  models.common.Conv                      [256, 256, 3, 1]              24                -1  1    590336  models.common.Conv                      [256, 256, 3, 1]              25                -1  1    590336  models.common.Conv                      [256, 256, 3, 1]              26                -1  1    590336  models.common.Conv                      [256, 256, 3, 1]              27  [-1, -3, -5, -6]  1         0  models.common.Concat                    [1]                           28                -1  1    525312  models.common.Conv                      [1024, 512, 1, 1]             29                -1  1   3540480  models.common.Conv                      [512, 768, 3, 2]              30                -1  1    295680  models.common.Conv                      [768, 384, 1, 1]              31                -2  1    295680  models.common.Conv                      [768, 384, 1, 1]              32                -1  1   1327872  models.common.Conv                      [384, 384, 3, 1]              33                -1  1   1327872  models.common.Conv                      [384, 384, 3, 1]              34                -1  1   1327872  models.common.Conv                      [384, 384, 3, 1]              35                -1  1   1327872  models.common.Conv                      [384, 384, 3, 1]              36  [-1, -3, -5, -6]  1         0  models.common.Concat                    [1]                           37                -1  1   1181184  models.common.Conv                      [1536, 768, 1, 1]             38                -1  1   7079936  models.common.Conv                      [768, 1024, 3, 2]             39                -1  1    525312  models.common.Conv                      [1024, 512, 1, 1]             40                -2  1    525312  models.common.Conv                      [1024, 512, 1, 1]             41                -1  1   2360320  models.common.Conv                      [512, 512, 3, 1]              42                -1  1   2360320  models.common.Conv                      [512, 512, 3, 1]              43                -1  1   2360320  models.common.Conv                      [512, 512, 3, 1]              44                -1  1   2360320  models.common.Conv                      [512, 512, 3, 1]              45  [-1, -3, -5, -6]  1         0  models.common.Concat                    [1]                           46                -1  1   2099200  models.common.Conv                      [2048, 1024, 1, 1]            47                -1  1   7609344  models.common.SPPCSPC                   [1024, 512, 1]                48                -1  1    197376  models.common.Conv                      [512, 384, 1, 1]              49                -1  1         0  torch.nn.modules.upsampling.Upsample    [None, 2, 'nearest']          50                37  1    295680  models.common.Conv                      [768, 384, 1, 1]              51          [-1, -2]  1         0  models.common.Concat                    [1]                           52                -1  1    295680  models.common.Conv                      [768, 384, 1, 1]              53                -2  1    295680  models.common.Conv                      [768, 384, 1, 1]              54                -1  1    663936  models.common.Conv                      [384, 192, 3, 1]              55                -1  1    332160  models.common.Conv                      [192, 192, 3, 1]              56                -1  1    332160  models.common.Conv                      [192, 192, 3, 1]              57                -1  1    332160  models.common.Conv                      [192, 192, 3, 1]              58[-1, -2, -3, -4, -5, -6]  1         0  models.common.Concat                    [1]                           59                -1  1    590592  models.common.Conv                      [1536, 384, 1, 1]             60                -1  1     98816  models.common.Conv                      [384, 256, 1, 1]              61                -1  1         0  torch.nn.modules.upsampling.Upsample    [None, 2, 'nearest']          62                28  1    131584  models.common.Conv                      [512, 256, 1, 1]              63          [-1, -2]  1         0  models.common.Concat                    [1]                           64                -1  1    131584  models.common.Conv                      [512, 256, 1, 1]              65                -2  1    131584  models.common.Conv                      [512, 256, 1, 1]              66                -1  1    295168  models.common.Conv                      [256, 128, 3, 1]              67                -1  1    147712  models.common.Conv                      [128, 128, 3, 1]              68                -1  1    147712  models.common.Conv                      [128, 128, 3, 1]              69                -1  1    147712  models.common.Conv                      [128, 128, 3, 1]              70[-1, -2, -3, -4, -5, -6]  1         0  models.common.Concat                    [1]                           71                -1  1    262656  models.common.Conv                      [1024, 256, 1, 1]             72                -1  1     33024  models.common.Conv                      [256, 128, 1, 1]              73                -1  1         0  torch.nn.modules.upsampling.Upsample    [None, 2, 'nearest']          74                19  1     33024  models.common.Conv                      [256, 128, 1, 1]              75          [-1, -2]  1         0  models.common.Concat                    [1]                           76                -1  1     33024  models.common.Conv                      [256, 128, 1, 1]              77                -2  1     33024  models.common.Conv                      [256, 128, 1, 1]              78                -1  1     73856  models.common.Conv                      [128, 64, 3, 1]               79                -1  1     36992  models.common.Conv                      [64, 64, 3, 1]                80                -1  1     36992  models.common.Conv                      [64, 64, 3, 1]                81                -1  1     36992  models.common.Conv                      [64, 64, 3, 1]                82[-1, -2, -3, -4, -5, -6]  1         0  models.common.Concat                    [1]                           83                -1  1     65792  models.common.Conv                      [512, 128, 1, 1]              84                -1  1    295424  models.common.Conv                      [128, 256, 3, 2]              85          [-1, 71]  1         0  models.common.Concat                    [1]                           86                -1  1    131584  models.common.Conv                      [512, 256, 1, 1]              87                -2  1    131584  models.common.Conv                      [512, 256, 1, 1]              88                -1  1    295168  models.common.Conv                      [256, 128, 3, 1]              89                -1  1    147712  models.common.Conv                      [128, 128, 3, 1]              90                -1  1    147712  models.common.Conv                      [128, 128, 3, 1]              91                -1  1    147712  models.common.Conv                      [128, 128, 3, 1]              92[-1, -2, -3, -4, -5, -6]  1         0  models.common.Concat                    [1]                           93                -1  1    262656  models.common.Conv                      [1024, 256, 1, 1]             94                -1  1    885504  models.common.Conv                      [256, 384, 3, 2]              95          [-1, 59]  1         0  models.common.Concat                    [1]                           96                -1  1    295680  models.common.Conv                      [768, 384, 1, 1]              97                -2  1    295680  models.common.Conv                      [768, 384, 1, 1]              98                -1  1    663936  models.common.Conv                      [384, 192, 3, 1]              99                -1  1    332160  models.common.Conv                      [192, 192, 3, 1]              
100                -1  1    332160  models.common.Conv                      [192, 192, 3, 1]              
101                -1  1    332160  models.common.Conv                      [192, 192, 3, 1]              
102[-1, -2, -3, -4, -5, -6]  1         0  models.common.Concat                    [1]                           
103                -1  1    590592  models.common.Conv                      [1536, 384, 1, 1]             
104                -1  1   1770496  models.common.Conv                      [384, 512, 3, 2]              
105          [-1, 47]  1         0  models.common.Concat                    [1]                           
106                -1  1    525312  models.common.Conv                      [1024, 512, 1, 1]             
107                -2  1    525312  models.common.Conv                      [1024, 512, 1, 1]             
108                -1  1   1180160  models.common.Conv                      [512, 256, 3, 1]              
109                -1  1    590336  models.common.Conv                      [256, 256, 3, 1]              
110                -1  1    590336  models.common.Conv                      [256, 256, 3, 1]              
111                -1  1    590336  models.common.Conv                      [256, 256, 3, 1]              
112[-1, -2, -3, -4, -5, -6]  1         0  models.common.Concat                    [1]                           
113                -1  1   1049600  models.common.Conv                      [2048, 512, 1, 1]             
114                83  1    295424  models.common.Conv                      [128, 256, 3, 1]              
115                93  1   1180672  models.common.Conv                      [256, 512, 3, 1]              
116               103  1   2655744  models.common.Conv                      [384, 768, 3, 1]              
117               113  1   4720640  models.common.Conv                      [512, 1024, 3, 1]             
118[114, 115, 116, 117]  1  10466036  models.yolo.IKeypoint                   [1, [[19, 27, 44, 40, 38, 94], [96, 68, 86, 152, 180, 137], [140, 301, 303, 264, 238, 542], [436, 615, 739, 380, 925, 792]], 17, [256, 512, 768, 1024]]
D:\anaconda3\envs\yolo\lib\site-packages\torch\functional.py:478: UserWarning: torch.meshgrid: in an upcoming release, it will be required to pass the indexing argument. (Triggered internally at  C:\actions-runner\_work\pytorch\pytorch\builder\windows\pytorch\aten\src\ATen\native\TensorShape.cpp:2895.)return _VF.meshgrid(tensors, **kwargs)  # type: ignore[attr-defined]
Model Summary: 641 layers, 80238452 parameters, 80238452 gradients, 102.2 GFLOPSTransferred 634/908 items from weights/yolov7-w6-person.pt
Scaled weight_decay = 0.0005
Optimizer groups: 155 .bias, 155 conv.weight, 155 other
train: Scanning 'data\coco128\labels\train2017.cache' images and labels... 16 found, 0 missing, 0 empty, 0 corrupted: 100%|██████████| 2/2 [00:00<?, ?it/s]
val: Scanning 'data\coco128\labels\train2017.cache' images and labels... 16 found, 0 missing, 0 empty, 0 corrupted: 100%|██████████| 2/2 [00:00<?, ?it/s]
Plotting labels... autoanchor: Analyzing anchors... anchors/target = 6.17, Best Possible Recall (BPR) = 1.0000
Image sizes 960 train, 960 test
Using 2 dataloader workers
Logging results to runs\train\yolov7-w6-pose13
Starting training for 300 epochs...Epoch   gpu_mem       box       obj       cls       kpt      kptv     total    labels  img_size0/299     4.14G   0.08823      1.94         0    0.3494  0.008104     2.386        19       960: 100%|██████████| 8/8 [00:21<00:00,  2.64s/it]Class      Images      Labels           P           R      mAP@.5  mAP@.5:.95: 100%|██████████| 4/4 [00:06<00:00,  1.53s/it]all          16          41        0.75       0.585       0.606       0.334Epoch   gpu_mem       box       obj       cls       kpt      kptv     total    labels  img_size1/299     4.14G   0.08576    0.5416         0    0.3474  0.008164     0.983         8       960:  88%|████████▊ | 7/8 [00:07<00:01,  1.01s/it]

6.4 测试训练模型
在shell 窗口输入测试指令

python test.py --data data/coco_kpts_128.yaml --img 960 --conf 0.001 --iou 0.65 --weights yolov7-w6-pose.pt --kpt-label

使用6.3中训练后的模型测试效果,将–weights 模型路径更换为训练模型保存的路径,模型存储路径为:runs\train\yolov7-w6-poseXX(XX为每次实验的次数)

6.5 在单张图片中,实现模型推理,输出人体关键点检测模型


device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
weigths = torch.load('yolov7-w6-pose.pt', map_location=device)
model = weigths['model']
_ = model.float().eval()if torch.cuda.is_available():model.half().to(device)image = cv2.imread('./person.jpg') #   测试图片的路径
image = letterbox(image, 960, stride=64, auto=True)[0]
image_ = image.copy()
image = transforms.ToTensor()(image)
image = torch.tensor(np.array([image.numpy()]))

运行指令如下:

python  keypoints.py

运行效果如下:

在这里插入图片描述

6.5 在视频中 实现实时模型推理,输出人体关键点检测模型

python keypoint_video.py

可以在keypoint_video.py中修改输入的数据源,选自自己的视频输入:


device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
weigths = torch.load('yolov7-w6-pose.pt')
model = weigths['model']
model = model.half().to(device)
_ = model.eval()cap = cv2.VideoCapture('2.mp4')#   输入视频路径
if (cap.isOpened() == False):print('open failed.')

效果如下:

7、思考题

  • 考虑人体关键点检测中,模型结构还有哪些改进点
  • 思考怎么将yoloV7-Pose模型应用到手势姿势识别中
  • 思考如何调节模型参数和训练参数提升模型的效果指标

8、 实验报告

请按照实验报告的格式要求撰写实验报告,需要源码私信我哈。

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

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

相关文章

【机器学习】——线性回归(自我监督学习)

文章目录 1. 线性回归的定义2. 线性回归的模型3. 线性回归的核心思想4. 线性回归的求解5. 线性回归的假设6. 模型评估7. 线性回归的优缺点8. 线性回归的扩展9. 线性回归的实际应用10. 示例代码&#xff08;Python实现&#xff09; 线性回归详细介绍 1. 线性回归的定义 线性回归…

53 语言模型(和之后用来训练语言模型的数据集)_by《李沐:动手学深度学习v2》pytorch版

系列文章目录 文章目录 系列文章目录理论部分使用计数来建模N元语法总结 代码读取长序列数据随机采样顺序分区 小结练习 理论部分 在上一部分中&#xff0c;我们了解了如何将文本数据映射为词元&#xff0c;以及将这些词元可以视为一系列离散的观测&#xff0c;例如单词或字符…

.bixi勒索病毒数据恢复|金蝶、用友、管家婆、OA、速达、ERP等软件数据库恢复

导言 在当今数字化时代&#xff0c;勒索软件已成为企业和个人面临的重大安全威胁。.bixi勒索病毒作为其中一种新型恶意软件&#xff0c;以其快速加密文件的能力和高效传播机制引发了广泛关注。该病毒不仅能够迅速锁定用户的关键数据&#xff0c;还常常在感染后施加极大的心理压…

邀请功能的实现分析

邀请功能 功能分析 场景&#xff1a;项目中出现用户邀请其他用户加入群组的功能 需求&#xff1a;用户点击生成邀请链接可以生成一个url&#xff0c;将这个url分享给其他用户&#xff0c;其他用户点击后对用户登录状态进行校验&#xff0c;校验通过即可加入群组&#xff0c;未…

江协科技STM32学习- P16 实验-TIM输出比较(PWD驱动LED呼吸灯,舵机,直流电机)

&#x1f680;write in front&#x1f680; &#x1f50e;大家好&#xff0c;我是黄桃罐头&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流 &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd;​…

如何访问字符串中某个字符

在Java中&#xff0c;你可以使用字符串的charAt(int index)方法来查看字符串中第index个位置的字符。index是从0开始的&#xff0c;也就是说&#xff0c;字符串的第一个字符的索引是0&#xff0c;第二个字符的索引是1&#xff0c;以此类推。如果索引超出了字符串的长度&#xf…

IO多路转接:select、poll、epoll

目录 非阻塞读取 fcntl函数 I/O多路转接之select select函数 fd_set结构 select的模拟实现 select的优缺点 I/O多路转接之poll poll函数 struct pollfd结构体 poll函数的使用示例 poll的模拟实现 poll的优缺点 I/O多路转接之epoll epoll的三个系统调用 epoll的…

当你在Linux系统中使用MySQL命令行工具查询数据库时,如果中文显示为问号(?)或其他乱码,简单解决办法。(2)

文章目录 1、问题出现2、解决办法 1、问题出现 2、解决办法 mysql -u [username] -p --default-character-setutf8 [database_name]rootab66508d9441:/# mysql -uroot -p123456 --default-character-setutf8 tingshu_album mysql: [Warning] Using a password on the command …

Redis 字符串类型的典型应用场景

目录 1. 缓存功能 2. 计数功能 3. 共享会话&#xff08;Session&#xff09; 4. 手机验证码 前言 这里将详细介绍 Redis 字符串类型在实际开发中的几个典型应用场景&#xff0c;并提供相应的伪代码示例。 1. 缓存功能 场景描述 在许多Web应用中&#xff0c;数据通常需要…

使用AVL树实现Map

一、数组在裂变扩容时可能会出现环、在数组元素转为链表之后选择尾插法插入节点、数组到链表到AVL到RBT的转换 1、数组在裂变扩容时链表中的节点计算出来的位置可能也会发生变化&#xff0c;在多线程情况下调整节点位置可能会出现环。 2、数组中的数组元素转为链表后插入新节点…

在大模型训练中,为什么GPU 通常比 CPU 更重要

在大模型训练中&#xff0c;GPU 通常比 CPU 更重要&#xff0c;原因主要有以下几点&#xff1a; 一、并行计算能力 GPU 拥有强大的并行计算能力。在大模型训练中&#xff0c;需要处理海量的数据和复杂的计算任务。例如&#xff0c;深度学习模型中的矩阵运算、卷积运算等&…

13. 了解人工智能可能存在的偏见

这篇文章没有太多技术和代码细节&#xff0c;更多的是作为一份有趣的报告。 这里没有任何模型会被训练。 这篇文章也为生成式人工智能导论课程中 HW8: Safety Issues of Generative AI 提供中文引导。 代码文件下载 文章目录 为什么人工智能存在偏见&#xff1f;动手试试加载模…

算法_BFS解决多源最短路问题---持续更新

文章目录 前言引入矩阵题目要求题目解析代码如下 飞地的数量题目要求题目解析代码如下 地图中的最高点题目要求题目解析代码如下 地图分析题目要求题目解析代码如下 前言 本文将会向你介绍有关宽度优先搜索&#xff08;BFS&#xff09;解决多源最短路问题的相关题型&#xff1…

故障诊断│GWO-DBN灰狼算法优化深度置信网络故障诊断

1.引言 随着人工智能技术的快速发展&#xff0c;深度学习已经成为解决复杂问题的热门方法之一。深度置信网络&#xff08;DBN&#xff09;作为深度学习中应用比较广泛的一种算法&#xff0c;被广泛应用于分类和回归预测等问题中。然而&#xff0c;DBN的训练过程通常需要大量的…

机器人速度雅可比矩阵(机器人动力学)

博途PLC矩阵求逆 矩阵求逆 博图SCL_博图矩阵运算-CSDN博客文章浏览阅读839次。本文介绍如何用C语言实现矩阵求逆的过程,详细解析了相关代码,适合线性代数和编程爱好者学习。https://rxxw-control.blog.csdn.net/article/details/122367883 1、二自由度平面关节机器人速度雅…

项目第十二弹:功能联调

项目第十二弹&#xff1a;功能联调 一、发布订阅功能测试1.生产者2.消费者3.演示4.持久化信息查看1.消息2.SQLite3数据库 二、持久化恢复测试1.代码2.gc3.演示 三、虚拟机和信道隔离测试1.责任划分2.如何测试3.生产者4.消费者5.演示 一、发布订阅功能测试 我们直接上TOPIC交换…

MySQL中的逻辑条件

逻辑条件组合两个比较条件的结果来产生一个基于这些条件的单个的结果&#xff0c;或者逆转一个单个条件的结果。当所有条件的结果为真时&#xff0c;返回行。 SQL的三个逻辑运算符是&#xff1a; AND、OR、NOT 可以在WHERE子句中用AND和OR运算符使用多个条件。 示例一&#…

惊爆!高通要收购英特尔,巨头也会被时代抛弃!

今天看到的外媒消息&#xff0c;高通要收购英特尔&#xff0c;看到消息的时候&#xff0c;其实&#xff0c;还是挺吃惊的。 高通是移动芯片的王者&#xff0c;英特尔是 PC 芯片的王者。当然了&#xff0c;英特尔这个可能需要再加上两个字&#xff1a;曾经的 PC 芯片王者。 其实…

植物大战僵尸【源代码分享+核心思路讲解】

植物大战僵尸已经正式完结&#xff0c;今天和大家分享一下&#xff0c;话不多说&#xff0c;直接上链接&#xff01;&#xff01;&#xff01;&#xff08;如果大家在运行这个游戏遇到了问题或者bug&#xff0c;那么请私我谢谢&#xff09; 大家写的时候可以参考一下我的代码思…

在VMware16中安装Windows 10:完整教程

在VMware中安装Windows 10&#xff1a;完整教程 1.安装环境准备2.创建虚拟机 1.安装环境准备 1.虚拟机: VMware-workstation-full-16.2.2-19200509 2.系统镜像:win10 2.创建虚拟机 1.自定义 2.下一步 3.稍后安装系统 3.默认下一步 4.虚拟机取名和选择存放路径(按需更改…