(3)機器學習小白入門 YOLOv: 解鎖圖片分類新技能

(1)機器學習小白入門YOLOv :從概念到實踐
(2)機器學習小白入門 YOLOv:從模塊優化到工程部署
(3)機器學習小白入門 YOLOv: 解鎖圖片分類新技能

前言

YOLOv 算法通常被用于目標檢測任務,但通過對其進行適當的調整和改造,也能夠滿足圖片分類的需求。接下來,我將基于之前 YOLOv 的開發框架,詳細介紹如何利用它實現圖片分類。

一、核心思路轉換

在目標檢測任務中,YOLOv 會輸出目標的位置和類別;而圖片分類只需要判斷整張圖片屬于哪個類別。我們可以將 YOLOv 的輸出進行簡化處理:不再關注目標的位置信息,僅提取置信度最高的類別作為圖片的分類結果 。

在這里插入圖片描述

二、代碼模塊調整

2.1 模型調用與推理模塊優化

在原有的模型調用和推理代碼基礎上,我們需要修改結果解析部分。原代碼中解析結果時會獲取所有檢測到的目標信息,現在我們只需要獲取置信度最高的類別。

from ultralytics import YOLO
import cv2
import torch# 加載預訓練模型
model = YOLO('yolov8n.pt')# 讀取圖像
image = cv2.imread('test.jpg')
# 預處理:調整尺寸、歸一化、維度轉換
input_tensor = torch.from_numpy(image).unsqueeze(0).float() / 255.0
input_tensor = input_tensor.permute(0, 3, 1, 2)  # NHWC -> NCHW# 執行推理
results = model.predict(source=input_tensor, show=False)# 解析結果,獲取置信度最高的類別
max_score = 0
predicted_class = None
for result in results:boxes = result.boxes.xyxy.tolist()scores = result.boxes.conf.tolist()classes = [result.names[int(cls)] for cls in result.boxes.cls.tolist()]for score, cls in zip(scores, classes):if score > max_score:max_score = scorepredicted_class = clsprint(f"圖片分類結果為:{predicted_class},置信度:{max_score:.2f}")

2.2 訓練數據集與配置修改

如果需要訓練自己的模型用于圖片分類,數據集準備和配置環節也需要相應調整。

  • 數據集標注:標注工具仍可使用 LabelImg,但每張圖片僅需標注一個類別,且標注框應覆蓋整張圖片 。標注生成的.txt文件中,每行格式為類別索引 0.5 0.5 1.0 1.0,其中0.5 0.5 1.0 1.0表示標注框覆蓋整張圖片。

  • 數據集配置:在data.yaml文件中,nc設置為實際的類別數量,names列表填寫對應的類別名稱。同時,確保訓練集、驗證集和測試集路徑正確指向處理好的圖片和標注文件。

train: path/to/train/images  # 訓練集圖像路徑
val: path/to/val/images      # 驗證集圖像路徑
test: path/to/test/images    # 測試集圖像路徑nc: 5                      # 假設圖片分類有5個類別
names: ['class1', 'class2', 'class3', 'class4', 'class5']  # 類別名稱列表

三、訓練與評估調整

3.1 訓練參數設置

訓練參數配置與目標檢測類似,但由于任務性質改變,部分參數可根據實際情況微調。例如,學習率、訓練輪數等可以在原基礎上進行嘗試性調整,以獲得更好的分類效果。

python train.py \
--weights yolov8n.pt \
--data data.yaml \
--epochs 50 \
--batch 32 \
--lr0 0.0005  # 調整后的初始學習率

3.2 模型評估指標

評估模型時,不再使用目標檢測的mAP@0.5:0.95指標,而是采用圖片分類常用的準確率(Accuracy)、精確率(Precision)、召回率(Recall)、F1 值等指標 。可以通過編寫自定義腳本,加載測試集數據進行預測,然后計算這些指標來評估模型的分類性能。

# 讀取測試集標簽?
with open(test_label_file, 'r') as f:?max_score = 0?predicted_class = None?for result in results:?scores = result.boxes.conf.tolist()?classes = [result.names[int(cls)] for cls in result.boxes.cls.tolist()]?for score, cls in zip(scores, classes):?if score > max_score:?max_score = score?predicted_class = cls?predicted_labels.append(predicted_class)?
?
# 計算評估指標?
accuracy = accuracy_score(true_labels, predicted_labels)?
precision = precision_score(true_labels, predicted_labels, average='weighted')?
recall = recall_score(true_labels, predicted_labels, average='weighted')?
f1 = f1_score(true_labels, predicted_labels, average='weighted')?
?
print(f"準確率: {accuracy:.4f}")?
print(f"精確率: {precision:.4f}")?
print(f"召回率: {recall:.4f}")?
print(f"F1值: {f1:.4f}")
  1. 遍歷測試集的每一張圖片,進行預處理后輸入模型進行預測,提取置信度最高的類別作為預測結果。

  2. 最后,使用sklearn庫中的函數計算準確率、精確率、召回率和 F1 值,并打印輸出評估結果。

