YOLO-V5 算法和代码解析系列(一)—— 快速开始

news2024/11/22 16:21:34

文章目录

    • 运行环境配置
    • Demo
    • 重新训练 YOLO-V5s

运行环境配置

  环境配置的官方教程如下,如果一些库安装失败,导致安装中断,可以单独安装一些库,比如 Pytorch,然后再执行下列安装步骤,具体如下:

在这里插入图片描述
  个人建议:在上述安装之前,先安装 Anaconda,然后创建虚拟环境。Anconda 以及相关 Pytorch 开发环境配置,可以参考本人的博客文章,相关的链接如下,

  1. Ubuntu:https://blog.csdn.net/kxh123456/article/details/121331727
  2. Windows:https://blog.csdn.net/kxh123456/article/details/110267660

注意几个问题:

  1. 下载特定版本的 yolo-v5:git clone -b v6.1 https://github.com/ultralytics/yolov5.git
  2. 最好是用 【git clone】的方式下载,这样工程在被改动的时候,会有标记,很容易恢复到原始版本.
  3. 版本重要更新:【v6.2 】添加了分类模型,【v7 】添加了分割模型.
  4. 当前系列教程解析的代码版本:【v6.1】.

Demo

  1. 在线推理
    运行下面的代码,模型 【yolov5s.pt】自动从 【“ultralytics/yolov5”】下载,测试图片也是从网上下载。完整代码如下:

    import torch
    
    # Model
    model = torch.hub.load('ultralytics/yolov5', 'yolov5s')  # or yolov5n - yolov5x6, custom
    
    # Images
    img = 'https://ultralytics.com/images/zidane.jpg'  # or file, Path, PIL, OpenCV, numpy, list
    
    # Inference
    results = model(img)
    
    # Results
    results.print()  # or .show(), .save(), .crop(), .pandas(), etc.
    

    运行后,如果出现如下的错误,表示无法访问 Github,

    在这里插入图片描述
    如果可以正常访问【Github】 ,可以正常推理,打印如下结果,

    在这里插入图片描述
    最后一行代码改为 results.show() ,得到如下可视化结果,

在这里插入图片描述

  1. 离线推理
    如果无法访问 【Github】,也可以把模型和测试图片通过其它方式下载到本地,进行离线推理,具体代码修改如下,

    import torch
    
    # Model
    # model = torch.hub.load('ultralytics/yolov5', 'yolov5s')  # or yolov5n - yolov5x6, custom
    model = torch.hub.load('./', 'yolov5s', source='local')  # or yolov5n - yolov5x6, custom
    
    # Images
    # img = 'https://ultralytics.com/images/zidane.jpg'  # or file, Path, PIL, OpenCV, numpy, list
    img = 'data/images/zidane.jpg'  # or file, Path, PIL, OpenCV, numpy, list
    
    
    # Inference
    results = model(img)
    
    # Results
    results.show()  # or .show(), .save(), .crop(), .pandas(), etc.
    

    在这里插入图片描述

  2. detect.py
    官方教程如下图所示,可以是多种输入形式,
    在这里插入图片描述

    调用摄像头进行预测,命令如下,

    python detect.py --weights yolov5s.pt --source 0
    

    在这里插入图片描述

    推理单张图,命令如下,

    python detect.py --weights yolov5s.pt 
    	             --source D:\\DM2\\2DDetection\\datasets\\coco128\\images\\train2017\\000000000030.jpg
    

    在这里插入图片描述

    推理路径下的所有图片,运行命令和结果如下,

    python detect.py --weights yolov5s.pt 
    	             --source D:\\DM2\\2DDetection\\datasets\\coco128\\images\\train2017\\ 	
    

    在这里插入图片描述

    输入参数为网站视频链接,并进行推理,同时还会输出目标的数量(见终端打印内容),

    python detect.py --weights yolov5s.pt --source https://youtu.be/Zgi9g1ksQHc 	
    

    在这里插入图片描述

