当前位置:   article > 正文

新手小白yolov8环境部署+训练模型教程_yolov8环境搭建

yolov8环境搭建

一、YOLO模型的环境配置过程

1.anaconda安装

(1). 去官网下载安装包:Free Download | Anaconda

(2). 下载完成,进行安装,建议安装在非系统盘,以后会创建比较多的环境的话,剩下的默认安装即可

  1. .环境变量配置

具体操作请参考Anaconda 环境变量手动设置(详细)_ananconda环境变量设置-CSDN博客

(4).pycharm中选择conda环境

1.首先创建一个conda环境,打开Anaconda prompt,输入:conda create --name (环境名)python=3.9

删除环境输入: conda remove -n env_name --all

2. 输入conda activate yourname 激活环境

2.pytorch-gpu版本环境的搭建

  1. 安装CUDA(电脑无显卡直接下一步

1. 打开cmd,输入nvidia-smi查看GPU的CUDA版本,可以看到CUDA版本12.5,意味着能安装小于或等于12.5的CUDA版本。

如果觉得版本太低想要安装更高版本(cuda版本低适配不了gpu版的pytorch)可在NVIDIA上更新电脑的CUDA 版本

2.选择合适版本安装cuda,下载路径:CUDA Toolkit Archive | NVIDIA Developer

注意:

1. CUDA版本要小于上面的版本信息

2. 先去pytorch官网Start Locally | PyTorch,看一眼自己需要的pytorch版本对应的CUDA版本

选择自己合适的版本

安装时注意取消Visual Studio Integration的选择否则可能会导致安装失败

    

2安装pytorch的gpu版本(非gpu版本可跳过上一部)

  1. 选择版本:官方路径 Start Locally | PyTorch

如果是电脑无显卡就选择cpu版

在你yolo的conda环境下安装

打开Anaconda Prompt

进入环境,输入命令 :conda activate (youname)

开始下载安装

将刚才选择的pytorch版本下的命令输入:conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia (也可选择pip安装)

因为安装过程会比较慢而且可能会因为网络问题而中断,多试几次就可以了(如果利用“科学上网”的话会好一些)。也可以用清华源安装,但是清华源版本好像无gpu版本的pytorch。

3.yolov8下载配置

 

(1)下载源码

源码地址:GitHub - ultralytics/ultralytics: NEW - YOLOv8 �� in PyTorch > ONNX > OpenVINO > CoreML > TFLite

下载好解压之后用pycharm进行打开,然后把interpreter设置为刚刚创建的虚拟环境

    

    

(2)在pycharm终端中配置conda

关于如何在pycharm终端中配置虚拟环境可以看这篇:

pycharm终端配置,使用Anaconda_pycharm设置terminal打开anaconda的命令行窗口显示找不到本地终端-CSDN博客

具体:把settings-> Tools -> Terminal中的shell path换成你的conda prompt的位置

安装所需要的包

安装代码运行所需的ultralytics和yolo包

pip install ultralytics

pip install yolo

(3) 预训练权重的下载

把权重文件放在根目录处也创建一个文件夹weight,将权重放入

        

(4)验证环境配置是否成功

终端输入:yolo predict model=yolov8n.pt source='ultralytics/assets/bus.jpg'

该命令是用下载的yolov8n.pt权重来对选择的照片做测试

成功后是

会将结果保留在该目录下可查看结果

  • 二、数据集的收集与整理

  1. 使用robflow寻找并下载数据集Roboflow Universe: Open Source Computer Vision Community(需要使用科学上网)

(1)在根目录下创建一个datasets文件,将下载好数据集后解压后放在该目录下,数据集格式参考以下Prohibited_items目录

         

其中train是训练集,valid是测试集,test集用于评估模型的泛化能力,每一个数据集下都有一个images(用于存放照片)labels(用于存放照片对应的标签),标签与照片是一一对应的,是txt格式。

(2)配置yaml文件

我所用数据共有七个标签。

2.数据集还可以自己做

(1)使用Yolo标注工具-labelImg请参考文献:

Yolo标注工具-labelImg的详细使用_yolo labelimg-CSDN博客

(2)使用网页版标注工具 make sense

Make Sense

具体操作请参考:make-sense | 图像标注工具_makesense标注-CSDN博客

(3)使用已有模型进行自动标注,代码如下:

  1. from ultralytics.data.annotator import auto_annotate
  2. auto_annotate(data=r"D:\data\datas\smake",#数据集路径
  3. det_model=r"D:\pythonProject\yolov8\ultralytics-main\runs\detect\train4\weights\best.pt",#已有模型
  4. sam_model=r"D:\pythonProject\yolov8\ultralytics-main\weight\sam_b.pt")#预训练模型

该标注的效果肯定没有自己想要达到的效果,还需要自己手动标注过一遍。

  • 三、模型的训练过程

1.开始训练

1.新建一个train.py,修改相关参数,运行即可开始训练,代码如下:

  1. from ultralytics import YOLO
  2. if __name__ == '__main__':
  3. # Load a model
  4. model = YOLO(r'\ultralytics\detection\yolov8n\yolov8n.yaml') # 不使用预训练权重训练
  5. # model = YOLO(r'yolov8p.yaml').load("yolov8n.pt") # 使用预训练权重训练
  6. # Trainparameters ----------------------------------------------------------------------------------------------
  7. model.train(
  8. data=r'\ultralytics\detection\dataset\appledata.yaml',
  9. epochs=30, # (int) number of epochs to train for
  10. patience=50, # (int) epochs to wait for no observable improvement for early stopping of training
  11. batch=8, # (int) number of images per batch (-1 for AutoBatch)
  12. imgsz=320, # (int) size of input images as integer or w,h
  13. save=True, # (bool) save train checkpoints and predict results
  14. save_period=-1, # (int) Save checkpoint every x epochs (disabled if < 1)
  15. cache=False, # (bool) True/ram, disk or False. Use cache for data loading
  16. device=0, # (int | str | list, optional) device to run on, i.e. cuda device=0 or device=0,1,2,3 or device=cpu
  17. workers=16, # (int) number of worker threads for data loading (per RANK if DDP)
  18. project='result', # (str, optional) project name
  19. name='yolov8n', # (str, optional) experiment name, results saved to 'project/name' directory
  20. exist_ok=False, # (bool) whether to overwrite existing experiment
  21. pretrained=False, # (bool | str) whether to use a pretrained model (bool) or a model to load weights from (str)
  22. optimizer='SGD', # (str) optimizer to use, choices=[SGD, Adam, Adamax, AdamW, NAdam, RAdam, RMSProp, auto]
  23. verbose=True, # (bool) whether to print verbose output
  24. seed=0, # (int) random seed for reproducibility
  25. deterministic=True, # (bool) whether to enable deterministic mode
  26. single_cls=True, # (bool) train multi-class data as single-class
  27. rect=False, # (bool) rectangular training if mode='train' or rectangular validation if mode='val'
  28. cos_lr=False, # (bool) use cosine learning rate scheduler
  29. close_mosaic=0, # (int) disable mosaic augmentation for final epochs
  30. resume=False, # (bool) resume training from last checkpoint
  31. amp=False, # (bool) Automatic Mixed Precision (AMP) training, choices=[True, False], True runs AMP check
  32. fraction=1.0, # (float) dataset fraction to train on (default is 1.0, all images in train set)
  33. profile=False, # (bool) profile ONNX and TensorRT speeds during training for loggers
  34. # Segmentation
  35. overlap_mask=True, # (bool) masks should overlap during training (segment train only)
  36. mask_ratio=4, # (int) mask downsample ratio (segment train only)
  37. # Classification
  38. dropout=0.0, # (float) use dropout regularization (classify train only)
  39. # Hyperparameters ----------------------------------------------------------------------------------------------
  40. lr0=0.01, # (float) initial learning rate (i.e. SGD=1E-2, Adam=1E-3)
  41. lrf=0.01, # (float) final learning rate (lr0 * lrf)
  42. momentum=0.937, # (float) SGD momentum/Adam beta1
  43. weight_decay=0.0005, # (float) optimizer weight decay 5e-4
  44. warmup_epochs=3.0, # (float) warmup epochs (fractions ok)
  45. warmup_momentum=0.8, # (float) warmup initial momentum
  46. warmup_bias_lr=0.1, # (float) warmup initial bias lr
  47. box=7.5, # (float) box loss gain
  48. cls=0.5, # (float) cls loss gain (scale with pixels)
  49. dfl=1.5, # (float) dfl loss gain
  50. pose=12.0, # (float) pose loss gain
  51. kobj=1.0, # (float) keypoint obj loss gain
  52. label_smoothing=0.0, # (float) label smoothing (fraction)
  53. nbs=64, # (int) nominal batch size
  54. hsv_h=0.015, # (float) image HSV-Hue augmentation (fraction)
  55. hsv_s=0.7, # (float) image HSV-Saturation augmentation (fraction)
  56. hsv_v=0.4, # (float) image HSV-Value augmentation (fraction)
  57. degrees=0.0, # (float) image rotation (+/- deg)
  58. translate=0.1, # (float) image translation (+/- fraction)
  59. scale=0.5, # (float) image scale (+/- gain)
  60. shear=0.0, # (float) image shear (+/- deg)
  61. perspective=0.0, # (float) image perspective (+/- fraction), range 0-0.001
  62. flipud=0.0, # (float) image flip up-down (probability)
  63. fliplr=0.5, # (float) image flip left-right (probability)
  64. mosaic=1.0, # (float) image mosaic (probability)
  65. mixup=0.0, # (float) image mixup (probability)
  66. copy_paste=0.0, # (float) segment copy-paste (probability)
  67. )

2.也可直接用命令训练

命令如:

yolo detect train data=datasets/smking.yaml model=yolov8n.yaml pretrained=weight/yolov8n.pt epochs=300 batch=4 resume=True  device=0

其中data 是数据对应的yaml文件路径;model是预训练权重的yaml文件,如果没下载该yaml会直接帮你下载,下载了就可选择不要;pretrained 权重路径;epochs 训练轮数 ;batch一次训练使用的数据数量;device是否使用gpu训练,如果只使用cpu 修改成device=cpu。

2.开始训练

第一次训练会出现各种的问题,可在网络上寻找问题的解决方式

开始训练成功后是这样的

训练成功后模型会保存在其提示的位置

我们还会发现设置了训练300轮但是184轮的时候就停止了,那是因为到184轮的时候训练就没什么训练效果了,就停止训练了。

  • 四、模型的预测

1.新建一个val.py,这个可以打印模型在验证集上的结果,如mAP,推理速度等

  1. from ultralytics import YOLO
  2.  
  3. if __name__ == '__main__':
  4.     # Load a model
  5.     model = YOLO(r'\ultralytics\detection\yolov8n\result\yolov8n4\weights\best.pt')  # build a new model from YAML
  6.     # Validate the model
  7.     model.val(
  8.         val=True,  # (bool) validate/test during training
  9.         data=r'\ultralytics\detection\dataset\appledata.yaml',
  10.         split='val',  # (str) dataset split to use for validation, i.e. 'val', 'test' or 'train'
  11.         batch=1,  # 测试速度时一般设置为 1 ,设置越大速度越快。   (int) number of images per batch (-1 for AutoBatch)
  12.         imgsz=320,  # (int) size of input images as integer or w,h
  13.         device=0,  # (int | str | list, optional) device to run on, i.e. cuda device=0 or device=0,1,2,3 or device=cpu
  14.         workers=8,  # (int) number of worker threads for data loading (per RANK if DDP)
  15.         save_json=False,  # (bool) save results to JSON file
  16.         save_hybrid=False,  # (bool) save hybrid version of labels (labels + additional predictions)
  17.         conf=0.001,  # (float, optional) object confidence threshold for detection (default 0.25 predict, 0.001 val)
  18.         iou=0.7,  # (float) intersection over union (IoU) threshold for NMS
  19.         project='val',  # (str, optional) project name
  20.         name='',  # (str, optional) experiment name, results saved to 'project/name' directory
  21.         max_det=300,  # (int) maximum number of detections per image
  22.         half=True,  # (bool) use half precision (FP16)
  23.         dnn=False,  # (bool) use OpenCV DNN for ONNX inference
  24.         plots=True,  # (bool) save plots during train/val
  25.     )

2.运用命令预测

命令如:

yolo detect val data=datasets/Prohibited_items/Prohibited_items.yaml model=runs\detect\train12\weights\best.pt  

data:数据集的yaml文件路径

model:权重路径

预测的效果如:

3.可新建一个predict.py,这个可以根据训练好的权重文件进行推理,权重文件格式支持pt,onnx等,支持图片,视频,摄像头等进行推理

  1. from ultralytics import YOLO
  2.  
  3. if __name__ == '__main__':
  4.     # Load a model
  5.     model = YOLO(r'\deploy\yolov8n.pt')  # pretrained YOLOv8n model
  6.     model.predict(
  7.         source=r'\deploy\output_video.mp4',
  8.         save=False,  # save predict results
  9.         imgsz=320,  # (int) size of input images as integer or w,h
  10.         conf=0.25,  # object confidence threshold for detection (default 0.25 predict, 0.001 val)
  11.         iou=0.7,  # # intersection over union (IoU) threshold for NMS
  12.         show=True,  # show results if possible
  13.         project='',  # (str, optional) project name
  14.         name='',  # (str, optional) experiment name, results saved to 'project/name' directory
  15.         save_txt=False,  # save results as .txt file
  16.         save_conf=True,  # save results with confidence scores
  17.         save_crop=False,  # save cropped images with results
  18.         show_labels=True,  # show object labels in plots
  19.         show_conf=True,  # show object confidence scores in plots
  20.         vid_stride=1,  # video frame-rate stride
  21.         line_width=1,  # bounding box thickness (pixels)
  22.         visualize=False,  # visualize model features
  23.         augment=False,  # apply image augmentation to prediction sources
  24.         agnostic_nms=False,  # class-agnostic NMS
  25.         retina_masks=False,  # use high-resolution segmentation masks
  26.         boxes=True,  # Show boxes in segmentation predictions
  27.     )

4.视频预测也可使用

  1. import cv2
  2. from ultralytics import YOLO
  3. # 加载模型
  4. model = YOLO(model='D:/pythonProject/yolov8/ultralytics-main/runs/detect/train/weights/best.pt')
  5. # 视频文件
  6. video_path = r"D:\pythonProject\yolov8\ultralytics-main\预测\video.mp4"
  7. # 打开视频
  8. cap = cv2.VideoCapture(video_path)
  9. while cap.isOpened():
  10. # 获取图像
  11. res, frame = cap.read()
  12. # 如果读取成功
  13. if res:
  14. # 正向推理
  15. results = model(frame)
  16. # 绘制结果
  17. annotated_frame = results[0].plot()
  18. # 显示图像
  19. cv2.imshow(winname="YOLOV8", mat=annotated_frame)
  20. # 按ESC退出
  21. if cv2.waitKey(1) == 27:
  22. break
  23. else:
  24. break
  25. # 释放链接
  26. cap.release()
  27. # 销毁所有窗口
  28. cv2.destroyAllWindows()

5.摄像头预测可用

  1. import cv2
  2. from ultralytics import YOLO
  3. # 加载模型
  4. model = YOLO(model="yolov8n.pt")
  5. # 摄像头编号
  6. camera_no = 0
  7. # 打开摄像头
  8. cap = cv2.VideoCapture(camera_no)
  9. while cap.isOpened():
  10. # 获取图像
  11. res, frame = cap.read()
  12. # 如果读取成功
  13. if res:
  14. # 正向推理
  15. results = model(frame)
  16. # 绘制结果
  17. annotated_frame = results[0].plot()
  18. # 显示图像
  19. CV2.imshow(winname="YOLOV8", mat=annotated_frame)
  20. # 按ESC退出
  21. if CV2.waitKey(1) == 27:
  22. break
  23. else:
  24. break
  25. # 释放链接
  26. cap.release()
  27. # 销毁所有窗口
  28. cv2.destroyAllWindows()

预测结果如下:

参考文献

[1]

[2] 在较新版pycharm中使用conda虚拟环境的两种方法-保姆级教程_pycharm终端如何进入conda虚拟环境-CSDN博客

[3] 超详细||YOLOv8基础教程(环境搭建,训练,测试,部署看一篇就够)(在推理视频中添加FPS信息)_yolov8安装-CSDN博客

[4] make-sense | 图像标注工具_makesense标注-CSDN博客

[5]适合小白的超详细yolov8环境配置+实例运行教程,从零开始教你如何使用yolov8训练自己的数据集(Windows+conda+pycharm)-CSDN博客

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号