基于yolov11的棉花品種分類檢測系統python源碼+pytorch模型+評估指標曲線+精美GUI界面

【算法介紹】

基于YOLOv11的棉花品種分類檢測系統是一種高效、準確的農作物品種識別工具。該系統利用YOLOv11深度學習模型,能夠實現對棉花主要品種,包括樹棉(G. arboreum)、海島棉(G. barbadense)、草棉(G. herbaceum)和陸地棉(G. hirsutum)的自動識別與分類。

YOLOv11作為YOLO系列的最新版本,引入了多尺度特征融合、注意力機制等先進技術,顯著提升了檢測精度和速度。這使得該系統能夠在復雜的農田環境中,快速準確地識別出不同品種的棉花。

該系統通過采集棉花的圖像數據,利用YOLOv11模型進行訓練和優化,使其能夠學習到各種棉花品種的特征。在實際應用中,系統只需對棉花植株或棉花的某個部位進行拍照,即可自動識別并分類出所屬的品種。

基于YOLOv11的棉花品種分類檢測系統具有廣泛的應用前景,可用于棉花種植管理、品種改良、病蟲害預警等領域。通過該系統,農民和農業專家可以更加便捷地了解棉花的品種分布和生長狀況,為精準農業提供有力的技術支撐。

【效果展示】

?

【訓練數據集介紹】

數據集格式:Pascal VOC格式+YOLO格式(不包含分割路徑的txt文件,僅僅包含jpg圖片以及對應的VOC格式xml文件和yolo格式txt文件)

圖片數量(jpg文件個數):402

標注數量(xml文件個數):402

標注數量(txt文件個數):402

標注類別數:4

標注類別名稱(注意yolo格式類別順序不和這個對應,而以labels文件夾classes.txt為準):["G-arboreum","G-barbadense","G-herbaceum","G-hirsitum"]

每個類別標注的框數:

G-arboreum 框數 = 294

G-barbadense 框數 = 210

G-herbaceum 框數 = 236

G-hirsitum 框數 = 189

總框數:929

使用標注工具:labelImg

標注規則:對類別進行畫矩形框

重要說明:暫無

特別聲明:本數據集不對訓練的模型或者權重文件精度作任何保證,數據集只提供準確且合理標注

圖像預覽:

標注例子:

【訓練信息】

參數
訓練集圖片數363
驗證集圖片數41
訓練map44.0%
訓練精度(Precision)32.6%
訓練召回率(Recall)44.0%

驗證集評估精度信息

Class

Images

Instances

P

R

mAP50

mAP50-95

all

41

125

0.326

0.44

0.44

0.235

G-arboreum

11

26

0.13

0.154

0.132

0.0542

G-barbadense

9

44

0.266

0.295

0.243

0.143

G-herbaceum

11

27

0.411

0.815

0.733

0.428

G-hirsitum

10

28

0.499

0.497

0.651

0.315

【測試環境】

windows10
anaconda3+python3.8
torch==2.3.0
ultralytics==8.3.81
onnxruntime==1.16.3

【界面代碼】

