YOLOv11來了,使用YOLOv11訓練自己的數據集和推理(附YOLOv11網絡結構圖)


文章目錄

  • 前言
  • 一、YOLOv11代碼下載地址
    • 1.YOLOv11模型結構圖
  • 二、數據集準備
    • 1.數據集標注軟件
    • 2.voc數據集格式轉換
    • 3.數據集劃分
    • 4.修改yolo的訓練配置文件
  • 三、YOLO環境配置教程
    • 1.pytorch環境安裝
    • 2.其他依賴安裝
  • 四、YOLOv11訓練
  • 五、YOLOv11推理
  • 六、解決訓練過程中斷怎么繼續上次訓練
  • 總結


前言

YOLOv11 由 Ultralytics 團隊在 2024 年 9 月 30 日發布, 最新的 YOLOv11 模型在之前的 YOLO 版本引入了新功能和改進,以進一步提高性能和靈活性。YOLO11 在快速、準確且易于使用,使其成為各種目標檢測和跟蹤、實例分割、圖像分類和姿態估計任務的絕佳選擇。可以看出官網 YOLOv11 在COCO數據集上的性能表現,如下圖所示:
在這里插入圖片描述


一、YOLOv11代碼下載地址

手把手視頻安裝可以看這個視頻: 視頻安裝教程
在這里插入圖片描述

官網的源碼下載地址 :官網源碼

官網打不開的話,從我的網盤下載就行,網盤下載地址: YOLOv11原始版本源碼下載,版本為ultralytics-8.3.6,提取碼: ehhs

1.YOLOv11模型結構圖

根據 yolov11.yaml 畫出 yolo 整體結構圖,如下圖所示
在這里插入圖片描述


二、數據集準備

1.數據集標注軟件

數據集使用標注軟件標注好,我這里推薦兩個標注軟件,一個是 labelimg,另外一個是 labelme,可以在python環境,使用 pip install labelimg 或者 pip install labelme 進行安裝,看你選擇哪個標注工具標注了,我使用 labelimg 標注工具

安裝完成在終端輸入命令啟動標注軟件
在這里插入圖片描述
下面是軟件界面
在這里插入圖片描述
設置自動保存標注生成的標注文件
在這里插入圖片描述

2.voc數據集格式轉換

標注格式如果選擇VOC格式,后面需要代碼轉換格式,如果選擇yolo格式就不用轉換,voc格式轉換yolo格式代碼如下:

import xml.etree.ElementTree as ET
import os, cv2
import numpy as np
from os import listdir
from os.path import joinclasses = []def convert(size, box):dw = 1. / (size[0])dh = 1. / (size[1])x = (box[0] + box[1]) / 2.0 - 1y = (box[2] + box[3]) / 2.0 - 1w = box[1] - box[0]h = box[3] - box[2]x = x * dww = w * dwy = y * dhh = h * dhreturn (x, y, w, h)def convert_annotation(xmlpath, xmlname):with open(xmlpath, "r", encoding='utf-8') as in_file:txtname = xmlname[:-4] + '.txt'txtfile = os.path.join(txtpath, txtname)tree = ET.parse(in_file)root = tree.getroot()filename = root.find('filename')img = cv2.imdecode(np.fromfile('{}/{}.{}'.format(imgpath, xmlname[:-4], postfix), np.uint8), cv2.IMREAD_COLOR)h, w = img.shape[:2]res = []for obj in root.iter('object'):cls = obj.find('name').textif cls not in classes:classes.append(cls)cls_id = classes.index(cls)xmlbox = obj.find('bndbox')b = (float(xmlbox.find('xmin').text), float(xmlbox.find('xmax').text), float(xmlbox.find('ymin').text),float(xmlbox.find('ymax').text))bb = convert((w, h), b)res.append(str(cls_id) + " " + " ".join([str(a) for a in bb]))if len(res) != 0:with open(txtfile, 'w+') as f:f.write('\n'.join(res))if __name__ == "__main__":postfix = 'png'    # 圖像后綴imgpath = r'E:\A-畢業設計代做數據\helmet\test\images'    # 圖像文件路徑xmlpath = r'E:\A-畢業設計代做數據\helmet\test\annotations'   # xml文件文件路徑txtpath = r'E:\A-畢業設計代做數據\helmet\test\labels'      # 生成的txt文件路徑if not os.path.exists(txtpath):os.makedirs(txtpath, exist_ok=True)list = os.listdir(xmlpath)error_file_list = []for i in range(0, len(list)):try:path = os.path.join(xmlpath, list[i])if ('.xml' in path) or ('.XML' in path):convert_annotation(path, list[i])print(f'file {list[i]} convert success.')else:print(f'file {list[i]} is not xml format.')except Exception as e:print(f'file {list[i]} convert error.')print(f'error message:\n{e}')error_file_list.append(list[i])print(f'this file convert failure\n{error_file_list}')print(f'Dataset Classes:{classes}')