3.3核心評估指標詳解?

3.3.1 準確率(Accuracy)?

準確率是最直觀的評估指標,它表示模型正確分類的樣本數占總樣本數的比例。
在圖片分類中,準確率反映了模型對所有樣本的整體判斷正確程度,但當數據集中類別不均衡時,準確率可能會產生誤導。例如,數據集中 90% 是類別 A,10% 是類別 B,模型將所有樣本都預測為類別 A,雖然準確率很高,但模型實際上無法識別類別 B。?

3.3.2 精確率(Precision)?

精確率衡量的是模型預測為正類的樣本中,真正為正類的比例。
?
?
精確率關注的是模型預測結果的準確性。在圖片分類中,如果精確率較低,說明模型容易將其他類別誤判為目標類別,導致誤報較多。?

3.3.3 召回率(Recall)?

召回率也稱為靈敏度或真正率,它表示實際為正類的樣本中,被模型正確預測為正類的比例。召回率反映了模型對正類樣本的捕捉能力。在圖片分類中,召回率低意味著模型容易遺漏正類樣本,出現漏報的情況。?

3.3.4 F1 值?

F1 值是精確率和召回率的調和平均數,綜合考慮了精確率和召回率兩個指標,能夠更全面地評估模型性能。F1 值越高,說明模型在精確率和召回率之間取得了較好的平衡
通過上述指標和腳本,能夠全面、準確地評估基于 YOLOv 的圖片分類模型性能,為模型的優化和改進提供有力依據。

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

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

相關文章

主機安全-開源HIDS字節跳動Elkeid使用

安裝好elkeid后就開始接入主機和k8s集群,安裝文檔-----主機安全-開源HIDS字節跳動Elkeid安裝-CSDN博客 1、接入主機 在系統管理-----安裝配置-----復制命令------在目標機器上執行這段命令 執行成功后主機就會自動接入 2、接入k8s集群 在k8s主機上執行腳本&#x…

【vue】用conda配置nodejs,一鍵開通模版使用權

特此鳴謝我的好同學重中之重的特級教學,非常之好用一、conda環境下載安裝二、創建包含nodejs的conda環境創建一個新環境:conda create -n 【自定義環境名字】 python3.9 conda create -n my_nodejs_env python3.9激活新環境:conda activate【…

深度學習--tensor(創建、屬性)

一、torch概念1.1簡介pytorch簡稱torch,意為深度學習框架。它使用張量(tensor)來表示數據,可以輕松地處理大規模數據集,且可以在GPU上加速。pytorch基本功能:自動微分、自動求導等。1.2安裝官網獲得下載命令…

【內存】Linux 內核優化實戰 - net.ipv4.tcp_max_tw_buckets

目錄net.ipv4.tcp_max_tw_buckets 詳解一、基本概念二、核心作用三、默認值四、調整場景需增大參數的場景需減小參數的場景五、查看與修改方法1. 查看當前值2. 臨時修改(重啟失效)3. 永久修改(重啟生效)六、注意事項總結net.ipv4.…

短劇系統開發定制全流程解析:從需求分析到上線運營

一、短劇行業現狀與系統開發價值短劇作為一種新興的內容形態,近年來呈現爆發式增長態勢。2023年中國短劇市場規模已突破300億元,用戶規模超過5億,這種以"快節奏、強劇情、低成本"為特點的內容形式正在重塑數字娛樂產業格局。短劇系…

各服務器廠商調整BIOS睿頻教程

調整BIOS睿頻選項匯總:1、華為服務器:2、華為服務器V53、浪潮服務器4、浪潮服務器M45、 曙光服務器5.1 曙光I620-G205.2 曙光I620-G306、聯想服務器(650系列)650系列的服務器對照截圖信息修改對應項,修改為截圖里的選項…

PyTorch筆記3----------統計學相關函數