class Ui_MainWindow(QtWidgets.QMainWindow):signal = QtCore.pyqtSignal(str, str)def setupUi(self):self.setObjectName("MainWindow")self.resize(1280, 728)self.centralwidget = QtWidgets.QWidget(self)self.centralwidget.setObjectName("centralwidget")self.weights_dir = './weights'self.picture = QtWidgets.QLabel(self.centralwidget)self.picture.setGeometry(QtCore.QRect(260, 10, 1010, 630))self.picture.setStyleSheet("background:black")self.picture.setObjectName("picture")self.picture.setScaledContents(True)self.label_2 = QtWidgets.QLabel(self.centralwidget)self.label_2.setGeometry(QtCore.QRect(10, 10, 81, 21))self.label_2.setObjectName("label_2")self.cb_weights = QtWidgets.QComboBox(self.centralwidget)self.cb_weights.setGeometry(QtCore.QRect(10, 40, 241, 21))self.cb_weights.setObjectName("cb_weights")self.cb_weights.currentIndexChanged.connect(self.cb_weights_changed)self.label_3 = QtWidgets.QLabel(self.centralwidget)self.label_3.setGeometry(QtCore.QRect(10, 70, 72, 21))self.label_3.setObjectName("label_3")self.hs_conf = QtWidgets.QSlider(self.centralwidget)self.hs_conf.setGeometry(QtCore.QRect(10, 100, 181, 22))self.hs_conf.setProperty("value", 25)self.hs_conf.setOrientation(QtCore.Qt.Horizontal)self.hs_conf.setObjectName("hs_conf")self.hs_conf.valueChanged.connect(self.conf_change)self.dsb_conf = QtWidgets.QDoubleSpinBox(self.centralwidget)self.dsb_conf.setGeometry(QtCore.QRect(200, 100, 51, 22))self.dsb_conf.setMaximum(1.0)self.dsb_conf.setSingleStep(0.01)self.dsb_conf.setProperty("value", 0.25)self.dsb_conf.setObjectName("dsb_conf")self.dsb_conf.valueChanged.connect(self.dsb_conf_change)self.dsb_iou = QtWidgets.QDoubleSpinBox(self.centralwidget)self.dsb_iou.setGeometry(QtCore.QRect(200, 160, 51, 22))self.dsb_iou.setMaximum(1.0)self.dsb_iou.setSingleStep(0.01)self.dsb_iou.setProperty("value", 0.45)self.dsb_iou.setObjectName("dsb_iou")self.dsb_iou.valueChanged.connect(self.dsb_iou_change)self.hs_iou = QtWidgets.QSlider(self.centralwidget)self.hs_iou.setGeometry(QtCore.QRect(10, 160, 181, 22))self.hs_iou.setProperty("value", 45)self.hs_iou.setOrientation(QtCore.Qt.Horizontal)self.hs_iou.setObjectName("hs_iou")self.hs_iou.valueChanged.connect(self.iou_change)self.label_4 = QtWidgets.QLabel(self.centralwidget)self.label_4.setGeometry(QtCore.QRect(10, 130, 72, 21))self.label_4.setObjectName("label_4")self.label_5 = QtWidgets.QLabel(self.centralwidget)self.label_5.setGeometry(QtCore.QRect(10, 210, 72, 21))self.label_5.setObjectName("label_5")self.le_res = QtWidgets.QTextEdit(self.centralwidget)self.le_res.setGeometry(QtCore.QRect(10, 240, 241, 400))self.le_res.setObjectName("le_res")self.setCentralWidget(self.centralwidget)self.menubar = QtWidgets.QMenuBar(self)self.menubar.setGeometry(QtCore.QRect(0, 0, 1110, 30))self.menubar.setObjectName("menubar")self.setMenuBar(self.menubar)self.statusbar = QtWidgets.QStatusBar(self)self.statusbar.setObjectName("statusbar")self.setStatusBar(self.statusbar)self.toolBar = QtWidgets.QToolBar(self)self.toolBar.setToolButtonStyle(QtCore.Qt.ToolButtonTextBesideIcon)self.toolBar.setObjectName("toolBar")self.addToolBar(QtCore.Qt.TopToolBarArea, self.toolBar)self.actionopenpic = QtWidgets.QAction(self)icon = QtGui.QIcon()icon.addPixmap(QtGui.QPixmap(":/images/1.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)self.actionopenpic.setIcon(icon)self.actionopenpic.setObjectName("actionopenpic")self.actionopenpic.triggered.connect(self.open_image)self.action = QtWidgets.QAction(self)icon1 = QtGui.QIcon()icon1.addPixmap(QtGui.QPixmap(":/images/2.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)self.action.setIcon(icon1)self.action.setObjectName("action")self.action.triggered.connect(self.open_video)self.action_2 = QtWidgets.QAction(self)icon2 = QtGui.QIcon()icon2.addPixmap(QtGui.QPixmap(":/images/3.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)self.action_2.setIcon(icon2)self.action_2.setObjectName("action_2")self.action_2.triggered.connect(self.open_camera)self.actionexit = QtWidgets.QAction(self)icon3 = QtGui.QIcon()icon3.addPixmap(QtGui.QPixmap(":/images/4.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)self.actionexit.setIcon(icon3)self.actionexit.setObjectName("actionexit")self.actionexit.triggered.connect(self.exit)self.toolBar.addAction(self.actionopenpic)self.toolBar.addAction(self.action)self.toolBar.addAction(self.action_2)self.toolBar.addAction(self.actionexit)self.retranslateUi()QtCore.QMetaObject.connectSlotsByName(self)self.init_all()

?

【模型可檢測出4類】

樹棉(G. arboreum)、海島棉(G. barbadense)、草棉(G. herbaceum)和陸地棉(G. hirsutum)

【常用評估參數介紹】

在目標檢測任務中,評估模型的性能是至關重要的。你提到的幾個術語是評估模型性能的常用指標。下面是對這些術語的詳細解釋:

  1. Class
    • 這通常指的是模型被設計用來檢測的目標類別。例如,一個模型可能被訓練來檢測車輛、行人或動物等不同類別的對象。
  2. Images
    • 表示驗證集中的圖片數量。驗證集是用來評估模型性能的數據集,與訓練集分開,以確保評估結果的公正性。
  3. Instances
    • 在所有圖片中目標對象的總數。這包括了所有類別對象的總和,例如,如果驗證集包含100張圖片,每張圖片平均有5個目標對象,則Instances為500。
  4. P(精確度Precision)
    • 精確度是模型預測為正樣本的實例中,真正為正樣本的比例。計算公式為:Precision = TP / (TP + FP),其中TP表示真正例(True Positives),FP表示假正例(False Positives)。
  5. R(召回率Recall)
    • 召回率是所有真正的正樣本中被模型正確預測為正樣本的比例。計算公式為:Recall = TP / (TP + FN),其中FN表示假負例(False Negatives)。
  6. mAP50
    • 表示在IoU(交并比)閾值為0.5時的平均精度(mean Average Precision)。IoU是衡量預測框和真實框重疊程度的指標。mAP是一個綜合指標,考慮了精確度和召回率,用于評估模型在不同召回率水平上的性能。在IoU=0.5時,如果預測框與真實框的重疊程度達到或超過50%,則認為該預測是正確的。
  7. mAP50-95
    • 表示在IoU從0.5到0.95(間隔0.05)的范圍內,模型的平均精度。這是一個更嚴格的評估標準,要求預測框與真實框的重疊程度更高。在目標檢測任務中,更高的IoU閾值意味著模型需要更準確地定位目標對象。mAP50-95的計算考慮了從寬松到嚴格的多個IoU閾值,因此能夠更全面地評估模型的性能。

這些指標共同構成了評估目標檢測模型性能的重要框架。通過比較不同模型在這些指標上的表現,可以判斷哪個模型在實際應用中可能更有效。

【使用步驟】

使用步驟:
(1)首先根據官方框架ultralytics安裝教程安裝好yolov11環境,并安裝好pyqt5
(2)切換到自己安裝的yolo11環境后,并切換到源碼目錄,執行python main.py即可運行啟動界面,進行相應的操作即可

【提供文件】

python源碼
yolo11n.pt模型
訓練的map,P,R曲線圖(在weights\results.png)
測試圖片(在test_img文件夾下面)

注意提供訓練的數據集

    ?

    本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
    如若轉載,請注明出處:http://www.pswp.cn/news/899948.shtml
    繁體地址,請注明出處:http://hk.pswp.cn/news/899948.shtml
    英文地址,請注明出處:http://en.pswp.cn/news/899948.shtml

    如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

    相關文章

    論文:Generalized Category Discovery with Clustering Assignment Consistency

    論文下載: https://arxiv.org/pdf/2310.19210 一、基本原理 該方法包括兩個階段:半監督表示學習和社區檢測。在半監督表示學習中,使用了監督對比損失來充分地推導標記信息。此外,由于對比學習方法與協同訓練假設一致,研究引入了…

    Java高級JVM知識點記錄,內存結構,垃圾回收,類文件結構,類加載器

    JVM是Java高級部分,深入理解程序的運行及原理,面試中也問的比較多。 JVM是Java程序運行的虛擬機環境,實現了“一次編寫,到處運行”。它負責將字節碼解釋或編譯為機器碼,管理內存和資源,并提供運行時環境&a…

    MySQL 5.7 Online DDL 技術深度解析

    14.13.1 在線DDL操作 索引操作主鍵操作列操作生成列操作外鍵操作表操作表空間操作分區操作 索引操作 下表概述了對索引操作的在線DDL支持情況。星號表示有附加信息、例外情況或依賴條件。有關詳細信息,請參閱語法和使用說明。 操作原地執行重建表允許并發DML僅修…

    kafka 報錯消息太大解決方案 Broker: Message size too large

    kafka-configs.sh --bootstrap-server localhost:9092 \ --alter --entity-type topics \ --entity-name sim_result_zy \ --add-config max.message.bytes10485880 學習營課程

    HarmonyOS:ComposeTitleBar 組件自學指南

    在日常的鴻蒙應用開發工作中,我們常常會面臨構建美觀且功能實用的用戶界面的挑戰。而標題欄作為應用界面的重要組成部分,它不僅承載著展示頁面關鍵信息的重任,還能為用戶提供便捷的操作入口。最近在參與的一個項目里,我就深深體會…

    前端面試題之CSS中的box屬性

    前幾天在面試中遇到面試官問了一個關于box的屬性面試題,平時都是直接AI沒有仔細去看過。來說說CSS中的常用box屬性: 1. box-sizing box-sizing 屬性定義了元素的寬度和高度是否包括內邊距(padding)和邊框(border&…

    前端開發時的內存泄漏問題

    目錄 🔍 什么是內存泄漏(Memory Leak)?🚨 常見的內存泄漏場景1?? 未清除的定時器(setInterval / setTimeout)2?? 全局變量(變量未正確釋放)3?? 事件監聽未清除4??…

    Java 基礎-30-單例設計模式:懶漢式與餓漢式

    在軟件開發中,單例設計模式(Singleton Design Pattern)是一種常用的設計模式,它確保一個類只有一個實例,并提供一個全局訪問點。這種模式通常用于管理共享資源(如數據庫連接池、線程池等)或需要…

    為 MinIO AIStor 引入模型上下文協議(MCP)服務器

    Anthropic 最近宣布的模型上下文協議 (MCP) 將改變我們與技術交互的方式。它允許自然語言通信替換許多任務的復雜命令行語法。不僅如此,語言模型還可以總結傳統工具的豐富輸出,并以人類可讀的形式呈現關鍵信息。MinIO 是世界領先的…

    2023年12月電子學會青少年軟件編程四級考級真題—新“跳7”游戲

    此題可點下方去處查看,支持在線編程,獲取源碼: 新“跳7”游戲_scratch_少兒編程題庫學習中心-嗨信奧https://www.hixinao.com/tiku/scratch/show-5109.html?_shareid3 程序演示可點擊下方查看,支持源碼查看:新“跳7…

    3D 地圖渲染-區域紋理圖添加

    引入-初始化地圖&#xff08;關鍵代碼&#xff09; // 初始化頁面引入高德 webapi -- index.html 文件 <script src https://webapi.amap.com/maps?v2.0&key您申請的key值></script>// 添加地圖容器 <div idcontainer ></div>// 地圖初始化應該…

    如何避免內存泄漏,尤其是在React中

    在React中避免內存泄漏主要涉及到兩個方面&#xff1a;組件的卸載清理和異步操作的正確管理。以下是幾個關鍵的策略和最佳實踐&#xff1a; 1. 清理組件中的事件監聽器和定時器 當組件卸載時&#xff0c;確保清除所有綁定的事件監聽器和定時器&#xff0c;否則它們會持續占用內…

    如何學習C++以及C++的宏觀認知

    學習方法 首先可以給出一個論斷&#xff1a;C的語法和各種組件的原理及使用可以說是所有編程語言里面比較難的 那么如何掌握所有東西&#xff0c;比如網絡編程&#xff0c;文件讀寫&#xff0c;STL。 不要對語法記各種筆記&#xff0c;比如vector容器有什么什么方法什么什么…

    Minimind 訓練一個自己專屬語言模型

    發現了一個寶藏項目&#xff0c; 宣傳是完全從0開始&#xff0c;僅用3塊錢成本 2小時&#xff01;即可訓練出僅為25.8M的超小語言模型MiniMind&#xff0c;最小版本體積是 GPT-3 的 17000&#xff0c;做到最普通的個人GPU也可快速訓練 https://github.com/jingyaogong/minimi…

    Spring Boot 與 Spring Integration 整合教程

    精心整理了最新的面試資料和簡歷模板&#xff0c;有需要的可以自行獲取 點擊前往百度網盤獲取 點擊前往夸克網盤獲取 Spring Boot 與 Spring Integration 整合教程 簡介 Spring Integration 是 Spring 生態系統中用于實現企業集成模式&#xff08;Enterprise Integration Pa…

    Nginx 核心配置詳解與性能優化最佳實踐

    1.什么是 Nginx&#xff1f; Nginx 是一個高性能的 Web 服務器和反向代理服務器。它輕量、高效&#xff0c;被廣泛用于現代 Web 開發中。 2.為什么前端需要了解 Nginx&#xff1f; ★ 了解 本地開發&#xff1a;可以模擬生產環境 部署前端項目&#xff1a;作為靜態文件服務器…

    LayaAir3.3.0-beta.3重磅更新!Spine4.2、2D物理、UI系統、TileMap等全面升級!

    正式版推出前&#xff0c;說明3.3的功能還沒開發完。所以&#xff0c;又一大波更新來了~ 下面對重點更新進行說明。 Spine的重要更新 3.3.0-beta.3版本開始&#xff0c;新增了Spine 4.2 的運行時庫&#xff0c;Spine動畫上可以支持物理特性了。例如&#xff0c;下圖右側女孩在啟…

    pip安裝timm依賴失敗

    在pycharm終端給虛擬環境安裝timm庫失敗&#xff08; pip install timm&#xff09;&#xff0c;提示你要訪問 https://rustup.rs/ 來下載并安裝 Rust 和 Cargo 直接不用管&#xff0c;換一條命令 pip install timm0.6.13 成功安裝 簡單粗暴

    BUUCTF-web刷題篇(7)

    16.BackupFile 題目提示backupfile&#xff0c;是備份文件的意思&#xff1a; 查看源碼沒有什么有用信息&#xff0c;也沒有登錄界面&#xff0c;所以也不會用到蟻劍鏈接來找備份文件&#xff0c;所以大概率就是通過構造playload來查找備份文件。 注&#xff1a;備份文件常用…

    Maven 構建生命周期

    Maven 構建生命周期 引言 Maven 是一個強大的項目管理和構建自動化工具,廣泛應用于 Java 開發領域。Maven 的核心概念之一是構建生命周期,它定義了從項目創建到構建、測試、打包、部署等一系列操作的流程。本文將詳細介紹 Maven 的構建生命周期,幫助讀者更好地理解和使用 …