代碼需要修改的地方如下:
1.postfix參數填圖片的后綴,需要注意圖片格式要統一,是png格式就寫png,是jpg格式就寫jpg
2.imgpath參數填圖片所在的路徑
3.xmlpath參數填標注文件的路徑
4.txtpath參數填生成的yolo格式的文件
在這里插入圖片描述

3.數據集劃分

劃分訓練集和驗證集代碼如下:

import os, shutil
from sklearn.model_selection import train_test_splitval_size = 0.2
#test_size = 0.2
postfix = 'jpg'
imgpath = r'E:\A-畢業設計代做數據\datasets\images'
txtpath =  r'E:\A-畢業設計代做數據\datasets\labels'output_train_img_folder =r'E:\A-畢業設計代做數據\datasets\dataset_kengwa/images/train'
output_val_img_folder =  r'E:\A-畢業設計代做數據\datasets\dataset_kengwa/images/val'
output_train_txt_folder =  r'E:\A-畢業設計代做數據\datasets\dataset_kengwa\labels/train'
output_val_txt_folder =  r'E:\A-畢業設計代做數據\datasets\dataset_kengwa\labels/val'os.makedirs(output_train_img_folder, exist_ok=True)
os.makedirs(output_val_img_folder, exist_ok=True)
os.makedirs(output_train_txt_folder, exist_ok=True)
os.makedirs(output_val_txt_folder, exist_ok=True)listdir = [i for i in os.listdir(txtpath) if 'txt' in i]
train, val = train_test_split(listdir, test_size=val_size, shuffle=True, random_state=0)#todo:需要test放開# train, test = train_test_split(listdir, test_size=test_size, shuffle=True, random_state=0)
# train, val = train_test_split(train, test_size=val_size, shuffle=True, random_state=0)for i in train:img_source_path = os.path.join(imgpath, '{}.{}'.format(i[:-4], postfix))txt_source_path = os.path.join(txtpath, i)img_destination_path = os.path.join(output_train_img_folder, '{}.{}'.format(i[:-4], postfix))txt_destination_path = os.path.join(output_train_txt_folder, i)shutil.copy(img_source_path, img_destination_path)shutil.copy(txt_source_path, txt_destination_path)for i in val:img_source_path = os.path.join(imgpath, '{}.{}'.format(i[:-4], postfix))txt_source_path = os.path.join(txtpath, i)img_destination_path = os.path.join(output_val_img_folder, '{}.{}'.format(i[:-4], postfix))txt_destination_path = os.path.join(output_val_txt_folder, i)shutil.copy(img_source_path, img_destination_path)shutil.copy(txt_source_path, txt_destination_path)#
# for i in train:
#     shutil.copy('{}/{}.{}'.format(imgpath, i[:-4], postfix), r'E:\1-cheng\4-yolo-dataset-daizuo\multi-classify\bird-boat-horse-aeroplane-sheep\dataset20231219/images/train/{}.{}'.format(i[:-4], postfix))
#     shutil.copy('{}/{}'.format(txtpath, i), r'E:\1-cheng\4-yolo-dataset-daizuo\multi-classify\bird-boat-horse-aeroplane-sheep\dataset20231219/labels/train/{}'.format(i))
#
# for i in val:
#     shutil.copy('{}/{}.{}'.format(imgpath, i[:-4], postfix), r'E:\1-cheng\4-yolo-dataset-daizuo\multi-classify\bird-boat-horse-aeroplane-sheep\dataset20231219/images/val/{}.{}'.format(i[:-4], postfix))
#     shutil.copy('{}/{}'.format(txtpath, i), r'E:\1-cheng\4-yolo-dataset-daizuo\multi-classify\bird-boat-horse-aeroplane-sheep\dataset20231219/labels/val/{}'.format(i))#todo:需要test則放開# for i in test:
#     shutil.copy('{}/{}.{}'.format(imgpath, i[:-4], postfix), 'images/test/{}.{}'.format(i[:-4], postfix))
#     shutil.copy('{}/{}'.format(txtpath, i), 'labels/test/{}'.format(i))

