從0到1:使用HuggingFace的管線加載Diffusion模型生成第一張圖像!

Hugging Face系列1:詳細剖析Hugging Face網站資源

  • 前言
  • 本篇摘要
  • 1. Hugging Face Hub三大件
    • 1.1 模型
      • 1.1.1 模型簡介
      • 1.1.2 制作模型卡片
      • 1.1.3 模型下載和上傳
      • 1.1.4 模型應用
    • 1.2 數據集
      • 1.2.1 數據集簡介
      • 1.2.2 調用代碼
      • 1.2.3 AutoTrain在線微調
    • 1.3 Space應用
      • 1.3.1 內容簡介
      • 1.3.2 **虛擬換裝:IDM-VTON**
      • 1.3.3 燈光特效:IC-Light
      • 1.3.4 Artificial Analysis LLM Performance Leaderboard
      • 1.3.5 創建自己的Space應用
  • 2. Hugging Face其他資源介紹
    • 2.1 Hugging Face開源庫
    • 2.2 Hugging Face Gradio工具
    • 2.3 Hugging Face學習資源
      • 2.3.1 NLP課程
      • 2.3.2 擴散模型課程
      • 2.3.3 深度強化學習課程
    • 2.4 Hugging Face各個資源網址
  • 3. 擴散模型原理

前言

本系列文章旨在全面系統的介紹Hugging Face,讓小白也能熟練使用Hugging Face上的各種開源資源,并上手創建自己的第一個Space App,在本地加載Hugging Face管線訓練自己的第一個模型,并使用模型生成采樣數據,同時詳細解決部署中出現的各種問題。后續文章會分別介紹采樣器及其加速、顯示分類器引導擴散模型、CLIP多模態圖像引導生成、DDMI反轉及控制類大模型ControlNet等,根據反饋情況可能再增加最底層的邏輯公式和從零開始訓練LLM等,讓您從原理到實踐徹底搞懂擴散模型和大語言模型。歡迎點贊評論、收藏和關注,這些對本系列文章非常重要。

本系列文章如下:

  1. 《詳細剖析Hugging Face網站資源》:全面系統的介紹Hugging Face資源;
  2. 《從0到1:使用Hugging Face管線加載Diffusion模型生成第一張圖像》:在本地加載Hugging Face管線訓練自己的第一個模型,并使用模型生成采樣數據,同時詳細解決部署中出現的各種問題。

本篇摘要

本篇主要介紹Hugging Face。Hugging Face是一個人工智能的開源社區,是相關從業者協作和交流的平臺。它的核心產品是Hugging Face Hub,這是一個基于Git進行版本管理的存儲庫,截至2024年5月,已托管了65萬個模型、14.5萬個數據集以及超過17萬個Space應用。另外,Hugging Face還開源了一系列的機器學習庫如Transformers、Datasets和Diffusers等,以及界面演示工具Gradio。最后,Hugging Face設計開發了很多學習資源,比如與NLP(大語言模型)、擴散模型及深度強化學習等相關課程。為了吸引新手注意,廣開方便之門,本篇介紹了大量有趣的Spaces應用,比如換裝IDM-VTON、燈光特效IC-Light、LLM性能排行Artificial Analysis LLM Performance Leaderboard和自己部署的文生圖模型stable-diffusion-xl-base-1.0、對圖片精細化的stable-diffusion-xl-refiner-1.0等。只要讀者認真按著文章操作,上述操作都可自己實現。下面對以上內容逐一介紹。

1. Hugging Face Hub三大件

1.1 模型

1.1.1 模型簡介

Hugging Face收錄了大量的文生文、文生圖、文生音頻、文生視頻及圖生視頻等多模態模型。模型界面的內容大致包括以下幾方面:標簽、模型卡片、文件和版本、社區交流、訓練/部署/應用、推理API和應用的Spaces等。以大名鼎鼎的文生圖模型stabilityai/stable-diffusion-xl-base-1.0為例,各部分所在區域如下圖所示:
在這里插入圖片描述關于鏈接無法打開的說明:由于國內已禁止訪問國外大部分AI資源,所以國內用戶無法打開鏈接,這里可以使用HF的鏡像網站:https://hf-mirror.com/,用它替換鏈接中的https://huggingface.co/即可。但下載授權資源仍需hf_token,這里可通過梯子申請,Hugging Face賬戶也可通過梯子注冊。作者使用的梯子是儀表盤,便宜又好用,此外還有較貴的搬瓦工、西部世界等,適合企業級用戶,筆者身體不太好,所以更新較慢,著急的讀者可以自己點開鏈接先研究研究,具體操作見下篇的實戰部分。
因為穩定問題,所以作者并不推薦免費梯子,對比過多款梯子后,儀表盤可以說是花小錢辦大事,從此您就可以過上隨意翻墻的快樂生活!

