YOLOv12環境配置,手把手教你使用YOLOv12訓練自己的數據集和推理(附YOLOv12網絡結構圖),全文最詳細教程


文章目錄

  • 前言
  • 一、YOLOv12代碼下載地址
    • 1.YOLOv12模型結構圖
  • 二、YOLO環境配置教程
    • 1.創建虛擬環境
    • 2.激活虛擬環境
    • 3.查詢自己電腦可支持最高cuda版本是多少(無顯卡的同學可以跳過這個步驟)
    • 4.pytorch安裝
    • 5.驗證 PyTorch GPU 是否可用(沒有顯卡的同學不用看這個步驟)
    • 6.安裝其他依賴
    • 7.補充(flash_attn環境)
  • 三、數據集準備
    • 1.數據集標注軟件
    • 2.voc數據集格式轉換
    • 3.數據集劃分
    • 4.修改yolo的訓練配置文件
  • 四、YOLOv12推理
  • 五、YOLOv12訓練
  • 六、解決訓練過程中斷怎么繼續上次訓練
  • 總結


前言

YOLO 系統尊嘟太卷了吧,YOLOv11 還沒玩明白,YOLOv12 就重磅來襲,YOLOv12 是由紐約州立大學聯合中科院在 2025年2月19 日發布,從 YOLOv12 論文題目我們大概就知道做了那些更新 ,下圖是YOLOv12 在 COCO 數據集上的性能表現
在這里插入圖片描述

YOLOv12 創新點:

  • 引入區域注意力機制(area-attention):通過引入十字形窗口自我注意機制,沿水平和垂直條紋計算注意力機制,縱橫交錯的注意機制。如下圖所示,區域注意力采用最多簡單的等分方法,將特征地圖垂直或水平劃分為 L 個區域。(默認值為4)。這樣可以避免復雜操作時同時保證接收野大,效率高。
    在這里插入圖片描述
  • 作者設計了殘差高效層聚合網絡 (R-ELAN):R-ELAN結構類似CSPNet,結構如下圖的(d)所示,可以看到該結構中間層是A2(區域注意力機制),更多具體信息可以看 YOLOv12 的中的 A2C2f 模塊代碼
    在這里插入圖片描述
    理論詳解可以參考鏈接:論文地址

一、YOLOv12代碼下載地址

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

如果官網打不開的話,我已經下載好 YOLOv12 源碼+預訓練模型+訓練腳本+推理腳本+訓練測試數據集+數據集處理腳本,從公眾號發送關鍵字 :YOLOv12源碼 ,即可獲取完整源碼

1.YOLOv12模型結構圖

根據 yolov12.yaml 畫出 yolo 整體結構圖,對比 YOLOv11 網絡結構,YOLOv12 網絡結構做了優化,減少總層數,YOLOv12 模型結構如下圖所示:
在這里插入圖片描述


二、YOLO環境配置教程

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

我用之前的環境運行,報錯:mportError: cannot import name ‘scaled_dot_product_attention’ from ‘torch.nn.functional’ ,我猜應該是 pytorch 版本太低了,沒有這個模塊,那我只能在創建一個虛擬環境用于YOLOv12,那么接下來重新創建新的虛擬環境

在這里插入圖片描述

1.創建虛擬環境

python 版本為 3.9、 3.10、3.11 都行,我選擇3.11版本的

終端輸入命令創建,(-n 后面接你要創建虛擬環境的名稱,這個可以自己起一個名稱,不一定要跟我一樣):

conda create -n yolov12 python=3.11

在這里插入圖片描述

輸入 y 回車,等待下載即可
在這里插入圖片描述

2.激活虛擬環境

激活虛擬環境語法是 conda activate myenv,myenv是自己的虛擬環境名稱,命令如下:

conda activate yolov12

激活成功括號變成你剛剛創建虛擬環境名字

在這里插入圖片描述

3.查詢自己電腦可支持最高cuda版本是多少(無顯卡的同學可以跳過這個步驟)

那怎么知道電腦有沒有顯卡,在開始菜單搜索設備管理器打開
在這里插入圖片描述

