基於深度學習的零售櫃商品識別系統(網頁版+YOLOv8/v7/v6/v5程式碼+訓練資料集)

逗逗班学Python發表於2024-04-05

摘要:在本部落格中,我們深入研究了基於YOLOv8/v7/v6/v5的零售櫃商品檢測系統。核心上,我們採用了YOLOv8作為主要的檢測框架,並整合了YOLOv7、YOLOv6、YOLOv5演算法的特點和優勢,進行了細緻的效能指標對比。我們詳細介紹了國內外在零售櫃商品檢測領域的研究現狀、如何處理資料集、演算法原理、以及模型構建與訓練的程式碼實現。特別地,本文展示瞭如何設計一個基於Streamlit的互動式Web應用介面,該介面支援影像、影片以及實時攝像頭進行零售櫃商品檢測。使用者可以透過該介面上傳不同的訓練模型(YOLOv8/v7/v6/v5)進行推理預測,同時介面的佈局和功能設定都可以方便地進行修改和定製。為了讓讀者能夠更加方便地復現和應用我們的研究成果,本部落格還附帶了完整的網頁設計、深度學習模型程式碼和訓練資料集的下載連結,以便於大家進行學習和研究。我們相信,透過本文的介紹,讀者能夠獲得關於如何構建一個高效、準確的零售櫃商品檢測系統的深入理解和實踐經驗。

@

目錄
  • 1. 網頁功能與效果
  • 2. 緒論
    • 2.1 研究背景及意義
    • 2.2 國內外研究現狀
    • 2.3 要解決的問題及其方案
      • 2.3.1 要解決的問題
      • 2.3.2 解決方案
    • 2.4 博文貢獻與組織結構
  • 3. 資料集處理
  • 4. 原理與程式碼介紹
    • 4.1 YOLOv8演算法原理
    • 4.2 模型構建
    • 4.3 訓練程式碼
  • 5. 實驗結果與分析
    • 5.1 訓練曲線
    • 5.2 PR曲線圖
    • 5.3 YOLOv8/v7/v6/v5對比實驗
  • 6. 系統設計與實現
    • 6.1 系統架構概覽
    • 6.2 系統流程
  • 程式碼下載連結
  • 7. 結論與未來工作

➷點選跳轉至文末所有涉及的完整程式碼檔案下載頁☇


完整資源中包含資料集及訓練程式碼,環境配置與介面中文字、圖片、logo等的修改方法請見影片,專案完整檔案下載請見演示與介紹影片的簡介處給出:➷➷➷
演示與介紹影片https://www.bilibili.com/video/BV1RJ4m1L7MR/
YOLOv8/v7/v6/v5專案合集下載:https://mbd.pub/o/bread/mbd-ZZ2Xm5hq
YOLOv8和v5專案完整資源下載:https://mbd.pub/o/bread/ZZ2XmZpt
YOLOv7專案完整資源下載:https://mbd.pub/o/bread/ZZ2Xmpdr
YOLOv6專案完整資源下載:https://mbd.pub/o/bread/ZZ2Xm5Zp

若您想獲得博文中涉及的實現完整全部資原始檔(包括測試圖片、影片,py, UI檔案,訓練資料集、訓練程式碼、介面程式碼等),這裡已打包上傳至博主的麵包多平臺,見可參考部落格與影片,已將所有涉及的檔案同時打包到裡面,點選即可執行,完整檔案截圖如下:

基於深度學習的零售櫃商品識別系統(網頁版+YOLOv8/v7/v6/v5程式碼+訓練資料集)

1. 網頁功能與效果

(1)開啟攝像頭實時檢測:本系統允許使用者透過網頁直接開啟攝像頭,實現對實時影片流中零售櫃商品的檢測。系統將自動識別並分析畫面中的零售櫃商品,並將檢測結果實時顯示在使用者介面上,為使用者提供即時的反饋。

基於深度學習的零售櫃商品識別系統(網頁版+YOLOv8/v7/v6/v5程式碼+訓練資料集)

(2)選擇圖片檢測:使用者可以上傳本地的圖片檔案到系統中進行零售櫃商品檢測。系統會分析上傳的圖片,識別出圖片中的零售櫃商品,並在介面上展示帶有零售櫃商品標籤和置信度的檢測結果,讓使用者能夠清晰地瞭解到每個零售櫃商品狀態。

基於深度學習的零售櫃商品識別系統(網頁版+YOLOv8/v7/v6/v5程式碼+訓練資料集)

(3)選擇影片檔案檢測:系統支援使用者上傳影片檔案進行零售櫃商品檢測。上傳的影片將被系統逐幀分析,以識別和標記影片中每一幀的零售櫃商品。使用者可以觀看帶有零售櫃商品檢測標記的影片,瞭解影片中零售櫃商品的變化。

基於深度學習的零售櫃商品識別系統(網頁版+YOLOv8/v7/v6/v5程式碼+訓練資料集)

(4)選擇不同訓練好的模型檔案:系統整合了多個版本的YOLO模型(如YOLOv8/v7/v6/v5),使用者可以根據自己的需求選擇不同的模型進行零售櫃商品檢測。這一功能使得使用者能夠靈活地比較不同模型的表現,以選擇最適合當前任務的模型。

基於深度學習的零售櫃商品識別系統(網頁版+YOLOv8/v7/v6/v5程式碼+訓練資料集)

在本章節中,我們詳細介紹了基於YOLOv8/v7/v6/v5的零售櫃商品檢測系統的互動式Web應用介面及其核心功能。實時攝像頭零售櫃商品檢測允許使用者開啟攝像頭進行即時的零售櫃商品識別,極大地提高了在零售和倉儲管理中的實用性。對於需要分析靜態影像或影片的情況,系統提供了圖片和影片檔案檢測功能,使用者可透過簡單的操作上傳本地檔案並快速獲取檢測結果。考慮到不同的應用場景可能需要不同版本的YOLO模型,我們加入了模型選擇功能,讓使用者能夠根據實際需求靈活選擇YOLOv8/v7/v6/v5中的任一版本進行檢測。

為了最佳化使用者體驗,本系統支援檢測畫面展示功能,允許檢測結果與原始畫面同時或單獨顯示,並提供了一個下拉框以便使用者可以單獨標記並展示特定目標的檢測結果。所有的檢測結果都會在頁面上的一個表格中結果展示與儲存,其中詳細列出了每個識別物件的類別和置信度等資訊。使用者還可以根據需求動態調整檢測演算法的置信度閾值IOU閾值,以獲得最佳的檢測效果。此外,為了方便使用者記錄和分析,系統提供了一個功能,允許一鍵將檢測結果匯出為csv檔案。最後,對於需要儲存檢測畫面的場景,系統還支援將標記後的圖片、影片、攝像頭畫面結果匯出為avi格式的影像檔案

我們的Web應用透過採用簡潔直觀的使用者介面設計,結合下拉選單、滑塊、按鈕等UI元素,確保了功能操作的直觀易懂。整個零售櫃商品檢測過程無需複雜配置,使用者僅需幾步簡單操作即可完成從檔案選擇到結果匯出的全過程,無論是商業應用還是個人使用,本系統都能滿足廣泛的零售櫃商品檢測需求,同時提升使用者的互動體驗和系統的檢測效率。


2. 緒論

2.1 研究背景及意義

