Ultralytics YOLO V11 初体验—训练COCO数据集—全流程记录

news2024/11/28 5:50:06

Utralytics YOLO V11🚀

        之后做项目要用到YOLO,然后也是趁着这个机会捡一下YOLO的相关的知识,这篇博客记录一下,配置Utralytics建立一个训练YOLO的环境,然后使用官方提供的COCO.yaml文件进行自动下载和训练的完整过程,整个过程也是比较曲折,里面涉及到的细节有很多,最终是做出了一个可实现的版本。


Ultralytics是一家专注于开发先进计算机视觉模型的技术公司,特别是在目标检测和图像识别任务方面。它最为人知的是创建和维护了YOLO(You Only Look Once)系列模型,这些模型因其速度快、精度高而被广泛应用于实时目标检测。公司的模型,如YOLOv5和YOLOv8,旨在易于实现、高效并且在各种应用场景中具有很强的性能表现,包括安防系统和自动驾驶等领域。Ultralytics还提供工具、教程和开源代码,帮助工业和科研领域的用户更好地使用这些模型。
在这里插入图片描述

文章目录

  • Utralytics YOLO V11🚀
  • 1.新建Conda 虚拟环境
  • 2.安装GPU pytroch
  • 3.安装Utralytics
  • 4.下载YOLO V11 模型
  • 5.下载COCO数据集
  • 6.下载 COCO.yaml
  • <font color="blue">7.搭建训练文件目录
  • 8.制作txt格式标签
  • 9.制作存储图片路径的txt文件
  • 10.修改yaml文件
  • 11.进行训练
  • 🎂Code训练代码
  • 12.结束

1.新建Conda 虚拟环境


首先是要新建一个虚拟环境,10月份了,我之前用的都是3.10,然后我觉得python官方的最新的稳定版本应该是更新了,通过查看官网我发现,现在的最新的稳定版本是3.11了,所以的话这次打算安装了一个最新的稳定版本。
https://www.python.org/downloads/
在这里插入图片描述

  • 在Anaconda 命令提示窗中输入如下新建环境命令(这里由于我之前安装过其他3.11版本,所以没出进度条直接用的本地缓存进度)
conda create --name ultralytics python=3.11

在这里插入图片描述

  • 在命令提示行内输入python,可以看到安装的python版本,我们的命令安装的python版本为3.11.7。
    在这里插入图片描述

2.安装GPU pytroch


首先需要进入我们上一步建立好的虚拟环境

conda activate ultralytics

在这里插入图片描述

  • 然后win+R 打开系统命令窗口输入cmd(这是另外一个命令窗口)
    在这里插入图片描述
    输入下面的命令查看cuda版本(前提已经安好了GPU的各项驱动)
nvidia-smi

在这里插入图片描述

  • 我自己的CUDA版本是12.6,然后进入pytroch官网,去找安装pytroch的下载命令。https://pytorch.org/,首先Package这一行我们选Conda,因为我们用的的是Anaconda建立的虚拟环境,用conda命令安装会舒服些。然后在ompute Platform一行选一个自己能安装的版本,例如我的CUDA版本是12.6,然后我就选了12.4。
    在这里插入图片描述

然后把下面的下载命令复制下来,复制到之前的Conda的命令提示框中。

在这里插入图片描述
输入命令之后,按回车,出现如下内容。
在这里插入图片描述
拉到下面,然后输入y然后回车。
在这里插入图片描述
然后由于之前我在其他虚拟环境中下载过对应版本的pytroch,所以没出进度条,直接出现了done,表示下载完成。
在这里插入图片描述
然后,输入pip list 看到pytorch已经下载成功了。
在这里插入图片描述

3.安装Utralytics


然后就是安装Utralytics,这个也是很简单粗暴,直接按照官方提示 pip install 安装就行了,我自己配置了清华园下载能稍微快点。

pip install ultralytics

在这里插入图片描述
在这里插入图片描述
然后再输入一下pip list 就可以看到 pytroch 和 ultralytics 都已经被正确安装了。
在这里插入图片描述