重新训练 YOLO-V5s

  为了快速验证工程的效果,只重新训练其中一个模型【yolo-v5s】。该模型大小适中,不至于消耗太长时间。当前教程的目的仅仅是为了重新训练一遍,【快速】验证工程的有效性。具体流程如下,

  1. 官方教程
    单卡、单机训练教程如下图所示,可以快速开始训练,验证项目是否可以正常训练。根据自己显卡的显存,需调整批次的大小,避免显存溢出。运行命令以及训练的可视化结果如下,
    在这里插入图片描述

  2. 运行【trian.py
    本机配置:Ubuntu18,batch=32(64,显存不够),2022-12-07,09:30AM 开始训练,2022-12-11,08:30AM 结束训练(大概4天训练完成)。运行后,终端打印内容如下,比如显卡型号,显存,训练集和测试集图片数量等内容,

    YOLOv5 🚀 v6.1-0-g3752807 torch 1.10.0 CUDA:1 (NVIDIA GeForce RTX 2080 Ti, 11019MiB)

    train:Scanning ‘/home/slam/kxh-1/2DDection/datasets/coco/train2017. cache’ images and labels … 117266 found, 1021 missing, 0 empty, 0 corrupt: 100%|████████████████████████████████████████████████████████████████████████████████|
    118287/118287 [00:00<?, ?it/s]
    val: Scanning’/home/slam/kxh-1/2DDection/datasets/coco/val2017. cache’ images and labels… 4952 found, 48 missing, 0 empty, 0 corrupt: 100%|████████████████████████████████████████████████████████████████████████████████████████████|
    5000/5000 [00:00<?, ?it/s]

    训练的命令如下,包含第一次开启训练,以及训练中断后,恢复训练,

    # 开启训练
    python train.py --data coco.yaml --epochs 300 --weights '' --cfg yolov5s.yaml --batch-size 32
    
    # 训练中断,重新恢复训练,resume:添加模型的路径
    python train.py --data coco.yaml --epochs 300 --weights '' --cfg yolov5s.yaml --batch-size 32 
     				--resume runs/train/exp/weights/last.pt
    
    

    训练开始后的部分截图如下图所示,

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

    如上图所示,训练【epoch=300】后,【yolo-v5s】训练完成。最终打印结果如下,

            Class     Images     Labels          P          R     mAP@.5 mAP@.5:.95: 100%|██████████| 79/79 [00:34<00:00,  2.29it/s]                                                                                                                              
              all       5000      36335      0.688      0.508      0.559       0.36
           person       5000      10777      0.768      0.683      0.759      0.477
          bicycle       5000        314      0.693      0.438      0.521       0.27
              car       5000       1918      0.681      0.572       0.62      0.373
       motorcycle       5000        367      0.759      0.586      0.658      0.361
         airplane       5000        143      0.884      0.755      0.846      0.575
              bus       5000        283      0.826      0.707      0.777      0.602
            train       5000        190      0.903      0.768      0.839      0.585
            truck       5000        414      0.615      0.403      0.487      0.289
             boat       5000        424      0.634       0.37      0.452       0.21
    traffic light       5000        634      0.638      0.476      0.507      0.237
     fire hydrant       5000        101      0.825      0.713      0.814      0.601
        stop sign       5000         75      0.785       0.68      0.722      0.601
    parking meter       5000         60       0.73      0.533      0.603      0.419
            bench       5000        411      0.632      0.268      0.331      0.204
             bird       5000        427      0.657      0.431       0.48      0.285
              cat       5000        202      0.827      0.748      0.814      0.557
              dog       5000        218      0.786      0.674      0.729      0.546
            horse       5000        272      0.766      0.695      0.748      0.525
            sheep       5000        354      0.629      0.681      0.698      0.459
              cow       5000        372      0.712      0.675      0.726      0.478
         elephant       5000        252      0.743      0.813      0.809      0.556
             bear       5000         71      0.852      0.817      0.857       0.63
            zebra       5000        266      0.886      0.815      0.898      0.623
          giraffe       5000        232      0.915      0.831      0.901      0.658
         backpack       5000        371      0.579      0.259      0.259      0.124
         umbrella       5000        407      0.693       0.55      0.596      0.348
          handbag       5000        540      0.615      0.181      0.223      0.111
              tie       5000        252      0.691      0.417      0.486      0.262
         suitcase       5000        299      0.603      0.472      0.544      0.337
          frisbee       5000        115      0.786      0.783      0.813      0.601
             skis       5000        241      0.691      0.357      0.413      0.169
        snowboard       5000         69      0.579      0.406      0.427      0.233
      sports ball       5000        260      0.691      0.588      0.599      0.387
             kite       5000        327      0.615      0.581      0.601      0.377
     baseball bat       5000        145      0.651      0.469      0.505       0.23
    baseballglove       5000        148      0.734      0.534      0.582      0.327
       skateboard       5000        179      0.825      0.686      0.699      0.456
        surfboard       5000        267       0.65      0.487      0.522      0.284
    tennis racket       5000        225      0.771      0.687      0.739      0.419
           bottle       5000       1013       0.65      0.449      0.516      0.313
       wine glass       5000        341      0.691      0.428      0.513      0.296
              cup       5000        895      0.641      0.509      0.551       0.37
             fork       5000        215      0.586      0.344      0.429      0.247
            knife       5000        325      0.551      0.191      0.244      0.122
            spoon       5000        253      0.494      0.178      0.212      0.112
             bowl       5000        623      0.663      0.478      0.534      0.364
           banana       5000        370      0.537      0.335      0.338      0.182
            apple       5000        236      0.477      0.286      0.252      0.165
         sandwich       5000        177      0.643      0.469      0.501      0.325
           orange       5000        285      0.474      0.361      0.368      0.276
         broccoli       5000        312      0.551      0.359      0.379      0.178
           carrot       5000        365      0.415      0.301      0.293       0.17
          hot dog       5000        125      0.659      0.464      0.501      0.317
            pizza       5000        284      0.754      0.644      0.683      0.475
            donut       5000        328      0.632      0.509      0.548      0.401
             cake       5000        310      0.627      0.487      0.519      0.323
            chair       5000       1771      0.624      0.385      0.455      0.256
            couch       5000        261      0.749      0.479      0.616      0.419
     potted plant       5000        342      0.586      0.435      0.446      0.231
              bed       5000        163      0.804      0.454      0.609      0.376   
     dining table       5000        695      0.627      0.332      0.386      0.233
           toilet       5000        179      0.741      0.693      0.785      0.603
               tv       5000        288      0.742       0.66      0.734       0.51
           laptop       5000        231      0.772      0.628      0.692       0.52
            mouse       5000        106      0.777      0.764      0.804      0.585
           remote       5000        283      0.525       0.36      0.402      0.206
         keyboard       5000        153       0.69      0.608      0.679      0.455
       cell phone       5000        262      0.598      0.458      0.488      0.293
        microwave       5000         55      0.708      0.636      0.726      0.519
        	 oven       5000        143      0.657      0.448      0.512      0.299
          toaster       5000          9      0.998      0.444      0.587      0.399
             sink       5000        225      0.659      0.493      0.535       0.34
     refrigerator       5000        126      0.789      0.595      0.683      0.464
             book       5000       1129      0.486      0.157      0.215      0.084
            clock       5000        267      0.778      0.689      0.712      0.477
             vase       5000        274      0.596      0.496      0.531       0.34
         scissors       5000         36      0.477       0.25      0.269       0.18
       teddy bear       5000        190      0.715      0.529       0.63      0.409
       hair drier       5000         11          1          0      0.017     0.0113
       toothbrush       5000         57       0.54      0.281      0.259      0.156
       
    Evaluating pycocotools mAP... saving runs/train/exp/_predictions.json...
    loading annotations into memory...
    Done (t=0.33s)
    creating index...
    index created!
    Loading and preparing results...
    DONE (t=6.45s)
    creating index...
    index created!
    Running per image evaluation...
    Evaluate annotation type *bbox*
    DONE (t=60.67s).
    Accumulating evaluation results...
    DONE (t=12.01s).
     Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.373
     Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.566
     Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.405
     Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.219
     Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.423
     Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.482
     Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.307
     Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.514
     Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.569
     Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.381
     Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.628
     Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.722
    Results saved to runs/train/exp
    
  3. 运行【val.py

    python val.py --weights runs/train/exp/weights/best.pt --data coco.yaml --img 640
    

    运行评估脚本,结果如下:

    val: data=/home/slam/kxh-1/2DDection/test/yolov5/data/coco.yaml,
    weights=['runs/train/exp/weights/best.pt'], 
    batch_size=32, imgsz=640, conf_thres=0.001, iou_thres=0.6, 
    task=val, device=, workers=8, single_cls=False, augment=False, 
    verbose=False, save_txt=False, save_hybrid=False, save_conf=False, 
    save_json=True, project=runs/val, name=exp, exist_ok=False,half=False, dnn=False
    
    YOLOv5 🚀 v6.1-0-g3752807 torch 1.10.0 CUDA:0 (NVIDIA GeForce RTX 2080 Ti, 11019MiB)
    
    Fusing layers... 
    Model Summary: 213 layers, 7225885 parameters, 0 gradients, 16.4 GFLOPs
    val: Scanning '/home/slam/kxh-1/2DDection/datasets/coco/val2017.cache' images and labels... 
    4952 found, 48 missing, 0 empty, 0 corrupt: 100%|█████████████████████████████████| 5000/5000 
    [00:00<?, ?it/s]
        Class     Images     Labels          P          R     mAP@.5 mAP@.5:.95: 100%|██████████| 157/157 		[00:40<00:00,  3.85it/s]                                                                 
          all       5000      36335      0.668      0.523      0.563      0.363
    Speed: 0.1ms pre-process, 2.5ms inference, 1.5ms NMS per image at shape (32, 3, 640, 640)
    
    Evaluating pycocotools mAP... saving runs/val/exp3/best_predictions.json...
    loading annotations into memory...
    Done (t=0.84s)
    creating index...
    index created!
    Loading and preparing results...
    DONE (t=5.40s)
    creating index...
    index created!
    Running per image evaluation...
    Evaluate annotation type *bbox*
    DONE (t=58.44s).
    Accumulating evaluation results...
    
    DONE (t=11.82s).
     Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.373
     Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.570
     Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.403
     Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.218
     Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.423
     Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.482
     Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.308
     Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.511
     Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.562
     Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.376
     Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.620
     Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.715
    Results saved to runs/val/exp3
    
    
  4. 训练结果可视化
    借助 tensorboard,训练可视化结果如下所示,

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

  5. 结果评估
    重新训练【yolo-v5s】后,得到如下表的结果,很容易可以达到官方训练的水平。表明模型具有极好的稳定性,可复现性,非常适合实际应用,

    yolo-v5simage sizemAP(val)
    0.5:0.95
    mAP(val)
    0.5
    训练时间batch size
    官方发布64037.456.82 days V10064
    重新训练64037.357.04 days 2080Ti32

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

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

