基于cnn的通用圖像分類項目

背景

項目上需要做一個圖像分類的工程。本人希望這么一個工程可以幫助學習ai的新同學快速把代碼跑起來,快速將自己的數據集投入到實戰中!

代碼倉庫地址:imageClassifier: 圖片分類器

代碼切到master分支,master分支是本地訓練圖像分類的一鍵式解決方案,不需要寫任何代碼就可以實現任意圖像多類別分類。?

數據處理

?自己準備的分類圖像,按照文件夾分類,放在dataset目錄下。

運行一下data_partitioning的方法,會自動按照比例將數據劃分為訓練集和測試集。存放在data目錄下。

執行完之后可以看到data文件夾下出現了train文件夾和test文件夾,這兩個文件夾下按照分類也做了數據劃分。

模型訓練

在train_model.py里面首先是超參數設置。這里面的數值都有默認值,根據數據集不同,經常修改的值通常是批次大小和輪數。

舉例:如果需要將訓練輪次設置為50輪,批次大小設置為64的話,只需要按照下圖所示,在ide的運行配置里加上即可。注意,不同的配置字段之間用空格隔開。

關于輪次大小和批次大小的設置,這里建議:

  1. 第一次訓練時可以將輪次調整為一個較大的值,數據量越大建議輪數越高。由于代碼里存在早停機制,所以即使輪數大到過于夸張,在訓練后期由于準確率提升不明顯,訓練流程會自動停止。
  2. 第一次訓練可以將批次大小調整為一個較小的值。由于訓練期間同一批次的數據會一起放入顯存中,所以批次過大容易出現爆顯存的現象。當訓練期間發現顯存沒有被占滿時,可以提高批次大小,提升訓練速度。

執行以上方法就可以開始訓練了。圖像分類的類別通過文件夾數量獲取即可,不需要人為設置。

訓練后參數文件會保存在dict文件夾下面。

模型測試

?在訓練完成后,到model_test.py文件里運行代碼即可,會把在測試集中的數據完整驗證一遍,計算出準確率,并打印出每條數據的預測值與真實值。

模型推理

推理過程我們要做的是,導入一張圖片,經過模型運算得出其分類類型。在model_inference.py里面,我們需要指定一張用來推理的圖片。圖片的路徑放在inference目錄下,圖片名稱可以改成真實的圖片名稱。

運行model_inference.py的方法,即加載模型->加載圖片->模型推理->得出預測值。?

示例

在master分支上是一個貓狗分類的項目。其中dog文件夾里有4999張狗的圖片,cat文件夾里有4990張貓的圖片。

下圖為訓練100輪次的loss變化與準確率變化。由于訓練階段中也會切分訓練-驗證數據集,所以通常是通過val-acc來觀察實際的準確率,可以看到最后準確率約達到90%。

運行模型測試代碼,得出準確率為93.8%。?

?在inference文件夾里放入一個貓/狗圖片,注意這張圖片不要來自于訓練數據。

運行推理程序,得出分類類型為cat。?

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

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

相關文章

【HarmonyOS 5 開發速記】如何獲取用戶信息(頭像/昵稱/手機號)

1.獲取 authorizationCode: 2.利用 authorizationCode 獲取 accessToken:文檔中心 3.獲取手機:文檔中心 4.獲取昵稱頭像:文檔中心 首先創建 request 若要獲取手機號,scope必填 phone,permissions 必填 …

從OCR到Document Parsing,AI時代的非結構化數據處理發生了什么改變?

智能文檔處理:非結構化數據提出的挑戰 在這個時代的每一天,無論是個人處理賬單,還是企業處理合同、保險單、發票、報告或成堆的簡歷,我們都深陷在海量的非結構化數據之中。這類數據不像整齊排列的數據庫表格那樣規整,…

Python Ovito統計金剛石結構數量

大家好,我是小馬老師。 本文介紹python ovito方法統計金剛石結構的方法。 Ovito Identify diamond structure命令可以識別和統計金剛石結構,但是無法直接輸出結構的變化情況。 本文使用python調用ovito包的方法,可以持續統計各步的金剛石結構,具體代碼如下: from ovito…

相關類相關的可視化圖像總結

目錄 一、散點圖 二、氣泡圖 三、相關圖 四、熱力圖 五、二維密度圖 六、多模態二維密度圖 七、雷達圖 八、桑基圖 九、總結 一、散點圖 特點 通過點的位置展示兩個連續變量之間的關系,可直觀判斷線性相關、非線性相關或無相關關系,點的分布密…

Git常用命令完全指南:從入門到精通

Git常用命令完全指南:從入門到精通 一、基礎配置命令 1. 用戶信息配置 # 設置全局用戶名 git config --global user.name "你的名字"# 設置全局郵箱 git config --global user.email "你的郵箱example.com"# 查看所有配置 git config --list…

為什么要創建 Vue 實例