4.下载YOLO V11 模型


进入到Ultralytics 的YOLO V11 的下载界面,然后点进去之后稍微下滑一下就能看到Performance Metrics然后需要什么版本点蓝色的版本名称完就可以下了。然后左侧是其他版本的YOLO版本的模型文件下载地址。(如果要从官网主页面进的话,就是先点上方选项卡的Models选项卡,然后点左侧的YOLO 11)
https://docs.ultralytics.com/models/yolo11/#supported-tasks-and-modes
在这里插入图片描述

在这里插入图片描述

5.下载COCO数据集


在Kaggle里下载就行了,27个G大概解压之后。
https://www.kaggle.com/datasets/awsaf49/coco-2017-dataset?resource=download
在这里插入图片描述

6.下载 COCO.yaml


https://docs.ultralytics.com/datasets/detect/coco/#usage
然后就是下载COCO,数据集的yaml文件。

COCO(Common Objects in Context)数据集是一个广泛使用的计算机视觉数据集,旨在支持对象检测、分割和图像标注等任务。它包含了超过33万张复杂的日常生活场景图片,覆盖了80类常见物体,每张图片中物体被标注在不同的上下文环境中,具有丰富的多样性。COCO数据集以其精细的标注和多种任务的支持而闻名,广泛用于训练和评估深度学习模型,尤其是在目标检测和图像语义分割领域。

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

7.搭建训练文件目录


  • 这块我折腾了一阵才整明白,首是新建一个项目,然后把coco2017数据集解压进来,然后把下载的coco.yaml也拖进去。
    然后在项目文件下下新建一个datasets文件下,然后datasets文件下下再建两个新的文件夹imageslabels
    在这里插入图片描述
    然后把coco2017中的 train2017和val2017粘到datasets/images里(这两个文件还挺大的,最好是在外部文件夹复制粘贴,不要在Pycharm内复制粘贴)
    在这里插入图片描述
    然后在labels下面也建两个空文件夹,一个是train2017,一个是val2017。

在这里插入图片描述

8.制作txt格式标签


在项目文件下下新建了一个make_label.py文件,然后需要用coco2017中annotation中的json文件解析成txt类型的标签。

在这里插入图片描述
把下面代码粘贴进去,然后训练集和验证集各运行一次,代码参考了一方热衷博主的博客,在此表示感谢。

import os
import json
from tqdm import tqdm
import argparse

# 生成训练集标签(换成自己的路径)
json_path = r'E:\YOLO_V11\coco2017\annotations\instances_train2017.json'
label_path = r'E:\YOLO_V11\datasets\labels\train2017'

# 生成验证集标签 (换成自己的路径)
# json_path = r'E:\YOLO_V11\coco2017\annotations\instances_val2017.json'
# label_path = r'E:\YOLO_V11\datasets\labels\val2017'


parser = argparse.ArgumentParser()
parser.add_argument('--json_path', default=json_path, type=str,
                    help="input: coco format(json)")
parser.add_argument('--save_path', default=label_path, type=str,
                    help="specify where to save the output dir of labels")
arg = parser.parse_args()


def convert(size, box):
    dw = 1. / (size[0])
    dh = 1. / (size[1])
    x = box[0] + box[2] / 2.0
    y = box[1] + box[3] / 2.0
    w = box[2]
    h = box[3]

    x = x * dw
    w = w * dw
    y = y * dh
    h = h * dh
    return (x, y, w, h)