相关文章

国内食糖行业数据浅析

大家好&#xff0c;这里是小安说网控。 食糖行业是国民消费不可或缺的产业之一。2022年9月份国内成品糖产量当期值为40.4万吨&#xff0c;同比增长30.7%&#xff1b;10月份当期值为63.7万吨&#xff0c;同比下滑2%。今年1-10月份&#xff0c;国内成品糖产量累计值为1089.4万吨&…

艾美捷细胞糖酵解分析试剂盒基本参数和相关研究

艾美捷基于糖酵解细胞的测定试剂盒提供了一种比色法&#xff0c;用于检测培养细胞产生和分泌的糖酵解最终产物L-乳酸。在该测定中&#xff0c;乳酸脱氢酶催化NAD和乳酸之间的反应&#xff0c;产生丙酮酸和NADH。NADH直接将四氮唑盐&#xff08;INT&#xff09;还原为吸收490至5…

【High 翻天】Higer-order Networks with Battiston Federico (3)

目录模型&#xff08;1&#xff09;Equilibrium modelsBipartite modelsMotifs modelsStochastic set modelsHypergraphs modelsSimplicial complexes models模型的目的是再现、解释和预测系统的结构&#xff0c;最好用涉及系统两个或多个元素的交互来描述。为了考虑其输出的可…