1.基礎函數 import torch a torch.rand(2,2) print("a:\n",a) print(########################) print("平均值:\n",torch.mean(a,dim0)) print("總和:\n",torch.sum(a,dim0)) print("所有元素的積:\n",torch.prod(a,dim0)) print(&…

【Prometheus】通過tar包部署單機版Prometheus 和 Pushgateway

在ECS(Elastic Compute Service)機器上通過tar包部署 Prometheus 和 Pushgateway,并配置 Prometheus 采集 Pushgateway 的數據,是一個常見的監控部署任務。以下是詳細的步驟說明:🧩 環境準備 操作系統&…

Matlab 頻譜分析 (Spectral Analysis)

文章目錄1. 信號預處理 - 去直流分量2. 快速傅里葉變換(FFT)3. 功率譜密度(PSD)計算4. 主頻率檢測5. 譜質心計算6. 對數譜顯示完整的信號處理流程實際應用示例1. 信號預處理 - 去直流分量 data data - mean(data);數學原理&…

【實時Linux實戰系列】實時以太網與 TSN 基礎

在實時系統中,網絡通信的實時性和可靠性是確保系統正常運行的關鍵。實時以太網和時間敏感網絡(TSN)技術為實時數據傳輸提供了強大的支持。TSN通過一系列協議和機制,確保數據能夠在預定的時間內可靠傳輸,滿足工業自動化…

茶顏悅色JAVA面試分享

1、自我介紹項目2、設計一個爆款飲品秒殺系統:如何解決“幽蘭拿鐵”上新時的瞬時10萬QPS?從緩存、限流、庫存扣減到訂單創建的全流程設計。3、訂單超市未支付自動取消:如何實現高精度(30分鐘精確到秒)且低延遲的訂單狀…

OneCode圖表配置速查手冊

前言 在數據可視化日益成為業務決策核心驅動力的今天,高效、靈活的圖表配置系統已成為開發人員不可或缺的工具。OneCode圖表組件憑借其豐富的圖表類型與精細化的配置能力,為開發者提供了構建專業數據可視化界面的完整解決方案。然而,隨著圖表…

二維碼驅動的獨立站視頻集成方案

一、獨立站視頻嵌入的技術挑戰與架構設計 在獨立站建設中,視頻內容的集成面臨著性能、安全與用戶體驗的三重挑戰。傳統直接嵌入方式會導致頁面加載緩慢(平均增加3-5秒首屏時間)、服務器帶寬消耗激增(單視頻日均播放1000次約產生50…

【STM32】預分頻因子(Prescaler)和重裝載值(Reload Value)

在 STM32 的 獨立看門狗(IWDG) 中(結合上文【STM32】獨立看門狗(提供完整實例代碼)),為了控制看門狗的超時時間(溢出時間),我們主要設置兩個參數:…

從0到1搭建同城O2O外賣平臺:外賣系統源碼架構解析與實戰指南

當下,越來越多的創業者、品牌連鎖商家,甚至社區集群,開始布局屬于自己的本地外賣平臺。而對于軟件開發者和技術團隊而言,如何從0到1搭建一套可落地、可擴展、可持續運營的外賣系統,成為了一個既現實又挑戰性十足的話題…

MySQL 8.0 OCP 1Z0-908 題目解析(16)

題目61 Choose the best answer. Examine this command, which executes successfully: mysqlbackup --defaults-file/backups/server-my.cnf --backup-dir/backups/full copy-backWhich statement is true about the copy-back process? ○ A) It restores files from the da…

WSL命令

以下是 WSL&#xff08;Windows Subsystem for Linux&#xff09;的常用命令大全&#xff0c;涵蓋安裝、管理、網絡、文件交互等場景&#xff0c;方便快速查閱和使用&#xff1a;1. 安裝與版本管理命令說明wsl --install默認安裝 WSL 和 Ubuntuwsl --install -d <發行版名&g…

AI語音訓練——GPT-SoVITS(GSV)

鏈接說明 github項目地址&#xff1a;RVC-Boss/GPT-SoVITS: 1 min voice data can also be used to train a good TTS model! (few shot voice cloning) 項目中文說明書&#xff1a; GPT-SoVITS指南//項目說明書里也有在線使用的鏈接 原項目作者B站教學視頻&#xff1a;耗時兩個…

事件委托版本tab欄切換

事件委托&#xff1a;是JavaScript中注冊事件的常用技巧&#xff0c;也稱事件委派、事件代理簡單理解&#xff1a;原本需要注冊在子元素的事件委托給父元素&#xff0c;讓父元素擔當事件監聽的職務優點&#xff1a;減少注冊次數&#xff0c;可提高程序性能原理&#xff1a;事件…

FLAN-T5:規模化指令微調的語言模型

摘要 在將數據集表述為指令的形式上進行語言模型微調&#xff0c;已被證明能夠提升模型性能及其對未見任務的泛化能力。本文探討了指令微調&#xff0c;特別關注以下三個方面&#xff1a;(1) 任務數量的擴展&#xff0c;(2) 模型規模的擴展&#xff0c;以及 (3) 基于鏈式思維&…