一级无码一区在线观看AV_欧美亚洲日韩国产成人网_99精品国产再热久久无毒不卡_东京热999_少妇人妻无码专区在线视频

《YOLOv5全面解析教程》?十三,downloads.py 詳細(xì)解析

前言
?

代碼倉庫地址:https://github.com/Oneflow-Inc/one-yolov5歡迎star one-yolov5項目 獲取最新的動態(tài)。如果您有問題,歡迎在倉庫給我們提出寶貴的意見。如果對您有幫助,歡迎來給我Star呀~

?

源碼解讀:utils/augmentations.py

?

這個文件主要是負(fù)責(zé)從github/googleleaps/google drive 等網(wǎng)站或者云服務(wù)器上下載所需的一些文件。由于微信會吃掉一些超鏈接影響閱讀,歡迎大家查看原始文檔網(wǎng)站解讀文章:https://start.oneflow.org/oneflow-yolo-doc/source_code_interpretation/utils/downloads_py.html


(資料圖片)

?

是一個工具類,代碼比較簡單,函數(shù)也比較少,主要難點還是在于一些包可能大家不是很熟悉,下面一起來學(xué)習(xí)下。

這個文件比較重要的是兩個函數(shù):safe_download和attempt_download。在train.py或者yolo.py等文件中都會用到。

1. 導(dǎo)入需要的包

"""Downloadutils"""importos#與操作系統(tǒng)進(jìn)行交互的模塊importplatform#提供獲取操作系統(tǒng)相關(guān)信息的模塊importshutil#Python的高階文件操作模塊importsubprocess#子進(jìn)程定義及操作的模塊importtime#時間模塊importurllib#用于操作網(wǎng)頁url并對網(wǎng)頁的內(nèi)容進(jìn)行抓取處理如urllib.parse:解析urlfrompathlibimportPath#Path將str轉(zhuǎn)換為Path對象使字符串路徑易于操作的模塊fromzipfileimportZipFile#導(dǎo)入文件解壓模塊importoneflowasflow#導(dǎo)入深度學(xué)習(xí)框架oneflow包importrequests#通過urllib3實現(xiàn)自動發(fā)送HTTP/1.1請求的第三方模塊

2. gsutil_getsize

這個函數(shù)是用來返回網(wǎng)站鏈接 url 對應(yīng)文件的大小。

defgsutil_getsize(url=""):"""用在downloads.py的print_mutation函數(shù)當(dāng)中計算某個url對應(yīng)的文件大小用于返回網(wǎng)站鏈接url對應(yīng)文件的大小,注意單位是bytesgs://bucket/filesizehttps://cloud.google.com/storage/docs/gsutil/commands/du"""#創(chuàng)建一個子進(jìn)程在命令行執(zhí)行g(shù)sutilduurl命令(訪問CloudStorage)返回執(zhí)行結(jié)果(文件)#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

這兩個函數(shù)主要是用來從 github 或者 googleleaps 云服務(wù)器中下載文件的,主要是下載權(quán)重文件。

one-yolov5 倉庫中 attempt_download 函數(shù)調(diào)用 safe_download 函數(shù)。

3.1 safe_download

這個函數(shù)是用來下載 url(github) 或者 url2(谷歌云服務(wù)器) 網(wǎng)頁路徑對應(yīng)的文件,

通常是下載權(quán)重文件,經(jīng)常用在 attempt_download 函數(shù)中,代碼如下:

defsafe_download(file,url,url2=None,min_bytes=1e0,error_msg=""):"""經(jīng)常用在attempt_download函數(shù)中,也可以單獨使用下載url/url2網(wǎng)頁路徑對應(yīng)的文件Attemptstodownloadfilefromurlorurl2,checksandremovesincompletedownloadsmin_bytes,assert_msg#checkexceptExceptionase:#url2url1不行就嘗試從url2中下載文件一般是googleleaps(云服務(wù)器)#移除之前下載失敗的不完整文件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

這個函數(shù)是實現(xiàn)從幾個云平臺 (github/googleleaps云服務(wù)器/xxx) 下載文件(在one-yolov5中一般是預(yù)訓(xùn)練模型),

會調(diào)用上面的 safe_download 函數(shù)。會用在 experimental.py 中的 attempt_load 函數(shù)和 train.py 中,都是用來下載預(yù)訓(xùn)練權(quán)重。代碼詳解如下:

defattempt_download(file,repo="Oneflow-Inc/one-yolov5"):#fromutils.downloadsimport*;attempt_download()"""用在attempt_download函數(shù)中下載url/url2網(wǎng)頁路徑對應(yīng)的文件Attemptstodownloadfilefromurlorurl2,checksandremovesincompletedownloads:/#name:要下載的文件名file=name.split("?")[0]#parseauthenticationhttps://url.com/file.txt?auth...#如果文件已經(jīng)在本地存在了就不用下載了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獲取最新的版本相關(guān)信息這里的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:#創(chuàng)建一個子進(jìn)程在命令行執(zhí)行g(shù)ittag命令(返回版本號版本號信息一般在字典最后一個-1)返回執(zhí)行結(jié)果(版本號tag)tag=subprocess.check_output("gittag",shell=True,stderr=subprocess.STDOUT).decode().split()[-1]except:#如果還是失敗就強行自己補一個版本號tag="v1.1",比如這里在one-yolov5中直接補當(dāng)前的最新版本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(沒使用)

