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

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

3天內(nèi)不再提示

YOLOv5實現(xiàn)鋼材表面缺陷檢測

新機器視覺 ? 來源:笑傲算法江湖 ? 2023-02-20 10:14 ? 次閱讀

目前,基于機器視覺的表面缺陷已經(jīng)在各個工業(yè)領域廣泛取代人工視覺檢測,包括3C、汽車、家電、機械制造半導體電子、化工、制藥、航空航天、輕工等行業(yè)。許多基于深度學習的缺陷檢測方法也被廣泛應用于各種工業(yè)場景。

本文的代碼實戰(zhàn),是基于YOLOv5目標檢測算法,在NEU表面缺陷數(shù)據(jù)集上實現(xiàn)鋼材表面缺陷檢測。要求Python>=3.7.0,PyTorch>=1.7。

一、YOLOv5

選取YOLOv5,一方面是因為從最終效果來看YOLOv5已經(jīng)相當優(yōu)秀,是發(fā)展的比較完備、使用比較廣泛的一個版本;而更重要的是YOLOv5的調(diào)用、訓練和預測都十分方便,為初學者提供了良好的練手工具。YOLOv5的另一個特點就是它為不同的設備需求和不同的應用場景提供了大小和參數(shù)數(shù)量不同的網(wǎng)絡

1395e702-b014-11ed-bfe3-dac502259ad0.png

如圖所示,大一點的模型比如YOLOv5l和YOLOv5x參數(shù)更多,在大規(guī)模的COCO數(shù)據(jù)集上有更高的預測準確率;而小模型比如YOLOv5n或YOLOv5s占空間更小,適合部署在移動設備上,且推理速度更快,適合于高幀 率視頻的實時檢測。

13bfeda4-b014-11ed-bfe3-dac502259ad0.png

二、鋼材表面缺陷數(shù)據(jù)集

東北大學(NEU)表面缺陷數(shù)據(jù)集,收集了熱軋帶鋼6種典型的表面缺陷,即軋內(nèi)垢(RS)、斑塊(Pa)、裂紋(Cr)、點蝕面(PS)、夾雜物(In)和劃痕(Sc)。該數(shù)據(jù)庫包括1800張灰度圖像:6種不同類型的典型表面缺陷各300個樣本。

下圖為6種典型表面缺陷的樣本圖像,每張圖像的原始分辨率為200×200像素。從圖中,我們可以清楚地觀察到類內(nèi)缺陷在外觀上存在較大差異,例如劃痕(最后一列)可能是水平劃痕、垂直劃痕和傾斜劃痕等。與此同時,類間缺陷也具有相似的特征,如滾積垢、裂紋和坑狀表面。

此外,由于光照和材料變化的影響,類內(nèi)缺陷圖像的灰度會發(fā)生變化??傊?,NEU表面缺陷數(shù)據(jù)庫包含兩個難題,即類內(nèi)缺陷存在較大外觀差異,類間缺陷具有相似方面,缺陷圖像受到光照和材料變化的影響。

13d023b8-b014-11ed-bfe3-dac502259ad0.png

對于缺陷檢測任務,數(shù)據(jù)集提供了標注,標注了每個圖像中缺陷的類別和位置。下圖展示了數(shù)據(jù)集上的一些檢測結(jié)果示例。對于每個缺陷,黃色框是表示其位置的邊界框,綠色標簽是類分數(shù)。

1429b9a0-b014-11ed-bfe3-dac502259ad0.png

三、YOLOv5數(shù)據(jù)格式

YOLOv5標簽文件中每一行的數(shù)據(jù)為class, x, y, w, h,其中class是該物體的類別,x,y是檢測框中心坐標,w,h是檢測框的寬和高。

1482c658-b014-11ed-bfe3-dac502259ad0.png

四、格式轉(zhuǎn)換voc2yolo

從網(wǎng)上獲取一些目標檢測的數(shù)據(jù)集資源標簽的格式都是VOC(xml格式)的,而YOLOv5訓練所需要的文件格式是YOLO(txt格式)的,這里就需要對xml格式的標簽文件轉(zhuǎn)換為txt文件。

同時訓練自己的YOLOv5檢測模型的時候,數(shù)據(jù)集需要劃分為訓練集和驗證集。這里提供了一份代碼將xml格式的標注文件轉(zhuǎn)換為txt格式的標注文件,并按比例劃分為訓練集和驗證集。

importxml.etree.ElementTreeasET
importos
fromosimportgetcwd
fromtqdmimporttqdm

classes=["crazing","inclusion","patches","pitted_surface","rolled-in_scale","scratches"]

defconvert(size,box):
dw=1./size[0]
dh=1./size[1]
x=(box[0]+box[1])/2.0
y=(box[2]+box[3])/2.0
w=box[1]-box[0]
h=box[3]-box[2]
x=x*dw
w=w*dw
y=y*dh
h=h*dh
return(x,y,w,h)