【1971. 寻找图中是否存在路径】

来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 描述&#xff1a; 有一个具有 n 个顶点的 双向 图&#xff0c;其中每个顶点标记从 0 到 n - 1&#xff08;包含 0 和 n - 1&#xff09;。图中的边用一个二维整数数组 edges 表示&#xff0c;其中 edges[i] [ui, vi] …

计算机毕设Python+Vue学衡国学堂围棋社管理系统(程序+LW+部署)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

nvidia 使用

watch -n 0.5 nvidia-smi ./build/examples/openpose/openpose.bin --video examples/media/video.avi Linux CPU&GPU烤机&#xff08;压力测试&#xff09; 盛夏捷关注IP属地: 青海 0.1342021.04.14 09:50:16字数 152阅读 6,307 GPU-burn工具进行GPU烤机 下载Multi-G…

基于MATLAB的车牌识别系统设计(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

vue之非父子组件通信实现方式

在开发中&#xff0c;我们构建了组件树之后&#xff0c;除了父子组件之间的通信之外&#xff0c;还会有非父子组件之间的通信。这里主要讲两种方式&#xff1a; Provide/InjectMitt全局事件总线 1、Provide和Inject 应用场景 比如有一些深度嵌套的组件&#xff0c;子组件想要…

SVG 在前端的7种使用方法,你还知道哪几种?

本文简介 点赞 关注 收藏 学会了 技术一直在演变&#xff0c;在网页中使用 SVG 的方法也层出不穷。每个时期都有对应的最优解。 所以我打算把我知道的 7种 SVG 的使用方法列举出来&#xff0c;有备无患~ 如果你还知道其他方法&#xff0c;可以在评论区补充~ 1. 在浏览器直…

PMO(项目管理办公室)的未来趋势

PMO&#xff08;项目管理办公室&#xff09;是在组织内部将实践、过程、运作形式化和标准化的部门&#xff0c;也是提高组织管理成熟度的核心部门。现在&#xff0c;让我们把目光投向当前PMO的典型职责之外&#xff0c;思考一下&#xff1a;PMO的未来是什么&#xff1f; 如今&a…

Java:进一步理解多态性

Java&#xff1a;进一步理解多态性 每博一文案 有人说我心里有事&#xff0c;但我谁也不想说&#xff0c;沉默不是没有情绪&#xff0c;而是我明白了&#xff0c;说了又没有意义&#xff0c; 比起诉说的委屈和不甘&#xff0c;沉默或许更好。当我们经历越多真实与虚假&#xf…

Docker安装(centos 7)

安装 以在centos安装为例&#xff0c;主要有以下几个步骤 1、确定你是CentOS7及以上版本 2、卸载旧版本 3、yum安装gcc相关 yum -y install gccyum -y install gcc-c 4、安装需要的软件包 执行如下命令 yum -y install gcc-c 5、设置stable镜像仓库 由于docker外网镜像…

Docker安装canal-admin以及canal-server

一、安装canal-admin可视化管理工具 此处的数据库已经进行了相应的配置&#xff0c;望周知 docker run -it --name canal-admin \ -e spring.datasource.addressxxx:3306 \ -e spring.datasource.databasecanal_manager \ -e spring.datasource.usernameroot \ -e spring.da…

minicom发送AT指令

参考&#xff1a;使用minicom发AT指令&#xff0c;和外设传感器通信 地址&#xff1a;https://blog.csdn.net/hannibaychty/article/details/125463268 目录1、Linux minicom 和 windows串口调试助手的区别2、使用的基本流程3、使用 minicom 需要注意的几点ARM板子外接传感器&a…

从国企到进大厂,全靠阿里、腾讯内网22版Java核心手册合集

记得19年初的时候&#xff0c;我通过一整天的笔试及面试加入一家(某一线城市国资委全资控股)某集团的研究机构(中央研究院)&#xff0c;任职高级软件工程师(中级职称);在这边工作了整整一年&#xff0c;目前已经跳槽到一家互联网公司&#xff0c;在回头看看这一整年&#xff0c…

SAP如何删除一个已经释放的请求 (SE38 : RDDIT076)

原文链接&#xff1a;https://zhuanlan.zhihu.com/p/425479956 当你搜到这个文章的时候&#xff0c;说明你做了羞羞的事情哦&#xff5e;&#xff08;或者正在准备做羞羞的事情&#xff09;。 此处声明&#xff1a;本帖仅进行可操作性和纯技术讨论&#xff0c;由此造成的一切后…

MMSegmentation使用记录

一、官网下载文件&#xff1a; 当前最新版本为1.0.0rc2 https://github.com/open-mmlab/mmsegmentation/releases/tag/v1.0.0rc2 下载源码解压文件可得到最新版的代码 二、配置环境&#xff1a; 这部分省略&#xff1a;按照给的README文件很快就配置好了 https://github.…

Vuetify中的v-pagination如何实现分页

大家好&#xff0c;我是雄雄。 前言 昨天在改一个系统的时候遇到了个技能点&#xff0c;观察解决了好久&#xff0c;终于解决了&#xff0c;趁热打铁&#xff0c;今天来记录一下。 这个系统是个个人博客&#xff0c;目前我也在使用&#xff0c;但是有个地方用的很不舒服。就是…

32 CPP多态

注意: 1 只需要在基类的函数声明中加上virtual关键字&#xff0c;函数定义时不能加&#xff1b; 2 在派生类中重定义虚函数时&#xff0c;函数特征要相同&#xff1b; 3 当在基类中定义了虚函数时&#xff0c;如果派生类没有重定义该函数&#xff0c;那么将使用基类的虚函数…

设计模式原则 - 接口隔离原则(二)

接口隔离原则一 官方定义二 案例演示普通方案案例分析解决方案解决方案案例总结三 与单一职责原则对比一 官方定义 接口隔离原则&#xff08;Interface Segregation Principle&#xff09;&#xff0c;又称为ISP原则&#xff0c;官方定义为&#xff1a; Clients should not be…