if __name__ == '__main__':
    json_file = arg.json_path  # COCO Object Instance 类型的标注
    ana_txt_save_path = arg.save_path  # 保存的路径

    data = json.load(open(json_file, 'r'))
    if not os.path.exists(ana_txt_save_path):
        os.makedirs(ana_txt_save_path)

    id_map = {}
    for i, category in enumerate(data['categories']):
        id_map[category['id']] = i

    # 通过事先建表来降低时间复杂度
    max_id = 0
    for img in data['images']:
        max_id = max(max_id, img['id'])

    img_ann_dict = [[] for i in range(max_id + 1)]
    for i, ann in enumerate(data['annotations']):
        img_ann_dict[ann['image_id']].append(i)

    for img in tqdm(data['images']):
        filename = img["file_name"]
        img_width = img["width"]
        img_height = img["height"]
        img_id = img["id"]
        head, tail = os.path.splitext(filename)
        ana_txt_name = head + ".txt"
        f_txt = open(os.path.join(ana_txt_save_path, ana_txt_name), 'w')
        for ann_id in img_ann_dict[img_id]:
            ann = data['annotations'][ann_id]
            box = convert((img_width, img_height), ann["bbox"])
            f_txt.write("%s %s %s %s %s\n" % (id_map[ann["category_id"]], box[0], box[1], box[2], box[3]))
        f_txt.close()

运行生成训练集txt文件形式代码。

在这里插入图片描述
运行生成验证集txt文件形式代码。

在这里插入图片描述
运行之后,labels下的两个文件夹内充斥着大量的txt标签文件,下面是labels/train2017文件下的txt文件。

在这里插入图片描述

9.制作存储图片路径的txt文件


在项目文件下下新建一个make_txt.py

在这里插入图片描述
代码粘贴进去,然后也是训练集运行一遍测试集运行一遍得到两个txt文件。

import os

# 指定要读取的文件夹路径
# folder_path = r"E:\YOLO_V11\datasets\images\train2017"  # 替换为你的文件夹路径
# output_file = "train.txt"  # 存储结果的txt文件

folder_path = r"E:\YOLO_V11\datasets\images\val2017"  # 替换为你的文件夹路径
output_file = "val.txt"  # 存储结果的txt文件

# 获取文件夹中所有文件的绝对路径
file_paths = [os.path.join(folder_path, f) for f in os.listdir(folder_path) if os.path.isfile(os.path.join(folder_path, f))]

# 将文件路径按行写入txt文件
with open(output_file, "w") as f:
    for file_path in file_paths:
        f.write(file_path + "\n")

print(f"文件路径已存储在 {output_file} 中。")

然后得到两个包含训练集和测试集图片的绝对路径。
在这里插入图片描述

10.修改yaml文件


把数据集训练集测试集图片路径改了。
在这里插入图片描述
改成自己的,然后test不用管给注释掉。
在这里插入图片描述

11.进行训练


在项目文件下下新建一个train.py文件复制下面的代码,把下载好的权重托进去
在这里插入图片描述

🎂Code训练代码


在这里为了得到结果,直接设置了epochs=1,这里multiprocessing.freeze_support()起的是线程保护作用,因为我如果不加这个的话,会报线程错位。

from ultralytics import YOLO
import multiprocessing

if __name__ == "__main__":
    multiprocessing.freeze_support()
    model = YOLO("yolo11n.pt")  # load a pretrained model (recommended for training)

    # Train the model
    results = model.train(data="coco.yaml", epochs=1, imgsz=640)

训练输出

