自学内容网 自学内容网

yolov5源码分析001

1.研究背景

最近项目需要将前人做的YOLOv5改造项目继续改造,于是研究其代码,一步步剖析,一步步看一个个代码意义,旨在为后期攻克YOLOv10等系列做好准备.

2.源码位置

在这里插入图片描述

3.源码

# 下载指定文件,并保存在指定目录文件夹中,最后返回文件完整路径
def attempt_download(file, repo='ultralytics/yolov5'):  # from utils.downloads import *; attempt_download()
    # Attempt file download if does not exist
    file = Path(str(file).strip().replace("'", ''))

    if not file.exists():
        # URL specified
        name = Path(urllib.parse.unquote(str(file))).name  # decode '%2F' to '/' etc.
        if str(file).startswith(('http:/', 'https:/')):  # download
            url = str(file).replace(':/', '://')  # Pathlib turns :// -> :/
            file = name.split('?')[0]  # parse authentication https://url.com/file.txt?auth...
            if Path(file).is_file():
                print(f'Found {url} locally at {file}')  # file already exists
            else:
                safe_download(file=file, url=url, min_bytes=1E5)
            return file

        # GitHub assets
        # 为需要下载的文件创建文件夹
        file.parent.mkdir(parents=True, exist_ok=True)  # make parent dir (if required)
        try:
            # 0928 从指定url下载最新的配置文件,并转为json文件
            response = requests.get(f'https://api.github.com/repos/{repo}/releases/latest').json()  # github api
            # 获取json文件中key为assets的列表中每一个key为name的资源
            assets = [x['name'] for x in response['assets']]  # release assets, i.e. ['yolov5s.pt', 'yolov5m.pt', ...]
            # 0928 从json文件中获取key为tag_name的tag
            tag = response['tag_name']  # i.e. 'v1.0'
        # 下载异常则进入异常处理分支
        except Exception:  # fallback plan
            # 资源列表
            assets = [
                'yolov5n.pt', 'yolov5s.pt', 'yolov5m.pt', 'yolov5l.pt', 'yolov5x.pt', 'yolov5n6.pt', 'yolov5s6.pt',
                'yolov5m6.pt', 'yolov5l6.pt', 'yolov5x6.pt']
            try:
                tag = subprocess.check_output('git tag', shell=True, stderr=subprocess.STDOUT).decode().split()[-1]
            except Exception:
                tag = 'v6.0'  # current release

        if name in assets:
            safe_download(
                file,
                url=f'https://github.com/{repo}/releases/download/{tag}/{name}',
                # google api接口网站作为备份下载网址
                # url2=f'https://storage.googleapis.com/{repo}/ckpt/{name}',  # backup url (optional)
                min_bytes=1E5,
                error_msg=f'{file} missing, try downloading from https://github.com/{repo}/releases/')
    # 返回文件完整路径
    return str(file)

原文地址:https://blog.csdn.net/qq_37269626/article/details/142612084

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!