下面逐一介紹模型內容:

  1. 模型標簽:相當于模型的關鍵字,包括使用的許可協議、安全協議、模型用途、引用的arXiv.org論文、開發庫、支持語言、部署方法等。
  2. 模型卡片:包括模型介紹(模型名稱、開發者、輸入輸出、模型結構、發布日期及狀態等)、使用說明(應用代碼或命令行、軟硬件說明、支持庫等)、訓練數據及評判基準等。
  3. 文件和版本:存儲模型版本對應的文件,不需要授權的文件可以直接下載。
  4. 社區交流:包括求助貼和問題討論等。
  5. 推理API:這里輸入prompt,模型會推理出結果,相當于一個簡易的demo。但有的程序不支持推理API。
  6. Spaces應用:使用此模型部署的Space。Space相當于一個封裝了該模型的App,并提供一個UI給用戶使用。

1.1.2 制作模型卡片

模型卡片是對模型的重要說明,是了解模型的窗口。當把模型開源到Hugging Face時,就需要制作卡片對模型進行詳細介紹,示例代碼如下所示:

from huggingface_hub import ModelCard, ModelCardData, EvalResult# Using the Template,Including Evaluation Results(Optional)
card_data = ModelCardData(language='en',license='mit',library_name='timm',tags=['image-classification', 'resnet'],datasets=['beans'],metrics=['accuracy'],eval_results=[EvalResult(task_type='image-classification',dataset_type='beans',dataset_name='Beans',metric_type='accuracy',metric_value=0.9,),],model_name='my-cool-model',
)card = ModelCard.from_template(card_data,model_description='This model does x + y...'
)card.push_to_hub(hub_model_id)

對模型卡片的進一步學習可以參考官方文檔Repository Cards。

1.1.3 模型下載和上傳

用戶可以在Hub下載或上傳模型,比如下載BERT的基礎模型的git命令及huggingface-cli命令如下:

git clone https://hf.co/bert-base-uncase # git命令,可在最后添加下載目錄
huggingface-cli download --resume-download google-bert/bert-base-uncased --local-dir bert-base-uncased #huggingface-cli命令,--local-dir用于建立軟鏈接

上傳模型的代碼如下(這里只做簡單演示,代碼講解及應用參見后續):

from huggingface_hub import HfApi, create_repo
from huggingface_hub import get_full_repo_namemodel_name = "XXX"
hub_model_id = get_full_repo_name(model_name)    #獲取完整路徑create_repo(hub_model_id)    #創建存儲庫
api = HfApi()    #獲取上傳接口,并上傳文件夾及文件
api.upload_folder(folder_path=f"{model_name}/scheduler", path_in_repo="", repo_id=hub_model_id)
api.upload_folder(folder_path=f"{model_name}/unet", path_in_repo="", repo_id=hub_model_id)
api.upload_file(path_or_fileobj=f"{model_name}/model_index.json", path_in_repo="model_index.json", repo_id=hub_model_id)

1.1.4 模型應用

單擊訓練/部署/應用區域的“Deploy->Inference API",出現如下不同語言的應用代碼:
在這里插入圖片描述
也可選擇其它的應用方案,比如單擊“Use in Diffusers”獲取如下代碼:

from diffusers import DiffusionPipelinepipeline = DiffusionPipeline.from_pretrained("stabilityai/stable-diffusion-xl-base-1.0")

Q:你能看出上面兩種應用方案的不同嗎?

1.2 數據集

1.2.1 數據集簡介

上文已提到,Hugging Face Hub開源和維護了大量的數據集,它還按照語言對數據集進行了拆分,并清理了文章中不必要的符號信息,以便開發者直接調用。以databricks公司收集的數據集databricks-dolly-15k為例,它是指令引導式的開源數據集,可用于任何商業和學術目的,這些記錄符合InstructionGPT論文中概述的行為類別,包括封閉式QA、開放式QA、文本生成、信息提取、標簽分類、頭腦風暴和概括總結等。數據集界面如下圖:
在這里插入圖片描述其內容形式大致與模型界面類似,這里不再贅述。唯一需要關注的不同點是Viewer,這里可以概覽數據集中的數據,對各類數據記錄有個大概認識。