D:\ProgramData\anaconda3\envs\utralytics\python.exe E:\YOLO_V11\train.py 
Ultralytics 8.3.6 🚀 Python-3.11.10 torch-2.4.1 CUDA:0 (NVIDIA GeForce RTX 4070 Ti, 12281MiB)
engine\trainer: task=detect, mode=train, model=yolo11n.pt, data=coco.yaml, epochs=1, time=None, patience=100, batch=16, imgsz=640, save=True, save_period=-1, cache=False, device=None, workers=8, project=None, name=train, exist_ok=False, pretrained=True, 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, multi_scale=False, 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, vid_stride=1, stream_buffer=False, visualize=False, augment=False, agnostic_nms=False, classes=None, retina_masks=False, embed=None, show=False, save_frames=False, save_txt=False, save_conf=False, save_crop=False, show_labels=True, show_conf=True, show_boxes=True, line_width=None, format=torchscript, keras=False, optimize=False, int8=False, dynamic=False, simplify=True, opset=None, workspace=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, 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, bgr=0.0, mosaic=1.0, mixup=0.0, copy_paste=0.0, copy_paste_mode=flip, auto_augment=randaugment, erasing=0.4, crop_fraction=1.0, cfg=None, tracker=botsort.yaml, save_dir=runs\detect\train

                   from  n    params  module                                       arguments                     
  0                  -1  1       464  ultralytics.nn.modules.conv.Conv             [3, 16, 3, 2]                 
  1                  -1  1      4672  ultralytics.nn.modules.conv.Conv             [16, 32, 3, 2]                
  2                  -1  1      6640  ultralytics.nn.modules.block.C3k2            [32, 64, 1, False, 0.25]      
  3                  -1  1     36992  ultralytics.nn.modules.conv.Conv             [64, 64, 3, 2]                
  4                  -1  1     26080  ultralytics.nn.modules.block.C3k2            [64, 128, 1, False, 0.25]     
  5                  -1  1    147712  ultralytics.nn.modules.conv.Conv             [128, 128, 3, 2]              
  6                  -1  1     87040  ultralytics.nn.modules.block.C3k2            [128, 128, 1, True]           
  7                  -1  1    295424  ultralytics.nn.modules.conv.Conv             [128, 256, 3, 2]              
  8                  -1  1    346112  ultralytics.nn.modules.block.C3k2            [256, 256, 1, True]           
  9                  -1  1    164608  ultralytics.nn.modules.block.SPPF            [256, 256, 5]                 
 10                  -1  1    249728  ultralytics.nn.modules.block.C2PSA           [256, 256, 1]                 
 11                  -1  1         0  torch.nn.modules.upsampling.Upsample         [None, 2, 'nearest']          
 12             [-1, 6]  1         0  ultralytics.nn.modules.conv.Concat           [1]                           
 13                  -1  1    111296  ultralytics.nn.modules.block.C3k2            [384, 128, 1, False]          
 14                  -1  1         0  torch.nn.modules.upsampling.Upsample         [None, 2, 'nearest']          
 15             [-1, 4]  1         0  ultralytics.nn.modules.conv.Concat           [1]                           
 16                  -1  1     32096  ultralytics.nn.modules.block.C3k2            [256, 64, 1, False]           
 17                  -1  1     36992  ultralytics.nn.modules.conv.Conv             [64, 64, 3, 2]                
 18            [-1, 13]  1         0  ultralytics.nn.modules.conv.Concat           [1]                           
 19                  -1  1     86720  ultralytics.nn.modules.block.C3k2            [192, 128, 1, False]          
 20                  -1  1    147712  ultralytics.nn.modules.conv.Conv             [128, 128, 3, 2]              
 21            [-1, 10]  1         0  ultralytics.nn.modules.conv.Concat           [1]                           
 22                  -1  1    378880  ultralytics.nn.modules.block.C3k2            [384, 256, 1, True]           
 23        [16, 19, 22]  1    464912  ultralytics.nn.modules.head.Detect           [80, [64, 128, 256]]          
YOLO11n summary: 319 layers, 2,624,080 parameters, 2,624,064 gradients, 6.6 GFLOPs

Transferred 499/499 items from pretrained weights
Freezing layer 'model.23.dfl.conv.weight'
AMP: running Automatic Mixed Precision (AMP) checks with YOLO11n...
AMP: checks passed ✅
train: Scanning E:\YOLO_V11\datasets\labels\train2017... 118287 images, 1021 backgrounds, 0 corrupt: 100%|██████████| 118287/118287 [00:41<00:00, 2822.60it/s]
train: WARNING ⚠️ E:\YOLO_V11\datasets\images\train2017\000000099844.jpg: 2 duplicate labels removed
train: WARNING ⚠️ E:\YOLO_V11\datasets\images\train2017\000000201706.jpg: 1 duplicate labels removed
train: WARNING ⚠️ E:\YOLO_V11\datasets\images\train2017\000000214087.jpg: 1 duplicate labels removed
train: WARNING ⚠️ E:\YOLO_V11\datasets\images\train2017\000000522365.jpg: 1 duplicate labels removed
train: New cache created: E:\YOLO_V11\datasets\labels\train2017.cache
val: Scanning E:\YOLO_V11\datasets\labels\val2017... 5000 images, 48 backgrounds, 0 corrupt: 100%|██████████| 5000/5000 [00:02<00:00, 2493.98it/s]
val: New cache created: E:\YOLO_V11\datasets\labels\val2017.cache
Plotting labels to runs\detect\train\labels.jpg... 
  0%|          | 0/7393 [00:00<?, ?it/s]optimizer: 'optimizer=auto' found, ignoring 'lr0=0.01' and 'momentum=0.937' and determining best 'optimizer', 'lr0' and 'momentum' automatically... 
