品牌 资讯 搭配 材料 时尚 热点 行业 首饰 玉石 行情

全球关注:《YOLOv5全面解析教程》​十三,downloads.py 详细解析

2023-01-03 11:56:58 来源:
前言

代码仓库地址:https://github.com/Oneflow-Inc/one-yolov5欢迎star one-yolov5项目 获取最新的动态。如果您有问题,欢迎在仓库给我们提出宝贵的意见。如果对您有帮助,欢迎来给我Star呀~

源码解读:utils/augmentations.py

这个文件主要是负责从github/googleleaps/google drive 等网站或者云服务器上下载所需的一些文件。由于微信会吃掉一些超链接影响阅读,欢迎大家查看原始文档网站解读文章:https://start.oneflow.org/oneflow-yolo-doc/source_code_interpretation/utils/downloads_py.html


(资料图)

是一个工具类,代码比较简单,函数也比较少,主要难点还是在于一些包可能大家不是很熟悉,下面一起来学习下。

这个文件比较重要的是两个函数:safe_download和attempt_download。在train.py或者yolo.py等文件中都会用到。

1. 导入需要的包

"""Downloadutils"""importos#与操作系统进行交互的模块importplatform#提供获取操作系统相关信息的模块importshutil#Python的高阶文件操作模块importsubprocess#子进程定义及操作的模块importtime#时间模块importurllib#用于操作网页url并对网页的内容进行抓取处理如urllib.parse:解析urlfrompathlibimportPath#Path将str转换为Path对象使字符串路径易于操作的模块fromzipfileimportZipFile#导入文件解压模块importoneflowasflow#导入深度学习框架oneflow包importrequests#通过urllib3实现自动发送HTTP/1.1请求的第三方模块

2. gsutil_getsize

这个函数是用来返回网站链接 url 对应文件的大小。

defgsutil_getsize(url=""):"""用在downloads.py的print_mutation函数当中计算某个url对应的文件大小用于返回网站链接url对应文件的大小,注意单位是bytesgs://bucket/filesizehttps://cloud.google.com/storage/docs/gsutil/commands/du"""#创建一个子进程在命令行执行gsutilduurl命令(访问CloudStorage)返回执行结果(文件)#gs://bucket/filesizehttps://cloud.google.com/storage/docs/gsutil/commands/dus=subprocess.check_output(f"gsutildu{url}",shell=True).decode("utf-8")returneval(s.split("")[0])iflen(s)else0#bytes

3. safe_download、attempt_download

这两个函数主要是用来从 github 或者 googleleaps 云服务器中下载文件的,主要是下载权重文件。

one-yolov5 仓库中 attempt_download 函数调用 safe_download 函数。

3.1 safe_download

这个函数是用来下载 url(github) 或者 url2(谷歌云服务器) 网页路径对应的文件,

通常是下载权重文件,经常用在 attempt_download 函数中,代码如下:

defsafe_download(file,url,url2=None,min_bytes=1e0,error_msg=""):"""经常用在attempt_download函数中,也可以单独使用下载url/url2网页路径对应的文件Attemptstodownloadfilefromurlorurl2,checksandremovesincompletedownloadsmin_bytes,assert_msg#checkexceptExceptionase:#url2url1不行就尝试从url2中下载文件一般是googleleaps(云服务器)#移除之前下载失败的不完整文件file.unlink(missing_ok=True)#removepartialdownloadsprint(f"ERROR:{e}\nRe-attempting{url2orurl}to{file}...")os.system(f"curl-L"{url2orurl}"-o"{file}"--retry3-C-")#curldownload,retryandresumeonfailfinally:#检查文件是否下载下来了或文件大小是否小于min_bytesifnotfile.exists()orfile.stat().st_size

url="https://github.com/Oneflow-Inc/one-yolov5/releases/download/v1.0.0/model_comparison.png"safe_download("op.png",url)

Downloading https://github.com/Oneflow-Inc/one-yolov5/releases/download/v1.0.0/model_comparison.png to op.png...  0%|          | 0.00/118k [00:00

fromPILimportImagedisplay(Image.open("op.png"))#显示下载的图片

image
3.2 attempt_download

这个函数是实现从几个云平台 (github/googleleaps云服务器/xxx) 下载文件(在one-yolov5中一般是预训练模型),

会调用上面的 safe_download 函数。会用在 experimental.py 中的 attempt_load 函数和 train.py 中,都是用来下载预训练权重。代码详解如下:

defattempt_download(file,repo="Oneflow-Inc/one-yolov5"):#fromutils.downloadsimport*;attempt_download()"""用在attempt_download函数中下载url/url2网页路径对应的文件Attemptstodownloadfilefromurlorurl2,checksandremovesincompletedownloads:/#name:要下载的文件名file=name.split("?")[0]#parseauthenticationhttps://url.com/file.txt?auth...#如果文件已经在本地存在了就不用下载了ifPath(file).is_file():print(f"Found{url}locallyat{file}")#filealreadyexistselse:safe_download(file=file,url=url,min_bytes=1e5)#下载文件returnfile#GitHubassetsfile.parent.mkdir(parents=True,exist_ok=True)#makeparentdir(ifrequired)try:#利用githubapi获取最新的版本相关信息这里的response是一个字典response=requests.get(f"https://api.github.com/repos/{repo}/releases/latest").json()#githubapiassets=[x["name"]forxinresponse["assets"]]#releaseassets,i.e.["yolov5s","yolov5m",...]tag=response["tag_name"]#i.e."v1.0"except:#fallbackplan获取失败就退而求其次直接利用git命令强行补齐版本信息assets=["yolov5n.zip","yolov5s.zip","yolov5m.zip","yolov5l.zip","yolov5x.zip","yolov5n6.zip","yolov5s6.zip","yolov5m6.zip","yolov5l6.zip","yolov5x6.zip",]try:#创建一个子进程在命令行执行gittag命令(返回版本号版本号信息一般在字典最后一个-1)返回执行结果(版本号tag)tag=subprocess.check_output("gittag",shell=True,stderr=subprocess.STDOUT).decode().split()[-1]except:#如果还是失败就强行自己补一个版本号tag="v1.1",比如这里在one-yolov5中直接补当前的最新版本v1.1.tag="v1.1"#currentreleaseif".zip"notinname:name=name+".zip"file=Path(name)ifnameinassets:safe_download(file,url=f"https://github.com/{repo}/releases/download/{tag}/{name}",#url2=f"https://storage.googleapis.com/{repo}/ckpt/{name}",#backupurl(optional)min_bytes=1e5,error_msg=f"{file}missing,trydownloadingfromhttps://github.com/{repo}/releases/",)if".zip"inname:new_dir=Path(name[:-4])else:new_dir=Path(name)ifnotos.path.exists(new_dir):#判断文件夹是否存在os.mkdir(new_dir)#新建文件夹if".zip"inname:print("unzipping...",end="")#ZipFile(new_file).extractall(path=file.parent)#unzipf=ZipFile(file)f.extractall(new_dir)os.remove(file)#removeziptmp_dir="/tmp/oneyolov5"ifos.path.isdir(tmp_dir):shutil.rmtree(tmp_dir)if".zip"inname:path1=os.path.join(name[:-4],name[:-4])else:path1=os.path.join(name,name)shutil.copytree(path1,tmp_dir)shutil.rmtree(new_dir)shutil.copytree(tmp_dir,new_dir)shutil.rmtree(tmp_dir)returnstr(file)

attempt_download("yolov5n")

Downloading https://github.com/Oneflow-Inc/one-yolov5/releases/download/v1.0.0/yolov5n.zip to yolov5n.zip...  0%|          | 0.00/3.53M [00:00

4. get_token & gdrive_download(没使用)

这两个函数是实现从 google drive 上下载压缩文件并将其解压, 再删除掉压缩文件。但是这好像并没有在代码中使用,所以这两个函数可以随便了解下就好,主要还是要掌握上面的两个下载函数用的比较多。

4.1 get_token

这个函数实现从 cookie中 获取令牌 token 。会在 gdrive_download 中被调用。

get_token函数代码:

defget_token(cookie="./cookie"):"""在gdrive_download中使用实现从cookie中获取令牌token"""withopen(cookie)asf:forlineinf:if"download"inline:returnline.split()[-1]return""