需要修改的地方如下
在這里插入圖片描述
下面四個參數只需在自己電腦任意位置新建一個文件夾就行,用于存放生成的訓練集和驗證集,比如新建一個文件夾叫dataset_kengwa,后面的路徑不用動,如下圖左邊的框出來的路徑覆蓋成你的就行
在這里插入圖片描述
數據集有以下兩種方式放置,都可以進行訓練,常見的數據集放置是第一種,也有開源的數據集按照第二種方式放置的,我都遇見過,也能訓練起來
在這里插入圖片描述

4.修改yolo的訓練配置文件

我們需要在項目下創建一個data.yaml的文件,文件名根據數據集名稱取,我這里方便演示直接叫data.yaml,如下圖所示
在這里插入圖片描述
代碼如下:

train: E:\Desktop\new-yolov9\yolotest\images\train  # train images (relative to 'path') 4 images
val: E:\Desktop\new-yolov9\yolotest\images\val  # val images (relative to 'path') 4 imagesnc: 2# class names
names: ['dog','cat']

三、YOLO環境配置教程

YOLOv11/YOLOv10/YOLOv9/YOLOv8/YOLOv7/YOLOv5 環境都是通用的,只需要安裝一次就行

1.pytorch環境安裝

基礎環境配置參考教程鏈接:環境配置鏈接,如果已經配置好環境可以忽略此步驟

2.其他依賴安裝

安裝requirements.txt文件的環境,需要注釋掉下面兩行,前面的步驟已經安裝了,不注釋的話會覆蓋前面的會安裝最新版本的pytorch,所以注釋掉

在這里插入圖片描述
沒有這個文件可以自己新建一個requirements.txt,然后把下面代碼復制進去就好了
在這里插入圖片描述

在這里插入圖片描述

# Ultralytics requirements
# Example: pip install -r requirements.txt# Base ----------------------------------------
matplotlib>=3.3.0
numpy==1.24.4 # pinned by Snyk to avoid a vulnerability
opencv-python>=4.6.0
pillow>=7.1.2
pyyaml>=5.3.1
requests>=2.23.0
scipy>=1.4.1
tqdm>=4.64.0# Logging -------------------------------------
# tensorboard>=2.13.0
# dvclive>=2.12.0
# clearml
# comet# Plotting ------------------------------------
pandas>=1.1.4
seaborn>=0.11.0# Export --------------------------------------
# coremltools>=7.0  # CoreML export
# onnx>=1.12.0  # ONNX export
# onnxsim>=0.4.1  # ONNX simplifier
# nvidia-pyindex  # TensorRT export
# nvidia-tensorrt  # TensorRT export
# scikit-learn==0.19.2  # CoreML quantization
# tensorflow>=2.4.1  # TF exports (-cpu, -aarch64, -macos)
# tflite-support
# tensorflowjs>=3.9.0  # TF.js export
# openvino-dev>=2023.0  # OpenVINO export# Extras --------------------------------------
psutil  # system utilization
py-cpuinfo  # display CPU info
thop>=0.1.1  # FLOPs computation
# ipython  # interactive notebook
# albumentations>=1.0.3  # training augmentations
# pycocotools>=2.0.6  # COCO mAP
# roboflow

四、YOLOv11訓練

(1)在根目錄新建一個python文件,取名為:train.py,如果之前看過我的文章,已經新建過就不用重新新建了
在這里插入圖片描述

(2)把訓練代碼復制到train.py文件,如果之前看過我的文章,已經復制過了就不用重新復制了,只需修改參數就行
訓練的代碼如下:

# -*- coding: utf-8 -*-
"""
@Auth : 掛科邊緣
@File :trian.py
@IDE :PyCharm
@Motto:學習新思想,爭做新青年
@Email :179958974@qq.com
"""
import warnings
warnings.filterwarnings('ignore')
from ultralytics import YOLOif __name__ == '__main__':model = YOLO(model=r'D:\2-Python\1-YOLO\YOLOv11\ultralytics-8.3.2\ultralytics\cfg\models\11\yolo11.yaml')# model.load('yolo11n.pt') # 加載預訓練權重,改進或者做對比實驗時候不建議打開,因為用預訓練模型整體精度沒有很明顯的提升model.train(data=r'data.yaml',imgsz=640,epochs=50,batch=4,workers=0,device='',optimizer='SGD',close_mosaic=10,resume=False,project='runs/train',name='exp',single_cls=False,cache=False,)

注意注意注意:模型配置路徑改成你自己的路徑,還有數據集配置文件也修改成你自己的路徑

在這里插入圖片描述
訓練代碼的參數解釋:

  • model參數:該參數填入模型配置文件的路徑,改進的話建議不需要填預訓練模型權重
  • data參數:該參數可以填入訓練數據集配置文件的路徑
  • imgsz參數:該參數代表輸入圖像的尺寸,指定為 640x640 像素
  • epochs參數:該參數代表訓練的輪數
  • batch參數:該參數代表批處理大小,電腦顯存越大,就設置越大,根據自己電腦性能設置
  • workers參數:該參數代表數據加載的工作線程數,出現顯存爆了的話可以設置為0,默認是8
  • device參數:該參數代表用哪個顯卡訓練,留空表示自動選擇可用的GPU或CPU
  • optimizer參數:該參數代表優化器類型
  • close_mosaic參數:該參數代表在多少個 epoch 后關閉 mosaic 數據增強
  • resume參數:該參數代表是否從上一次中斷的訓練狀態繼續訓練。設置為False表示從頭開始新的訓練。如果設置為True,則會加載上一次訓練的模型權重和優化器狀態,繼續訓練。這在訓練被中斷或在已有模型的基礎上進行進一步訓練時非常有用。
  • project參數:該參數代表項目文件夾,用于保存訓練結果
  • name參數:該參數代表命名保存的結果文件夾
  • single_cls參數:該參數代表是否將所有類別視為一個類別,設置為False表示保留原有類別
  • cache參數:該參數代表是否緩存數據,設置為False表示不緩存。

注意注意注意:一般做科研改進工作時候可以不用預訓練權重,因為用預訓練模型整體精度很難提高

我這里演示加載預訓練權重,訓練輸出如下所示:
在這里插入圖片描述

五、YOLOv11推理

(1)官網的預訓練模型下載

在這里插入圖片描述

進入官網的源碼下載地址 :官網模型下載地址,往下面拉,看到模型位置,YOLOv11 針對不同的場景和應用提供了 YOLOv11n、YOLOv11s 等不同大小的模型,具體看官網提供的,需要下載哪個,鼠標左鍵單擊下載就行。
在這里插入圖片描述

我的源碼包已經下載好了模型了,如果需要其他權重自行下載就行

(2)在根目錄新建一個python文件,取名為:detect.py
在這里插入圖片描述
(3)把推理代碼復制到detect.py文件
注意注意注意:模型路徑改成你自己的路徑,還有預測圖像也改成你自己的路徑
推理的代碼如下:

# -*- coding: utf-8 -*-
"""
@Auth : 掛科邊緣
@File :detect.py
@IDE :PyCharm
@Motto:學習新思想,爭做新青年
@Email :179958974@qq.com
"""from ultralytics import YOLOif __name__ == '__main__':# Load a modelmodel = YOLO(model=r'D:\2-Python\1-YOLO\YOLOv11\ultralytics-8.3.2\yolo11n-seg.pt')  model.predict(source=r'D:\2-Python\1-YOLO\YOLOv11\ultralytics-8.3.2\ultralytics\assets\bus.jpg',save=True,show=True,)

推理代碼的參數解釋
1.model參數:該參數可以填入模型文件路徑
2.source參數:該參數可以填入需要推理的圖片或者視頻路徑,如果打開攝像頭推理則填入0就行
3.save參數:該參數填入True,代表把推理結果保存下來,默認是不保存的,所以一般都填入True
4.show參數:該參數填入True,代表把推理結果以窗口形式顯示出來,默認是顯示的,這個參數根據自己需求打開就行,不顯示你就填False就行