1.2.2 調用代碼

對于經典數據集databricks/databricks-dolly-15k的調用代碼如下,也可以點擊“Use in Datasets library”查看這段代碼:

from datasets import load_datasetdataset = load_dataset("databricks/databricks-dolly-15k", split="train")    
train_dataloader = torch.utils.data.DataLoader(dataset, batch_size=128, shuffle=True)

也可以通過命令huggingface-cli下載代碼:

huggingface-cli download --repo-type dataset --resume-download databricks/databricks-dolly-15k --local-dir databricks-dolly-15k

1.2.3 AutoTrain在線微調

Hugging Face Hub還支持通過上傳自己的數據集,直接在線微調模型。我們以cognitivecomputations/dolphin-2.9-llama3-8b為例,此時有兩種方法創建
AutoTrain Project:第一種,在AutoTrain功能主頁點擊“Create new project”,如下圖:
在這里插入圖片描述

第二種,需在模型界面點擊Train->Auto Train(部分模型不支持)->Create a new AutoTrain project,后續操作類似,點擊后出現如下界面:
在這里插入圖片描述此時自動創建Space,起名為AutoTrainLLM,協議選擇other,Space SDK選擇Docker,Docker template選擇AutoTrain,其余保持默認,點擊“Create Space”。

此時沒登錄會提示登錄,登錄后對新建AutoTrainLLM進行授權,授權后進入訓練界面,如下圖所示:
在這里插入圖片描述為微調工程命名(名字中不能有特殊字符,否則回報不知名錯誤,如筆者圖中去掉名字中點號后才運行成功),也可以選擇已創建的工程。Task選擇為LLM SFT,Base Model選擇需要微調的模型,此處選為cognitivecomputations/dolphin-2.9-llama3-8b。

重點來了,Dataset訓練數據集即對模型進行微調的數據集,如果有自己的數據集,選擇Upload Dataset后上傳自己的數據集。否則可以從Hugging Face Hub中挑選數據集,如我們選用1.2.2小節提到的數據集databricks/databricks-dolly-15k,根據數據集的訓練提示,Train Split填為15000,然后根據實際需要調節右側訓練參數Training Parameters,最后點擊“Start Training->Yes, I’m sure”,微調成功后會提示“Success! Monitor your job locally /in logs”。此時查看右上角的Logs,會有訓練的日志輸出,如下圖:
在這里插入圖片描述

1.3 Space應用

1.3.1 內容簡介

此節我們介紹豐富多彩的Spaces應用,幫大家了解Spaces一二,方便大家可以自己探索這些令人眼花繚亂又驚喜不斷的Apps。其首頁如下圖:
在這里插入圖片描述使用Spaces可在幾分鐘內構建、托管和共享ML應用程序。使用Spaces部署應用程序具有如下優勢:

  1. Get started quickly:提供了構建和托管大型人工智能應用程序和演示所需的所有工具,比如CLion,KDevelop等。
  2. Optimized for AI:運行在Hugging Face優化的ML基礎硬件設施上,只需點擊幾下即可大規模部署您的應用程序。
  3. Zero GPU:通過一種新型的分布式GPU,可以在運行中自動擴展應用程序。
  4. Craft collaboratively(協同制作):通過開箱即用的基于git的版本控制工作流,個人和團隊可以輕松協作構建人工智能應用程序。
  5. Build it your way:使用Streamlit、Gradio甚至Docker來構建、部署和托管人工智能應用程序。
  6. Various Hardware:從免費的CPU到TPU,您可以為您的應用程序獲得合適的硬件。
  7. Build your portfolio:向社區展示您的工作,構建獨特的應用程序,并與其他人工智能建設者建立新的聯系。

Hugging Face為每個Space應用提供了免費的兩核CPU+16GB內存的服務器資源,但免費服務器會在閑置一定時間后自動進入休眠狀態,并在有用戶訪問時被再次喚醒。為了獲得更穩定訪問,可以付費升級、向社區申請贊助或向官方申請免費升級。

下面我們就來看一看具體的Spaces應用并親手創建一個自己的Spaces應用程序。

1.3.2 虛擬換裝:IDM-VTON