隨著零售行業的數字化轉型,零售櫃商品檢測技術成為了這一過程中不可或缺的一部分。零售櫃商品檢測,簡而言之,就是利用計算機視覺技術來識別和分類影像或影片中的零售櫃商品專案。這項技術在零售、庫存管理、自動結賬系統等眾多領域都有廣泛的應用,它不僅能提高效率,降低人工成本,還能增強消費者體驗。隨著深度學習技術的快速發展,基於YOLO(You Only Look Once)系列演算法的零售櫃商品檢測在準確率和檢測速度上都取得了顯著的提升。

近年來,深度學習在目標檢測領域的應用取得了突破性進展,尤其是YOLO系列演算法因其高效的實時檢測能力而備受關注。YOLOv8,透過最佳化網路結構和訓練策略,進一步提高了檢測速度和準確性。這對於需要實時處理大量影像和影片資料的零售櫃商品檢測系統來說,是一個巨大的進步。近期的研究表明,透過引入注意力機制、改進的損失函式和資料增強技術,可以有效地提高模型的泛化能力和檢測效能。

在國內外,零售櫃商品檢測技術的研究不斷深入,眾多研究人員和機構致力於探索更高效、更準確的檢測方法。一些研究聚焦於演算法的最佳化和創新,比如透過深度學習模型的整合、多尺度檢測和跨域學習來提高檢測的準確性和魯棒性。另外,隨著資料集的不斷更新和擴充,訓練出的模型能更好地理解和識別多樣化的零售櫃商品專案,這對於提高零售櫃商品檢測系統的實用性和可靠性至關重要。

面對如此迅速發展的技術,行業也提出了新的需求和挑戰。例如,如何在保證高準確性的同時實現高效的實時檢測,如何處理複雜背景下的零售櫃商品檢測,以及如何提高模型在不同場景下的泛化能力。為了解決這些問題,研究者和工程師們不斷探索,比如最佳化演算法的計算效率,設計更為複雜的網路結構,以及採用更先進的訓練技術。

2.2 國內外研究現狀

近年來,零售櫃商品檢測技術在演算法最佳化、網路結構創新以及效能提升等方面取得了顯著的進展。基於深度學習的目標檢測演算法,特別是YOLO系列,在實現高效準確的零售櫃商品檢測方面扮演著核心角色。YOLOv5、YOLOv7[1]、YOLOv7[2]、YOLOv8,不斷地在速度和準確性之間尋找最優平衡,透過引入更復雜的網路結構和更有效的訓練機制來提高檢測效能。

YOLOv8透過改進網路架構和最佳化損失函式,顯著提高了對小物體的檢測能力,這對於零售櫃商品檢測尤為重要。同時,研究者透過引入自注意力機制和特徵融合技術,進一步增強了模型的特徵提取能力,這使得模型在複雜背景下的零售櫃商品檢測表現更加出色。

基於深度學習的零售櫃商品識別系統(網頁版+YOLOv8/v7/v6/v5程式碼+訓練資料集)

Transformer[3]模型在自然語言處理領域取得的巨大成功激發了將其應用於計算機視覺的興趣。ViT(Vision Transformer)透過將影像切割成多個小塊(patch)並將它們輸入到Transformer模型中,展示了與CNN模型相媲美甚至更好的效能,尤其是在需要全域性理解的複雜場景中。注意力機制,作為Transformer模型的核心,也被廣泛應用於其他目標檢測模型中,以增強模型對影像重要部分的關注能力。

在經典的目標檢測框架中,Faster R-CNN[4]透過引入區域建議網路(RPN)大大提高了檢測速度,而RetinaNet解決了類別不平衡問題,引入了Focal Loss來提高模型對難以檢測目標的識別能力。DETR(Detection Transformer)和之後的進化版本如Deformable DETR進一步將Transformer架構與目標檢測任務結合,透過直接預測目標的方式,避免了複雜的預處理步驟和後處理步驟,實現了更加簡潔和高效的檢測流程。

Glod-YOLO透過全域性最佳化目標檢測的區域性特徵提取,顯著提高了對小目標的檢測能力。而MMDetection[5]作為一個開放原始碼的目標檢測工具箱,支援多種最新的檢測模型,為研究人員和開發者提供了一個靈活且強大的平臺來探索和實驗不同的目標檢測演算法。

2.3 要解決的問題及其方案

2.3.1 要解決的問題

在構建基於YOLOv8/v7/v6/v5的零售櫃商品檢測系統時,我們面對的挑戰及其解決方案是多方面的,旨在提供一個高效、準確、且使用者友好的零售櫃商品識別工具。本系統特別注重實現高準確度的檢測與實時處理能力、環境適應性和模型泛化能力、直觀高效的使用者互動介面,以及優秀的資料處理與儲存效率。此外,考慮到未來的技術進步和需求變化,系統的可擴充套件性和維護性也是設計中的關鍵考量。

  1. 零售櫃商品檢測的準確性和速度:考慮到零售櫃商品的多樣性及其在實際環境中的表現,系統需要能夠準確快速地識別不同零售櫃商品的細微特徵差異。YOLOv8作為核心模型,結合YOLOv7、v6、v5的優點,透過深度學習的技術框架PyTorch實現,提供了實時處理的同時保持高準確率的能力。多模型的比較與整合進一步增強了系統在不同場景下的應用靈活性和準確性。

  2. 環境適應性和模型泛化能力:零售櫃商品在不同的光照、背景及天氣條件下的檢測挑戰著模型的泛化能力。透過引入先進的資料增強技術和在多樣化資料集上進行訓練,本系統的模型能夠適應各種環境變化,提高準確性。

  3. 使用者互動介面的直觀性和功能性:基於Streamlit的網頁設計,結合CSS美化,提供了一個直觀且功能豐富的使用者介面。使用者可以輕鬆開啟攝像頭實時檢測、選擇圖片或影片進行檢測、切換不同的模型檔案,以及調整檢測演算法的引數,所有這些都在一個易於導航的介面中實現。

  4. 資料處理能力和儲存效率:在處理大量影像和影片資料的同時,系統採用了高效的資料處理流程和最佳化的儲存解決方案。這確保了識別的實時性,並提高了長期資料管理和查詢的效率。

  5. 系統的可擴充套件性和維護性:採用模組化的設計和最新的軟體工程實踐,確保了系統易於維護和升級。這為未來整合新技術、新增新功能或支援更多零售櫃商品檢測提供了強大的靈活性。

2.3.2 解決方案