這兩個函數(shù)是實現(xiàn)從 google drive 上下載壓縮文件并將其解壓, 再刪除掉壓縮文件。但是這好像并沒有在代碼中使用,所以這兩個函數(shù)可以隨便了解下就好,主要還是要掌握上面的兩個下載函數(shù)用的比較多。

4.1 get_token

這個函數(shù)實現(xiàn)從 cookie中 獲取令牌 token 。會在 gdrive_download 中被調(diào)用。

get_token函數(shù)代碼:

defget_token(cookie="./cookie"):"""在gdrive_download中使用實現(xiàn)從cookie中獲取令牌token"""withopen(cookie)asf:forlineinf:if"download"inline:returnline.split()[-1]return""

4.2 gdrive_download

這個函數(shù)實現(xiàn)從 google drive 上下載壓縮文件并將其解壓, 再刪除掉壓縮文件。這個函數(shù)貌似沒用到,隨便看下就好。

gdrive_download函數(shù)代碼:

defgdrive_download(id="16TiPfZj7htmTyhntwcZyEEAejOUxuT6m",file="tmp.zip"):"""實現(xiàn)從googledrive上下載壓縮文件并將其解壓,再刪除掉壓縮文件:paramsid:url的?后面的id參數(shù)的參數(shù)值:paramsfile:需要下載的壓縮文件名"""t=time.time()#獲取當(dāng)前時間file=Path(file)#Path將str轉(zhuǎn)換為Path對象cookie=Path("cookie")#gdrivecookieprint(f"Downloadinghttps://drive.google.com/uc?export=download&id={id}as{file}...",end="")file.unlink(missing_ok=True)#移除已經(jīng)存在的文件(可能是下載失敗/下載不完整的文件)cookie.unlink(missing_ok=True)#移除已經(jīng)存在的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()函數(shù)在上面定義了,用于獲取當(dāng)前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}""#執(zhí)行下載指令s并獲得返回值如果cmd命令執(zhí)行成功則os.system()命令會返回0r=os.system(s)cookie.unlink(missing_ok=True)#再次移除已經(jīng)存在的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命令執(zhí)行解壓命令file.unlink()#移除.zip壓縮文件print(f"Done({time.time()-t:.1f}s)")#打印下載+解壓過程所需要的時間returnr

總結(jié)

這個文件的代碼比較少,真正有用的函數(shù)也比較少。

也就是safe_download和attempt_download兩個函數(shù)比較重要,大家重點掌握這兩個函數(shù)即可。

Reference【YOLOV5-5.x 源碼解讀】google_utils.py

京東聯(lián)盟年貨節(jié)京享紅包來襲,活動期間可抽到3、20.23、666、9999元等面額不等的隨機(jī)面額紅包,現(xiàn)金紅包可用于京東平臺購物抵現(xiàn)!無門檻全平臺全品類實物商品可使用,下單時可與任何優(yōu)惠(例如東券、京券、京豆等)疊加使用,一筆訂單可同時疊加使用多個紅包~

發(fā)放紅包時間:2022 年 12 月 29 日 - 2023 年 1 月15 日;使用紅包時間:2022 年 12 月 29 日 20:00:00-2023 年 1 月17 日。

活動期間用戶每日通過如下頁面隨機(jī)抽取,每日可中獎3次,每日首次參與可能獲得紅包+優(yōu)惠券雙重利益點。未在京東下過單的用戶參與活動將有機(jī)會獲得神秘新客京享紅包,更有專屬福利購!

活動會在1 月 3 日、1 月 9 日、1 月 13 日開啟紅包加碼,加碼期間可獲得額外的抽獎次數(shù),可隨機(jī)獲得京東紅包、品類東券或店鋪券等獎勵。加碼獎勵限量,發(fā)完即止,建議用戶在加碼節(jié)點整點,準(zhǔn)時參與活動!

關(guān)鍵詞: 下載地址 文件大小 這個文件

重回“國庫”!方正證券10.9億股股票被追繳、沒收