defconvert_annotation(image_id):
in_file='./xml/%s.xml'%(image_id)
out_file=open('./labels/%s.txt'%(image_id),'w')
tree=ET.parse(in_file)
root=tree.getroot()
size=root.find('size')
w=int(size.find('width').text)
h=int(size.find('height').text)

forobjinroot.iter('object'):
difficult=obj.find('Difficult').text
cls=obj.find('name').text
ifclsnotinclassesorint(difficult)==1:
continue
cls_id=classes.index(cls)
xmlbox=obj.find('bndbox')
b=(float(xmlbox.find('xmin').text),float(xmlbox.find('xmax').text),float(xmlbox.find('ymin').text),
float(xmlbox.find('ymax').text))
bb=convert((w,h),b)
out_file.write(str(cls_id)+""+"".join([str(a)forainbb])+'
')

if__name__=="__main__":
wd=getcwd()
print(wd)
ifnotos.path.exists('./labels/'):
os.makedirs('./labels/')
image_ids=os.listdir('./datasets')
forimage_idintqdm(image_ids):
convert_annotation(image_id.split('.')[0])

五、訓練

152b38f6-b014-11ed-bfe3-dac502259ad0.png

YOLOv5是通過yaml格式的配置文件來找到對應的訓練測試數(shù)據(jù),因此在訓練前需要對該文件進行簡單配置。

我們可以通過修改YOLOv5的配置文件來實現(xiàn),需要修改的配置文件有兩個,我們先復制一份data/coco.yaml,這里將其重命名為my_coco.yaml

在download前加上一個#注釋掉這段代碼

將train、val、test修改為自己的路徑,以train為例,NEU-DET/train/images/

將nc修改為數(shù)據(jù)的類別數(shù),如鋼材表面缺陷,故修改為6

將names修改自己數(shù)據(jù)的類名,如names: ["crazing", "inclusion", "patches", "pitted_surface", "rolled-in_scale", "scratches"]

154ff132-b014-11ed-bfe3-dac502259ad0.png

下一個需要修改的文件為模型配置文件,在models文件夾中有四個模型的配置文件:yolov5s.yaml、yolov5m.yaml、yolov5l.yaml和yolov5x.yaml,可以根據(jù)需要選擇相應的模型,這里以yolo5s.yaml為例,打開文件,修改文件中的nc為自己的類別數(shù)即可。

158eb21e-b014-11ed-bfe3-dac502259ad0.png

pythontrain.py--weightsweights/yolov5s.pt--cfgmodels/yolov5s.yaml--datadata/my_coco.yaml--epoch30--batch-size32
15e494ea-b014-11ed-bfe3-dac502259ad0.png

六、測試

訓練結(jié)束后,在runs/exp0文件夾下會自動生成訓練結(jié)果,其中包括模型權(quán)重、混淆矩陣、PR曲線等。

進行測試時,打開detect.py文件,修改source為檢測圖片的文件夾,運行之后,在run->detect中輸出檢測結(jié)果;或者通過如下方式進行測試。

pythondetect.py--source./data/images/example.jpg--weightsruns/exp0/weights/best.pt--conf-thres0.25
16184420-b014-11ed-bfe3-dac502259ad0.png

16542850-b014-11ed-bfe3-dac502259ad0.png

最終預測的結(jié)果如下,可以看出模型缺陷檢測效果。

1675208c-b014-11ed-bfe3-dac502259ad0.png







審核編輯:劉清

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

    關注

    161

    文章

    4320

    瀏覽量

    119994
  • Neu
    Neu
    +關注

    關注

    0

    文章

    2

    瀏覽量

    6717
  • python
    +關注

    關注

    55

    文章

    4767

    瀏覽量

    84375
  • voc
    voc
    +關注

    關注

    0

    文章

    101

    瀏覽量

    15654

原文標題:代碼實戰(zhàn):YOLOv5實現(xiàn)鋼材表面缺陷檢測

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

收藏 人收藏

    評論

    相關推薦

    YOLOv5】LabVIEW+YOLOv5快速實現(xiàn)實時物體識別(Object Detection)含源碼

    前面我們給大家介紹了基于LabVIEW+YOLOv3/YOLOv4的物體識別(對象檢測),今天接著上次的內(nèi)容再來看看YOLOv5。本次主要是和大家分享使用LabVIEW快速
    的頭像 發(fā)表于 03-13 16:01 ?2060次閱讀

    Yolov5算法解讀

    yolov5于2020年由glenn-jocher首次提出,直至今日yolov5仍然在不斷進行升級迭代。 Yolov5YOLOv5s、YOLOv5
    的頭像 發(fā)表于 05-17 16:38 ?8398次閱讀
    <b class='flag-5'>Yolov5</b>算法解讀

    YOLOv5】LabVIEW+TensorRT的yolov5部署實戰(zhàn)(含源碼)

    今天主要和大家分享在LabVIEW中使用純TensoRT工具包快速部署并實現(xiàn)yolov5的物體識別
    的頭像 發(fā)表于 08-21 22:20 ?1261次閱讀
    【<b class='flag-5'>YOLOv5</b>】LabVIEW+TensorRT的<b class='flag-5'>yolov5</b>部署實戰(zhàn)(含源碼)

    龍哥手把手教你學視覺-深度學習YOLOV5

    ,其目標檢測精度達到30%-50%(tensorflow中的ssd約為20%),足以說明該模型的分類檢測能力很強。將yolov5應用于工業(yè)外觀檢測將具有極大的前景,例如下圖這種復雜背景
    發(fā)表于 09-03 09:39

    怎樣使用PyTorch Hub去加載YOLOv5模型

    在Python>=3.7.0環(huán)境中安裝requirements.txt,包括PyTorch>=1.7。模型和數(shù)據(jù)集從最新的 YOLOv5版本自動下載。簡單示例此示例從
    發(fā)表于 07-22 16:02

    YOLOv5全面解析教程之目標檢測模型精確度評估

    ):分類器把負例正確的分類-預測為負例(yolov5中沒有應用到)  yolov5中沒有應用TN的原因: TN代表的是所有可能的未正確檢測到的邊界框。然而在yolo在目標檢測任務中,每
    發(fā)表于 11-21 16:40

    使用Yolov5 - i.MX8MP進行NPU錯誤檢測是什么原因?

    的時機(yolov5s 模型,輸入為 448x448 ~ 70ms)。 現(xiàn)在我正在嘗試使用 Yolov5(uint8 量化),但我嘗試使用不同的預訓練模型獲得相同的行為,在 CPU 上進行良好檢測,在
    發(fā)表于 03-31 07:38

    如何YOLOv5測試代碼?

    使用文檔“使用 YOLOv5 進行對象檢測”我試圖從文檔第 10 頁訪問以下鏈接(在 i.MX8MP 上部署 yolov5s 的步驟 - NXP 社區(qū)) ...但是這樣做時會被拒絕訪問。該文檔沒有說明需要特殊許可才能下載 tes
    發(fā)表于 05-18 06:08

    基于YOLOv5的目標檢測文檔進行的時候出錯如何解決?

    你好: 按Milk-V Duo開發(fā)板實戰(zhàn)——基于YOLOv5的目標檢測 安裝好yolov5環(huán)境,在執(zhí)行main.py的時候會出錯,能否幫忙看下 main.py: import torch
    發(fā)表于 09-18 07:47

    YOLOv5 7.0版本下載與運行測試

    支持實例分割了,從此YOLOv5實現(xiàn)了圖像分類、對象檢測、實例分割三個支持,從訓練到部署。
    的頭像 發(fā)表于 11-30 15:55 ?3652次閱讀

    使用旭日X3派的BPU部署Yolov5

    本次主要介紹在旭日x3的BPU中部署yolov5。首先在ubuntu20.04安裝yolov5,并運行yolov5并使用pytoch的pt模型文件轉(zhuǎn)ONNX。
    的頭像 發(fā)表于 04-26 14:20 ?823次閱讀
    使用旭日X3派的BPU部署<b class='flag-5'>Yolov5</b>

    YOLOv8+OpenCV實現(xiàn)DM碼定位檢測與解析

    YOLOv8是YOLO系列模型的最新王者,各種指標全面超越現(xiàn)有對象檢測與實例分割模型,借鑒了YOLOv5、YOLOv6、YOLOX等模型的設計優(yōu)點,全面提升改進
    的頭像 發(fā)表于 08-10 11:35 ?1219次閱讀
    <b class='flag-5'>YOLOv</b>8+OpenCV<b class='flag-5'>實現(xiàn)</b>DM碼定位<b class='flag-5'>檢測</b>與解析

    yolov5和YOLOX正負樣本分配策略

    整體上在正負樣本分配中,yolov7的策略算是yolov5和YOLOX的結(jié)合。因此本文先從yolov5和YOLOX正負樣本分配策略分析入手,后引入到YOLOv7的解析中。
    發(fā)表于 08-14 11:45 ?2165次閱讀
    <b class='flag-5'>yolov5</b>和YOLOX正負樣本分配策略

    YOLOv5網(wǎng)絡結(jié)構(gòu)訓練策略詳解

    前面已經(jīng)講過了Yolov5模型目標檢測和分類模型訓練流程,這一篇講解一下yolov5模型結(jié)構(gòu),數(shù)據(jù)增強,以及訓練策略。
    的頭像 發(fā)表于 09-11 11:15 ?2060次閱讀
    <b class='flag-5'>YOLOv5</b>網(wǎng)絡結(jié)構(gòu)訓練策略詳解

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

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