4.2 gdrive_download

这个函数实现从 google drive 上下载压缩文件并将其解压, 再删除掉压缩文件。这个函数貌似没用到,随便看下就好。

gdrive_download函数代码:

defgdrive_download(id="16TiPfZj7htmTyhntwcZyEEAejOUxuT6m",file="tmp.zip"):"""实现从googledrive上下载压缩文件并将其解压,再删除掉压缩文件:paramsid:url的?后面的id参数的参数值:paramsfile:需要下载的压缩文件名"""t=time.time()#获取当前时间file=Path(file)#Path将str转换为Path对象cookie=Path("cookie")#gdrivecookieprint(f"Downloadinghttps://drive.google.com/uc?export=download&id={id}as{file}...",end="")file.unlink(missing_ok=True)#移除已经存在的文件(可能是下载失败/下载不完整的文件)cookie.unlink(missing_ok=True)#移除已经存在的cookie#尝试下载压缩文件out="NUL"ifplatform.system()=="Windows"else"/dev/null"#使用cmd命令从googledrive上下载文件os.system(f"curl-c./cookie-s-L"drive.google.com/uc?export=download&id={id}">{out}")ifos.path.exists("cookie"):#如果文件较大就需要有令牌get_token(存在cookie才有令牌)的指令s才能下载#get_token()函数在上面定义了,用于获取当前cookie的令牌tokens=f"curl-Lb./cookie"drive.google.com/uc?export=download&confirm={get_token()}&id={id}"-o{file}"else:#小文件就不需要带令牌的指令s直接下载就行s=f"curl-s-L-o{file}"drive.google.com/uc?export=download&id={id}""#执行下载指令s并获得返回值如果cmd命令执行成功则os.system()命令会返回0r=os.system(s)cookie.unlink(missing_ok=True)#再次移除已经存在的cookie#下载错误检测如果r!=0则下载错误ifr!=0:file.unlink(missing_ok=True)#下载错误移除下载的文件(可能不完整或者下载失败)print("Downloaderror")#raiseException("Downloaderror")returnr#如果是压缩文件就解压file.suffix方法可以获取file文件的后缀iffile.suffix==".zip":print("unzipping...",end="")os.system(f"unzip-q{file}")#cmd命令执行解压命令file.unlink()#移除.zip压缩文件print(f"Done({time.time()-t:.1f}s)")#打印下载+解压过程所需要的时间returnr

总结

这个文件的代码比较少,真正有用的函数也比较少。

也就是safe_download和attempt_download两个函数比较重要,大家重点掌握这两个函数即可。

Reference【YOLOV5-5.x 源码解读】google_utils.py

京东联盟年货节京享红包来袭,活动期间可抽到3、20.23、666、9999元等面额不等的随机面额红包,现金红包可用于京东平台购物抵现!无门槛全平台全品类实物商品可使用,下单时可与任何优惠(例如东券、京券、京豆等)叠加使用,一笔订单可同时叠加使用多个红包~

发放红包时间:2022 年 12 月 29 日 - 2023 年 1 月15 日;使用红包时间:2022 年 12 月 29 日 20:00:00-2023 年 1 月17 日。

活动期间用户每日通过如下页面随机抽取,每日可中奖3次,每日首次参与可能获得红包+优惠券双重利益点。未在京东下过单的用户参与活动将有机会获得神秘新客京享红包,更有专属福利购!

活动会在1 月 3 日、1 月 9 日、1 月 13 日开启红包加码,加码期间可获得额外的抽奖次数,可随机获得京东红包、品类东券或店铺券等奖励。加码奖励限量,发完即止,建议用户在加码节点整点,准时参与活动!

标签: 下载地址 文件大小 这个文件

(责任编辑:new01)

相关文章

全球关注:《YOLOv5全面解析教程》​十三,downloads.py 详细解析

​前言❝代码仓库地址:https: github com Oneflow-Inc one-yolov5欢迎starone-yolov5项目获取最新的动态。如

2023-01-03 11:56:58

2022年民法典规定打印遗嘱签字按手印后生效吗 当前速讯

​打印的遗嘱签字按手印应当认定为有效,我国法律规定打印遗嘱需要有两个以上见证人在现场,且打印遗嘱上应当有遗嘱人和见证人签名,内容应当记

