基于PyTorch的圖像分類特征提取與模型訓練文檔

概述

本代碼實現了一個基于PyTorch的圖像特征提取與分類模型訓練流程。核心功能包括:

  1. 使用預訓練ResNet18模型進行圖像特征提取

  2. 將提取的特征保存為標準化格式

  3. 基于提取的特征訓練分類模型

代碼結構詳解?

1. 庫導入

import torch
import torch.nn as nn
import torchvision
from torchvision import transforms, datasets
from torch.utils.data import DataLoader, Subset
import numpy as np
import os
from ml.model_trainer import ModelTrainer
  • 關鍵庫說明

    • torch:PyTorch核心庫

    • torch.nn:神經網絡模塊

    • torchvision:計算機視覺專用模塊

    • numpy:數值計算庫

    • os:文件系統操作

    • ModelTrainer:自定義模型訓練類(需另行實現)

2. 特征提取器類(FeatureExtractor)

初始化方法 __init__
def __init__(self):self.device = torch.device("cuda" if torch.cuda.is_available() else "cpu")self.model = torchvision.models.resnet18(weights='IMAGENET1K_V1')self.model = nn.Sequential(*list(self.model.children())[:-1])self.model = self.model.to(self.device).eval()self.transform = transforms.Compose([...])
  • 功能說明

    • 設備檢測:自動選擇GPU/CPU

    • 模型加載:使用ImageNet預訓練的ResNet18

    • 模型修改:移除最后的全連接層(保留卷積特征提取器)

    • 預處理設置:標準化圖像尺寸和顏色空間

特征提取方法 extract_features
def extract_features(self, data_dir):full_dataset = datasets.ImageFolder(...)loader = DataLoader(...)features = []labels = []with torch.no_grad():for inputs, targets in loader:inputs = inputs.to(self.device)outputs = self.model(inputs)features.append(outputs.squeeze().cpu().numpy())labels.append(targets.numpy())features = np.concatenate(...)labels = np.concatenate(...)return features, labels, full_dataset.classes
  • 關鍵參數

    • data_dir:包含分類子目錄的圖像數據集路徑

    • batch_size=32:平衡內存使用與處理效率

    • num_workers=4:多線程數據加載

  • 處理流程

    1. 創建ImageFolder數據集

    2. 使用DataLoader批量加載

    3. 禁用梯度計算加速推理

    4. 特征維度壓縮(squeeze)

    5. 設備間數據傳輸(GPU->CPU)

    6. 合并所有批次數據

3. 主執行流程

參數配置
DATA_DIR = "/home/.../data"  # 實際數據路徑
SAVE_PATH = "./features.npz"  # 特征保存路徑
特征提取與保存?
extractor = FeatureExtractor()
if not os.path.exists(SAVE_PATH):features, labels, classes = extractor.extract_features(DATA_DIR)np.savez(SAVE_PATH, features=features, labels=labels, classes=classes)
else:data = np.load(SAVE_PATH)features = data['features']labels = data['labels']
  • 文件結構

    • features: [N_samples, 512] 的特征矩陣

    • labels: [N_samples] 的標簽數組

    • classes: 類別名稱列表

模型訓練與保存
X, y = features, labels
trainer = ModelTrainer()
model = trainer.train_model(X, y)
joblib.dump(model, 'pest_classifier.pkl')

?

  • 假設條件

    • ModelTrainer需實現訓練邏輯(如SVM、隨機森林等)

    • 默認使用全部數據進行訓練(建議實際添加數據分割)

技術細節說明

1. 圖像預處理流程

2. 特征維度分析

  • ResNet18最后層輸出:512維特征向量

  • 假設1000張圖像:

    • 原始圖像:1000×3×224×224 (約150MB)

    • 提取特征:1000×512 (約2MB) → 顯著降維

3. 性能優化策略

  • GPU加速:自動檢測CUDA設備

  • 批量處理:32張/批平衡效率與內存

  • 緩存機制:避免重復特征提取

  • 梯度禁用:減少內存消耗

?

?

?

?

?

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

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

相關文章

寫一個 Java 程序,用于將字符串中的指定子串替換為另一個子串