optimizer: AdamW(lr=0.000119, momentum=0.9) with parameter groups 81 weight(decay=0.0), 88 weight(decay=0.0005), 87 bias(decay=0.0)
Image sizes 640 train, 640 val
Using 8 dataloader workers
Logging results to runs\detect\train
Starting training for 1 epochs...

      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size
        1/1      4.01G      1.159      1.298      1.214        240        640: 100%|██████████| 7393/7393 [08:57<00:00, 13.76it/s]
                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100%|██████████| 157/157 [00:21<00:00,  7.20it/s]
                   all       5000      36781      0.632      0.478      0.518      0.364

1 epochs completed in 0.156 hours.
Optimizer stripped from runs\detect\train\weights\last.pt, 5.5MB
Optimizer stripped from runs\detect\train\weights\best.pt, 5.5MB

Validating runs\detect\train\weights\best.pt...
Ultralytics 8.3.6 🚀 Python-3.11.10 torch-2.4.1 CUDA:0 (NVIDIA GeForce RTX 4070 Ti, 12281MiB)
YOLO11n summary (fused): 238 layers, 2,616,248 parameters, 0 gradients, 6.5 GFLOPs
                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100%|██████████| 157/157 [00:18<00:00,  8.61it/s]
                   all       5000      36781      0.632      0.477      0.518      0.364
                person       2693      11004       0.77       0.64       0.73      0.499
               bicycle        149        316      0.694      0.383      0.449      0.255
                   car        535       1932      0.643      0.525       0.56      0.353
            motorcycle        159        371      0.697      0.598      0.639      0.402
              airplane         97        143      0.801      0.776      0.852      0.653
                   bus        189        285      0.777      0.677      0.743      0.614
                 train        157        190      0.827      0.754      0.827      0.657
                 truck        250        415      0.492      0.437      0.446      0.301
                  boat        121        430      0.588      0.344      0.389      0.205
         traffic light        191        637       0.63      0.317       0.39      0.206
          fire hydrant         86        101      0.935      0.714      0.798      0.626
             stop sign         69         75      0.587      0.606      0.627      0.578
         parking meter         37         60       0.66       0.45      0.514      0.384
                 bench        235        413      0.553      0.271      0.301      0.197
                  bird        125        440      0.584      0.377       0.41      0.259
                   cat        184        202      0.775      0.803      0.853      0.665
                   dog        177        218      0.702      0.693      0.741      0.604
                 horse        128        273      0.729      0.719      0.752      0.562
                 sheep         65        361      0.707      0.643      0.713      0.474
                   cow         87        380      0.715        0.6      0.692      0.481
              elephant         89        255      0.664      0.837      0.826      0.624
                  bear         49         71      0.672      0.887      0.869       0.69
                 zebra         85        268      0.757      0.835       0.88      0.643
               giraffe        101        232      0.836      0.838      0.882      0.678
              backpack        228        371      0.488      0.162      0.174     0.0897
              umbrella        174        413      0.641      0.462      0.504      0.331
               handbag        292        540      0.545     0.0821      0.147     0.0784
                   tie        145        254       0.59      0.382      0.403      0.257
              suitcase        105        303      0.586      0.455      0.495      0.338
               frisbee         84        115      0.751      0.722      0.782      0.584
                  skis        120        241      0.602      0.339       0.38      0.197
             snowboard         49         69      0.458      0.275      0.333      0.216
           sports ball        169        263      0.741      0.441      0.501      0.341
                  kite         91        336      0.589       0.53      0.569      0.382
          baseball bat         97        146       0.56       0.37      0.405      0.208
        baseball glove        100        148      0.702      0.453      0.509      0.303
            skateboard        127        179       0.73      0.642      0.659      0.437
             surfboard        149        269      0.685      0.435      0.512       0.32
         tennis racket        167        225      0.717      0.618      0.683      0.403
                bottle        379       1025      0.637      0.382      0.449      0.293
            wine glass        110        343      0.702      0.297      0.394      0.245
                   cup        390        899      0.618      0.426      0.486      0.348
                  fork        155        215      0.611      0.288      0.345      0.239
                 knife        181        326      0.393      0.138      0.164     0.0938
                 spoon        153        253      0.415      0.119      0.146     0.0937
                  bowl        314        626      0.634      0.463      0.517      0.379
                banana        103        379      0.532       0.28      0.352      0.205
                 apple         76        239      0.367      0.238      0.201       0.14
              sandwich         98        177      0.556      0.475      0.461      0.348
                orange         85        287      0.415      0.404      0.337      0.259
              broccoli         71        316      0.524      0.332      0.349      0.196
                carrot         81        371      0.394      0.296      0.265       0.16
               hot dog         51        127       0.55      0.465      0.464      0.345
                 pizza        153        285      0.676      0.611      0.671      0.508
                 donut         62        338      0.591      0.476      0.499      0.387
                  cake        124        316      0.535      0.462      0.491      0.345
                 chair        580       1791      0.586      0.327      0.395      0.243
                 couch        195        261      0.629      0.598      0.607       0.46
          potted plant        172        343       0.61       0.36      0.395      0.223
                   bed        149        163      0.674      0.571      0.642      0.465
          dining table        501        697      0.535      0.437      0.431      0.298
                toilet        149        179      0.728       0.76      0.803      0.649
                    tv        207        288      0.688      0.632      0.695      0.523
                laptop        183        231      0.729      0.658      0.705      0.556
                 mouse         88        106      0.797       0.66      0.724      0.532
                remote        145        283      0.475      0.276      0.303      0.178
              keyboard        106        153      0.651      0.562       0.63      0.456
            cell phone        214        262      0.605      0.374      0.405      0.277
             microwave         54         55      0.609        0.6      0.652        0.5
                  oven        115        143      0.583      0.462      0.504      0.347
               toaster          8          9      0.738      0.333      0.493      0.304
                  sink        187        225      0.635      0.476      0.516      0.345
          refrigerator        101        126      0.553      0.611      0.628      0.495
                  book        230       1161       0.41      0.127      0.184     0.0884
                 clock        204        267      0.832      0.592       0.66      0.457
                  vase        137        277       0.57      0.466      0.452      0.299
              scissors         28         36      0.541      0.278      0.302      0.241
            teddy bear         94        191      0.675      0.529      0.587      0.416
            hair drier          9         11          1          0          0          0
            toothbrush         34         57      0.353      0.263      0.215      0.128
