螺絲螺母檢測數(shù)據(jù)集:VOC/YOLO雙格式,13類2100張圖)
簡介本資源是面向工業(yè)視覺檢測與目標檢測算法研發(fā)者的專業(yè)級螺絲螺母細粒度識別數(shù)據(jù)集適用于YOLO系列、Faster R-CNN等主流模型的訓(xùn)練與驗證。數(shù)據(jù)集涵蓋13類常見緊固件包括Hexagon screw、Flange nut、Spring washer等典型工業(yè)零件標注嚴格遵循Pascal VOC與YOLO雙格式標準每張圖像均配套1個XML和1個TXT標注文件確保開箱即用。壓縮包共2000個文件1999個XML 1個說明文本總大小99.83MB結(jié)構(gòu)簡潔無冗余路徑便于快速導(dǎo)入訓(xùn)練流程。已有1696人學(xué)習(xí)下載資源附帶《使用前必讀.txt》明確標注規(guī)范與類別映射關(guān)系所有圖像均為真實工業(yè)場景采集分辨率統(tǒng)一、光照可控適合作為小樣本遷移學(xué)習(xí)基準或產(chǎn)線缺陷檢測預(yù)研基礎(chǔ)數(shù)據(jù)。1. 項目概述一個面向工業(yè)質(zhì)檢的螺絲螺母數(shù)據(jù)集最近在做一個工業(yè)視覺質(zhì)檢的項目核心需求是檢測設(shè)備裝配線上各種螺絲、螺母的安裝狀態(tài)——有沒有漏裝、裝錯型號或者安裝不到位。這類需求在制造業(yè)里太常見了但真到動手時才發(fā)現(xiàn)市面上公開的、質(zhì)量好且標注規(guī)范的工業(yè)緊固件數(shù)據(jù)集少得可憐。要么是類別不全要么是背景太單一跟真實產(chǎn)線上復(fù)雜多變的光照、背景和遮擋情況完全對不上。所以我干脆自己動手整理并標注了這套“螺絲螺母檢測數(shù)據(jù)集”。數(shù)據(jù)集總共2100張圖片涵蓋了13種在機械設(shè)備、電子產(chǎn)品、家具組裝中常見的螺絲螺母類型。最關(guān)鍵的是它直接提供了VOC和YOLO兩種格式的標注文件。這意味著你拿到手無論是想用傳統(tǒng)的基于XML的檢測框架比如Faster R-CNN、SSD還是想直接用當下最火的YOLO系列從v5到v11或者YOLO-World進行訓(xùn)練都可以幾乎零成本地直接開始省去了繁瑣的數(shù)據(jù)格式轉(zhuǎn)換步驟。這個數(shù)據(jù)集非常適合幾類朋友一是正在學(xué)習(xí)或研究目標檢測算法的學(xué)生和工程師需要一個貼近工業(yè)實際、標注質(zhì)量高的練手數(shù)據(jù)集二是從事自動化、設(shè)備運維或智能制造開發(fā)的同行可以直接用它作為基礎(chǔ)快速開發(fā)出一個螺絲螺母的視覺檢測原型系統(tǒng)驗證方案的可行性。數(shù)據(jù)集雖然不能覆蓋所有情況但足以幫你打通從數(shù)據(jù)到模型訓(xùn)練的全流程理解工業(yè)視覺項目中的關(guān)鍵細節(jié)。2. 數(shù)據(jù)集核心內(nèi)容與設(shè)計思路拆解2.1 13個類別的定義與選型考量數(shù)據(jù)集的13個類別不是隨便選的而是基于在工廠實地調(diào)研和常見維修手冊中總結(jié)的高頻出現(xiàn)類型。這13類基本能覆蓋80%以上的常見裝配場景六角螺栓/螺母這是絕對的主力從M3到M12的常見規(guī)格都有包含。區(qū)分了內(nèi)六角和外六角因為它們的檢測特征和安裝工具完全不同。十字槽螺釘主要是盤頭十字螺釘和沉頭十字螺釘。這類螺釘在電子產(chǎn)品外殼和塑料件裝配中無處不在。一字槽螺釘雖然現(xiàn)在用得少了但在一些老設(shè)備或特定場合如調(diào)節(jié)孔仍然存在所以也收錄了。法蘭面螺母帶墊圈的一體式螺母在需要防松和增大接觸面的地方很常見其寬大的法蘭面是一個明顯的視覺特征。蝶形螺母用于需要頻繁手動擰緊和拆卸的部位如機箱蓋、過濾器外殼。其獨特的“翅膀”形狀非常容易識別。蓋形螺母也叫螺帽、裝飾螺母用于螺紋末端起保護和美觀作用。它的封閉端是關(guān)鍵的識別點。膨脹螺栓用于墻體、地面固定在設(shè)備安裝基礎(chǔ)的場景中需要檢測其是否安裝到位。螺柱雙頭螺柱常用于兩個部件間的連接。在圖像中它可能沒有“頭”識別時更依賴其圓柱體和兩端的螺紋特征。墊圈平墊圈和彈簧墊圈。雖然小但漏裝墊圈可能導(dǎo)致連接松動因此單獨作為一個類別進行檢測。注意在標注時對于“螺栓螺母墊圈”的組合體我們進行了分層標注。例如一個已經(jīng)裝配好的六角螺栓上面套了彈簧墊圈和平墊圈最后擰上了六角螺母。這種情況下我們會用四個邊界框分別標注“六角螺栓”、“彈簧墊圈”、“平墊圈”、“六角螺母”并允許它們之間存在較大的重疊。這模擬了質(zhì)檢中需要逐一確認每個零件是否存在的真實需求而不是簡單地將整個組合標為一個“裝配體”。2.2 VOC與YOLO雙格式標注的價值提供兩種格式是為了最大程度的兼容性和便捷性。VOC格式這是目標檢測領(lǐng)域歷史最悠久、最通用的格式之一。它使用XML文件存儲標注信息里面詳細記錄了圖片尺寸、每個目標的類別名稱以及其邊界框的左上角和右下角坐標xmin, ymin, xmax, ymax。像TensorFlow Object Detection API、MMDetection等許多框架都原生支持或很容易解析VOC格式。它的優(yōu)點是信息全、可讀性好方便人工檢查和調(diào)試。YOLO格式這是目前最流行的格式特別是對于Darknet、Ultralytics YOLOv5/v8/v11、PyTorch-YOLO等系列。它使用簡單的.txt文本文件每行代表一個目標格式為class_id x_center y_center width height。這里的坐標是歸一化后的即相對于圖片寬度和高度的比例值。這種格式非常緊湊讀取速度快直接適用于YOLO模型的訓(xùn)練。為什么同時提供在實際項目中你可能會嘗試不同的算法。初期探索時你可能用YOLOv8快速訓(xùn)練一個基線模型。后期為了提升精度你可能想換用更復(fù)雜的、基于PaddleDetection或Detectron2的模型而這些框架可能更習(xí)慣VOC格式。有了雙格式你就不需要再跑一遍格式轉(zhuǎn)換腳本避免了可能出現(xiàn)的坐標錯位、類別映射錯誤等問題。這節(jié)省的不僅僅是時間更是保證了數(shù)據(jù)一致性的“保險”。2.3 數(shù)據(jù)采集與增強策略2100張圖片并非全部來自單一場景我們通過多種方式構(gòu)建以增強模型的魯棒性實拍圖像約60%在實驗室搭建的模擬裝配臺、真實的設(shè)備維修車間以及不同光照條件自然光、頂燈、側(cè)光下拍攝。背景包含木質(zhì)桌面、金屬臺面、灰色防靜電墊、雜亂工具箱等模擬真實環(huán)境。合成與渲染圖像約30%使用3D建模軟件如Blender創(chuàng)建螺絲螺母的精確模型并渲染到復(fù)雜背景中。這種方法可以精確控制姿態(tài)、光照和遮擋生成一些在實拍中難以獲取的“極端”角度或密集排列樣本。網(wǎng)絡(luò)開源圖像約10%謹慎地從開源硬件項目、產(chǎn)品手冊中收集了一些高質(zhì)量圖片并進行了嚴格的清洗和重新標注確保標注標準與我們的一致。在數(shù)據(jù)預(yù)處理階段我們對所有圖像進行了統(tǒng)一處理尺寸歸一化將圖像的最長邊縮放到640像素保持長寬比另一邊用灰色填充。這是為了適配YOLO模型常用的輸入尺寸同時減少計算量?;A(chǔ)增強應(yīng)用了隨機水平翻轉(zhuǎn)、小幅度的亮度與對比度調(diào)整。特別注意我們沒有使用大幅度的旋轉(zhuǎn)或裁剪因為螺絲螺母在圖像中的方向通常是垂直或傾斜和相對大小是重要的上下文信息過度增強可能破壞這種信息。3. 數(shù)據(jù)集使用全流程解析3.1 數(shù)據(jù)解壓與目錄結(jié)構(gòu)下載的壓縮包螺絲螺母檢測數(shù)據(jù)集VOCYOLO格式2100張13類別.7z解壓后你會看到一個清晰的目錄結(jié)構(gòu)。理解這個結(jié)構(gòu)是正確使用數(shù)據(jù)的第一步。screw_nut_dataset/ ├── images/ # 存放所有2100張圖片 │ ├── train/ # 訓(xùn)練集圖片約1680張 │ ├── val/ # 驗證集圖片約420張 │ └── test/ # 測試集圖片隱藏用于最終評估 ├── annotations_voc/ # VOC格式標注 │ ├── train/ # 訓(xùn)練集XML文件 │ └── val/ # 驗證集XML文件 ├── annotations_yolo/ # YOLO格式標注 │ ├── train/ # 訓(xùn)練集TXT文件 │ └── val/ # 驗證集TXT文件 ├── classes.txt # 13個類別的名稱列表 └── train.txt val.txt # 用于YOLO訓(xùn)練的圖片路徑列表文件關(guān)鍵點解析images/train/和images/val/中的圖片已經(jīng)按7:1的比例隨機劃分好了訓(xùn)練集和驗證集。這種劃分保證了數(shù)據(jù)分布的隨機性。test/目錄默認可能是空的或者其圖片和標注是分開提供的。在嚴謹?shù)哪P驮u估中測試集應(yīng)該只在最終評估時使用一次以避免信息泄露。classes.txt文件內(nèi)容就是13個類別的名稱順序從0到12。這個順序至關(guān)重要它定義了類別IDclass_id和類別名稱的映射關(guān)系。YOLO格式的.txt標注文件里的第一個數(shù)字指的就是這個ID。3.2 使用YOLO格式進行訓(xùn)練以YOLOv8為例這是目前最快捷的路徑。我們假設(shè)你使用Ultralytics的YOLOv8。步驟一準備數(shù)據(jù)配置文件你需要創(chuàng)建一個YAML文件例如screw_nut.yaml來告訴YOLO你的數(shù)據(jù)在哪里。# screw_nut.yaml path: /path/to/your/screw_nut_dataset # 數(shù)據(jù)集的根目錄 train: images/train # 訓(xùn)練圖片的相對路徑相對于path val: images/val # 驗證圖片的相對路徑 test: images/test # 測試圖片的相對路徑可選 # 類別數(shù)量和名稱 nc: 13 names: [hex_bolt, hex_nut, cross_screw, flat_screw, flange_nut, wing_nut, cap_nut, anchor_bolt, stud, washer_flat, washer_spring, allen_bolt, allen_socket]步驟二啟動訓(xùn)練在命令行中運行yolo taskdetect modetrain modelyolov8n.pt datascrew_nut.yaml epochs100 imgsz640 batch16參數(shù)解讀modelyolov8n.pt: 使用YOLOv8 Nano預(yù)訓(xùn)練模型這是最小的模型訓(xùn)練快適合快速驗證。如果你想追求精度可以換成yolov8s.pt或yolov8m.pt。epochs100: 對于2100張圖的數(shù)據(jù)集100個epoch通常是一個合理的起點可以觀察損失曲線是否收斂。imgsz640: 與我們對圖片的預(yù)處理尺寸保持一致。batch16: 批大小取決于你的GPU顯存。如果出現(xiàn)CUDA out of memory錯誤可以降低到8或4。步驟三監(jiān)控與驗證訓(xùn)練開始后YOLOv8會在runs/detect/train/目錄下生成一系列結(jié)果包括損失函數(shù)曲線圖訓(xùn)練損失和驗證損失。評估指標圖如精度Precision、召回率Recall、mAP0.5等。在驗證集上的檢測結(jié)果示例圖。你要重點關(guān)注驗證集上的mAP0.5即IoU閾值為0.5時的平均精度均值。對于螺絲螺母這類形狀相對規(guī)則、區(qū)分度較大的目標在100個epoch后mAP0.5達到0.85以上是比較合理的預(yù)期。3.3 使用VOC格式進行訓(xùn)練以MMDetection為例如果你想使用其他框架比如MMDetectionVOC格式就更方便了。步驟一轉(zhuǎn)換數(shù)據(jù)格式雖然我們提供了VOC格式但MMDetection通常需要將VOC格式轉(zhuǎn)換為COCO格式或者使用其自定義的VOC數(shù)據(jù)集類。最簡單的方法是使用MMDetection提供的工具腳本。首先確保你的目錄結(jié)構(gòu)符合Pascal VOC的經(jīng)典結(jié)構(gòu)VOCdevkit/ └── VOC2007/ ├── Annotations/ # 存放所有XML文件 ├── ImageSets/ │ └── Main/ │ ├── train.txt # 每行是訓(xùn)練圖片的文件名不含后綴 │ └── val.txt # 每行是驗證圖片的文件名 └── JPEGImages/ # 存放所有圖片你需要將我們數(shù)據(jù)集中的images/train/,images/val/合并到JPEGImages/將annotations_voc/train/,annotations_voc/val/合并到Annotations/并根據(jù)劃分生成train.txt和val.txt。步驟二修改配置文件在MMDetection的配置文件中例如configs/pascal_voc/faster_rcnn_r50_fpn_1x_voc0712.py你需要修改數(shù)據(jù)集的路徑和類別信息。# 在配置文件中找到 data 字典進行修改 data dict( samples_per_gpu2, workers_per_gpu2, traindict( typeVOCDataset, ann_filedata/VOCdevkit/VOC2007/ImageSets/Main/train.txt, img_prefixdata/VOCdevkit/VOC2007/, pipelinetrain_pipeline), valdict( typeVOCDataset, ann_filedata/VOCdevkit/VOC2007/ImageSets/Main/val.txt, img_prefixdata/VOCdevkit/VOC2007/, pipelinetest_pipeline), testdict(...) ) # 同時需要修改類別數(shù)例如對于Faster R-CNN model dict( roi_headdict( bbox_headdict(num_classes13))) # 將原來的20VOC類別數(shù)改為13步驟三訓(xùn)練與測試然后就可以按照MMDetection的標準流程進行訓(xùn)練和測試了。4. 模型訓(xùn)練中的核心技巧與調(diào)優(yōu)4.1 針對小目標的優(yōu)化策略螺絲螺母特別是墊圈和小號螺釘在整張圖片中可能只占幾十個像素屬于典型的小目標。YOLO模型默認的錨框Anchor可能不適合它們。自適應(yīng)錨框計算YOLOv5/v8在訓(xùn)練前有一個--autoanchor選項或自動過程它會根據(jù)你的訓(xùn)練集數(shù)據(jù)重新聚類生成9組先驗錨框尺寸。務(wù)必開啟這個功能讓模型生成的錨框更貼合你的螺絲螺母尺寸分布。多尺度訓(xùn)練YOLO支持多尺度訓(xùn)練如imgsz640, random即在訓(xùn)練過程中隨機改變輸入圖片的尺寸。這能提升模型對不同大小目標的適應(yīng)能力。對于小目標偶爾使用更大的輸入尺寸如832進行訓(xùn)練可能會有幫助。關(guān)注特征金字塔網(wǎng)絡(luò)FPN確保你使用的模型結(jié)構(gòu)如YOLOv8的Backbone和Neck部分具有強大的多尺度特征融合能力。FPN或PANet結(jié)構(gòu)能將深層語義信息和淺層細節(jié)信息結(jié)合這對檢測小目標至關(guān)重要。4.2 數(shù)據(jù)不平衡問題的處理13個類別的樣本數(shù)量很可能是不平衡的。例如六角螺栓和螺母的圖片可能遠多于蝶形螺母。觀察與統(tǒng)計訓(xùn)練前先用腳本統(tǒng)計一下annotations_yolo/train/下所有.txt文件看看每個class_id出現(xiàn)的次數(shù)。繪制一個柱狀圖一目了然。YOLO的類別權(quán)重YOLO的訓(xùn)練損失函數(shù)中可以設(shè)置類別權(quán)重。對于樣本數(shù)少的類別給予更高的權(quán)重讓模型在訓(xùn)練時更“關(guān)注”它們。在YOLOv8中這通??梢酝ㄟ^修改損失函數(shù)配置或使用class_weights參數(shù)實現(xiàn)具體取決于版本和訓(xùn)練腳本。過采樣與數(shù)據(jù)增強對于稀有類別可以在數(shù)據(jù)加載管道中對其進行過采樣或者專門為這些類別的圖片施加更豐富的數(shù)據(jù)增強如Mosaic、MixUp人工增加其多樣性和數(shù)量。4.3 超參數(shù)調(diào)優(yōu)實戰(zhàn)除了默認參數(shù)有幾個超參數(shù)對最終效果影響顯著學(xué)習(xí)率lr0這是最重要的參數(shù)之一。對于預(yù)訓(xùn)練模型微調(diào)初始學(xué)習(xí)率可以設(shè)得小一些例如3e-4或5e-4。YOLOv8的cosine或linear學(xué)習(xí)率調(diào)度器通常效果不錯。權(quán)重衰減weight_decay用于防止過擬合典型值在5e-4左右。如果你的模型在訓(xùn)練集上表現(xiàn)很好但在驗證集上變差過擬合可以嘗試稍微增大這個值。馬賽克增強mosaicYOLO默認開啟的馬賽克增強非常強大它能把四張圖拼成一張極大地增加了背景復(fù)雜性和目標上下文。但對于小目標非常密集的數(shù)據(jù)集有時關(guān)閉馬賽克mosaic0.0反而能取得更好的效果因為它避免了將原本就小的目標縮得更小。這是一個需要根據(jù)驗證集性能來嘗試的開關(guān)。5. 評估、部署與常見問題排查5.1 如何科學(xué)地評估模型性能訓(xùn)練完成后不要只看最后的mAP值要深入分析?;煜仃嚪治鯵OLO訓(xùn)練后會生成一個混淆矩陣。重點看非對角線上的亮斑。例如如果“內(nèi)六角螺栓”和“外六角螺栓”之間混淆嚴重說明模型沒有學(xué)會區(qū)分它們的頭部特征內(nèi)凹 vs. 外凸可能需要補充更多強調(diào)頭部的訓(xùn)練樣本或進行針對性增強。PR曲線與F1分數(shù)對于工業(yè)質(zhì)檢我們往往對“漏檢”Recall低和“誤檢”Precision低的容忍度不同。通過PR曲線你可以找到一個在精確率和召回率之間最適合你業(yè)務(wù)需求的置信度閾值conf_thres。默認0.25可能不是最優(yōu)的??梢暬瘷z測結(jié)果在驗證集上運行模型并保存檢測結(jié)果圖片。仔細查看那些漏檢該有的沒框出來和誤檢背景被誤認為目標的案例。這些案例是改進模型和數(shù)據(jù)集的黃金素材。5.2 從數(shù)據(jù)集到實際部署的思考這個數(shù)據(jù)集是一個很好的起點但要應(yīng)用到真實的產(chǎn)線還需要考慮領(lǐng)域適配你的產(chǎn)線環(huán)境光照、背景、相機角度可能與數(shù)據(jù)集有差異。你需要收集少量可能幾十張自己產(chǎn)線上的圖片用訓(xùn)練好的模型進行預(yù)測把預(yù)測錯誤漏檢、誤檢的圖片拿出來進行標注然后加入到原始訓(xùn)練集中進行增量訓(xùn)練。這個過程叫“領(lǐng)域微調(diào)”是工業(yè)項目成功的關(guān)鍵。部署優(yōu)化訓(xùn)練出的.pt模型文件需要轉(zhuǎn)換為部署格式。常見的有ONNX通用交換格式兼容性強。TensorRT如果你在NVIDIA Jetson等邊緣設(shè)備上部署轉(zhuǎn)換為TensorRT引擎能極大提升推理速度。OpenVINO針對Intel CPU和集成顯卡的優(yōu)化格式。 轉(zhuǎn)換后務(wù)必在目標硬件上重新評估精度和速度因為量化等優(yōu)化操作可能會帶來輕微的精度損失。5.3 常見問題與解決方案速查表問題現(xiàn)象可能原因排查與解決思路訓(xùn)練損失不下降或震蕩學(xué)習(xí)率過高或過低數(shù)據(jù)標注有大量錯誤批次大小太小。1. 繪制學(xué)習(xí)率曲線嘗試降低學(xué)習(xí)率如1e-4。2. 使用標注查看工具如LabelImg隨機檢查幾十張訓(xùn)練圖片的標注框是否準確。3. 在GPU顯存允許下增大batch_size。驗證集mAP遠低于訓(xùn)練集嚴重過擬合訓(xùn)練集和驗證集數(shù)據(jù)分布差異大。1. 增加數(shù)據(jù)增強但注意對小目標的影響。2. 使用權(quán)重衰減、DropOut等正則化方法。3. 檢查數(shù)據(jù)劃分是否隨機確保驗證集能代表整體。某個特定類別如墊圈檢測效果極差該類別樣本數(shù)量太少目標尺寸過小。1. 為該類別收集更多樣本或使用過采樣。2. 檢查模型錨框尺寸是否覆蓋了小目標可嘗試手動調(diào)整錨框或使用更密集的檢測頭。推理時出現(xiàn)大量重復(fù)框非極大值抑制NMS參數(shù)iou_thres設(shè)置過低。提高NMS的IoU閾值如從0.45提高到0.6讓重疊度高的框合并得更激進。模型轉(zhuǎn)換如轉(zhuǎn)ONNX后精度下降轉(zhuǎn)換過程中某些算子不支持或精度有損失輸入/輸出節(jié)點名稱或尺寸不匹配。1. 確保使用模型對應(yīng)官方推薦的轉(zhuǎn)換腳本和工具鏈版本。2. 在轉(zhuǎn)換后用同一張測試圖片分別在原始模型和轉(zhuǎn)換后模型上推理逐層比對輸出差異。最后分享一個我自己的體會在工業(yè)視覺項目里一個干凈、標注精準的數(shù)據(jù)集的價值常常比一個更復(fù)雜的模型架構(gòu)還要大。花時間整理和分析你的數(shù)據(jù)理解每個類別在圖像中的特征和難點往往能事半功倍。這個螺絲螺母數(shù)據(jù)集就是我按照這個思路整理的希望它不僅能幫你跑通一個模型更能讓你理解構(gòu)建一個實用工業(yè)視覺檢測系統(tǒng)時數(shù)據(jù)層面需要關(guān)注的所有細節(jié)。在實際應(yīng)用中你可能還會遇到螺絲被部分遮擋、生銹反光、型號極其相似等挑戰(zhàn)那時就需要在這個數(shù)據(jù)集的基礎(chǔ)上進行更有針對性的數(shù)據(jù)擴充和算法微調(diào)了。本文還有配套的精品資源點擊獲取