以下是一個 Java 程序,它可以將字符串中的指定子串替換為另一個子串。 public class SubstringReplacement {public static String replaceSubstring(String original, String oldSubstring, String newSubstring) {return original.replace(oldSubstring, newSubs…

Docker 容器雙網卡訪問物理雷達網絡教程

作者: 陳梓洋 環境: ubuntu 22.04lts 時間: 2025年4月29日 Docker 容器雙網卡訪問物理雷達網絡教程 這個教程適用于這樣的場景:容器保留原有 ROS 通信網絡(如 bridge 網絡),同時需要訪問一個物…

AWS創建多塊盤并創建RAID0以及后增加空間

創建硬盤并掛載到EC2上,后查詢如下 [rootip-127-0-0-1 ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS nvme0n1 259:0 0 40G 0 disk ├─nvme0n1p1 259:1 0 40G 0 part / ├─nvme0n1p127 259:2 0 1M 0 part └─nvme0n1p128 259:3 …

數據結構---單鏈表的增刪查改

前言: 經過了幾個月的漫長歲月,回頭時年邁的小編發現,數據結構的內容還沒有寫博客,于是小編趕緊停下手頭的活動,補上博客以洗清身上的罪孽 目錄 前言 概念: 單鏈表的結構 我們設定一個哨兵位頭節點給鏈…

XSS靶場實戰(工作wuwuwu)

knoxss knoxss Single Reflection Using QUERY of URL ——01 測試標簽 <script>alert(666666)</script>——02: " <h1>test</h1>沒有反應&#xff0c;查看源碼 現在需要閉合雙引號&#xff0c;我計劃還是先搞標簽 "><h1>tes…

基于 BERT 微調一個意圖識別(Intent Classification)模型

基于 BERT 微調一個意圖識別&#xff08;Intent Classification&#xff09;模型&#xff0c;你的意圖類別包括&#xff1a; 查詢天氣獲取新聞咨詢想聽音樂想添加備忘查詢備忘獲取家政服務結束對話增加音量減小音量其他 具體實現步驟&#xff08;詳細版&#xff09; 1. 準備你…

SSM書籍管理(環境搭建)

整合SSM&#xff1a;SpringSpringMVCMybatis 環境要求&#xff1a;IDEA、MySQL5、Tomcat9、Maven3 數據庫搭建 數據庫準備以下數據用于后續實驗&#xff1a;創建一個ssmbuild數據庫&#xff0c;表books&#xff0c;該表有4個字段&#xff0c;并且插入3條數據用于后續。 CRE…

API文檔生成與測試工具推薦

在API開發過程中&#xff0c;文檔的編寫和維護是一項重要但繁瑣的工作。為了提高效率&#xff0c;許多開發者會選擇使用API文檔自動生成工具或具備API文檔生成功能的API門戶產品。選擇能導入API文檔的工具生成測試腳本, 本文將全面梳理市面上符合OpenAPI 3.0規范的文檔生成工具…

linux修改環境變量

添加環境變量注意事項。 vim ~/.bashrc 添加環境變量時&#xff0c;需要source ~/.bashrc后才能有效。同時只對當前shell窗口有效&#xff0c;當打開另外的shell窗口時&#xff0c;需要重新source才能起效。 1.修改bashrc文件后 2.source后打開另一個shell窗口則無效&#xff…

springboot項目中,MySQL數據庫轉達夢數據庫

前言 前段時間&#xff0c;公司要求要把某幾個項目的數據庫換成達夢數據庫&#xff0c;說是為了國產化。我就挺無語的&#xff0c;三四年的項目了&#xff0c;現在說要換數據庫。我一開始以為這個達夢數據庫應該是和TIDB差不多的。 我之前做的好幾個項目部署到測試服、正式服…

【Quest開發】透視環境下摳出身體并能遮擋身體上的服裝

軟件&#xff1a;Unity 2022.3.51f1c1、vscode、Meta XR All in One SDK V72 硬件&#xff1a;Meta Quest3 僅針對urp管線 博主搞這個主要是想做現實里的人的變身功能&#xff0c;最后效果如下 可以看到雖然身體是半透明的&#xff0c;但是裙子依舊被完全遮擋了 原理是參考…

前端安全中的XSS(跨站腳本攻擊)

XSS 類型 存儲型 XSS 特征&#xff1a;惡意腳本存儲在服務器&#xff08;如數據庫&#xff09;&#xff0c;用戶訪問受感染頁面時觸發。場景&#xff1a;用戶評論、論壇帖子等持久化內容。影響范圍&#xff1a;所有訪問該頁面的用戶。 反射型 XSS 特征&#xff1a;惡意腳本通過…

(第三篇)Springcloud之Ribbon負載均衡

一、簡介 1、介紹 Spring Cloud Ribbon是Netflix發布的開源項目&#xff0c;是基于Netflix Ribbon實現的一套客戶端負載均衡的工具。主要功能是提供客戶端的軟件負載均衡算法&#xff0c;將Netflix的中間層服務連接在一起。Ribbon客戶端組件提供一系列完善的配置項如連接超時&…

大模型——使用coze搭建基于DeepSeek大模型的智能體實現智能客服問答

大模型——使用coze搭建基于DeepSeek大模型的智能體實現智能客服問答 本章實驗完全依托于coze在線平臺,不需要本地部署任何應用。 實驗介紹 1.coze介紹 扣子(coze)是新一代 AI 應用開發平臺。無論你是否有編程基礎,都可以在扣子上快速搭建基于大模型的各類 AI 應用,并…

【計算機視覺】目標檢測:深度解析YOLOv9:下一代實時目標檢測架構的創新與實戰

深度解析YOLOv9&#xff1a;下一代實時目標檢測架構的創新與實戰 架構演進與技術創新YOLOv9的設計哲學核心創新解析1. 可編程梯度信息&#xff08;PGI&#xff09;2. 廣義高效層聚合網絡&#xff08;GELAN&#xff09;3. 輕量級設計 環境配置與快速開始硬件需求建議詳細安裝步驟…

【SpringBoot】基于MybatisPlus的博客管理系統(1)

1.準備工作 1.1數據庫 -- 建表SQL create database if not exists java_blog_spring charset utf8mb4;use java_blog_spring; -- 用戶表 DROP TABLE IF EXISTS java_blog_spring.user_info; CREATE TABLE java_blog_spring.user_info(id INT NOT NULL AUTO_INCREMENT,user_na…

貴族運動項目有哪些·棒球1號位

10個具有代表性的貴族運動&#xff1a; 高爾夫 馬術 網球 帆船 擊劍 斯諾克 冰球 私人飛機駕駛 深海潛水 馬球 貴族運動通常指具有較高參與成本、歷史底蘊或社交屬性的運動&#xff0c;而棒球作為一項大眾化團隊運動&#xff0c;與典型貴族運動的結合較為罕見。從以下幾個角度探…

【Tauri2】035——sql和sqlx

前言 這篇就來看看插件sql SQL | Taurihttps://tauri.app/plugin/sql/ 正文 準備 添加依賴 tauri-plugin-sql {version "2.2.0",features ["sqlite"]} features可以是mysql、sqlite、postsql 進去features看看 sqlite ["sqlx/sqlite&quo…

全鏈路自動化AIGC內容工廠:構建企業級智能內容生產系統

一、工業化AIGC系統架構 1.1 生產流程設計 [需求輸入] → [創意生成] → [多模態生產] → [質量審核] → [多平臺分發] ↑ ↓ ↑ [用戶反饋] ← [效果分析] ← [數據埋點] ← [內容投放] 1.2 技術指標要求 指標 標準值 實現方案 單日產能 1,000,000 分布式推理集群 內容合規率…

是否想要一個桌面哆啦A夢的寵物

是否想擁有一個在指定時間喊你的桌面寵物呢&#xff08;手動狗頭&#xff09; 如果你有更好的想法&#xff0c;歡迎提出你的想法。 是否考慮過跟開發者一對一&#xff0c;提出你的建議&#xff08;狗頭&#xff09;。 https://wwxc.lanzouo.com/idKnJ2uvq11c 密碼:bbkm