• YOLOv5代码解析(二)


    requirements.txt下载安装库

    pip install -r requirements.txt

    1. # pip install -r requirements.txt
    2. # base ----------------------------------------
    3. matplotlib>=3.2.2
    4. numpy>=1.18.5
    5. opencv-python>=4.1.2
    6. Pillow
    7. PyYAML>=5.3.1
    8. scipy>=1.4.1
    9. torch>=1.7.0
    10. torchvision>=0.8.1
    11. tqdm>=4.41.0
    12. # logging -------------------------------------
    13. tensorboard>=2.4.1
    14. # wandb
    15. # plotting ------------------------------------
    16. seaborn>=0.11.0
    17. pandas
    18. # export --------------------------------------
    19. # coremltools>=4.1
    20. # onnx>=1.8.1
    21. # scikit-learn==0.19.2 # for coreml quantization
    22. # extras --------------------------------------
    23. thop # FLOPS computation
    24. pycocotools>=2.0 # COCO mAP

     detect.py这是运行yolov5模型的目标检测代码:

    看一些核心代码:

    1. if __name__ == '__main__':
    2. parser = argparse.ArgumentParser()
    3. #训练好的模型yolov5s.pt,可以可以从网络下载yolov5m.pt
    4. parser.add_argument('--weights', nargs='+', type=str, default='yolov5s.pt', help='model.pt path(s)')
    5. #网络的一个输入,检测图片和视频,检测视频的时候直接写个图片地址就好
    6. # parser.add_argument('--source', type=str, default='data/images', help='source') # file/folder, 0 for webcam
    7. parser.add_argument('--source', type=str, default='data/video/牛车水拥有错综复杂的狭窄街道.mp4', help='source') # file/folder, 0 for webcam
    8. #图片默认是在640上进行训练
    9. parser.add_argument('--img-size', type=int, default=640, help='inference size (pixels)')
    10. #置信度区间,只有一个物体概率大于0.25的时候,我才确定他是一个物体
    11. parser.add_argument('--conf-thres', type=float, default=0.25, help='object confidence threshold')
    12. #iou就是(俩个图片的交集/俩个图片的并集),达到一个阈值,就选择这个框,设置0表示框和框之间没有交集产生
    13. parser.add_argument('--iou-thres', type=float, default=0.45, help='IOU threshold for NMS')
    14. #自己去检测设备,默认
    15. parser.add_argument('--device', default='', help='cuda device, i.e. 0 or 0,1,2,3 or cpu')
    16. # 命令行指定参数python detect.py --view-img,就会变为true,结束运行直接展示结果,实时的看到检测效果
    17. parser.add_argument('--view-img', action='store_true', help='display results')
    18. #保存标签结果
    19. parser.add_argument('--save-txt', action='store_true', help='save results to *.txt')
    20. #保存置信度
    21. parser.add_argument('--save-conf', action='store_true', help='save confidences in --save-txt labels')
    22. #不要保存图片和视频
    23. parser.add_argument('--nosave', action='store_true', help='do not save images/videos')
    24. #保存和展示指定结果,--class 0 2 3 需要展示的class一下,不需要的,不要写
    25. parser.add_argument('--classes', nargs='+', type=int, help='filter by class: --class 0, or --class 0 2 3')
    26. #增强的MNS,设置之后NMS会更加的强大
    27. parser.add_argument('--agnostic-nms', action='store_true', help='class-agnostic NMS')
    28. parser.add_argument('--augment', action='store_true', help='augmented inference')
    29. #去掉网络参数,只保留预测模型
    30. parser.add_argument('--update', action='store_true', help='update all models')
    31. #结果保存什么位置
    32. parser.add_argument('--project', default='runs/detect', help='save results to project/name')
    33. #保存文件的问价夹名字
    34. parser.add_argument('--name', default='exp', help='save results to project/name')
    35. #如果设置true,识别结果都不保存在一个文件夹下
    36. parser.add_argument('--exist-ok', action='store_true', help='existing project/name ok, do not increment')
    37. opt = parser.parse_args()
    38. print(opt)
    39. check_requirements(exclude=('pycocotools', 'thop'))
    40. with torch.no_grad():
    41. if opt.update: # update all models (to fix SourceChangeWarning)
    42. for opt.weights in ['yolov5s.pt', 'yolov5m.pt', 'yolov5l.pt', 'yolov5x.pt']:
    43. detect()
    44. strip_optimizer(opt.weights)
    45. else:
    46. detect()

    如果要默认运行这些代码可以在pycharm设置:--view -img表示可以查看训练过程的图片和视频

     train.py这是训练模型的代码:

    1. if __name__ == '__main__':
    2. parser = argparse.ArgumentParser()
    3. #训练好的模型yolov5s.pt作为训练模型参数的初始化(5s,5m,5l,5x)
    4. parser.add_argument('--weights', type=str, default='yolov5s.pt', help='initial weights path')
    5. #训练好的模型结构存放在model下yolov5s.yaml(小模型)yolov5m.yaml(中性)yolov5l.yaml(大模型)yolov5x.yaml(超大)
    6. #仿照那个模型进行训练
    7. # parser.add_argument('--cfg', type=str, default='models/yolov5s.yaml', help='model.yaml path')
    8. parser.add_argument('--cfg', type=str, default='', help='model.yaml path')
    9. #指定训练数据集(哪里下载,下载到哪里)
    10. parser.add_argument('--data', type=str, default='data/coco128.yaml', help='data.yaml path')
    11. #超参数列表
    12. parser.add_argument('--hyp', type=str, default='data/hyp.scratch.yaml', help='hyperparameters path')
    13. #训练多少轮
    14. parser.add_argument('--epochs', type=int, default=300)
    15. #多少数据会组成一个批次batch默认是16个数据是一批次
    16. parser.add_argument('--batch-size', type=int, default=16, help='total batch size for all GPUs')
    17. #设置训练集,测试集的大小
    18. parser.add_argument('--img-size', nargs='+', type=int, default=[640, 640], help='[train, test] image sizes')
    19. #训练图片选择一个正方形
    20. parser.add_argument('--rect', action='store_true', help='rectangular training')
    21. #是否在最近训练的模型基础上进行训练
    22. # parser.add_argument('--resume', nargs='?', const=True, default="填写已经训练过模型存储位置", help='resume most recent training')
    23. parser.add_argument('--resume', nargs='?', const=True, default=False, help='resume most recent training')
    24. #设置为true只保存训练最后一次的模型的参数
    25. parser.add_argument('--nosave', action='store_true', help='only save final checkpoint')
    26. #设置为true在最后一轮的训练模型上进行测试
    27. parser.add_argument('--notest', action='store_true', help='only test final epoch')
    28. #锚点和锚框
    29. parser.add_argument('--noautoanchor', action='store_true', help='disable autoanchor check')
    30. #参数净化,寻找最优参数,默认没开启
    31. parser.add_argument('--evolve', action='store_true', help='evolve hyperparameters')
    32. #做着把一些东西放到google云盘上了,现在没必要了
    33. parser.add_argument('--bucket', type=str, default='', help='gsutil bucket')
    34. #是否进行缓存图片进行更快的训练
    35. parser.add_argument('--cache-images', action='store_true', help='cache images for faster training')
    36. #那些图片在测试过程中效果不是太好,在下一次训练的时候加一些权重
    37. parser.add_argument('--image-weights', action='store_true', help='use weighted image selection for training')
    38. #设备检索
    39. parser.add_argument('--device', default='', help='cuda device, i.e. 0 or 0,1,2,3 or cpu')
    40. #图片尺寸进行变换
    41. parser.add_argument('--multi-scale', action='store_true', help='vary img-size +/- 50%%')
    42. #训练的数据集是单类别还是多类别
    43. parser.add_argument('--single-cls', action='store_true', help='train multi-class data as single-class')
    44. #优化函数选择,true选择adam,false默认梯度下降
    45. parser.add_argument('--adam', action='store_true', help='use torch.optim.Adam() optimizer')
    46. #如果有多个显卡,可以采用ddp分布式训练
    47. parser.add_argument('--sync-bn', action='store_true', help='use SyncBatchNorm, only available in DDP mode')
    48. #ddp的参数,不要随意修改
    49. parser.add_argument('--local_rank', type=int, default=-1, help='DDP parameter, do not modify')
    50. #运行的进程数,建议设置成0,设置比较大,会存在很多问题
    51. # parser.add_argument('--workers', type=int, default=8, help='maximum number of dataloader workers')
    52. parser.add_argument('--workers', type=int, default=0, help='maximum number of dataloader workers')
    53. #保存训练数据集
    54. parser.add_argument('--project', default='runs/train', help='save to project/name')
    55. #W&B库
    56. parser.add_argument('--entity', default=None, help='W&B entity')
    57. #保存文件名
    58. parser.add_argument('--name', default='exp', help='save to project/name')
    59. #设置了就会只保存到exp里面,不设置会出现exp1,exp2,exp3。。。。。
    60. parser.add_argument('--exist-ok', action='store_true', help='existing project/name ok, do not increment')
    61. #数据加载dataloader yolov4的一个新功能
    62. parser.add_argument('--quad', action='store_true', help='quad dataloader')
    63. #学习率设置
    64. parser.add_argument('--linear-lr', action='store_true', help='linear LR')
    65. #标签平滑,防止过拟合
    66. parser.add_argument('--label-smoothing', type=float, default=0.0, help='Label smoothing epsilon')
    67. #上传数据集
    68. parser.add_argument('--upload_dataset', action='store_true', help='Upload dataset as W&B artifact table')
    69. #
    70. parser.add_argument('--bbox_interval', type=int, default=-1, help='Set bounding-box image logging interval for W&B')
    71. #没装W&B设置成-1
    72. parser.add_argument('--save_period', type=int, default=-1, help='Log model after every "save_period" epoch')
    73. #无用参数
    74. parser.add_argument('--artifact_alias', type=str, default="latest", help='version of dataset artifact to be used')
    75. opt = parser.parse_args()

    以上俩个代码设置好之后都可以直接运行代码

    yolov5的模型介绍:4个模型

    yolov5s、 yolov5m、yolov5l 、 yolov5x(分别是训练2、4、6、8天对应的模型)
                                                                            
                                            
    下面是我对一个视频文件的目标检测:下载视频放到默认目录下

     

  • 相关阅读:
    大数据技术之Zookeeper总结Ⅰ
    JSP琴行管理系统myeclipse开发mysql数据库bs框架java编程web网页结构
    echarts手动触发气泡的显示和隐藏
    【操作系统&C语言】作业调度算法 先来先服务&短作业优先
    【出人意料】一种基于Vue2监听器(watch)和定时器(setInterval)的轨迹播放方法实现方案
    使用现代化 C# 语法简化代码
    使用python中pypower进行电力潮流计算
    使用 Learner Lab - 使用 API Gateway 触发 AWS Lambda
    latex编译生成的pdf文件,图片出现浅色的线
    Unity基础课程之物理引擎2-碰撞检测案例-吃金币并加分
  • 原文地址:https://blog.csdn.net/chehec2010/article/details/126650364