IDM-VTON是一個在線衣服試穿程序,通過上傳人像和衣服照片,可以自動生成試穿效果,如下圖所示:
在這里插入圖片描述

操作步驟如下:

  1. 首先,上傳人物照片和衣服照片,也可選擇示例圖。
  2. 然后,編寫prompt(可留空)添加自己想要的效果,如beautiful woman, detailed face, sunset over sea, top light。
  3. 第三步,可勾選自動生成掩碼圖像和自動調整大小,避免圖片被拉伸變形。
  4. 最后,還可通過Advances設置去噪步數和隨機種子。增加去噪步數可以生成更精美圖像,如果對本次生成結果不滿,可設置不同的隨機種子來生成不同效果的圖像。

設置完畢后點擊最下方的"try on",等待幾十秒即可看到試穿效果。

1.3.3 燈光特效:IC-Light

通過IDM-VTON換裝的圖片還缺點大片特效,IC-Light正好可以添加不同風格的光影特效,讓你的圖片秒變大師手筆,效果如下圖所示:
在這里插入圖片描述操作步驟如下:

  1. 上傳換裝的照片;
  2. 選擇燈光偏好、人物細節及燈光細節,選擇后會在輸入框中出現對應的prompt,當然也可以自己編寫prompt;
  3. 選擇生成圖片張數、隨機種子及分辨率,分辨率最大支持1024*1024;
  4. 點擊Advanced options(高級可選),選擇調整steps(迭代步數)、CFG Scale(代表圖像與提示的匹配程度)、Lowres Denoise(低分辨率去噪)、Highres Denoise(高分辨率去噪)、Highres Scale(高分辨率縮放)、Prompt和Negative Prompt(負面提示),讀者可根據自己需要嘗試不同的組合,體驗不同的生成效果。

設置完畢后點擊"Relight",等待幾十秒鐘即可得到不同特效的照片,最后我們就可以把精美大片分享給自己的好友啦。

1.3.4 Artificial Analysis LLM Performance Leaderboard

Artificial Analysis LLM Performance Leaderboard(人工分析LLM性能排行榜)是通過LLM提供的API,獨立進行性能基準&計價的榜單,表中羅列了各模型的API供應商、模型名稱、上下文窗口、模型質量、計價(美元/百萬tokens)、吞吐量、延遲和詳細分析,如下圖所示:

在這里插入圖片描述其中上下文窗口、模型質量、計價、吞吐量和延遲可展開,以便查看更詳細的性能指標。
點擊詳細分析中的Model/Providers,會跳轉到artificialanalysis.ai,Model通過圖表的形式提供了該模型更詳細的性能分析,Providers則通過對比該廠商名下的各個不同版本的Moel,方便我們根據自己的需要選擇,如下圖所示:
在這里插入圖片描述

1.3.5 創建自己的Space應用

通過Hugging Face提供的免費硬件,我們可以創建屬于自己的Space應用,并且可以供它人訪問、下載和互動。這里介紹兩種創建方式:第一種,在Spaces主頁點擊“Create new space”,如下圖:

在這里插入圖片描述第二種,直接引用已有模型作為基礎模型,創建自己的Space。為了讓大家體驗不同的模型,這里引用1.1.1節介紹的文生圖模型stabilityai/stable-diffusion-xl-base-1.0的精細化版模型stabilityai/stable-diffusion-xl-refiner-1.0,也可以直接使用stable-diffusion-xl-base-1.0,作者在創建refiner版時,遇到不支持image-to-image類型pipline的錯誤,暫時未解決,所以建議先使用base版本的stable-diffusion。

在模型界面點擊Deploy->Spaces,如下圖:
在這里插入圖片描述彈出如下窗口,點擊“Create new Space”:
在這里插入圖片描述跳到創建Space頁面,如下圖所示:
在這里插入圖片描述操作步驟如下:

  1. 選擇創建者和Space名稱,然后選擇License,License可從模型標簽中查找。
  2. Space SDK選為Gradio,對應的Gradio template選為chatbot,如果是文生圖模型選為text-to-image。
  3. Space hardware選擇免費版即可,不過免費版在兩天閑置后就會陷入休眠,如長期使用可升級為收費版硬件。
  4. Preset Files為預置文件,如果通過Spaces主頁創建,則預置文件為空。權限選為Public。

操作完畢后,點擊Create Space進入Building&Starting界面,等待1分左右,就會創建成功,如下圖:

