文章目录
- 1.研究背景
- 2.源码位置
- 3.源码
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)