在這里插入圖片描述
有顯卡的同學還需要進行查詢自己電腦支持最高 cuda 版本是多少,在終端輸入命令 nvidia-smi 查看
在這里插入圖片描述
可以看到我電腦支持最高 cuda 版本是 12.5,所以可以安裝向下版本的 cuda,那么知道這個有什么用,當然有用,可以看到 pytorch 官網安裝命令都帶有 cuda 版本號在這里插入圖片描述
假設你電腦都不支持這么高的cuda 版本,你安裝了 pytorch 那么你就用不了 GPU 了。如果你電腦支持cuda太低,你可以更新英偉達驅動,更新英偉達驅動直達地址: 英偉達驅動,根據自己電腦選擇下載,安裝超級簡單,直接下一步下一步就行,安裝完成之后重啟電腦,在終端輸入 nvidia-smi 命令,來查看可支持的最高 cuda 版本

4.pytorch安裝

看了一眼官網的配置文件,官網安裝pytorch是2.2.2的
在這里插入圖片描述
電腦有英偉達顯卡就安裝帶 cuda 的 pytorch,電腦沒有顯卡則安裝 cpu 的 pytorch,去 pytorch 官網找到合適版本復制命令安裝就行 pytorch官網直達地址是:pytorch官網,復制命令時候 -c 后面不用復制
在這里插入圖片描述
復制命令到終端,出現下圖這樣,或者安裝不了的,不急,我們換一種方式安裝,就是通過離線下載安裝庫進行安裝,我換源還是安裝不了,那么我們就通過另外一種方式安裝,就是下載 whl 安裝包,這種成功率達到 99% 。
在這里插入圖片描述

把這個下圖這幾個版本記住,之后離線下載對應版本就行
在這里插入圖片描述

離線安裝包下載地址:pytorch離線安裝包下載地址

打開鏈接,找到版本下載即可,說一下文件名的意思,

  • cu118:是 cuda 版本是 11.8,cu102 就是 cuda 版本是 10.2 的,依次類推
  • cp311:是 Python 的版本是3.11,cp39就是Python版本是3.9,依次類推
  • win:是 Windows 操作系統的意思,這個大家應該看得懂的

因為前面我按照 python 版本為 3.11 的,那么就選擇 cp311 的,系統選擇 win,這個版本號一定要對上 python 的版本號哦 ,之后點擊下載就行,大家根據自己需求選擇安裝即可

在這里插入圖片描述
如果沒有顯卡就選擇 cpu 的
在這里插入圖片描述
除了下載 pytorch,還需要下載對應版本的 torchvision 和 torchaudio(前面叫你記住版本號了哦)
在下載對應版本 torchvision,我的是 torchvision==0.17.2
在這里插入圖片描述

在下載對應版本的 torchaudio,我的應該是 torchaudio==2.2.2

在這里插入圖片描述
下載完成,在終端進入文件所在的位置,我的在 E:\3-瀏覽器下載的文件,先進入E盤,再 cd 切換路徑,之后 pip install 文件名 安裝即可,(小技巧:打文件名時候可以用 tab 鍵補全,關注我不僅學到一個實用的小技巧哦)在這里插入圖片描述
記得激活虛擬環境在安裝
在這里插入圖片描述
把剛剛下載三個文件按照順序安裝即可,順序是: 首先是 torch,其次是 torchvision,最后是 torchaudio

5.驗證 PyTorch GPU 是否可用(沒有顯卡的同學不用看這個步驟)

安裝完成后,測試 GPU 是否可用,如果輸出為 True 則表示 GPU 可以使用,要是輸出 False 代表不可以使用 GPU 加速,輸出 False 也是可以使用的,一般 CPU 訓練會很慢,慢到你懷疑人生那種,不過用來推理還是可以的。要是沒有顯卡租一個服務器訓練模型就行,如果這個反響比較大,我也會出一期在服務器怎么訓練的教程。

在終端輸入 python
在這里插入圖片描述
復制下面命令到終端即可

import torch
print(torch.__version__)
print(torch.cuda.is_available())
print(torch.cuda.device_count())

在這里插入圖片描述
看到這里 pytorch 安裝完成

6.安裝其他依賴