通過文生圖模型生成圖片后,再通過精細化模型對細節進行調整,最后呈現效果如下圖所示:
在這里插入圖片描述可以看到,熊貓和老虎的眼睛、嘴巴、爪子和瀑布、竹林、石頭的細節都得到了強化。您也可以用它來對老照片進行美化處理。

2. Hugging Face其他資源介紹

2.1 Hugging Face開源庫

2.2 Hugging Face Gradio工具

2.3 Hugging Face學習資源

2.3.1 NLP課程

2.3.2 擴散模型課程

2.3.3 深度強化學習課程

2.4 Hugging Face各個資源網址

3. 擴散模型原理

參考資料:
《擴散模型從原理到實戰》----李忻瑋,蘇步升,徐浩然,余海銘。人民郵電出版社

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

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

相關文章

理解 Python 中的 `super()` 與 `__init__()` 方法

在 Python 的面向對象編程中,super() 函數和 __init__() 方法是兩個非常重要的概念。它們在類的繼承和初始化過程中扮演著關鍵的角色。本文將深入探討這兩個概念的工作原理,并通過示例代碼來展示它們的使用。 基本原理 __init__() 方法 __init__() 是…

Vue中的全局事件總線:EventBus與$bus的比較詳解與實戰應用

EventBus實例: var EventBus new Vue() 會創建一個名為EventBus的Vue實例,并將其存儲在變量EventBus中。Vue.prototype.$bus new Vue() 則直接在Vue的原型上創建一個新的Vue實例,并將其賦值給$bus屬性。 使用方式: var EventBus…

C# 結合 JavaScript 對 Web 控件進行數據輸入驗證

目錄 關于數據驗證 范例運行環境 驗證設計 JavaScript 方法 設計 實現 調用示例 C# 方法 設計 實現 調用示例 小結 關于數據驗證 在 Web 應用的錄入界面,數據驗證是一項重要的實現功能,數據驗證是指確認 Web 控件輸入或選擇的數據&#xff…

類對象作為類成員

在C中,類對象可以作為另一個類的成員變量。這種設計方式可以用于創建復雜的對象結構,使得一個類的對象能夠包含另一個類的對象。這種嵌套類的組合方式可以增強代碼的可重用性和模塊化。 類對象作為類成員的示例 讓我們通過一個示例來解釋這一概念。假設…

武漢信息系統建設和服務能力評估CS認證咨詢

很多企業在咨詢信息系統建設和服務能力評估的時候喜歡百度搜索,不管是本地咨詢機構還是外地咨詢機構只要價格便宜就找誰,這個在低等級的CS1是可以這么操作的,一旦上升到CS2級別及以上的,我們一般不推薦找外地咨詢機構,…

【文末附gpt升級方案】字節跳動發布豆包大模型:AI領域的革新與引領

隨著科技的飛速進步,人工智能(AI)已逐漸成為推動社會發展的重要力量。在這一背景下,字節跳動公司以其前瞻性的眼光和創新能力,于XXXX年XX月XX日正式發布了豆包大模型,這一舉動無疑在AI領域掀起了新一輪的浪…

C語言.動態內存管理

動態內存管理 1.為什么要有動態內存分配2.malloc和free2.1malloc2.2free 3.calloc和realloc3.1calloc3.2realloc 4.常見的動態內存管理的錯誤4.1對NULL指針解引用操作4.2對動態開辟空間的越界訪問4.3對非動態開辟內存使用free釋放4.4使用free釋放一塊動態開辟內存的一部分4.5對…

軍訓中的美差

大學時候的軍訓是在二年級秋季開學前進行的,地點是在河北的某部隊。 軍訓時候的分班是按照學號重新劃分的,我的學號在大學宿舍八個人中排最后,恰好就和其他宿舍的人分在了一個班。訓練正步走的時候,站在我左邊的那個哥們&#xf…

Signal 即將成為JavaScript的一部分

什么是響應性? 在過去的幾年中,響應性成為了所有現代前端框架以及React庫的核心。 對于不熟悉前端開發的人來說,起初這可能是一個令人困惑的概念,因為它改變了常規的、自上而下的、從調用者到被調用者的順序工作流。 在響應性范…

AR系列路由器配置VLAN間通信

