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