2023-01-03 07:57:49

深远海风电开发 迈出关键一步!_环球热消息

​新年伊始,中国海油的新能源工程加速推进。元旦期间,由中国海油投资建造的我国首个深远海浮式风电平台“海油观澜号”在海油工程青岛场地完...

2023-01-03 02:09:17

倩碧控股(08367.HK):王秀婷已辞任执行董事、行政总裁等职

​格隆汇1月2日丨倩碧控股董事会宣布,王秀婷已辞任公司执行董事、行政总裁、授权代表、薪酬委员会以及提名委员会各自的成员,并于2022年12月30

2023-01-02 22:26:03

【全球热闻】【2023年年报】聚酯:需求弱复苏,聚酯系品种仍受投产压制

​【2023年年报】聚酯:需求弱复苏,聚酯系品种仍受投产压制

2023-01-02 15:39:16

公猫尿血是怎么回事 猫尿血是怎么回事但是精神好 天天最新

​1、公猫出现尿血一般存在于猫下泌尿道综合征,常见包括膀胱炎、尿道炎、膀胱结石。猫咪尿血是由于膀胱壁毛细血管破裂出血,常由于结石摩擦、膀

2023-01-01 23:41:54

劳动合同终止后需要办理的手续 世界微动态

​《劳动合同法》第三十六条规定:用人单位与劳动者协商一致,可以解除劳动合同。这一规定明确了双方协商解除劳动合同的前提。《劳动合同法》这

2023-01-01 07:53:45

冬枣长毛是什么原因? 每日热闻

​冬枣长毛是因为已经腐坏了,不可以再食用。发霉的枣子是不能食用的,发霉的枣子已经变质,枣子的营养结构已经被破坏,吃发霉的枣子对人体有害

2022-12-31 15:44:09

武汉老百姓大药房有制氧机卖吗? 全球今日讯

​武汉老百姓大药房有制氧机卖吗?在老百姓大药房线上商城小程序上搜索“制氧机”,当前商品售罄。可在其他平台上进行购买>>淘宝打开手机淘宝...

2022-12-30 20:32:23

【世界快播报】中国武夷获澳门国际银行15亿综合授信支持 有效期两年

​观点网讯:12月30日,中国武夷实业股份有限公司关于与澳门国际银行签订合作协议的公告。根据公告显示,中国武夷和澳门国际银行股份有限公司于2

2022-12-30 18:20:38

每日消息!华瓷股份:我司暂未西安饮食发生直接业务往来

​华瓷股份:我司暂未西安饮食发生直接业务往来

2022-12-30 15:22:53

天天观天下!苏泊尔等申请对国美电器破产清算?国美:470万债权尚未确认

​国美电器对破产清算呈请提出异议。申请人主张前述附属公司欠付货款合计约470 6万元,但该等债权债务并未有生效法律文书予以确认。今年4月起,

2022-12-30 09:17:18

美股异动 | 新能源车板块走高 特斯拉(TSLA.US)涨近8% 全球即时看

​智通财经APP获悉,周四,美股新能源车板块走高,截至发稿,特斯拉(TSLA US)涨近8%,Lucid(LCID US)涨超7%,Rivian(RIVN US)

2022-12-30 01:45:31

天天速读:投资界官网PEdaily.cn全新改版上线,让创投更专业

​2022年,中国股权投资市场正处于关键转折期,大型产业基金、引导基金设立活跃,半导体、新能源、新材料等硬科技领域彰显韧性。全新时代背景下

2022-12-29 19:28:57

招商轮船:收到财政专项扶持资金1921.5万元|焦点精选

​2022年12月29日,招商轮船(601872 SH)发布公告,公司于近日收到中国(上海)自由贸易试验区管理委员会发放的2021年度财政专项扶持资金人民币192

2022-12-29 17:36:40

万通液压(830839)12月29日游资资金净卖出6.22万元 天天快消息

​截至2022年12月29日收盘,万通液压(830839)报收于6 45元,下跌1 68%,换手率0 09%,成交量603 0手,成交额38 37万元。12月29

2022-12-29 15:20:59