分割模型推理結果如下:
在這里插入圖片描述
目標檢測模型推理結果如下:
在這里插入圖片描述

六、解決訓練過程中斷怎么繼續上次訓練

在訓練過程不小心中斷了,那怎么繼續上次的訓練了,這里先不慌,官網也的代碼寫得非常好,它有這個斷點訓練功能,那么 YOLOv8 v10 v11 處理的方法都是一模一樣,接下來直接看圖操作就行:
在這里插入圖片描述

  • model參數:該參數填入上次中斷的模型,為 last.pt

  • resume參數:該參數設置為True,則會加載上一次訓練的模型權重和優化器狀態,繼續訓練。


總結

YOLOv11訓練自己數據集和推理到此結束,有問題可以留言,創作不易,請幫忙點個愛心唄,謝謝
在這里插入圖片描述

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

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

相關文章

20250731在榮品的PRO-RK3566開發板的Android13下跑通敦泰的FT8206觸控芯片

20250731在榮品的PRO-RK3566開發板的Android13下跑通敦泰的FT8206觸控芯片 2025/7/31 17:48緣起:本文前置條件:已經解決FT8206和PRO-RK3566的硬件連接。 通過i2cdect可以掃描到i2c從機地址:0x38。【8位地址為0x70】緣起:本文只分析…

異常檢測:算法分類及經典模型概覽

第一部分:異常檢測的核心概念 在深入算法細節之前,理解異常檢測的“語境”至關重要。 1. 什么是異常檢測? 異常檢測(Anomaly Detection 或 Outlier Detection)旨在通過數據挖掘技術,識別出數據集中與大多數…

技術干貨 | 矢網DTF測量技術:透視線纜、天線與波導內部缺陷的“射頻X光”(二)

無線通信、雷達等領域中,射頻組件與傳輸系統的性能至關重要,其內部微小損傷易導致信號問題甚至系統失效。傳統測試無法精確定位故障點,排查困難。DTF測量,矢網賦予的“透視眼”!它能穿透“黑箱”,精確定位線…

【[CSP-J 2022] 上升點列】

題目 [CSP-J 2022] 上升點列 題目描述 在一個二維平面內,給定 n 個整數點 (x i ,y i? ),此外你還可以自由添加 k 個整數點。 你在自由添加 k 個點后,還需要從 nk 個點中選出若干個整數點并組成一個序列,使得序列中任意相鄰兩點間…

Kong API Gateway的十年進化史

一、技術基因的誕生(2007-2015) 2007年,三位意大利開發者Augusto Marietti、Marco Palladino和Michele Orru在博洛尼亞的一個小車庫中創立了Mashape公司。 最初他們開發了一個名為Mashup的API聚合平臺,試圖通過整合第三方API為開發…

藍牙設備配對:從機發現主機全過程

在藍牙 paging 過程中,從設備(Slave)是通過特定的掃描機制和跳頻方式來發現主設備發送的 ID 包的,具體過程如下:從設備處于特定掃描模式:從設備需要處于 Page Scan 模式,才能夠接收主設備發送的…

聚觀早報 | 三星獲特斯拉AI芯片訂單;小米16首發成安卓最強SOC;iPhone 17 Pro支持8倍光學變焦

聚觀早報每日整理最值得關注的行業重點事件,幫助大家及時了解最新行業動態,每日讀報,就讀聚觀365資訊簡報。整理丨肖羽7月29日消息三星獲特斯拉AI芯片訂單小米16首發成安卓最強SOCiPhone 17 Pro支持8倍光學變焦寧德時代滑板底盤公司啟動首輪融…

Gemini Fullstack LangGraph Quickstart(DeepSeek+Tavily版本)

文章目錄參考資料說明Gemini Fullstack LangGraph QuickstartDeepSeek Fullstack LangGraph Quickstart項目部署完整源碼地址后端部署前端部署參考資料 DeepResearch應用開發實戰網盤課件資料 說明 本文僅供學習和交流使用,感謝賦范社區相關老師的辛苦付出&#…