5月19日,證券板塊整體跌幅0 09%,但方正證券上漲3 78%,漲幅位居板塊第一。消息面上,方正證券發(fā)布公告稱,大連中院依法作出執(zhí)行裁定書,

深圳商報 2022-05-20

放開限購、“開門迎客” 大量債基收緊申購門檻

近來,不少權(quán)益基金放開限購、開門迎客,其中不乏明星基金經(jīng)理旗下產(chǎn)品。與此同時,大量債券基金卻收緊了申購門檻,個別將限購金額上限定為

深圳商報 2022-05-20

排隊11個月后 “國產(chǎn)汽水第一股”冰峰飲料告吹

在排隊11個月后,國產(chǎn)汽水第一股冰峰飲料上會前主動撤回申請資料,這意味著其IPO告吹。發(fā)審委18日晚稱,因冰峰飲料撤回申報材料,故取消19

深圳商報 2022-05-20

23年來 “5·19”科技股行情發(fā)生了翻天覆地的變化

23年過去,A股市場發(fā)生了翻天覆地的變化。同花順數(shù)據(jù)顯示,1999年5月19日,A股上市公司只有857家,A股總市值僅有2 05萬億元。而今年5月19日

深圳商報 2022-05-20

再獲國家首肯!23家深圳專精特新“小巨人”進(jìn)入最新名單

深圳創(chuàng)新能力,再獲國家首肯。23家深圳專精特新小巨人,進(jìn)入國家專精特新中小企業(yè)高質(zhì)量發(fā)展最新建議支持名單。按照安排,國家將拿出100億

深圳商報 2022-05-20

各行業(yè)工資單出爐!IT類最賺錢,還有這些錢景喜人

  中新經(jīng)緯11月24日電 (張澍楠)雖說三百六十行,行行出狀元,但行業(yè)之間的差距,仍然很大。究竟什么行業(yè)“最香”?被視為“高富帥”的金

2021-11-24

“狗咬人”事件當(dāng)事人被撤職 多名干部被問責(zé)

  新華社鄭州11月23日電(記者馮大鵬)在“狗咬人”輿情發(fā)酵后,23日晚,河南安陽通報了對涉“狗咬人”事件責(zé)任單位和責(zé)任人的處理決定。 

2021-11-24

重回“國庫”!方正證券10.9億股股票被追繳、沒收

5月19日,證券板塊整體跌幅0 09%,但方正證券上漲3 78%,漲幅位居板塊第一。消息面上,方正證券發(fā)布公告稱,大連中院依法作出執(zhí)行裁定書,

深圳商報 2022-05-20

放開限購、“開門迎客” 大量債基收緊申購門檻

近來,不少權(quán)益基金放開限購、開門迎客,其中不乏明星基金經(jīng)理旗下產(chǎn)品。與此同時,大量債券基金卻收緊了申購門檻,個別將限購金額上限定為

深圳商報 2022-05-20

排隊11個月后 “國產(chǎn)汽水第一股”冰峰飲料告吹

在排隊11個月后,國產(chǎn)汽水第一股冰峰飲料上會前主動撤回申請資料,這意味著其IPO告吹。發(fā)審委18日晚稱,因冰峰飲料撤回申報材料,故取消19

深圳商報 2022-05-20

23年來 “5·19”科技股行情發(fā)生了翻天覆地的變化

23年過去,A股市場發(fā)生了翻天覆地的變化。同花順數(shù)據(jù)顯示,1999年5月19日,A股上市公司只有857家,A股總市值僅有2 05萬億元。而今年5月19日

深圳商報 2022-05-20

再獲國家首肯!23家深圳專精特新“小巨人”進(jìn)入最新名單

深圳創(chuàng)新能力,再獲國家首肯。23家深圳專精特新小巨人,進(jìn)入國家專精特新中小企業(yè)高質(zhì)量發(fā)展最新建議支持名單。按照安排,國家將拿出100億

深圳商報 2022-05-20

各行業(yè)工資單出爐!IT類最賺錢,還有這些錢景喜人

  中新經(jīng)緯11月24日電 (張澍楠)雖說三百六十行,行行出狀元,但行業(yè)之間的差距,仍然很大。究竟什么行業(yè)“最香”?被視為“高富帥”的金

2021-11-24

“狗咬人”事件當(dāng)事人被撤職 多名干部被問責(zé)

  新華社鄭州11月23日電(記者馮大鵬)在“狗咬人”輿情發(fā)酵后,23日晚,河南安陽通報了對涉“狗咬人”事件責(zé)任單位和責(zé)任人的處理決定?!?

2021-11-24
x 廣告
x 廣告
x 廣告

Copyright   2015-2022 北方倉儲網(wǎng)版權(quán)所有  備案號:京ICP備2021034106號-50   聯(lián)系郵箱: 55 16 53 8@qq.com