衡阳派盒市场营销有限公司

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

一個使用YoloV5的深度指南,使用WBF進行性能提升

新機器視覺 ? 來源:AI公園 ? 作者:AI公園 ? 2021-04-18 10:05 ? 次閱讀

導讀

一個使用YoloV5的深度指南,使用WBF進行性能提升。

網上有大量的YoloV5教程,本文的目的不是復制內容,而是對其進行擴展。我最近在做一個目標檢測競賽,雖然我發(fā)現(xiàn)了大量創(chuàng)建基線的教程,但我沒有找到任何關于如何擴展它的建議。此外,我想強調一下YoloV5配置中影響性能的最重要部分,因為畢竟數(shù)據(jù)科學主要是關于實驗和超參數(shù)調整。

在這之前,我想說使用目標檢測模型和使用圖像分類模型在框架和庫的工作方式上是不同的。這是我注意到的,我花了很長時間才弄明白。大多數(shù)流行的目標檢測模型(如YoloV5、EfficientDet)使用命令行接口來訓練和評估,而不是使用編碼方法。這意味著,你所需要做的就是獲取特定格式的數(shù)據(jù)(COCO或VOC),并將命令指向它。這通常與使用代碼訓練和評估模型的圖像分類模型不同。

數(shù)據(jù)預處理

YoloV5期望你有兩個目錄,一個用于訓練,一個用于驗證。在這兩個目錄中,你需要另外兩個目錄,“Images”和“Labels”。Images包含實際的圖像,每個圖像的標簽都應該有一個帶有該圖像標注的.txt文件,文本文件應該有與其對應的圖像相同的名稱。

標注格式如下:

<'class_id'><'x_center'><'y_center'><'height'>

要在代碼中做到這一點,你可能需要一個類似的函數(shù),在原始數(shù)據(jù)幀中有圖像項,它們的類id和它們的邊界框:

defcreate_file(df,split_df,train_file,train_folder,fold): os.makedirs('labels/train/',exist_ok=True) os.makedirs('images/train/',exist_ok=True) os.makedirs('labels/val/',exist_ok=True) os.makedirs('images/val/',exist_ok=True) list_image_train=split_df[split_df[f'fold_{fold}']==0]['image_id'] train_df=df[df['image_id'].isin(list_image_train)].reset_index(drop=True) val_df=df[~df['image_id'].isin(list_image_train)].reset_index(drop=True) fortrain_imgintqdm(train_df.image_id.unique()): withopen('labels/train/{train_img}.txt','w+')asf: row=train_df[train_df['image_id']==train_img] [['class_id','x_center','y_center','width','height']].values row[:,1:]/=SIZE#Imagesize,512here row=row.astype('str') forboxinrange(len(row)): text=''.join(row[box]) f.write(text) f.write(' ') shutil.copy(f'{train_img}.png', f'images/train/{train_img}.png') forval_imgintqdm(val_df.image_id.unique()): withopen(f'{labels/val/{val_img}.txt','w+')asf: row=val_df[val_df['image_id']==val_img] [['class_id','x_center','y_center','width','height']].values row[:,1:]/=SIZE row=row.astype('str') forboxinrange(len(row)): text=''.join(row[box]) f.write(text) f.write(' ') shutil.copy(f'{val_img}.png', f'images/val/{val_img}.png')

注意:不要忘記保存在標簽文本文件中的邊界框的坐標**必須被歸一化(從0到1)。**這非常重要。另外,如果圖像有多個標注,在文本文件中,每個標注(預測+邊框)將在單獨的行上。

在此之后,你需要一個配置文件,其中包含標簽的名稱、類的數(shù)量以及訓練和驗證的路徑。