鋼筋計數誤差↓78%!陌訊多模態融合算法在建筑地產AI質檢的落地實踐

?摘要??針對建筑地產行業鋼筋驗收場景的高誤差痛點,本文解析陌訊視覺算法的多模態融合架構如何實現毫米級精度目標檢測。實測顯示:在Jetson Xavier NX邊緣設備上,鋼筋計數mAP0.5達??92.4%??,較基線模型提升28個百分點&…

負載均衡 LoadBalance

問題引入 我們一個服務可能會進行多機部署,也就說多臺服務器組成的集群共同對外提供一致的服務,那么我們的微服務的代碼就需要拷貝多份,部署到不同的機器上。 我們使用 IDEA 來開啟多個相同的服務 這里以 product-service 為例:…

13. 若依框架中的 Sensitive 敏感字段過濾

若依框架中有Sensitive注解,但代碼中并未使用,但該注解的實現還是比較值的學習的。該注解是一個運行時注解該注解只能應用在字段上JacksonAnnotationsInside 表示當使用Jackson序列化時,Jackson會自動識別該注解下的其他Jackson相關注解&…

git本地倉庫,工作區和暫存區的知識

一 git工作原理 Git 的工作原理基于分布式版本控制,通過管理文件的不同版本狀態,實現代碼的追蹤、協作和回溯。除了常見的工作區(Working Directory) 和暫存區(Staging Area/Index),核心還包括本…

MPU6050模塊

一:MPU6050簡介輸出一個隨姿態變化而變化的電壓,想要量化電壓,就得使用ADC轉化歐拉角偏航角(Yaw):也叫航向角,通常是繞 z 軸旋轉的角度,以 x 軸正向為起始邊,旋轉后 x 軸…

jvm的棧和堆

在 JVM 中,棧(Stack)和堆(Heap)是兩種核心內存區域,用于存儲不同類型的數據,它們的設計和存儲規則有明確區分,主要體現在存儲內容、生命周期和管理方式上:一、棧&#xf…

自動駕駛車輛的敏捷安全檔案

簡介近年來,在開發安全關鍵軟件時,敏捷開發方法的使用日益增多。敏捷方法非常適合自動駕駛汽車軟件的增量改進、運行設計域的逐步擴展以及新型智能路側單元的開發。由于車輛和智能路側單元的預期改進,未來幾年將會有新的自動駕駛車輛試驗。因…

【時時三省】(C語言基礎)動態內存分配與它的指針變量

山不在高,有仙則名。水不在深,有龍則靈。 ----CSDN 時時三省什么是內存的動態分配全局變量是分配在內存中的靜態存儲區的,非靜態的局部變量(包括形參)是分配在內存中的動態存儲區的,這個存儲區是一個稱為棧…

SpringMVC的核心架構與請求處理流程

Spring MVC 核心架構核心組件組件作用類比DispatcherServlet前端控制器,統一接收請求并協調各組件處理一個餐廳的前臺HandlerMapping根據請求URL映射到對應的處理器(Controller)路由表HandlerAdapter執行處理器方法,處理參數綁定、…

css 不錯的按鈕動畫

效果圖wxml <view class"{{status?active:}}"><view class"up-top btn"><text>向上</text></view><view class"up-left btn"><text>向左</text></view><view class"up-center b…

若依框架RuoYi-Vue-Plus-5.X的啟動,本地安裝docker,再部署 Redis、PG數據庫(智慧水務)SmartWaterServer

一、部署redis數據庫拉取鏡像 docker pull redis啟動Redis容器docker run -d --name redis-server -p 6379:6379 -v redis-data:/data redis redis-server --requirepass 123redis版本二、部署PostgreSQL 數據庫拉取鏡像docker pull postgres:15 創建數據存儲目錄、建議將數據掛…

Idea 清除無用的引用類

在IntelliJ IDEA中&#xff0c;你可以通過以下方式將選中的代碼設置為大寫&#xff1a;1. 使用快捷鍵(推薦)Windows/Linux&#xff1a;Ctrl Shift UMac&#xff1a;Cmd Shift U操作步驟&#xff1a;選中文本按下快捷鍵&#xff0c;即可在大小寫之間切換。2. 通過菜單操作選…