核心原因:Vue 需要一個「控制中心」來驅動整個應用 你可以把 Vue 實例想象成你應用的**「大腦」或「引擎」。它負責協調模板、數據、邏輯和行為,將它們變成一個活的、可交互的應用**。沒有這個實例,你的代碼只是一堆靜態的 HTML、JavaScript 變量和函數,無法「活」起來。 …

正則持續學習呀

源匹配為 (.*): (.*)$ 替換匹配為 "$1": "$2", 可將headers改為字典 參考 【爬蟲軍火庫】如何優雅地復制請求頭 - 知乎

python --導出數據庫表結構(pymysql)

import pymysql from pymysql.cursors import DictCursor from typing import Optional, Dict, List, Anyclass DBSchemaExporter:"""MySQL數據庫表結構導出工具,支持提取表和字段注釋使用示例:>>> exporter DBSchemaExporter("local…

Kafka 消息模式實戰:從簡單隊列到流處理(二)

四、Kafka 流處理實戰 4.1 Kafka Streams 簡介 Kafka Streams 是 Kafka 提供的流處理庫,它為開發者提供了一套簡潔而強大的 API,用于構建實時流處理應用程序。Kafka Streams 基于 Kafka 的高吞吐量、分布式和容錯特性,能夠處理大規模的實時…

VAS1086Q 奇力科技線性芯片車規用品LED驅動芯片

一、產品概述 名稱與定位:VAS1086Q 是奇力科技(Chiplead Technology)推出的汽車級恒流 LED 驅動器,屬于 Value Added Solutions 系列,專為汽車 LED 照明應用提供高性價比方案。 核心功能: 支持 10~400mA 可…

適應性Java用于現代 API:REST、GraphQL 和事件驅動

在快速發展的軟件開發領域,REST、GraphQL 和事件驅動架構等新的 API 標準對于構建可擴展、高效的系統至關重要。Java 在現代 API 方面以其在企業應用中的穩定性而聞名,不斷適應這些現代范式的需求。隨著不斷發展的生態系統,Java 在現代 API 方…

浮點數精度問題(CSP38思考)

CSP38的第一題,考到了浮點數的除法(當然考完發現其實也可以不涉及浮點數,直接轉化為整型),我第一題一直卡到70、80分,故寫下此文。 浮點數的運算有精度損失問題,那么應該如何解決和避免呢&#…

F5 – TCP 連接管理:會話、池級和節點級操作

在 F5 BIG-IP 中,您可以在池成員級別或節點級別管理流向服務器的流量。節點級別狀態會影響與該節點關聯的所有池,而池成員狀態則僅限于單個池。了解每種方法以及何時使用它們對于順利進行維護窗口和流量管理至關重要。 池級狀態:啟用、禁用、強制離線、移除 在 BIG-IP 配置…

StoreView SQL,讓數據分析不受地域限制

作者:章建(處知) 引言 日志服務 SLS 是云原生觀測和分析平臺,為 Log、Metric、Trace 等數據提供大規模、低成本、實時的平臺化服務。SLS 提供了多地域支持【1】,方便用戶可以根據數據源就近接入 SLS 服務&#xff0c…

爬蟲基礎學習day2

# 爬蟲設計領域 工商:企查查、天眼查短視頻:抖音、快手、西瓜 ---> 飛瓜電商:京東、淘寶、聚美優品、亞馬遜 ---> 分析店鋪經營決策標題、排名航空:抓取所有航空公司價格 ---> 去哪兒自媒體:采集自媒體數據進…

Golang——10、日志處理和正則處理

日志處理和正則處理 1、logx日志處理1.1、logx簡介1.2、日志初始化與配置1.3、常用方法1.4、配合defer捕獲panic 2、正則處理2.1、正則表達式語法大全2.2、基本匹配2.3、常見函數使用2.4、從html提取漢字demo 1、logx日志處理 1.1、logx簡介 logx 是 go-zero 框架中用于日志記…

【LeetCode】3309. 連接二進制表示可形成的最大數值(遞歸|回溯|位運算)

LeetCode 3309. 連接二進制表示可形成的最大數值(中等) 題目描述解題思路Java代碼 題目描述 題目鏈接:LeetCode 3309. 連接二進制表示可形成的最大數值(中等) 給你一個長度為 3 的整數數組 nums。 現以某種順序 連接…

C++八股 —— 單例模式

文章目錄 1. 基本概念2. 設計要點3. 實現方式4. 詳解懶漢模式 1. 基本概念 線程安全(Thread Safety) 線程安全是指在多線程環境下,某個函數、類或代碼片段能夠被多個線程同時調用時,仍能保證數據的一致性和邏輯的正確性&#xf…

軟件工程:如何做好軟件產品

1、什么是產品 從項目到產品 產品:滿足行業共性需求的標準產品。即要能夠做到配置化的開發,用同一款產品最大限度地滿足不同客戶的需求,同時讓產品具有可以快速響應客戶需求變化的能力。 好的產品一定吸收了多個項目的共性,一定是…

Cinnamon修改面板小工具圖標

Cinnamon開始菜單-CSDN博客 設置模塊都是做好的,比GNOME簡單得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…