針對構建基於YOLOv8/v7/v6/v5的零售櫃商品檢測系統的複雜需求,我們細化了一系列的技術策略和解決方案,確保系統既能高效準確地完成零售櫃商品檢測任務,同時也提供使用者友好的操作介面和強大的資料處理能力。以下是我們的具體解決方案:

  1. 深度學習模型的選擇和最佳化
  • 模型架構:我們採用了YOLOv8作為主要的深度學習模型,考慮到其在速度和準確度之間的優秀平衡。YOLOv8的高效性特別適用於實時零售櫃商品檢測任務,而YOLOv7、v6、v5的整合則進一步增強了系統的適用性和準確性,滿足不同場景的需求。
  • 資料增強:為了增強模型的泛化能力,我們採用了一系列資料增強技術,如隨機裁剪、縮放、旋轉、色彩調整等,這些技術能夠模擬零售櫃商品在多變環境下的表現,從而提高模型對實際應用場景的適應性。
  • 遷移學習:利用在大規模資料集上預訓練的模型作為基礎,透過遷移學習技術,對特定於零售櫃商品的小型資料集進行微調。這不僅加快了模型的訓練速度,也提高了識別效能。
  1. 技術框架和開發工具
  • PyTorch框架:我們選擇PyTorch作為開發深度學習模型的主要框架,得益於其提供的靈活程式設計環境和強大的GPU加速能力,PyTorch極大地加速了模型的開發和迭代過程。
  • Streamlit網頁設計:基於Streamlit框架設計的網頁應用,使得構建互動式Web介面變得簡單而高效。結合CSS進行美化,提升了使用者介面的視覺效果和操作體驗。
  • PyCharm開發環境:使用PyCharm作為主要的整合開發環境(IDE),它提供了程式碼編寫、除錯和測試的全面支援,大大提高了開發效率和程式碼質量。
  1. 功能實現和系統設計
  • 多輸入源支援:系統設計支援多種輸入源,包括靜態圖片、影片檔案和實時攝像頭捕獲,以適應不同使用場景的需求。
  • 模型切換功能:實現了使用者可以動態選擇和切換不同預訓練模型的功能,增加了系統的靈活性和適用範圍。
  • 引數調整與結果展示:使用者可透過介面調整檢測演算法的引數,如置信度閾值和IOU閾值,並在網頁上實時檢視檢測結果和分析報告。
  1. 資料處理和儲存策略
  • 高效資料處理:採用PyTorch的資料載入器和預處理機制,確保了資料處理的高效性,滿足了實時零售櫃商品檢測的需求。
  • 智慧資料儲存:設計了高效的資料儲存方案,對識別結果和歷史資料進行智慧組織和索引,方便使用者進行查詢和分析。

2.4 博文貢獻與組織結構

在這篇關於基於YOLOv8/v7/v6/v5的零售櫃商品檢測系統的部落格中,我們深入探討了一系列與零售櫃商品檢測技術相關的核心方面。透過詳盡的文獻綜述、嚴謹的資料集處理、精選的演算法比較與最佳化、以及基於Streamlit的友好網頁介面設計,本文力圖為讀者提供一個全面且深入的視角,以理解和應用最新的零售櫃商品檢測技術。以下是本文的主要貢獻:

  1. 全面的文獻綜述:我們提供了一篇綜合性的文獻綜述,涵蓋了目前零售櫃商品檢測領域內廣泛使用的演算法,如YOLOv8/v7/v6/v5,以及其他相關技術的進展,為讀者提供了一個堅實的學術和技術基礎。

  2. 精確的資料集處理:詳細介紹了資料集的選擇、預處理和增強方法,這對於提升模型訓練的效果和準確性至關重要。我們分享的技術細節和策略,可以幫助讀者更好地理解如何處理和利用資料集,以最佳化零售櫃商品檢測效能。

  3. 演算法選擇與最佳化:透過比較YOLOv8/v7/v6/v5等演算法的效能,本文不僅展示了每種演算法的優勢和侷限,還詳述瞭如何針對特定的零售櫃商品檢測任務進行演算法選擇和最佳化。

  4. 友好的網頁介面設計:基於Streamlit,我們設計了一個美觀且使用者友好的網頁介面,使得非技術使用者也能輕鬆地進行零售櫃商品檢測。介面設計的細節和實現邏輯為開發者提供了實用的參考。

  5. 演算法效果的對比分析:本文不僅介紹了YOLO系列演算法在零售櫃商品檢測任務上的應用,還提供了一系列實驗結果,對比了不同演算法版本之間的效能差異,為讀者選擇適合自己需求的模型提供了依據。

  6. 完整的資源分享:分享了完整的資料集、預處理程式碼、模型訓練與推理程式碼等資源,使得讀者能夠實際操作和體驗零售櫃商品檢測技術,從而加深理解和應用。

後續章節的組織結構如下: 緒論:介紹研究背景、目的和本文的主要貢獻;演算法原理:詳細介紹YOLOv8/v7/v6/v5等演算法的工作原理及其在零售櫃商品檢測中的應用;資料集處理:討論使用的資料集及其預處理、增強方法。程式碼介紹:提供模型訓練和預測的詳細程式碼說明,包括環境搭建、引數配置和執行步驟。實驗結果與分析:展示不同模型在零售櫃商品檢測任務上的實驗結果,並進行比較分析。系統設計與實現:介紹基於Streamlit的零售櫃商品檢測系統的設計與實現細節。結論與未來工作:總結本文的研究成果,並討論未來的研究方向和潛在的改進空間。


3. 資料集處理

在本研究中,我們致力於開發一個基於YOLOv8/v7/v6/v5演算法的高效零售櫃商品檢測系統。為了實現這一目標,我們構建了一個包含5422張圖片的綜合資料集,該資料集被劃分為訓練集、驗證集和測試集,其中包含3796張訓練圖片,1084張驗證圖片,以及542張測試圖片。這樣的分佈確保了模型在訓練過程中有充分的資料量來學習識別各種零售櫃商品,並透過驗證集和測試集對模型的泛化能力和效能進行了準確評估。博主使用的類別如下:

Chinese_name = {"Complan Classic Creme": "經典奶油",
                "Complan Kesar Badam": "藏紅花杏仁",
                "Complan Nutrigro Badam Kheer": "杏仁布丁",
                "Complan Pista Badam": "開心果杏仁",
                "Complan Royal Chocolate": "皇家巧克力",
                "EY AAAM TULSI TURMERIC FACEWASH50G": "芒果洗面奶",
                "EY ADVANCED GOLDEN GLOW PEEL OFF M. 50G": "金色面膜50G",
                "EY ADVANCED GOLDEN GLOW PEEL OFF M. 90G": "金色面膜90G",
                "EY EXF WALNUT SCRUB AYR 200G": "核桃磨砂200G",
                "EY HALDICHANDAN FP HF POWDER 25G": "檀香粉25G",
                "EY HYD-EXF WALNT APR SCRUB AYR100G": "核桃杏仁磨砂100G",
                "EY HYDR - EXF WALNUT APRICOT SCRUB 50G": "核桃杏仁磨砂50G",
                "EY NAT GLOW ORANGE PEEL OFF AY 90G": "橙子面膜90G",
                "EY NATURALS NEEM FACE WASH AY 50G": "印楝洗面奶",
                "EY RJ CUCUMBER ALOEVERA FACEPAK50G": "黃瓜面膜",
                "EY TAN CHOCO CHERRY PACK 50G": "巧克力櫻桃面膜",
                "EY_SCR_PURIFYING_EXFOLTNG_NEEM_PAPAYA_50G": "印楝木瓜面膜",
                "Everyuth Naturals Body Lotion Nourishing Cocoa 200ml": "可可乳液",
                "Everyuth Naturals Body Lotion Rejuvenating Flora 200ml": "植物乳液",
                "Everyuth Naturals Body Lotion Soothing Citrus 200ml": "柑橘乳液",
                "Everyuth Naturals Body Lotion Sun Care Berries SPF 15 200ml": "防曬漿果乳液",
                "Glucon D Nimbu Pani 1.KG": "檸檬水",
                "Glucon D Regular 1.KG": "常規",
                "Glucon D Regular 2.KG": "常規2KG",
                "Glucon D Tangy orange 1.KG": "濃橙",
                "Nutralite ACHARI MAYO 300g-275g-25g-": "泡菜蛋黃醬",
                "Nutralite ACHARI MAYO 30g": "泡菜蛋黃醬小",
                "Nutralite CHEESY GARLIC MAYO 300g-275g-25g-": "芝士蒜蛋黃醬",
                "Nutralite CHEESY GARLIC MAYO 30g": "芝士蒜蛋黃醬小",
                "Nutralite CHOCO SPREAD CALCIUM 275g": "巧克力塗醬",
                "Nutralite DOODHSHAKTHI PURE GHEE 1L": "純酥油",
                "Nutralite TANDOORI MAYO 300g-275g-25g-": "炭烤蛋黃醬",
                "Nutralite TANDOORI MAYO 30g": "炭烤蛋黃醬小",
                "Nutralite VEG MAYO 300g-275g-25g-": "素蛋黃醬",
                "Nycil Prickly Heat Powder": "痱子粉",
                "SUGAR FREE GOLD 500 PELLET": "無糖金500粒",
                "SUGAR FREE GOLD POWDER 100GM": "無糖金粉100G",
                "SUGAR FREE GOLD SACHET 50 SUGAR FREE GOLD SACHET 50": "無糖金小包",
                "SUGAR FREE GOLD SACHET 50": "無糖金小包50",
                "SUGAR FREE GRN 300 PELLET": "無糖綠300粒",
                "SUGAR FREE NATURA 500 PELLET": "無糖自然500粒",
                "SUGAR FREE NATURA DIET SUGAR 80GM": "無糖自然瘦糖80G",
                "SUGAR FREE NATURA DIET SUGAR": "無糖自然瘦糖",
                "SUGAR FREE NATURA SACHET 50": "無糖自然小包",
                "SUGAR FREE NATURA SWEET DROPS": "無糖自然甜滴",
                "SUGAR FREE NATURAL DIET SUGAR 80GM": "無糖自然瘦糖80G",
                "SUGAR FREE NATURA_ POWDER_CONC_100G": "無糖自然粉100G",
                "SUGAR FREE_GRN_ POWDER_CONC_100G": "無糖綠粉100G",
                "SUGARLITE POUCH 500G": "糖精袋500G"}