安裝 requirements.txt 文件的環境,可以看到 YOLOv12 官網給出了很多庫版本,其實有些我們用不到,我拿 YOLOv8 的 requirements.txt 來安裝即可,到時候缺什么我們在單獨安裝,不僅減少電腦內存
下圖是 YOLOv12 官網的 requirements.txt 文件,把里面內容刪了,復制我給的庫到 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

復制完如下圖所示:
在這里插入圖片描述

接下來正常安裝就行,這個安裝步驟我之前視頻講過,大家有興趣可以看我之前的安裝視頻,在自己的虛擬環境里面安裝,安裝命令如下:

pip install -r requirements.txt

在這里插入圖片描述
安裝完成我們測試推理,運行推理文件報錯,人家提示你沒有安裝這個庫,之后缺什么就安裝什么庫
在這里插入圖片描述
安裝命令如下:

pip install huggingface-hub==0.23.2

在這里插入圖片描述

最后完美推理成功
在這里插入圖片描述

7.補充(flash_attn環境)

從官網的環境配置文件看出還給出了 flash_attn 庫,從庫的名字看出是在linux 下安裝的,那么在 windows 系統當然安裝不了 linux 版本的庫,如需在 windows 安裝 flash_attn 庫,則需要找 windows 版本的 flash_attn 庫。網上應該有教程在 windows 版本安裝 flash_attn 庫(需要安裝自行網上搜索找找看,后續有這個安裝需求我也更新安裝步驟出來),我就沒有安裝照樣是可以訓練和推理的,下文繼續詳細講一下。
在這里插入圖片描述
從官網代碼可以看出,AAttn 類中的 forward 方法中人家已經寫好了,安裝有 flash_attn 的話,則使用 flash_attn_func 函數計算,未安裝或未啟用flash_attn,則使用標準的縮放點積注意力(sdpa)函數來計算;最后一種情況是在 cpu 訓練,則是執行最后一段代碼。也就說有沒有安裝 flash_attn庫,照樣可以訓練,只是注意力計算方式有所區別,應該不會對結果產生很大影響吧(大家具體實驗試試)。
在這里插入圖片描述

如果安裝有 flash_attn ,不想用 flash_attn_func 計算,可以通過 USE_FLASH_ATTN = True 參數設置,不需要設置 False 即可
在這里插入圖片描述


三、數據集準備

1.數據集標注軟件

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

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

2.voc數據集格式轉換

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

# -*- coding: utf-8 -*-
"""
@Auth :掛科邊緣
@File :xml轉txt.py
@IDE :PyCharm
@Motto :學習新思想,爭做新青年
@Email :179958974@qq.com
"""
import xml.etree.ElementTree as ET
import os, cv2
import numpy as npclasses = []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.數據集劃分

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

# -*- coding: utf-8 -*-
"""
@Auth : 掛科邊緣
@File :劃分.py
@IDE :PyCharm
@Motto:學習新思想,爭做新青年
@Email :179958974@qq.com
"""import os, shutil
from sklearn.model_selection import train_test_splitval_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)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)

需要修改的地方如下
在這里插入圖片描述
下面四個參數只需在自己電腦任意位置新建一個文件夾就行,用于存放生成的訓練集和驗證集,比如新建一個文件夾叫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']

四、YOLOv12推理

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

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

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

(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=False,)

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

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


五、YOLOv12訓練