Speed: 0.1ms preprocess, 0.7ms inference, 0.0ms loss, 0.5ms postprocess per image
Results saved to runs\detect\train

Process finished with exit code 0

在这里插入图片描述
运行之后会默认生成一个run文件下,每训练一次就会生成一个train文件下,下一次就是train1,再下一次train2,依次增加。
在这里插入图片描述
weight文件中有训练好的权重,最后依次和最优的一次。
在这里插入图片描述
下面是一些结果图片。

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

12.结束


写完了,这篇主要是记录了,实现流程的全过程,这里还有一些没有解释的细节,等我缓一缓,然后静一静慢慢再把一些细节的解释给补上。

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

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

相关文章

springboot简单案例

必答[简答题]从页面输入年龄&#xff0c;输入的年龄在1-200之间为正常&#xff0c;其余定义为异常&#xff0c;并把年龄结果显示在页面上&#xff0c;同时给出判断(正常输出“年龄是XX岁“;若年龄大于200或小于0&#xff0c;输出自定义异常”年龄输入不正确“;其他显示异常情况…

从0到1:多服务厅预约小程序开发笔记(上)

需求调研 多服务厅预约小程序&#xff1a;随着信息技术的快速发展和移动互联网的普及&#xff0c;越来越多的服务行业开始向线上转型, 传统的预约方式往往效率低下&#xff0c;用户需耗费大量时间进行电话预约或现场排队&#xff0c;服务厅预约小程序集多种服务于一体&#xf…

