当前位置:   article > 正文

Yolo v8代码逐行解读_yolov8 train.py

yolov8 train.py

train.py文件

1.FILE = Path(__file__).resolve()

       __file__代表的是train.py文件,Path(__file__).resolve()结果是train.py文件的绝对路径。

2.ROOT = FILE.parents[0]

       获得train.py父目录的绝对路径

3.sys.path

       是一个列表list,里面包含了已经添加到系统的环境变量路径

当导入一个模块时,默认情况下python解释器会搜索当前目录已安装的内置模块和第三方模块。搜索路径放在sys模块的path中。sys模块包含与python解释器和它的环境有关的函数,可以通过dir(sys)来查看方法和成员属性。

4.可以永久的将路径添加到sys.path中:

(1)将写好的py文件添加到系统环境变量的目录下。

(2)在 /usr/lib/python10/site-packages 下面新建一个.pth 文件(以pth作为后缀名);将模块的路径写进去,一行一个路径,如: vim pythonmodule.pth

/home/liu/shell/config
/home/liu/shell/base

(3)使用PYTHONPATH环境变量

export PYTHONPATH=$PYTHONPATH:/home/user/shell/config

 5.导入自定义模块

引用模块和执行脚本文件不在同一个目录时,可按照如下形式添加路径:

(1)导入的包在另一个项目文件,在运行程序过程中,需要先加载导入的包,加载过程中python解释器会默认sys.path搜索路径取搜索。

(2)如果该包无法通过sys.path路径搜索,就需要将该包的搜索路径添加到自己程序脚本的默认搜索路径,重新运行程序。

import sys  
sys.path.append(’引用模块的地址')
sys.path.append("..")   # 添加当前路径的上一级目录

这种方法只作用于脚本运行时,运行之后路径导入就会失效。

6.ROOT = Path(os.path.relpath(ROOT, Path.cwd()))

os模块是一个对接操作系统的模块。

       python中的cwd是current work dir 的意思,就是当前工作目录。当前工作目录并不是你运行的python文件所在的目录就叫做工作目录,而是你在命令行中运行脚本时,命令行显示你所在的目录。当前工作目录并不是你运行的python文件所在的目录就叫做工作目录,而是你在命令行中运行脚本时,命令行显示你所在的目录。Path.cwd()获取的位置就是终端所在的位置。

os.path.relpath()用于从当前工作目录或给定目录获取给定路径的相对文件路径。

os.path.relpath(path, start = os.curdir)

        给定路径相对路径将相对于start指示的目录进行计算。此参数的默认值为os.curdir,它是操作系统用来引用当前目录的常量字符串。

7.os.getenv('LOCAL_RANK', -1),用于多卡训练控制参数。

  1. LOCAL_RANK = int(os.getenv('LOCAL_RANK', -1)) # 本地序号,是这台机器上的第几个Worker
  2. RANK = int(os.getenv('RANK', -1)) # 进程序号。这个Worker是全局第几个 Worker
  3. WORLD_SIZE = int(os.getenv('WORLD_SIZE', 1)) # 总共有几个 Worker
  4. '''查找名为LOCAL_RANK,RANK,WORLD_SIZE的环境变量,若存在则返回环境变量的值,若不存在则返回第二个参数(-1,默认None)
  5. rank和local_rank的区别: 两者的区别在于前者用于进程间通讯,后者用于本地设备分配。
  6. '''
os.getenv(key, default = None) 

返回环境变量键的值(如果存在),否则返回默认值。

8.parser.add_argument('--quad', action='store_true', help='quad dataloader')

        这个四元组函数重新调整批处理,从16x3x640x640 调整为 4x3x1280x1280。他仅仅是重新排列批处理中的马赛克。 他允许批处理过程中某些图像进行2倍放大。

9.vars()函数:以字典形式返回参数中每个成员的当前值。

print_args(vars(opt))

10.可复用代码:递增文件或目录路径

  1. from pathlib import Path
  2. import os
  3. def increment_path(path, exist_ok=False, sep='', mkdir=False):
  4. # Increment file or directory path, i.e. runs/exp --> runs/exp{sep}2, runs/exp{sep}3, ... etc.
  5. path = Path(path) # os-agnostic
  6. # 如果文件路径存在并且不创建
  7. if path.exists() and not exist_ok:
  8. path, suffix = (path.with_suffix(''), path.suffix) if path.is_file() else (path, '')
  9. # Method 1
  10. # 增加第n个文件夹名称,直到该文件夹不存在,跳出循环,创建该文件
  11. for n in range(2, 9999):
  12. p = f'{path}{sep}{n}{suffix}' # increment path
  13. if not os.path.exists(p): #
  14. break
  15. path = Path(p)
  16. # Method 2 (deprecated)
  17. # dirs = glob.glob(f"{path}{sep}*") # similar paths
  18. # matches = [re.search(rf"{path.stem}{sep}(\d+)", d) for d in dirs]
  19. # i = [int(m.groups()[0]) for m in matches if m] # indices
  20. # n = max(i) + 1 if i else 2 # increment number
  21. # path = Path(f"{path}{sep}{n}{suffix}") # increment path
  22. if mkdir:
  23. path.mkdir(parents=True, exist_ok=True) # make directory
  24. return path
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/130943
推荐阅读
相关标签
  

闽ICP备14008679号