(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\YOLOv12\yolov12-main\ultralytics\cfg\models\v12\yolov12.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表示不緩存。

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

沒有加載預訓練模型,訓練成功:
在這里插入圖片描述

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


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

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

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

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


總結

YOLOv12 訓練自己數據集和推理到此結束,我已經下載好 YOLOv12 源碼+預訓練模型+訓練腳本+推理腳本+訓練測試數據集+數據集處理腳本,從公眾號發送關鍵字 :YOLOv12源碼,即可獲取完整源碼,有問題可以留言,創作不易,請幫忙點個愛心唄,謝謝
在這里插入圖片描述

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

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

相關文章

ES6(ES2015)特性全解析

ES6(ECMAScript 2015)是 JavaScript 語言發展史上的一個重要里程碑,它引入了許多新的語法特性和功能,提升了代碼的可讀性、可維護性和開發效率。 1. 塊級作用域變量:let 和 const ES6 引入了 let 和 const 關鍵字&am…

jvm 垃圾收集算法 詳解

垃圾收集算法 分代收集理論 垃圾收集器的理論基礎,它建立在兩個分代假說之上: 弱分代假說:絕大多數對象都是朝生夕滅的。強分代假說:熬過越多次垃圾收集過程的對象就越難以消亡。 這兩個分代假說共同奠定了多款常用的垃圾收集…

數字孿生+AR/VR的融合創新

目錄 引言:工業元宇宙的興起與技術基石數字孿生:工業元宇宙的數字底座 2.1 數字孿生的概念與關鍵要素 2.2 數字孿生在工業領域的應用 2.3 數字孿生的技術架構 (Mermaid Graph) AR/VR:工業元宇宙的沉浸式體驗層 3.1 AR/VR 的概念與技術原理…

圖解C#教程 第五版 第4章 類型、存儲和變量 筆記

第4章 類型、存儲和變量 筆記 4.1 C# 程序是一組類型聲明 C程序是一組函數和數據類型,C程序是一組函數和類, 而C#程序是一組類型聲明,具有如下特征: C# 程序或 DLL 的源代碼是一組類型聲明類型聲明中必須有一個包含 Main 方法…

SpringBoot整合SSM

1. SSM整合步驟 今天帶大家學習一下基于SpringBoot的SSM整合案例&#xff0c;話不多說&#xff0c;咱們開始&#xff0c;要實現SSM整合&#xff0c;有以下這么幾步 導入依賴創建yml配置文件dao層靜態頁面測試類進行測試 1.1 導入依賴 <?xml version"1.0" enco…

多面體模型-學習筆記2

1&#xff09; 多面體模型被應用于解決程序變換問題&#xff0c;并有效地推動了程 序自動并行化等技術的發展。與傳統的解決程序變換的方法相比&#xff0c;多面體模型 具有許多優勢[5]。多面體模型提供了一種強大的抽象&#xff0c;將每個語句的動態語句執 行實例視作一個多面…

基于django+vue的健身房管理系統-vue

開發語言&#xff1a;Python框架&#xff1a;djangoPython版本&#xff1a;python3.8數據庫&#xff1a;mysql 5.7數據庫工具&#xff1a;Navicat12開發軟件&#xff1a;PyCharm 系統展示 會員信息管理 員工信息管理 會員卡類型管理 健身項目管理 會員卡管理 摘要 健身房管理…

【Linux系統】Linux環境變量:系統配置的隱形指揮官

。# Linux系列 文章目錄 前言一、環境變量的概念二、常見的環境變量三、環境變量特點及其相關指令3.1 環境變量的全局性3.2、環境變量的生命周期 四、環境變量的組織方式五、C語言對環境變量的操作5.1 設置環境變量&#xff1a;setenv5.2 刪除環境變量:unsetenv5.3 遍歷所有環境…

Spring AI中使用ChatMemory實現會話記憶功能

文章目錄 1、需求2、ChatMemory中消息的存儲位置3、實現步驟1、引入依賴2、配置Spring AI3、配置chatmemory4、java層傳遞conversaionId 4、驗證5、完整代碼6、參考文檔 1、需求 我們知道大型語言模型 &#xff08;LLM&#xff09; 是無狀態的&#xff0c;這就意味著他們不會保…

Java 高級泛型實戰:8 個場景化編程技巧

文章目錄 一、通配符高級應用&#xff1a;靈活處理類型關系二、泛型方法與類型推斷三、泛型類的嵌套使用四、受限泛型與邊界條件五、泛型與反射結合六、泛型在函數式接口中的應用七、類型擦除與橋接方法八、自定義泛型注解總結 在Java編程中&#xff0c;泛型不僅是類型安全的保…

[藍橋杯 2024 國 B] 立定跳遠

問題描述 在運動會上&#xff0c;小明從數軸的原點開始向正方向立定跳遠。項目設置了 n 個檢查點 a1,a2,...,an且 ai≥ai?1>0。小明必須先后跳躍到每個檢查點上且只能跳躍到檢查點上。同時&#xff0c;小明可以自行再增加 m 個檢查點讓自己跳得更輕松。在運動會前&#xf…

2025年全國I卷數學壓軸題解答

第19題第3問: b b b 使得存在 t t t, 對于任意的 x x x, 5 cos ? x ? cos ? ( 5 x t ) < b 5\cos x-\cos(5xt)<b 5cosx?cos(5xt)<b, 求 b b b 的最小值. 解: b b b 的最小值 b m i n min ? t max ? x g ( x , t ) b_{min}\min_{t} \max_{x} g(x,t) bmi…

wpf在image控件上快速顯示內存圖像

wpf在image控件上快速顯示內存圖像https://www.cnblogs.com/haodafeng/p/10431387.html 如果你在尋找能夠快速在image控件刷新大圖像&#xff08;比如分辨率3000*3000的圖像&#xff09;的辦法&#xff0c;尤其是想把內存中的裸數據&#xff08;只有圖像的數據&#xff0c;不包…

解決網頁導出PDF部分內容被遮擋問題

問題描述 以學習通為例&#xff0c;在使用CtrlP打印頁面或截圖時&#xff0c;固定側邊欄會遮擋部分內容&#xff0c;影響完整內容的獲取。如下圖所示&#xff1a; 解決辦法 通過瀏覽器開發者工具臨時移除固定側邊欄&#xff0c;具體步驟如下&#xff1a; 在目標頁面右鍵點…

機器學習監督學習實戰六:五種算法對新聞組英文文檔進行文本分類(20類),詞頻統計和TF-IDF 轉換特征提取方法理論和對比解析

本文主要介紹了20 Newsgroups數據集及其在文本分類任務中的應用。20 Newsgroups數據集包含約20,000篇新聞組文檔&#xff0c;分為20個不同主題的新聞組&#xff0c;數據集被分為訓練集和測試集。在數據預處理階段&#xff0c;使用了CountVectorizer和TfidfVectorizer兩種方法將…

易學探索助手-個人記錄(十四)

項目背景 在大語言模型&#xff08;LLM&#xff09;完成指令微調&#xff08;SFT&#xff09;之后&#xff0c;雖然可以處理開放式問答任務&#xff0c;但在專業領域&#xff08;如《周易》&#xff09;仍面臨知識更新滯后、事實性薄弱等問題。為此&#xff0c;本文介紹如何通…

從“人找政策”到“政策找人”:智能退稅ERP數字化重構外貿生態

離境退稅新政核心內容與外貿企業影響 &#xff08;一&#xff09;政策核心變化解析 退稅商店網絡擴容 新政明確鼓勵在大型商圈、旅游景區、交通樞紐等境外旅客聚集地增設退稅商店&#xff0c;并放寬備案條件至納稅信用M級企業。以上海為例&#xff0c;靜安區計劃新增1000家退…

Pandas 可視化集成:數據科學家的高效繪圖指南

為什么選擇 Pandas 進行數據可視化&#xff1f; 在數據科學和分析領域&#xff0c;可視化是理解數據、發現模式和傳達見解的關鍵步驟。Python 生態系統提供了多種可視化工具&#xff0c;如 Matplotlib、Seaborn、Plotly 等&#xff0c;但 Pandas 內置的可視化功能因其與數據結…

曼昆《經濟學原理》第九版 第十一章公共物品與公共資源

一、物品分類的基本框架 排他性&#xff1a;能否阻止他人使用該物品的特性競爭性&#xff1a;一個人使用是否減少他人使用的特性 根據這兩個特性可將物品分為四類&#xff1a; 私人物品&#xff1a;既有排他性又有競爭性&#xff08;如冰淇淋、衣服&#xff09;公共物品&…

基于大模型預測原發性急性閉角型青光眼的技術方案研究大綱

目錄 一、引言二、技術方案概述三、術前階段(一)數據采集與處理(二)大模型預測(三)手術方案制定(四)麻醉方案確定(五)術前健康教育四、術中階段(一)實時數據監測與輸入(二)手術策略動態調整(三)并發癥預警與處理(四)術中健康教育五、術后階段(一)恢復監測與…