嵌入式学习-线性表-Day04-队列

嵌入式学习-线性表-Day04-队列 队列 循环队列&#xff08;顺序队列&#xff09; 1&#xff09;创建一个空的队列 2&#xff09;入列 3&#xff09;求长度 链式队列 (1)创建一个空的队列 (2)入列 (3)出列 队列 1 什么是队列&#xff1f; 只允许在两端进行插入和删除操作的线性表…

深度学习——线性神经网络(二、线性回归的从零开始实现)

目录 2.1 生成数据集2.2 读取数据集2.3 初始化模型参数2.4 定义模型2.5 定义损失函数2.6 定义优化算法2.7 训练 2.1 生成数据集 为简单展示&#xff0c;将根据带有噪声的线性模型构造一个数据集。生成一个包含1000个样本的数据集。每个样本包含从标准正态分布中的抽样的两个特征…

RocketMq-秒杀应用场景

1、介绍mq 2、秒杀介绍 -----redis配置 3、生产者-消费者搭建 1、介绍mq 消息存储架构图中主要有下面三个跟消息存储相关的文件构成。 (1) CommitLog&#xff1a;消息主体以及元数据的存储主体&#xff0c;存储Producer端写入的消息主体内容,消息内容不是定长的。单个文件大…

微服务实战——登录(普通登录、社交登录、SSO单点登录)