針對資料集,我們採取了一系列預處理措施,以最佳化訓練過程和提高模型效能。所有圖片均經過自動定向處理,以保證影像的正確朝向,並剔除了EXIF資訊中的定向標記,這有助於消除因圖片方向變化帶來的潛在混亂。為了適配深度學習模型的輸入需求,每張圖片都被調整為640x640畫素的統一大小。這種統一尺寸的處理不僅有利於保持網路結構的一致性和簡化計算流程,還能夠確保在不同尺寸的影像中特徵提取的有效性。

基於深度學習的零售櫃商品識別系統(網頁版+YOLOv8/v7/v6/v5程式碼+訓練資料集)

透過對資料集分佈的細緻分析,我們發現標籤類別的分佈呈現多樣化的情況。如所展示的資料集分佈圖中所示,我們可以看到類別分佈的直方圖、邊界框位置分佈的熱圖,以及邊界框的寬高比分佈圖。這些分析圖表明,資料集中零售櫃商品例項在類別上分佈廣泛,且在影像中的位置分佈相對均勻。這種均衡的分佈有助於防止模型過分偏向於資料集中的某些特定類別或區域,從而提升了模型在不同環境和不同零售櫃商品上的檢測能力。邊界框寬高比的分佈也顯示了零售櫃商品在形狀上的多樣性,這對於訓練模型以準確識別不同形狀和大小的零售櫃商品是至關重要的。

基於深度學習的零售櫃商品識別系統(網頁版+YOLOv8/v7/v6/v5程式碼+訓練資料集)

總而言之,我們精心構建和處理的資料集是本研究工作的基礎,它不僅支撐了模型訓練和評估的需求,還為深入探索零售櫃商品檢測演算法提供了豐富的素材。


4. 原理與程式碼介紹

4.1 YOLOv8演算法原理

YOLOv8作為目標檢測領域的一項重要進展,其演算法原理體現了最新的技術革新和效能最佳化。這一模型不僅在傳統的YOLO架構上做出了改進,還引入了多項新技術以提高檢測的準確性和速度。

基於深度學習的零售櫃商品識別系統(網頁版+YOLOv8/v7/v6/v5程式碼+訓練資料集)

首先,YOLOv8透過引入更加精細的網路架構設計,增強了模型對小目標的識別能力,同時也提高了對背景噪聲的抑制能力。特別是,它採用了多尺度特徵提取技術,能夠捕獲不同大小目標的特徵。這一特徵對於血細胞等細小目標的檢測尤其重要,因為它們在影像中的表現可能非常微小,易於被忽視。而YOLOv8透過在不同層次上進行特徵融合,能夠提升對這些細小目標的檢測效率。

在損失函式的設計上,YOLOv8採用了創新的 'Distribution Focal Loss',這是一種針對分類誤差的改進。傳統的Focal Loss主要是為了解決分類任務中的類別不平衡問題,而'Distribution Focal Loss'則進一步,透過調整分類機率分佈來最佳化。這種新型的損失函式不僅能夠更加精確地反映類別之間的差異,還可以有效減少模型在面臨不平衡資料時的過擬合現象。

YOLOv8還採用了Task Aligned Assigner,這是一種新穎的任務對齊分配機制。它透過對標註框與預測框之間的對齊程度進行評分,來決定哪些標註框應當被分配給特定的錨點。Task Aligned Assigner的引入有效減少了標註與預測之間的誤差,提升了模型的準確性。

在模型的訓練過程中,YOLOv8的設計者還特別考慮了訓練資料的質量和效率問題。這一方面體現在如何更有效地利用訓練資料來提升模型效能。YOLOv8採用了一系列資料增強技術來模擬各種可能的檢測場景,增強模型在複雜環境下的泛化能力。資料增強技術的應用,使得YOLOv8能夠在多樣化的資料上獲得更穩定和魯棒的學習效果。

綜上所述,YOLOv8在網路架構、損失函式設計、標註框分配機制以及資料增強技術等多個方面都進行了創新和最佳化,這些改進讓它在目標檢測領域的表現超越了以往的版本。YOLOv8不僅能夠提供高精度的檢測結果,而且在處理速度和穩健性方面也表現出色,為實時目標檢測系統的實現和應用提供了強有力的技術支援。

4.2 模型構建

在這一部分,我們將深入探討用於構建零售櫃商品檢測模型的關鍵程式碼段,重點介紹程式碼的功能以及如何協同工作以實現高效的零售櫃商品檢測。下面是程式碼的詳細解讀:

首先,程式碼的基礎構建在一系列重要的Python庫之上。使用cv2即OpenCV庫,一個開源的計算機視覺和機器學習軟體庫,為我們處理影像和影片提供支援。接下來,我們利用torch,這是一個靈活的深度學習研究平臺,它提供了豐富的API來支援模型的設計、訓練和驗證。QtFusion.models中的Detector類是一個抽象基礎類,用於定義零售櫃商品檢測模型應有的行為。我們還引入了datasets.label_name中的Chinese_name字典,這使得模型識別出的類別可以與人類友好的中文名稱相關聯。最後,從ultralytics包中,我們引入了YOLO類和select_device功能,分別用於載入YOLO模型和確定模型執行的硬體環境,無論是在CPU還是GPU上。

import cv2
import torch
from QtFusion.models import Detector
from datasets.label_name import Chinese_name
from ultralytics import YOLO
from ultralytics.utils.torch_utils import select_device