AR路由器是華為公司推出的企業級路由器產品系列,具有高可靠性、高性能和易管理等特點。AR 系列路由器提供的功能包括路由轉發、安全接入、語音、視頻、無線等多種業務,支持各種接入方式和協議,并且可以方便地進行擴展和升級。 實驗拓撲圖&…

微信小程序介紹

一、微信小程序概述 微信小程序是一種不需要下載、安裝即可使用的應用,用戶只需掃一掃或搜一下即可打開。它實現了應用觸手可及的夢想,降低了應用的使用門檻。微信小程序自2017年1月上線以來,已經吸引了大量開發者加入,構建了一個…

【全開源】云界旅游微信小程序(源碼搭建/上線/運營/售后/維護更新)

開啟您的云端旅行新體驗 一、引言 在快節奏的現代生活中,旅行成為了人們放松身心、探索世界的重要方式。讓您的旅行更加便捷、高效,打造了云界旅游小程序,帶您領略云端旅行的無限魅力。 二、小程序功能概覽 云界旅游小程序集成了豐富的旅游…

【代碼隨想錄算法訓練營第37期 第九天 | LeetCode28. 實現 strStr()、459.重復的子字符串】

代碼隨想錄算法訓練營第37期 第九天 | LeetCode28. 實現 strStr()、459.重復的子字符串 一、28. 實現 strStr() 解題代碼C&#xff1a; class Solution { public:void getNext(int* next, const string& s) {int j 0;next[0] 0;for(int i 1; i < s.size(); i) {whi…

【Maven】Nexus私服簡介_下載安裝_登錄

1、簡介 1.1介紹 Nexus私服&#xff0c;也被稱為Maven倉庫管理器&#xff0c;是許多公司在自己的局域網內搭建的遠程倉庫服務器。提供了強大的倉庫管理功能和構件搜索功能&#xff0c;使得開發人員能夠更方便地管理和使用Maven項目中的依賴庫。 1.2作用 內網訪問&#xff1…

Python代碼:七、小數化整數

1、題目 日常生活中我們會遇到很多小數&#xff0c;但是有的人不喜歡小數&#xff0c;因此會用四舍五入的方式將其去掉。在Python中我們更加簡單&#xff0c;可以利用強制類型轉換將小數轉變成整數&#xff0c;請你試一試。 2、代碼 import sysn float(input()) print(int(…

微服務(Spring Clould)--Nacos的安裝、配置

簡介&#xff1a;&#xff08;取自官網&#xff09; Nacos /nɑ:k??s/ 是 Dynamic Naming and Configuration Service的首字母簡稱&#xff0c;一個更易于構建云原生應用的動態服務發現、配置管理和服務管理平臺。 Nacos 致力于幫助您發現、配置和管理微服務。Nacos 提供了…

<sa8650>QCX Usecase 使用詳解—什么是可剪枝節點屬性以及何時使用

<sa8650>QCX Usecase 使用詳解—什么是可剪枝節點屬性以及何時使用 用例剪枝可實現光流設計分段(節點和目標緩沖區),這些分段實現了共享的邏輯接口,而這些接口的實現可能會發生沖突,但不會重復流水線。例如,overridesettings.txt 中的 enableAutoNoIPE=FALSE。 在 /qc…

《表格革命:數據可視化的力量與創新》

在當今數字化的時代&#xff0c;表格已不再是簡單的羅列工具&#xff0c;而是一場正在悄然興起的革命&#xff01; 表格&#xff0c;這個看似平凡無奇的存在&#xff0c;卻在各個領域發揮著至關重要的作用。無論是商業數據分析中精準呈現銷售趨勢和市場動態&#xff0c;還是學…

React 第三十七章 Scheduler 最小堆算法

在 Scheduler 中&#xff0c;使用最小堆的數據結構在對任務進行排序。 // 兩個任務隊列 var taskQueue: Array<Task> []; var timerQueue: Array<Task> [];push(timerQueue, newTask); // 像數組中推入一個任務 pop(timerQueue); // 從數組中彈出一個任務 time…

【深入理解MySQL的索引數據結構】

文章目錄 &#x1f4d5;索引底層數據結構與算法&#x1f4d9;索引數據結構&#x1f4d8;二叉樹&#x1f4d8;紅黑樹&#x1f4d8;Hash&#x1f4d8;B-Tree&#x1f4d8;BTree &#x1f4d9;表在不同存儲引擎的存儲結構&#x1f4d8;MyISAM存儲引擎索引實現&#x1f4da;文件結構…