C#版本的訓練AI模型軟件

程序介紹文檔

項目概述

HL.AI.train 是由深圳海藍智能開發的AI模型訓練與轉換工具,版本號1.2.1.0。該程序基于Windows Forms構建,提供圖形化界面支持YOLOv5和YOLOv8模型的訓練配置、數據集管理以及PyTorch模型到ONNX格式的轉換功能。程序支持CUDA GPU加速,并提供詳細的日志系統以便監控訓練過程 AssemblyInfo.cs

主頁面

在這里插入圖片描述
在這里插入圖片描述

功能模塊

1. 主界面與導航

程序主界面采用選項卡式布局,包含以下核心功能區域:

  • 系統設置(Formset) : 配置Anaconda環境、YOLOv5/v8路徑、權重文件路徑及訓練設備(GPU/CPU)
  • YOLOv5訓練(V5) : 數據集管理、類別編輯和訓練參數配置
  • YOLOv8訓練(V8) : 與V5模塊功能類似,針對YOLOv8模型優化
  • 模型轉換(Pt_onnx) : 將PyTorch模型(.pt)轉換為ONNX格式
    主界面實現位于 Index.cs ,通過TabControl控件組織各個功能模塊。
   public partial class Index : Form{private V5 V5 { get; set; } = new V5();private V8 V8 { get; set; } = new V8();private Formset Formset { get; set; } = new Formset();private Pt_onnx Pt_onnx { get; set; } = new Pt_onnx();public Index(){InitializeComponent();CheckForIllegalCrossThreadCalls = false; // 允許跨線程訪問控件LssTools.MetroRichTextBox = richTextBox1;MyTraceListener myTraceListener = new MyTraceListener(richTextBox1);Debug.Listeners.Add(myTraceListener);}private void Index_Load(object sender, EventArgs e){Formset.Dock = DockStyle.Fill;TabPageset.Controls.Add(Formset);V5.Dock = DockStyle.Fill;TabPageV5.Controls.Add(V5);V8.Dock = DockStyle.Fill;TabPageV8.Controls.Add(V8);Pt_onnx.Dock = DockStyle.Fill;TabPagePT_ONNX.Controls.Add(Pt_onnx);poisonTabControl1.SelectedIndex = 0;}}

2. 數據集管理

Dataset.cs 提供數據集處理核心功能:

  • 支持COCO格式數據集,自動檢測images和labels文件夾結構
  • 實現訓練集/驗證集/測試集自動分割(默認比例可通過滑塊調整)
  • 內置80種常見物體類別名稱映射(person, bicycle, car等)
  • 提供類別名稱編輯功能,可通過 Edit_ini.cs 修改標簽文件中的類別ID
  public partial class Edit_ini : Form{private string Paths { set; get; }public List<int> Ints { set; get; } = new List<int>();public Edit_ini(List<int> ints, string path){Paths = path;Ints = ints;InitializeComponent();int k = 0;dataGridView1.Rows.Clear();foreach (int i in ints){dataGridView1.Rows.Add(k++, i.ToString());}}private void button2_Click(object sender, EventArgs e){this.DialogResult = DialogResult.Cancel;this.Close();}private void button1_Click(object sender, EventArgs e){for (int i = 0; i < Ints.Count; i++){if (dataGridView1.Rows[i].Cells[1].Value.ToString() == Ints[i].ToString()){continue;}else{foreach (string filePath in Directory.EnumerateFiles(Paths, "*.*", SearchOption.AllDirectories)){string fileExtension = Path.GetExtension(filePath).ToLower();if (fileExtension == ".txt"){string[] lines = File.ReadAllLines(filePath);int index = 0;foreach (string line in lines){string[] parts = line.Split(' ');if (int.Parse(parts[0]) == Ints[i]){lines[index] = line.Replace(Ints[i].ToString(), dataGridView1.Rows[i].Cells[1].Value.ToString());}index++;}File.WriteAllLines(filePath, lines);}}}}this.DialogResult = DialogResult.OK;this.Close();}}

3. 模型訓練配置

V5和V8模塊分別對應YOLOv5和YOLOv8模型的訓練配置:

  • 數據集路徑選擇與有效性驗證
  • 類別數量自動檢測與顯示
  • 訓練參數可視化配置
  • 支持GPU/CPU訓練設備自動檢測與切換 Formset.cs
  public Formset(){InitializeComponent();}private void Formset_Load(object sender, EventArgs e){var temp = LssTools.Read_json("Setsystem.json");if (temp.Item1 == false){LssTools.LSSMessageTip.Showwaing("讀取配置文件失敗,可能是文件不存在或格式錯誤。");return;}var Setfile = temp.Item3;if (Setfile.Count != 0){LssTools.Anacondapath = Setfile["Anacondapath"].ToString();LssTools.Yolov5path = Setfile["Yolov5path"].ToString();LssTools.Weightsv5path = Setfile["Weightsv5path"].ToString();LssTools.Yolov8path = Setfile["Yolov8path"].ToString();LssTools.Weightsv8path = Setfile["Weightsv8path"].ToString();LssTools.DOS = Setfile["DOS"].ToString();TextBoxEditA3.Text = LssTools.Anacondapath;TextBoxEditY5.Text = LssTools.Yolov5path;TextBoxEditY8.Text = LssTools.Yolov8path;TextBoxEditWEIV5.Text = LssTools.Weightsv5path;TextBoxEditWEIV8.Text = LssTools.Weightsv8path;ComboBoxDOS.SelectedIndex = LssTools.DOS.Equals("activate") ? 0 : 1; // 默認選擇第一個選項,如果DOS為空則選擇第二個選項}else{LssTools.LSSMessageTip.Showwaing("讀取配置文件失敗,可能是文件不存在或格式錯誤。");}if (LssTools.HasCudaGPU()){LssTools.WriteLine("檢測到CUDA GPU,默認使用GPU進行訓練。");GPU_CPU.SelectedIndex = 0; // 如果有CUDA GPU,默認選擇GPULssTools.CPU_GPUV5 = "--device 0 "; // 使用GPULssTools.CPU_GPUV8 = ""; // 使用GPU}else{LssTools.WriteLine("未檢測到CUDA GPU,默認使用CPU進行訓練。");GPU_CPU.SelectedIndex = 1; // 如果沒有CUDA GPU,默認選擇CPULssTools.CPU_GPUV5 = ""; // 使用CPULssTools.CPU_GPUV8 = "#"; // 使用CPU}   }private void ButtonAPPID_Click(object sender, EventArgs e){if (string.IsNullOrEmpty(TextBoxEditA3.Text) || string.IsNullOrEmpty(TextBoxEditY5.Text) || string.IsNullOrEmpty(TextBoxEditWEIV5.Text) || string.IsNullOrEmpty(TextBoxEditY8.Text) || string.IsNullOrEmpty(TextBoxEditWEIV8.Text)){LssTools.LSSMessageTip.Showwaing("請先設置Anaconda3、yolov和weights路徑,不能為空");return;}LssTools.WriteLine("正在保存配置文件...");if (GPU_CPU.Text.Equals("GPU")){LssTools.CPU_GPUV5 = "--device 0 "; // 使用GPULssTools.CPU_GPUV8 = ""; // 使用GPU}else{LssTools.CPU_GPUV5 = ""; // 使用CPULssTools.CPU_GPUV8 = "#"; // 使用CPU}var result = LssTools.Writer_json("Anacondapath#Yolov5path#Weightsv5path#Yolov8path#Weightsv8path#DOS",$"{TextBoxEditA3.Text}#{TextBoxEditY5.Text}#{TextBoxEditWEIV5.Text}#{TextBoxEditY8.Text}#{TextBoxEditWEIV8.Text}#{ComboBoxDOS.Text}", true, "Setsystem.json");if (result.Item1 == false){LssTools.LSSMessageTip.Showwaing("保存路徑失敗:" + result.Item2);LssTools.WriteLine("保存路徑失敗:" + result.Item2);return;}else{LssTools.LSSMessageTip.Showok("配置文件保存成功!");LssTools.WriteLine("配置文件保存成功...");}}private void Button_open_Click(object sender, EventArgs e){using (FolderBrowserDialog folderBrowserDialog = new FolderBrowserDialog()){if (folderBrowserDialog.ShowDialog() == DialogResult.OK){var button = sender as MaterialButton;if (button == null){LssTools.LSSMessageTip.Showwaing("按鈕類型錯誤,請檢查代碼。");LssTools.WriteLine("按鈕類型錯誤,請檢查代碼。");return;}switch (button.Name){case "materialButton1":LssTools.Anacondapath = folderBrowserDialog.SelectedPath;TextBoxEditA3.Text = LssTools.Anacondapath;LssTools.LSSMessageTip.Showok("Anaconda3路徑設置成功!");LssTools.WriteLine("Anaconda3路徑設置成功");break;case "materialButton2":LssTools.Yolov5path = folderBrowserDialog.SelectedPath;TextBoxEditY5.Text = LssTools.Yolov5path;LssTools.LSSMessageTip.Showok("yolov5路徑設置成功!");LssTools.WriteLine("yolov5路徑設置成功");break;case "materialButton3":LssTools.Yolov8path = folderBrowserDialog.SelectedPath;TextBoxEditY8.Text = LssTools.Yolov8path;LssTools.LSSMessageTip.Showok("yolov8路徑設置成功!");LssTools.WriteLine("yolov8路徑設置成功");break;case "materialButton4":LssTools.Weightsv5path = folderBrowserDialog.SelectedPath;TextBoxEditWEIV5.Text = LssTools.Weightsv5path;LssTools.LSSMessageTip.Showok("yolov5權重路徑設置成功!");LssTools.WriteLine("yolov5權重路徑設置成功");break;case "materialButton5":LssTools.Weightsv8path = folderBrowserDialog.SelectedPath;TextBoxEditWEIV8.Text = LssTools.Weightsv8path;LssTools.LSSMessageTip.Showok("yolov8權重路徑設置成功!");LssTools.WriteLine("yolov8權重路徑設置成功");break;default:LssTools.LSSMessageTip.Showok("未知按鈕,請檢查代碼。");LssTools.WriteLine("未知按鈕,請檢查代碼");break;}}else{LssTools.LSSMessageTip.Showwaing("您取消了,選擇路徑操作");}}}}

4. 模型格式轉換

Pt_onnx.cs 實現PyTorch模型到ONNX格式的轉換:

  • 通過命令行調用Python腳本執行轉換
  • 實時進度顯示與結果提示
  • 支持自定義模型路徑和輸出目錄
    轉換腳本示例:
    from ultralytics import YOLO model = YOLO(r'{path}') model.export(format='onnx')

5. 系統工具與日志

LssTools.cs 提供核心工具功能:

  • JSON配置文件讀寫(Setsystem.json)
  • CUDA GPU檢測與信息顯示
  • 日志輸出與RichTextBox控件綁定
  • 跨線程安全的UI操作
    MyTraceListener.cs 實現自定義日志監聽,將調試信息實時輸出到界面。

技術架構

開發環境

  • 框架 : .NET Framework 4.8.1 App.config
  • UI組件 : ReaLTaiizor 3.8.1.2(現代化Windows Forms控件庫)
  • 數據處理 : Newtonsoft.Json 13.0.3(JSON序列化/反序列化)
  • CUDA支持 : ManagedCuda-100 10.0.31(GPU加速訓練)

項目結構

HL.AI.train/
├── Model/              # YOLOv5/v8模型
相關實現
│   ├── V5.cs           # YOLOv5訓練模塊
│   └── V8.cs           # YOLOv8訓練模塊
├── Properties/         # 程序集信息
├── App.config          # 應用配置
├── Dataset.cs          # 數據集處理
├── Formset.cs          # 系統設置界面
├── LssTools.cs         # 工具類庫
├── Pt_onnx.cs          # 模型轉換模塊
└── Program.cs          # 應用入口

安裝與配置

環境要求

  • Windows操作系統
  • .NET Framework 4.8.1運行時
  • Anaconda3環境(用于Python腳本執行)
  • CUDA Toolkit(可選,用于GPU加速)
  • YOLOv5/v8項目文件

首次配置步驟

  1. 啟動程序后,在"系統設置"選項卡配置以下路徑:
    • Anaconda3安裝路徑
    • YOLOv5項目路徑
    • YOLOv8項目路徑
    • 權重文件路徑
  2. 選擇訓練設備(GPU/CPU)
  3. 點擊"保存配置"按鈕完成初始化

使用指南

數據集準備

  1. 在V5/V8選項卡點擊"選擇數據集路徑"
  2. 確保數據集目錄包含images和labels子文件夾
  3. 程序自動檢測類別數量和匹配的圖像-標簽對
  4. 如需修改類別名稱,點擊"編輯類別名稱"按鈕進行調整

模型訓練

  1. 設置訓練集/驗證集/測試集比例
  2. 配置訓練參數(隱含在UI操作中)
  3. 點擊開始訓練按鈕(具體按鈕名稱需根據界面確定)
  4. 通過底部日志區域監控訓練進度

模型轉換

  1. 在Pt_onnx選項卡設置:
    • PT文件所在位置
    • ONNX激活項目集路徑
  2. 點擊"轉換"按鈕
  3. 查看轉換進度和結果提示

版本歷史

  • v1.2.1.0 : 當前版本,支持YOLOv5/v8訓練和模型轉換

軟件相關截圖

在這里插入圖片描述
在這里插入圖片描述

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

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

相關文章

新手向:從零理解LTP中文文本處理

如果你想了解計算機如何處理中文文本&#xff0c;這篇博客就是為你準備的。我們將通過一個真實的代碼案例&#xff0c;深入淺出地解析中文分詞技術&#xff0c;保證每一步都講得明明白白&#xff01; 什么是中文分詞&#xff1f; 想象你讀英文句子時&#xff0c;單詞之間有空…

圖像采集卡選型詳細指南

選擇圖像采集卡是構建機器視覺或圖像處理系統的關鍵一步&#xff0c;需要綜合考慮硬件接口、性能需求、軟件兼容性、應用場景等多個維度。以下是詳細的選型指南&#xff0c;幫助你做出明智決策&#xff1a;一、核心選型因素1. 相機接口匹配常見工業相機接口&#xff1a;GigE Vi…

核心網絡協議的深度解析

1. IP協議&#xff08;網際層核心&#xff09;&#xff08;1&#xff09;IPv4 vs IPv6特性IPv4IPv6地址長度32位&#xff08;約42億地址&#xff09;128位&#xff08;3.410?地址&#xff09;表示方法點分十進制&#xff08;如192.168.1.1&#xff09;冒號分隔十六進制&#x…

Nexus zkVM 3.0 及未來:邁向模塊化、分布式的零知識證明

1. 引言 2025年3月&#xff0c;Nexus團隊發布了 Nexus zkVM 3.0&#xff0c;本文將更詳細地介紹其設計意圖與功能。 零知識虛擬機&#xff08;zkVM&#xff09;領域正在迅速演進&#xff0c;推動力來自于對可擴展、高效且可靠的系統的需求——這些系統應能夠在不受計算規模、…

thinkphp使用redis搶單實例

問題&#xff1a;當客戶預約時產生一個訂單&#xff0c;該訂單需要業務人員搶單后跟進一&#xff0c;產生訂單時設置redis$redis new Redis(); $ydkey "yyqd_".$insertId; $exptime 600;//過期時間 600秒 $redis->lpush($ydkey,$$data);//壓入訂單ID $redis-&g…

Java SE--繼承

一.為什么要繼承呢&#xff1f;可以保持原有類的功能上擴展新功能&#xff0c;繼承主要解決的問題是共性的抽取&#xff0c;實現代碼的復用二.繼承的語法舉例&#xff1a;相關圖像&#xff1a;三.父類成員訪問1.子類中&#xff08;注意&#xff09;訪問父類的成員變量了解原因&…

掌握 Winget 安裝:從 Microsoft Store 到 winget-install 腳本的完整方案

掌握 Winget 安裝&#xff1a;從 Microsoft Store 到 winget-install 腳本的完整方案 Winget 作為 Windows 官方推出的命令行包管理工具&#xff0c;能極大簡化軟件的安裝、升級與卸載流程。本文將系統梳理從官方渠道到第三方工具的多種安裝方式&#xff0c;涵蓋普通用戶、開發…

簡單來說:Redis的增量同步是怎么一回事

簡單來說&#xff1a; 增量同步就是Master 只把比 Slave 新的數據發給 Slave&#xff0c;而不是發送全部數據。它像一個持續更新的直播流&#xff0c;或者我之前比喻的“每日更新期刊”。Slave 不用重新加載所有數據&#xff0c;只需要接收和應用這些新的更新。 這就像&#xf…

MySQL 安全優化指南:保護你的數據庫免受攻擊

在當今高度互聯的數字世界中,數據是企業的核心資產,而數據庫則是存儲這些資產的堡壘。作為最流行的開源關系型數據庫之一,MySQL 被廣泛應用于各種業務場景。然而,其普及性也使其成為網絡攻擊者青睞的目標。一旦數據庫被攻破,可能導致敏感數據泄露、業務中斷、聲譽受損,甚…

界面控件Telerik UI for WinForms 2025 Q2亮點 - 支持.NET 10 Preview

隨著2025年第二季度新版本的發布&#xff0c;Progress Telerik通過流行的集成IDE的AI編碼助手&#xff0c;基于提示的樣式和基于GenAI的報表見解重新定義了開發人員的工作效率&#xff01; Telerik和Kendo UI在構建尖端應用程序時繼續推動開發人員工作效率提升&#xff0c;202…

DVWA靶場通關筆記-驗證碼繞過reCAPTCHA(Medium級別)

目錄 一、reCAPTCHA 二、代碼審計&#xff08;Medium級別&#xff09; 1、滲透準備 &#xff08;1&#xff09;配置security為Medium級別。 &#xff08;2&#xff09;配置RECAPTCHA參數 &#xff08;3&#xff09;再次打開靶場 2、源碼分析 &#xff08;1&#xff09;…

人工智能安全基礎復習用:對抗樣本檢測與防御

一、對抗樣本&#xff08;Adversarial Examples&#xff09;定義&#xff1a;對輸入樣本添加人眼無法察覺的細微干擾&#xff0c;導致模型以高置信度輸出錯誤結果。對抗樣本的分布通常偏離自然數據分布&#xff0c;與正常樣本在模型中間層/輸出層的分布存在差異。核心目標&…

[數學基礎] 矩陣的秩及其應用

深入淺出&#xff1a;矩陣的秩及其應用 文章目錄深入淺出&#xff1a;矩陣的秩及其應用一、數學定義二、核心作用三、計算方法與步驟方法1&#xff1a;高斯消元法&#xff08;最常用&#xff09;方法2&#xff1a;奇異值分解&#xff08;SVD&#xff09;方法3&#xff1a;行列式…

LKH-3算法求解TSP問題基本原理與應用

通俗理解LKH-3算法 LKH-3&#xff08;Lin-Kernighan-Helsgaun&#xff09;是求解**旅行商問題&#xff08;TSP&#xff09;**的最強啟發式算法之一&#xff0c;由丹麥計算機科學家Keld Helsgaun在LKH-2基礎上改進而來。它的核心思想是&#xff1a;通過智能的“局部破壞與修復”…

游戲開發學習記錄

初始化只是第一次實例化的時候調用&#xff0c;show和unshow是打開界面和關閉界面的時候&#xff0c;會多次調用 在一個腳本里面show是每一次打開界面的時候需要做的事情&#xff0c;而Init是初始化。UIMgr里面的數據結構&#xff1a;為什么我要先從數據結構入手呢&#xff1f;…

一級緩存與二級緩存深度剖析:作用域、配置與同步方案全解析

引言 在分布式系統與高并發場景下&#xff0c;緩存機制已成為提升系統性能的關鍵技術。本文從作用域、失效機制、配置實踐到同步方案&#xff0c;系統化解析一級緩存與二級緩存的核心差異與工程實踐。 一、一級緩存&#xff1a;會話級數據加速器 1.1 作用域與生命周期 作用域&a…

OneCode MQTT插件開發實戰:基于Paho.Client的物聯網通信解決方案

引言 在物聯網應用開發中&#xff0c;MQTT協議因其輕量、低帶寬占用的特性被廣泛采用。OneCode平臺提供的xui.MQTT插件基于Eclipse Paho.Client實現了完整的MQTT通信能力&#xff0c;本文將從插件用途、核心實現、開發要點和功能擴展四個維度&#xff0c;詳解如何基于該插件構建…

1.1_5_1 計算機網絡的性能指標(上)

在這個小節中我們要學習計算機網絡的性能指標&#xff0c;我們在考研當中主要掌握這樣的七個性能指標&#xff0c;分別是速率、帶寬、吞吐量、時延、時延帶寬積、往返時延和信道利用率。我會把相關性比較緊密的性能指標放在一起講解。在這個視頻中&#xff0c;我們先來學習前三…

Python 性能優化指南:深入剖析代碼分析與優化工具

Python 性能優化指南:深入剖析代碼分析與優化工具 在 Python 的廣泛應用場景中,性能優化既是挑戰,也是機遇。無論是構建 Web 應用還是處理數據分析,理解代碼性能瓶頸并有效優化至關重要。本文將探討 Python 代碼性能分析的核心方法,并逐步解析關鍵工具的使用技巧,帶您從…

力扣打卡第二十一天 中后遍歷+中前遍歷 構造二叉樹

106. 從中序與后序遍歷序列構造二叉樹 給定兩個整數數組 inorder 和 postorder &#xff0c;其中 inorder 是二叉樹的中序遍歷&#xff0c; postorder 是同一棵樹的后序遍歷&#xff0c;請你構造并返回這顆 二叉樹 。 示例 1: 輸入&#xff1a;inorder [9,3,15,20,7], postor…