在程式碼中,device變數用於定義模型訓練和推理將使用的計算裝置。如果GPU可用(torch.cuda.is_available()),則使用GPU加速計算;如果不可用,回退到CPU。ini_params字典包含了模型執行的配置引數,例如物件檢測的置信度閾值(conf)和非極大值抑制(Non-Maximum Suppression, NMS)的IOU閾值(iou)。這些引數可以在模型預測時調整,以最佳化模型的效能。

device = "cuda:0" if torch.cuda.is_available() else "cpu"
ini_params = {
    'device': device,
    'conf': 0.25,
    'iou': 0.5,
    'classes': None,
    'verbose': False
}

然後,我們定義了count_classes函式,count_classes函式為我們提供了對檢測到的零售櫃商品類別進行計數的能力,這有助於我們瞭解資料集中每個類別的分佈情況,以及模型在不同類別上的表現。

def count_classes(det_info, class_names):
    count_dict = {name: 0 for name in class_names}
    for info in det_info:
        class_name = info['class_name']
        if class_name in count_dict:
            count_dict[class_name] += 1
    count_list = [count_dict[name] for name in class_names]
    return count_list

在YOLOv8v5Detector類的實現中,我們首先在初始化函式中定義了模型和圖片處理所需的引數。透過設定裝置型別,我們為模型提供了在不同硬體上執行的靈活性。同時,置信度和IOU(交併比)閾值的設定對於調節模型預測的嚴格性至關重要——置信度決定了模型有多確信一個檢測框內確實包含某個物件,而IOU閾值則用於在非極大值抑制過程中判斷兩個檢測框是否指向同一個物件。

class YOLOv8v5Detector(Detector):
    def __init__(self, params=None):
        super().__init__(params)
        self.model = None
        self.img = None
        self.names = list(Chinese_name.values())
        self.params = params if params else ini_params
	def load_model(self, model_path):
	    self.device = select_device(self.params['device'])
	    self.model = YOLO(model_path)
	    names_dict = self.model.names
	    self.names = [Chinese_name[v] if v in Chinese_name else v for v in names_dict.values()]
	    self.model(torch.zeros(1, 3, *[self.imgsz] * 2).to(self.device).type_as(next(self.model.model.parameters())))
	def preprocess(self, img):
	    self.img = img
	    return img
	
	def predict(self, img):
	    results = self.model(img, **ini_params)
	    return results
	
	def postprocess(self, pred):
	    results = []
	    for res in pred[0].boxes:
	        for box in res:
	            class_id = int(box.cls.cpu())
	            bbox = box.xyxy.cpu().squeeze().tolist()
	            bbox = [int(coord) for coord in bbox]
	            result = {
	                "class_name": self.names[class_id],
	                "bbox": bbox,
	                "score": box.conf.cpu().squeeze().item(),
	                "class_id": class_id,
	            }
	            results.append(result)
	    return results
	    
    def set_param(self, params):
        self.params.update(params)

load_model函式中實現了模型的載入過程。這裡我們呼叫select_device函式選擇最適合的計算裝置,並將YOLO模型載入到指定的裝置上。模型的載入不僅包括了權重和結構,還包括了為模型預熱的過程,這是一種最佳化技術,透過先在模型上執行一些虛擬資料來提升實際執行時的效率。隨後,我們看到predict函式負責將預處理後的影像送入模型進行預測。這個函式是實現零售櫃商品檢測的核心,它使用我們之前載入和預熱的模型來對輸入影像進行處理,並返回檢測結果。後處理過程在postprocess函式中實現,該函式解析模型的預測結果,提取和格式化邊界框資訊和類別置信度。每個預測結果都被轉換成一個字典,包含了類別名稱、邊界框座標、置信度分數以及類別ID,便於進一步的分析和視覺化。

整個程式碼結構清晰地分為了模型的載入、影像的預處理、預測以及預測結果的後處理,體現了實際深度學習應用中的典型流程。該流程確保了從輸入原始影像到最終的手勢檢測結果的轉換,既高效又易於理解和修改。

4.3 訓練程式碼

在這部分部落格內容中,我們將逐步詳細剖析訓練零售櫃商品檢測模型的關鍵程式碼流程,揭示其結構與功能,並討論如何應用於實際訓練任務中。以下表格詳細介紹了YOLOv8模型訓練中使用的一些重要超引數及其設定:

超引數 設定 說明
學習率(lr0 0.01 決定了模型權重調整的步長大小,在訓練初期有助於快速收斂。
學習率衰減(lrf 0.01 控制訓練過程中學習率的降低速度,有助於模型在訓練後期細緻調整。
動量(momentum 0.937 加速模型在正確方向上的學習,並減少震盪,加快收斂速度。
權重衰減(weight_decay 0.0005 防止過擬合,透過在損失函式中新增正則項減少模型複雜度。
熱身訓練週期(warmup_epochs 3.0 初始幾個週期內以較低的學習率開始訓練,逐漸增加到預定學習率。
批次大小(batch 16 每次迭代訓練中輸入模型的樣本數,影響GPU記憶體使用和模型效能。
輸入影像大小(imgsz 640 模型接受的輸入影像的尺寸,影響模型的識別能力和計算負擔。

環境設定與模型載入:我們的程式碼從匯入作業系統介面庫os開始,這對檔案路徑操作至關重要。接著,引入torch,標誌著我們的訓練將依賴於PyTorch深度學習框架——當前深度學習領域的主要力量之一。與此同時,yaml庫的引入讓我們能夠解析和寫入YAML格式的配置檔案,這種格式因其可讀性和簡潔性而在機器學習專案中廣泛使用。YOLO類的引入意味著我們將使用Ultralytics提供的YOLO實現,這是基於YOLO的最新研究改進的高效版本。而QtFusion.path模組中的abs_path函式保證了我們能夠處理相對和絕對路徑,這在專案中管理檔案時是一個常見需求。

import os
import torch
import yaml
from ultralytics import YOLO  # 用於載入YOLO模型
from QtFusion.path import abs_path  # 用於獲取檔案的絕對路徑

在選擇執行訓練任務的裝置時,程式碼考慮瞭如果可用,首選GPU(因為torch.cuda.is_available()為True時,device設定為"0",即第一個GPU裝置)。GPU用於加速深度學習的訓練過程,但如果不可用,它會回退到CPU。

device = "0" if torch.cuda.is_available() else "cpu"

資料集準備:工作程序數和批次大小是影響資料載入和訓練效率的重要引數。較少的工作程序可能導致資料載入成為瓶頸,而較小的批次大小可能導致硬體資源利用不充分。在這裡,我們選擇了一個工作程序和每批8個樣本的設定,這是出於避免GPU記憶體溢位的考慮。透過構建資料配置檔案的路徑,這裡我們看到了一個考慮跨平臺相容性的細節:路徑分隔符被統一為UNIX風格(正斜槓),這有助於避免Windows和UNIX系統間的差異。

workers = 1  # 工作程序數
batch = 8  # 每批處理的影像數量
data_name = "GoodsRecognition"
data_path = abs_path(f'datasets/{data_name}/{data_name}.yaml', path_type='current')
unix_style_path = data_path.replace(os.sep, '/')

讀取並解析YAML檔案中的資料配置是準備訓練的前置步驟,這通常包含了關於資料集結構和路徑的資訊。這些資訊對於訓練的成功執行至關重要,因為它們告訴訓練流程資料在哪裡,以及如何獲取。更新YAML檔案以確保path正確反映了資料所在的位置,確保當YAML檔案被移動或者資料目錄變更時,配置仍然有效。

directory_path = os.path.dirname(unix_style_path)
with open(data_path, 'r') as file:
    data = yaml.load(file, Loader=yaml.FullLoader)

if 'path' in data:
    data['path'] = directory_path
    with open(data_path, 'w') as file:
        yaml.safe_dump(data, file, sort_keys=False)

訓練模型:最後,程式碼使用YOLO類來載入預先訓練好的YOLOv8權重。隨後,透過呼叫train方法啟動訓練過程,其中傳入了多個訓練引數如資料集配置檔案路徑、工作程序數量、影像尺寸、訓練週期數、批次大小以及訓練任務名稱等。

model = YOLO(abs_path('./weights/yolov5nu.pt', path_type='current'), task='detect')  # 載入預訓練的YOLOv8模型
# model = YOLO('./weights/yolov5.yaml', task='detect').load('./weights/yolov5nu.pt')  # 載入預訓練的YOLOv8模型
# Training.
results = model.train(  # 開始訓練模型
    data=data_path,  # 指定訓練資料的配置檔案路徑
    device=device,  # 自動選擇進行訓練
    workers=workers,  # 指定使用2個工作程序載入資料
    imgsz=640,  # 指定輸入影像的大小為640x640
    epochs=120,  # 指定訓練100個epoch
    batch=batch,  # 指定每個批次的大小為8
    name='train_v5_' + data_name  # 指定訓練任務的名稱
)
model = YOLO(abs_path('./weights/yolov8n.pt'), task='detect')  # 載入預訓練的YOLOv8模型
results2 = model.train(  # 開始訓練模型
    data=data_path,  # 指定訓練資料的配置檔案路徑
    device=device,  # 自動選擇進行訓練
    workers=workers,  # 指定使用2個工作程序載入資料
    imgsz=640,  # 指定輸入影像的大小為640x640
    epochs=120,  # 指定訓練100個epoch
    batch=batch,  # 指定每個批次的大小為8
    name='train_v8_' + data_name  # 指定訓練任務的名稱
)

這段程式碼展示瞭如何利用ultralytics YOLO庫中的高階介面簡化模型訓練流程。使用者只需要提供相關引數,便可以輕鬆開始模型的訓練工作,而無需手動編寫繁瑣的訓練迴圈和資料管理程式碼。


5. 實驗結果與分析

5.1 訓練曲線

在對YOLOv8模型進行訓練的過程中,對損失函式和效能指標的分析是理解模型學習效果的關鍵。從訓練損失影像中,我們可以獲得模型訓練的直觀反饋。影像呈現了幾個關鍵指標的變化,包括訓練與驗證的損失,以及精度和召回率等效能度量。

基於深度學習的零售櫃商品識別系統(網頁版+YOLOv8/v7/v6/v5程式碼+訓練資料集)

觀察訓練和驗證損失圖,即train/box_loss、train/cls_loss、train/obj_loss和相應的驗證損失圖val/box_loss、val/cls_loss、val/obj_loss,我們可以看到隨著訓練週期(epoch)的增加,損失函式的值穩步下降並趨於平穩。這表明模型在學習過程中逐步提高了對零售櫃商品檢測任務的理解,並且能夠更加準確地預測目標的類別和位置。損失函式值的下降同時在訓練集和驗證集上出現,這意味著模型沒有出現過擬合現象,即模型並沒有僅僅記住訓練資料,而是真正學習到了通用的特徵。另外,平滑處理的結果線(smooth)顯示了損失函式隨訓練週期變化的平滑趨勢,有助於我們識別和忽略可能的噪聲和異常值。平滑曲線的穩定性進一步印證了模型訓練過程的健壯性。

在效能度量方面,metrics/precision和metrics/recall指標的圖表展示了模型在正樣本識別上的效能。精確度圖表顯示了模型在確定正樣本時的準確程度,而召回率圖表則反映了模型在識別所有正樣本上的表現。兩個指標均隨著訓練週期的增加而顯著提高,接近1.0的值,說明模型具有很高的檢測精度和覆蓋率。

最後,metrics/mAP50和metrics/mAP50-95圖表展現了模型的平均精度(mAP)。mAP是目標檢測中的標準效能指標,其中mAP@0.5衡量的是在50%IOU閾值時模型的效能,而mAP@0.5:0.95則是在IOU從50%至95%的閾值範圍內計算得出的平均精度。這兩個指標的高值表明模型在各種重疊閾值下都能保持較高的效能,強調了模型對於不同大小和形狀目標的魯棒檢測能力。

綜上所述,透過損失和效能指標的詳細分析,我們可以得出結論,YOLOv8模型在訓練過程中顯示出了優秀的學習能力和高度的泛化性。隨著損失函式值的減少,以及精度和召回率的提高,模型展現了對零售櫃商品檢測任務的高度精確和可靠性。

5.2 PR曲線圖

Precision-Recall (PR) 曲線是評估分類模型效能的重要工具,特別是在資料集中存在類別不平衡的情況下。透過圖示,我們可以分析模型在所有類別上的平均精確度(mAP)。

基於深度學習的零售櫃商品識別系統(網頁版+YOLOv8/v7/v6/v5程式碼+訓練資料集)

從圖中可見,精確度(Precision)指模型預測為正樣本的例項中真正為正樣本的比例,而召回率(Recall)則是指模型正確識別的正樣本數量佔所有真實正樣本數量的比例。理想情況下,我們希望模型能夠同時達到高精確度和高召回率,但在實際應用中這兩個指標往往是一種權衡。

可以看出大部分曲線位於高精確度和高召回率的區域,這表示模型在大多數情況下能夠同時保持高精確度和高召回率。曲線下方的陰影部分反映了模型在不同召回率水平下的精確度變化範圍,而藍色實線則顯示了平均表現趨勢。在曲線右端,我們注意到即使召回率接近1.0時,精確度也維持在一個相對高的水平,這表明模型能夠識別出幾乎所有的正樣本,同時保持較少的誤判。

此外,曲線上方的橫線標記了模型在IOU為0.5時的平均精確度(0.972 mAP@0.5),這是一個異常高的結果,說明模型在這一標準下有著卓越的識別能力。在目標檢測任務中,mAP@0.5是一個常用的評估標準,它表明即便是在較低的IOU閾值下,模型也能夠展現出優異的檢測效能。

綜合這些觀察結果,我們可以得出結論,該零售櫃商品檢測模型表現出了極高的識別準確性和可靠性。其高mAP值指出,在大多數情況下,即使在不同的置信閾值下,模型都能保持一致的高效能。這種高效能的檢測模型對於實際應用來說至關重要,特別是在需要精確識別和準確分類大量零售櫃商品的零售業務場景中。

5.3 YOLOv8/v7/v6/v5對比實驗

(1)實驗設計
本實驗旨在評估和比較YOLOv5、YOLOv6、YOLOv7和YOLOv8幾種模型在零售櫃商品目標檢測任務上的效能。為了實現這一目標,博主分別使用使用相同的資料集訓練和測試了這四個模型,從而可以進行直接的效能比較。該資料集包含零售櫃商品的影像。本文將比較分析四種模型,旨在揭示每種模型的優缺點,探討它們在工業環境中實際應用的場景選擇。

模型 影像大小 (畫素) mAPval 50-95 CPU ONNX 速度 (毫秒) A100 TensorRT 速度 (毫秒) 引數數量 (百萬) FLOPs (十億)
YOLOv5nu 640 34.3 73.6 1.06 2.6 7.7
YOLOv8n 640 37.3 80.4 0.99 3.2 8.7
YOLOv6N 640 37.5 - - 4.7 11.4
YOLOv7-tiny 640 37.4 - - 6.01 13.1

(2)度量指標

  • F1-Score:F1-Score 作為衡量模型效能的重要指標,尤其在處理類別分佈不均的資料集時顯得尤為關鍵。它透過結合精確率與召回率,提供了一個單一的度量標準,能夠全面評價模型的效能。精確率衡量的是模型在所有被標記為正例中真正屬於正例的比例,而召回率則關注於模型能夠識別出的真正正例佔所有實際正例的比例。F1-Score透過兩者的調和平均,確保了只有當精確率和召回率同時高時,模型的效能評估才會高,從而確保了模型對於正例的預測既準確又完整。
  • mAP(Mean Average Precision):在目標檢測任務中,Mean Average Precision(mAP)是評估模型效能的重要標準。它不僅反映了模型對單個類別的識別精度,而且還考慮了所有類別的平均表現,因此提供了一個全域性的效能度量。在計算mAP時,模型對於每個類別的預測被單獨考慮,然後計算每個類別的平均精度(AP),最後這些AP值的平均數形成了mAP。
名稱 YOLOv5nu YOLOv6n YOLOv7-tiny YOLOv8n
mAP 0.911 0.874 0.885 0.882
F1-Score 0.77 0.82 0.84 0.85

(3)實驗結果分析

在本次零售櫃商品檢測任務的實驗中,我們對YOLOv5nu、YOLOv6n、YOLOv7-tiny和YOLOv8n四個模型的效能進行了細緻的比較和分析。實驗結果從兩個關鍵效能指標——平均精度均值(mAP)和F1-Score——出發,為我們提供了關於模型效能的直觀認識。

首先,從mAP指標來看,YOLOv5nu以0.911的分數領先其他版本,表明其在我們的零售櫃商品檢測任務中能夠以較高的置信度準確檢測出不同的零售櫃商品。mAP是反映模型檢測準確性的重要指標,YOLOv5nu的表現優異可能得益於其網路結構和訓練過程中的最佳化策略,這使得它能夠更好地學習和區分零售櫃商品影像中的特徵。

在F1-Score的比較中,YOLOv8n以0.85的分數位居第一,顯示了它在精確率和召回率之間取得了最佳平衡。F1-Score是精確率和召回率的調和平均數,當一個模型在避免漏檢和誤檢之間取得較好平衡時,其F1-Score較高。YOLOv8n可能在訓練過程中更有效地避免了過擬合,或者其使用的資料增強技術更適合處理我們資料集中的多樣性。

基於深度學習的零售櫃商品識別系統(網頁版+YOLOv8/v7/v6/v5程式碼+訓練資料集)

儘管YOLOv6n在mAP上的表現略遜於YOLOv5nu和YOLOv7-tiny,但其F1-Score表現出色,達到了0.82。這可能是因為YOLOv6n的設計更側重於提高模型在識別正樣本時的準確性,尤其是在不平衡資料集中。YOLOv7-tiny雖然在mAP和F1-Score上的表現都不錯,但其較小的模型尺寸和計算效率更適合需要快速檢測的場景。

不同版本的YOLO在設計和實現時有著不同的側重點,YOLOv5nu可能在網路架構上做了最佳化以適應我們的資料集,而YOLOv8n可能在處理資料時採用了更高效的策略。每個版本的效能表現還受到了訓練資料集、超引數設定、訓練時長等多種因素的影響。在實際應用中,我們需要根據任務的具體需求、資源限制以及效能要求來決定使用哪個版本的YOLO模型。而對於模型開發者而言,這些結果提示了在模型設計和訓練策略上可能需要進一步的最佳化與調整。


6. 系統設計與實現

6.1 系統架構概覽

在這篇部落格中,我們將深入剖析基於YOLO系列演算法的零售櫃商品檢測系統的系統架構設計。我們的設計理念是構建一個易於操作、高效準確且具有良好使用者體驗的系統,該系統能夜快速識別並記錄各類零售櫃商品資訊。以下是我們系統架構的主要組成部分:

基於深度學習的零售櫃商品識別系統(網頁版+YOLOv8/v7/v6/v5程式碼+訓練資料集)
  1. 模型載入與預處理:系統的架構核心是YOLOv8v5Detector類。該類利用預先訓練的YOLO模型引數(通常是.pt檔案),來初始化並執行零售櫃商品識別任務。YOLOv8v5Detector內部封裝了影像處理與推理預測的全過程,其中load_model方法負責載入模型權重,確保模型能夠被正確地應用於後續的檢測任務。

  2. 配置管理:使用者介面的互動由Detection_UI類負責管理,它整合了整個系統的使用者互動邏輯。透過側邊欄配置,使用者可以自主設定模型引數(包括model_typeconf_thresholdiou_threshold),以調整檢測的準確度和靈敏度。使用者還可以上傳自己的模型檔案,系統會透過load_model_file方法載入並使用這些自定義模型進行檢測。

  3. 影像和影片處理:針對不同的輸入源——攝像頭、圖片檔案或影片檔案,Detection_UI類中的process_camera_or_file方法負責處理這些輸入。這包括從攝像頭捕獲實時影像、讀取並解碼上傳的檔案,以及呼叫模型進行手勢識別。

  4. 結果展示與日誌記錄:檢測結果的記錄和展示透過ResultLoggerLogTable類來實現。ResultLogger類用於實時更新和展示檢測結果,而LogTable類則為結果提供了持久化儲存的能力,允許使用者儲存和回顧歷史檢測資料。

  5. UI設計:在整個系統設計中,我們還貫徹了顏色的隨機分配策略來提高檢測結果的辨識度。系統為每個檢測到的類別動態分配了顏色,這一過程是透過Detection_UI類中的colors屬性進行管理的

  6. 實時更新和反饋:系統設計了進度條和動態更新機制,透過st.progressst.image等Streamlit元件,實時反饋模型處理進度和結果,提高了使用者的互動體驗。

6.2 系統流程

在我們的基於YOLOv8/v7/v6/v5的零售櫃商品檢測系統中,整個檢測流程體現了精細的設計思路和對使用者體驗的深刻理解。下面,我們將以程式流程圖的形式,詳細介紹這一系統流程的各個步驟。

基於深度學習的零售櫃商品識別系統(網頁版+YOLOv8/v7/v6/v5程式碼+訓練資料集)
  1. 系統初始化

    • 載入模型:系統啟動時,YOLOv8v5Detector 類的例項化過程中呼叫 load_model 方法,載入訓練好的YOLO模型權重。
    • 隨機顏色生成:為了區分不同的零售櫃商品類別,系統為每個類別分配了隨機顏色,儲存在 colors 陣列中。
  2. 介面設定

    • 頁面配置:透過 setup_page 方法配置頁面佈局和標題。
    • 側邊欄配置:使用 setup_sidebar 方法在側邊欄中提供模型設定、置信度和IOU閾值的調整滑動條。
  3. 使用者互動

    • 檔案上傳:使用者可以上傳自定義的圖片或影片檔案,或者選擇實時攝像頭捕獲的畫面。
    • 模型選擇:使用者可以選擇使用預設模型或上傳自定義模型檔案。
  4. 檢測執行

    • 處理輸入源:依據使用者的選擇,process_camera_or_file 方法決定是處理來自攝像頭的實時畫面還是上傳的檔案。
    • 影像預處理:調整影像大小以符合模型的輸入要求,並執行其他必要的影像處理步驟。
    • 模型預測:輸入預處理後的影像到YOLO模型,獲取檢測結果。
  5. 結果展示與記錄

    • 檢測結果展示frame_process 方法展示每一幀的檢測結果,包括繪製邊界框和顯示標籤。
    • 結果記錄ResultLogger 類記錄檢測結果,並使用 LogTable 類將結果儲存到CSV檔案。
  6. 使用者反饋

    • 結果篩選與顯示:使用者可以在側邊欄中使用下拉選單篩選特定目標,系統將透過 toggle_comboBox 方法顯示選中目標的詳細資訊。
    • 動態結果更新:系統實時更新檢測結果,並在介面中呈現。
  7. 系統結束

    • 停止檢測:使用者可以隨時透過“停止”按鈕結束檢測流程。
    • 日誌儲存LogTable 類在系統結束時儲存所有的檢測日誌,並提供匯出功能。

此檢測流程的設計充分考慮了使用者操作的便利性、系統的實時響應和結果的準確記錄。無論是在技術深度還是操作易用性上,我們都力求為使用者提供一個滿意的使用體驗。透過這樣的流程設計,不僅能夠快速定位和識別各類零售櫃商品,還能為使用者留下詳盡的檢測記錄,助力使用者在後續進行資料分析和管理決策。


程式碼下載連結

如果您希望獲取部落格中提及的完整資源包,包含測試圖片、影片、Python檔案(*.py)、網頁配置檔案、訓練資料集、程式碼及介面設計等,可訪問博主在麵包多平臺的上傳內容。相關的部落格和影片資料提供了所有必要檔案的下載連結,以便一鍵執行。完整資源的預覽如下圖所示:

基於深度學習的零售櫃商品識別系統(網頁版+YOLOv8/v7/v6/v5程式碼+訓練資料集)

資源包中涵蓋了你需要的訓練測試資料集、訓練測試程式碼、UI介面程式碼等完整資源,完整專案檔案的下載連結可在下面的影片簡介中找到➷➷➷

演示與介紹影片https://www.bilibili.com/video/BV1RJ4m1L7MR/
YOLOv8/v7/v6/v5專案合集下載:https://mbd.pub/o/bread/mbd-ZZ2Xm5hq
YOLOv8和v5專案完整資源下載:https://mbd.pub/o/bread/ZZ2XmZpt
YOLOv7專案完整資源下載:https://mbd.pub/o/bread/ZZ2Xmpdr
YOLOv6專案完整資源下載:https://mbd.pub/o/bread/ZZ2Xm5Zp

基於深度學習的零售櫃商品識別系統(網頁版+YOLOv8/v7/v6/v5程式碼+訓練資料集)

完整安裝執行教程:

這個專案的執行需要用到Anaconda和Pycharm兩個軟體,下載到資原始碼後,您可以按照以下連結提供的詳細安裝教程操作即可執行成功,如仍有執行問題可私信博主解決:

  1. Pycharm和Anaconda的安裝教程https://deepcode.blog.csdn.net/article/details/136639378

軟體安裝好後需要為本專案新建Python環境、安裝依賴庫,並在Pycharm中設定環境,這幾步採用下面的教程可選線上安裝(pip install直接線上下載包)或離線依賴包(博主提供的離線包直接裝)安裝兩種方式之一:

  1. Python環境配置教程https://deepcode.blog.csdn.net/article/details/136639396(2,3方法可選一種);
  2. 離線依賴包的安裝指南https://deepcode.blog.csdn.net/article/details/136650641(2,3方法可選一種);

如使用離線包方式安裝,請下載離線依賴庫,下載地址:https://pan.baidu.com/s/1uHbU9YzSqN0YP_dTHBgpFw?pwd=mt8u (提取碼:mt8u)。


7. 結論與未來工作

本文深入研究並實踐了基於YOLOv8/v7/v6/v5的深度學習模型在零售櫃商品檢測領域的應用,成功開發了一個整合了這些前沿演算法的零售櫃商品檢測系統。透過精確的演算法對比與最佳化,我們不僅顯著提高了零售櫃商品檢測的準確性和實時性,而且利用Streamlit構建了一個直觀、美觀且使用者友好的Web應用,極大地簡化了使用者的零售櫃商品檢測流程,以適應實際應用場景的需求。

透過嚴格的實驗驗證,本研究提出的方法在零售櫃商品檢測的準確率和處理速度方面均表現出色。此外,文章詳盡地提供了完備的資料集處理流程、模型訓練與預測的程式碼,以及基於Streamlit的系統設計與實施細節,為其他研究人員和開發者提供了極大的便利,便於復現和進一步研究。

儘管在零售櫃商品檢測領域已取得顯著成果,但考慮到任務的複雜性,我們仍面臨一些挑戰和改進空間。未來工作的方向包括:

  • 模型最佳化:我們將繼續深入挖掘網路架構和最佳化策略,例如運用神經網路架構搜尋(NAS)技術,以進一步提升模型的效能和計算效率。
  • 多模態融合:考慮引入語音、文字等其他模態的資訊,運用多模態學習的方法進行零售櫃商品檢測,實現對場景的全方位理解。
  • 跨域適應性:為了提升模型在不同人群和環境下的適應性,我們計劃研究跨文化、跨年齡組的零售櫃商品檢測技術,並採用領域自適應技術增強模型的泛化能力。
  • 使用者互動體驗:我們旨在進一步改善系統的使用者介面和互動設計,使之更加符合人性化和智慧化的趨勢,滿足更廣泛使用者的需求。
  • 實際應用擴充:我們也計劃將零售櫃商品檢測技術推廣至更多實際應用場景,如線上教育、遠端會議、智慧客服等,發掘其在社會和經濟領域的廣泛價值。

零售櫃商品檢測作為一個充滿活力的研究領域,隨著技術的不斷革新和應用領域的持續擴充套件,未來基於深度學習的零售櫃商品檢測系統無疑將在人機互動、社會安全、醫療健康等更多領域扮演關鍵角色,為社會發展帶來更深遠的影響。


  1. Yusof, Najiha‘Izzaty Mohd, et al. "Assessing the performance of YOLOv5, YOLOv6, and YOLOv7 in road defect detection and classification: a comparative study." Bulletin of Electrical Engineering and Informatics 13.1 (2024): 350-360. ↩︎

  2. Zhao, Dewei, et al. "A Small Object Detection Method for Drone-Captured Images Based on Improved YOLOv7." Remote Sensing 16.6 (2024): 1002. ↩︎

  3. Bietti, Alberto, et al. "Birth of a transformer: A memory viewpoint." Advances in Neural Information Processing Systems 36 (2024). ↩︎

  4. Qin, Han, et al. "An Improved Faster R-CNN Method for Landslide Detection in Remote Sensing Images." Journal of Geovisualization and Spatial Analysis 8.1 (2024): 2. ↩︎

  5. Eijnden, J., et al. "The first mm detection of a neutron star high-mass X-ray binary." arXiv preprint arXiv:2308.06021 (2023). ↩︎

相關文章