登录 1.1. 用户密码 PostMapping("/login")public String login(UserLoginVo vo, RedirectAttributes redirectAttributes, HttpSession session){R r memberFeignService.login(vo);if(r.getCode() 0){MemberRespVo data r.getData("data", new Type…

价值5000元完整版GOD引擎手机客户端三端引擎源码 编译完整版

5000元完整版GOD引擎手机客户端三端引擎源码 支持三端互通&#xff1a;电脑端&#xff0c;安卓端&#xff0c;苹果端 GOD引擎全套源码及手游客户端源码&#xff08;苍穹引擎源码及修改教程&#xff09; 服务端代码为Delphir&#xff0c;手游客户端代码为cocos2dx的&#xff08;…

DAMA数据管理知识体系(第14章 大数据和数据科学)

课本内容 14.1 引言 概要 从数据中探究、研发预测模型、机器学习模型、规范性模型和分析方法并将研发结果进行部署供相关方分析的人&#xff0c;被称为数据科学家业务驱动 期望抓住从多种流程生成的数据集中发现的商机&#xff0c;是提升一个组织大数据和数据科学能力的最大业务…

论文阅读(十二):Attention is All You Need

文章目录 一、循环神经网络1.1RNN模型1.1.1RNN模型简介1.1.2RNN基本结构1.1.3权重共享机制1.1.4RNN局限性&#xff1a;长期依赖问题与梯度消失 1.2LSTM模型1.2.1LSTM核心思想1.2.2遗忘门1.2.3输入门1.2.4更新细胞状态1.2.5输出门1.2.6参数更新 二、Seq2Seq机制2.1RNN结构的局限…

react 知识点汇总(非常全面)

React 是一个用于构建用户界面的 JavaScript 库&#xff0c;由 Facebook 开发并维护。它的核心理念是“组件化”&#xff0c;即将用户界面拆分为可重用的组件。 React 的组件通常使用 JSX&#xff08;JavaScript XML&#xff09;。JSX 是一种 JavaScript 语法扩展&#xff0c;…

house_of_muney

house_of_muney 首先介绍一下house of muney 这个利用原理&#xff1a; 在了解过_dl_runtime_resolve的前提下&#xff0c;当程序保护开了延迟绑定的时候&#xff0c;程序第一次调用相关函数的时候会执行下面的命令 push n push ModuleID jmp _dl_runtime_resolve 这里的n…

OCR+PDF解析配套前端工具开源详解!

目录 一、项目简介 TextIn为相关领域的前端开发提供了优秀的范本。 目前项目已在Github上开源&#xff01; 二、性能特色 三、安装使用 安装依赖启动项目脚本命令项目结构 四、效果展示 面对日常生活和工作中常见的OCR识别、PDF解析、翻译、校对等场景&#xff0c;配套的…

洛谷P5648

洛谷P5648 这题花了很长时间&#xff0c;是在线段树题单里找到的&#xff08; &#xff09;。有线段树做法&#xff0c;但是我感觉可能比倍增做法更难看懂。以后有空再看看吧。感觉线段树现在只会板子题&#xff0c;绿稍微难点可能就不会。 花了很久时间之后&#xff0c;就觉得…

打造直播美颜平台的关键技术:视频美颜SDK的深度解析

本篇文章&#xff0c;小编将深入解析视频美颜SDK的关键技术&#xff0c;探讨其在打造直播美颜平台中的作用。 一、视频美颜SDK的定义与功能 视频美颜SDK是一套专门为实时视频处理而设计的软件开发工具包。其主要功能包括人脸检测、肤色美化、瑕疵修复、虚化背景、实时滤镜等。…

Python对PDF文件的合并操作

在处理 PDF 文件时&#xff0c;合并多个 PDF 文件为一个单一文件或者将某个单一文件插入某个PDF文件是一个常见的需求。Python 提供了多种库来实现这一功能&#xff0c;其中 PyPDF2 是一个非常流行的选择。该库提供了简单易用的接口&#xff0c;包括 merge() 方法&#xff0c;可…

CRE6281B1 (宽VCC:8-45V PWM电源芯片)

CRE6281B1 是一款外驱功率管的高度集成的电流型PWM 控制 IC&#xff0c;为高性能、低待机功率、低成本、高效率的隔离型反激式开关电源控制器。在满载时&#xff0c;CRE6281B1工作在固定频率(65kHz)模式。在负载较低时&#xff0c;采用节能模式&#xff0c;实现较高的功率转换效…

关于Allegro导出Gerber时的槽孔问题

注意点一&#xff1a; 如果设计的板子中有 槽孔和通孔(俗称圆孔)&#xff0c;不仅要NC Drill, 还要 NC Route allegro导出的槽孔文件后缀是 .rou 圆型孔后缀 是 .drl &#xff0c;出gerber时需要看下是否有该文件。 注意点二&#xff1a; 导出钻孔文件时&#xff0c;设置参…

Hi3061M开发板——系统时钟频率

这里写目录标题 前言MCU时钟介绍PLLCRG_ConfigPLL时钟配置另附完整系统时钟结构图 前言 Hi3061M使用过程中&#xff0c;AD和APT输出&#xff0c;都需要考虑到时钟频率&#xff0c;特别是APT&#xff0c;关系到PWM的输出频率。于是就研究了下相关的时钟。 MCU时钟介绍 MCU共有…

22.1 K8S之KubeSphere实现中间件高可用集群

22.1 K8S之KubeSphere实现中间件高可用集群 一. 章节概述二. WordPress1. WordPress 简介---------------------------------------------------------------------------------------------------一. 章节概述 二. WordPress 1. WordPress 简介 创建并部署 WordPress

MySQL 数据库的性能优化方法方法有哪些?

MySQL 数据库的性能优化方法方法有哪些&#xff1f; 从开发角度来看&#xff0c;一般可以从 SQL 和库表设计两部分优化性能。 SQL 优化 根据慢sql日志&#xff0c;找出需要优化的一些sql语句。 常见优化方向&#xff1a; 避免select *&#xff0c;只查询必要的字段&#x…