importyaml classes=[‘Aorticenlargement’, ‘Atelectasis’, ‘Calcification’, ‘Cardiomegaly’, ‘Consolidation’, ‘ILD’, ‘Infiltration’, ‘LungOpacity’, ‘Nodule/Mass’, ‘Otherlesion’, ‘Pleuraleffusion’, ‘Pleuralthickening’, ‘Pneumothorax’, ‘Pulmonaryfibrosis’] data=dict( train=‘../vinbigdata/images/train’,#trainingimagespath val=‘../vinbigdata/images/val’,#validationimagespath nc=14,#numberofclasses names=classes ) withopen(‘./yolov5/vinbigdata.yaml’,‘w’)asoutfile: yaml.dump(data,outfile,default_flow_style=False)

現(xiàn)在,你需要做的就是運行這個命令:

pythontrain.py—img640—batch16—epochs30—data./vinbigdata.yaml—cfgmodels/yolov5x.yaml—weightsyolov5x.pt

從經驗中需要注意的事情:

好了,現(xiàn)在我們已經瀏覽了基本知識,讓我們來看看重要的東西:

別忘了歸一化坐標。

如果你的初始性能比預期的差得多,那么最可能的原因(我在許多其他參賽者身上看到過這種情況)是你在預處理方面做錯了什么。這看起來很瑣碎,但有很多細節(jié)你必須注意,特別是如果這是你的第一次。

YoloV5有多種型號(yolov5s、yolov5m、yolov5l、yolov5x),不要只選擇最大的一個,因為它可能會過擬合。從一個基線開始,比如中等大小的,然后試著改善它。

雖然我是在512尺寸的圖像上訓練的,但我發(fā)現(xiàn)用640來infer可以提高性能。

不要忘記加載預訓練的權重(-weights標志)。遷移學習將大大提高你的性能,并將為你節(jié)省大量的訓練時間(在我的例子中,大約50個epoch,每個epoch大約需要20分鐘!)

Yolov5x需要大量的內存,當訓練尺寸為512,批大小為4時,它需要大約14GB的GPU內存(大多數(shù)GPU大約8GB內存)。

YoloV5已經使用了數(shù)據(jù)增強,你可以選擇喜歡或不喜歡的增強,你所需要做的就是使用yolov5/data/hyp.scratch.yml文件去調整。

默認的yolov5訓練腳本使用weights and biases,說實話,這非常令人印象深刻,它在模型訓練時保存所有度量。但是,如果你想關閉它,只需在訓練腳本標記中添加WANDB_MODE= " dryrun "即可。

我希望早就發(fā)現(xiàn)的一件事是,YoloV5將大量有用的指標保存到目錄YoloV5 /runs/train/exp/中。訓練之后,你可以找到“confusion_matrix.png”和“results.png”,其中的result .png應該是這樣的:

729b6c24-9fbb-11eb-8b86-12bb97331649.png

使用WBF預處理

好了,現(xiàn)在你已經調整了超參數(shù),升級了你的模型,測試了多種圖像大小和交叉驗證。現(xiàn)在是介紹一些提高性能的技巧的時候了。

加權框融合是一種在訓練前(清理數(shù)據(jù)集)或訓練后(使預測更準確)動態(tài)融合框的方法。如果你想知道更多,你可以在這里查看我的文章:

WBF:優(yōu)化目標檢測,融合過濾預測框 (qq.com)

要使用它對數(shù)據(jù)集進行預處理,這將大多數(shù)參賽者的性能提高了大約10-20%,你可以這樣使用:

fromensemble_boxesimport* forimage_idintqdm(df['image_id'],leave=False): image_df=df[df['image_id']==image_id].reset_index(drop=True) h,w=image_df.loc[0,['height','width']].values boxes=image_df[['x_min','y_min','x_max','y_max']].values.tolist() #Normalisealltheboundingboxes(bydividingthembysize-1 boxes=[[j/(size-1)forjini]foriinboxes] scores=[1.0]*len(boxes)#setallofthescoresto1sinceweonlyhave1modelhere labels=[float(i)foriinimage_df['class_id'].values] boxes,scores,labels=weighted_boxes_fusion([boxes],[scores],[labels],weights=None,iou_thr=iou_thr, skip_box_thr=skip_box_thr) list_image.extend([image_id]*len(boxes)) list_h.extend([h]*len(boxes)) list_w.extend([w]*len(boxes)) list_boxes.extend(boxes) list_cls.extend(labels.tolist()) #bringtheboundingboxesbacktotheiroriginalsize(bymultiplyingbysize-1)list_boxes=[[int(j*(size-1))forjini]foriinlist_boxes] new_df['image_id']=list_image new_df['class_id']=list_cls new_df['h']=list_h new_df['w']=list_w #Unpackthecoordinatesfromtheboundingboxes new_df['x_min'],new_df['y_min'], new_df['x_max'],new_df['y_max']=np.transpose(list_boxes)

這意味著要在將邊框坐標保存到標注文件之前完成。你還可以嘗試在用YoloV5以同樣的方式預測邊界框之后使用它。

首先,在訓練YoloV5之后,運行:

!pythondetect.py—weights/runs/train/exp/weights —img640 —conf0.005 —iou0.45 —source$test_dir —save-txt—save-conf—exist-ok

然后提取框、分數(shù)和標簽:

runs/detect/exp/labels

然后傳遞到:

boxes,scores,labels=weighted_boxes_fusion([boxes],[scores],[labels],weights=None,iou_thr=iou_thr, skip_box_thr=skip_box_thr)

最后的思考

我希望你已經學到了一些關于擴展你的基線YoloV5的知識,我認為最重要的事情總是要考慮的是遷移學習,圖像增強,模型復雜性,預處理和后處理技術。這些是你可以輕松控制和使用YoloV5來提高性能的大部分方面。

責任編輯:lq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 圖像分類
    +關注

    關注

    0

    文章

    93

    瀏覽量

    11956
  • 目標檢測
    +關注

    關注

    0

    文章

    211

    瀏覽量

    15664
  • 遷移學習
    +關注

    關注

    0

    文章

    74

    瀏覽量

    5588

原文標題:高級YoloV5指南,使用WBF來提升目標檢測性能

文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    【ELF 2學習板試用】ELF2開發(fā)板(飛凌嵌入式)部署yolov5s的自定義模型

    /best.pt --conf-thres 0.25 圖4 安全帽模型測試 自定義yolov5s pt模型進行轉換(干貨) 下載瑞芯微官方修改過的yolov5以及環(huán)境搭建 本人使用的是conda
    發(fā)表于 02-04 18:15

    【ELF 2學習板試用】ELF2開發(fā)板(飛凌嵌入式)搭建深度學習環(huán)境部署(RKNN環(huán)境部署)

    使用的是WSL2系統(tǒng),當然使用虛擬機也是可以的,本人主要教學搭建yolov5模型轉換為rknn的環(huán)境搭建,以及基本步驟,從該文章您可以學習到rk3588等瑞芯微芯片的所有模型環(huán)境部署 安裝docker
    發(fā)表于 02-04 14:15

    什么是YOLO?RK3568+YOLOv5是如何實現(xiàn)物體識別的?起來了解下!

    、產品簡介TL3568-PlusTEB人工智能實驗箱國產高性能處理器64位4核低功耗2.0GHz超高主頻1T超高算力NPU兼容鴻蒙等國產操作系統(tǒng)二、實驗目的1、了解YOLOv5模型的用途及流程;2
    的頭像 發(fā)表于 12-19 19:04 ?359次閱讀
    什么是YOLO?RK3568+<b class='flag-5'>YOLOv5</b>是如何實現(xiàn)物體識別的?<b class='flag-5'>一</b>起來了解<b class='flag-5'>一</b>下!

    在RK3568教學實驗箱上實現(xiàn)基于YOLOV5的算法物體識別案例詳解

    種非常流行的實時目標檢測模型,它提供了出色的性能和精度。YOLOv5可以分為三部分,分別是: 1、主干特征提取網絡(Backbone) 2、加強特征提取網絡(FPN) 3、分類器與回歸器(Yolo
    發(fā)表于 12-03 14:56

    在樹莓派上部署YOLOv5進行動物目標檢測的完整流程

    卓越的性能。本文將詳細介紹如何在性能更強的計算機上訓練YOLOv5模型,并將訓練好的模型部署到樹莓派4B上,通過樹莓派的攝像頭進行實時動物目標檢測。
    的頭像 發(fā)表于 11-11 10:38 ?1455次閱讀
    在樹莓派上部署<b class='flag-5'>YOLOv5</b><b class='flag-5'>進行</b>動物目標檢測的完整流程

    RK3588 技術分享 | 在Android系統(tǒng)中使用NPU實現(xiàn)Yolov5分類檢測

    : NPU幫助機器完成更高效的翻譯、文本分類和情感分析,推動了自然語言處理技術的發(fā)展。 實例分享:Yolov5分類檢測 在RK3588處理器上,不僅可以基于Linux系統(tǒng)使用NPU,也可以
    發(fā)表于 10-24 10:13

    【飛凌嵌入式OK3576-C開發(fā)板體驗】RKNN神經網絡算法開發(fā)環(huán)境搭建

    download_model.sh 腳本,該腳本 將下載可用的 YOLOv5 ONNX 模型,并存放在當前 model 目錄下,參考命令如下: 安裝COCO數(shù)據(jù)集,在深度神經網
    發(fā)表于 10-10 09:28

    【飛凌嵌入式OK3576-C開發(fā)板體驗】rknn實現(xiàn)yolo5目標檢測

    進入 rknn_model_zoo/examples/yolov5/python 目錄,運行 yolov5.py 腳本,便可通過連板調試的方式在板端運行 YOLOv5 模型 板端推理 完整運行
    發(fā)表于 09-19 02:20

    RK3588 技術分享 | 在Android系統(tǒng)中使用NPU實現(xiàn)Yolov5分類檢測-迅為電子

    RK3588 技術分享 | 在Android系統(tǒng)中使用NPU實現(xiàn)Yolov5分類檢測-迅為電子
    的頭像 發(fā)表于 08-23 14:58 ?848次閱讀
    RK3588 技術分享 | 在Android系統(tǒng)中使用NPU實現(xiàn)<b class='flag-5'>Yolov5</b>分類檢測-迅為電子

    RK3588 技術分享 | 在Android系統(tǒng)中使用NPU實現(xiàn)Yolov5分類檢測

    : NPU幫助機器完成更高效的翻譯、文本分類和情感分析,推動了自然語言處理技術的發(fā)展。 實例分享:Yolov5分類檢測 在RK3588處理器上,不僅可以基于Linux系統(tǒng)使用NPU,也可以
    發(fā)表于 08-20 11:13

    基于迅為RK3588【RKNPU2項目實戰(zhàn)1】:YOLOV5實時目標分類

    [/url] 【RKNPU2 人工智能開發(fā)】 【AI深度學習推理加速器】——RKNPU2 從入門到實踐(基于RK3588和RK3568) 【RKNPU2項目實戰(zhàn)1】:YOLOV5實時目標分類 【RKNPU2項目實戰(zhàn)2】:SORT目標追蹤 【RKNPU2項目實戰(zhàn)3】車牌識別
    發(fā)表于 08-15 10:51

    YOLOv5的原理、結構、特點和應用

    YOLOv5(You Only Look Once version 5)是種基于深度學習的實時目標檢測算法,它屬于卷積神經網絡(CNN)的范疇。下面我將詳細介紹
    的頭像 發(fā)表于 07-03 09:23 ?6887次閱讀

    yolov5的best.pt導出成onnx轉化成fp32 bmodel后在Airbox上跑,報維度不匹配怎么處理?

    用官方的模型不出錯,用自己的yolov5訓練出來的best.pt導出成onnx轉化成fp32 bmodel后在Airbox上跑,出現(xiàn)報錯: linaro@bm1684:~/yolov5/python
    發(fā)表于 05-31 08:10

    maixcam部署yolov5s 自定義模型

    ://github.com/ultralytics/yolov5/releases/download/v7.0/yolov5s.pt 訓練(博主使用的是學校的集群進行訓練) python3 train.py
    發(fā)表于 04-23 15:43

    yolov5轉onnx在cubeAI上部署失敗的原因?

    一個我是轉onnx時 想把權重文件變小點 就用了半精度 --half,則說17版本不支持半精度 后面則是沒有縮小的單精度 但是顯示哪里溢出了···· 也不說是哪里、、。。。 到底能不能部署yolov5這種東西啊?? 也沒看見幾個部署在這上面..............
    發(fā)表于 03-14 06:23
    新东方百家乐官网的玩法技巧和规则| 百家乐官网筹码方| 在线百家乐纸牌游戏| 百家乐官网制胜方法| 大发888官方我的爱好| 菲律百家乐太阳城| 百家乐官网平台注册送现金| 大发888认识的见解| 百家乐投注庄闲法| 百家乐官网园云鼎赌场娱乐网规则| 真钱梭哈| 威尼斯人娱乐场注册| 玩百家乐高手支招篇| 百家乐官网在线赌场娱乐网规则| 伊春市| 上游棋牌官网| 百家乐款| 介绍百家乐赌博技巧| 大发888中期| 真人百家乐体验金| 百家乐平台哪个有在线支付呢 | 成都百家乐牌具| 百家乐网上最好网站| 实战百家乐官网的玩法技巧和规则| 帝王百家乐官网全讯网2| 黔东| 华人棋牌游戏| 奔驰百家乐官网游戏电玩| 垣曲县| 乌拉特后旗| 利博国际娱乐| 新利国际娱乐网| 香港六合彩开奖号码| 棋牌类单机游戏下载| 大发888娱乐登录| 百家乐官网赌博牌路分析| 什么百家乐官网平注法| 百家乐官网微笑心法搜索| 娱乐城排名| 大发娱乐场官方下载| 博彩优惠|