全球微速讯:竹叶贷借款逾期15个月还不起征信有什么影响

​网贷逾期一般会上征信,有些借贷机构在用户逾期后一天后就会上报给征信机构,而有些借贷机构则是会在几天后上报给征信机构,因为有些借贷机构可

2022-12-29 13:14:58

碳元科技董秘回复:涟源德盛四季新能源科技有限公司目前持有公司5.74%股份,公司本次非公开发行完成后

​碳元科技(603133)12月29日在投资者关系平台上答复了投资者关心的问题。投资者:公司是否为国资?是否为国企改革?贵司是否成为娄底地区第一家

2022-12-29 11:28:01

【说案】骑手撞了人,保险合同中的免责条款“作数”吗

​北京市民张先生与一家平台外卖骑手小刘发生交通事故,经认定小刘在事故中负全责,张先生无责。张先生诉至法院,要求小刘、运营众包配送APP的众

2022-12-29 09:33:15

新疆克孜勒苏州阿克陶县发生3.0级地震 震源深度35千米 环球快看点

​央视网消息:据@中国地震台网速报微博消息,中国地震台网正式测定:12月28日16时45分在新疆克孜勒苏州阿克陶县(北纬38 88度,东经75 89度)发生3

2022-12-28 16:57:50

前11月工业企业营收保持增长 利润结构持续改善-世界通讯

​国家统计局12月27日公布数据显示,今年前11月,全国规模以上工业企业实现营业收入123 96万亿元,同比增长6 7%;全国规模以上工业企业实现利润

2022-12-28 14:25:07

有哪些设备可以测血氧?(附血氧仪类型)

​有哪些设备可以测血氧?可以通过血氧仪检测血氧,同时部分运动手表也有血压血氧监测功能。如果没有相关设备,一旦出现胸闷、呼吸急促、呼吸困

2022-12-28 10:38:49

陆金贷(小额应急)网贷逾期7天延迟还款征信有什么影响 世界独家

​网贷逾期一般会上征信,有些借贷机构在用户逾期后一天后就会上报给征信机构,而有些借贷机构则是会在几天后上报给征信机构,因为有些借贷机构可

2022-12-28 03:26:59

天天即时看!济南莱芜区2023年寒假需要期末考试吗?

​根据市教研院工作建议,综合研判线上考试的各种因素,寒假前区教研中心不再组织义务教育阶段的期末检测,寒假后根据复学情况,择机安排考试。

2022-12-27 18:27:44

交管12123违法处理流程(附可处理交通违法范围)-天天热头条

​以“交通违法处理”为例:“交管12123”APP上可处理交通违法范围:1、可以处理本人名下或非本人名下已备案的机动车非现场违法行为;2、可以...

2022-12-27 14:52:27

巨力索具董秘回复:公司自成立以来,坚持走独立自主的技术发展路线,所有产品、技术成果均为自有知识产权

​巨力索具(002342)12月27日在投资者关系平台上答复了投资者关心的问题。

2022-12-27 09:38:41

我国棉花年产量近600万吨 单产增长5.3%

​国家统计局12月26日发布,2022年,我国棉花产量实现增长,棉花单产有所提高。

2022-12-26 21:58:29

每日资讯:锡装股份:受疫情影响,项目开工时间略有推迟,预计在元旦过后才能正式开工

​锡装股份(001332)12月22日在投资者关系平台上答复了投资者关心的问题。投资者:“年产12,000吨高效换热器生产建设项目”已经开工建设了吧?锡

2022-12-26 16:01:28

广东顺控24亿竞得佛山顺德北滘商住地 楼面价5600元/平米 环球快看点

​12月26日,佛山顺德北滘潭洲国际会展中心南侧一宗近22万㎡商住地出让,起拍价23 94亿元,扣除教育用地等,折合起拍楼面价约5600元 ㎡。这是广

2022-12-26 10:21:12

田间地头的權木用什么药打可以彻底打死?|全球快看点

​除草机理这个优秀的除草剂就是60%草甘·三氯吡可湿性粉剂,商品名“屠欢”。该药剂是由草甘膦和三氯吡氧乙酸按照5:1的比例混配而成,草甘膦...

2022-12-25 22:36:24