原來Stable Diffusion是這樣工作的

stable diffusion是一種潛在擴散模型,可以從文本生成人工智能圖像。為什么叫做潛在擴散模型呢?這是因為與在高維圖像空間中操作不同,它首先將圖像壓縮到潛在空間中,然后再進行操作。

在這篇文章中,我們將深入了解它到底是如何工作的,還能夠知道文生圖的工作方式與圖生圖的的工作方式有何不同?CFG scale是什么?去噪強度是什么?

了解stable diffusion工作原理的好處: 可以更加正確的使用這個工具,從而實現更加可控的結果。

stable diffusion有什么用處?

簡單來說,穩定擴散是一種文本到圖像的模型。給它一個文本提示,它會返回一個與文本匹配的AI圖像。

image-20240422121545313

stable diffusion模型

穩定擴散屬于一類稱為擴散模型的深度學習模型。它們是生成模型,意味著它們被設計用來生成類似于訓練數據的新數據。而在stable diffusion中下,這些數據就是圖像。

那么為什么它被稱為擴散模型?

因為它的實現原理看起來非常像物理學中的擴散。接下來讓我們看看他的底層原理實現。這里我以最常見的1girl作為例子來說明。

正向擴散

正向擴散過程中,會向訓練圖像添加噪音,逐漸將其轉化為不具有特征的噪音圖像。正向過程會將任何1girl的圖像轉變為噪音圖像。最終,你將無法判斷它們最初到底是什么。(這很重要)

就像一滴墨水落入了一杯水中。墨水滴在水中擴散開來。幾分鐘后,它會隨機分布在整個水中。你再也無法判斷它最初是落在中心還是靠近邊緣。

下面是一個圖像經歷正向擴散的示例。1girl的圖像變成了隨機噪音。

image-20240422123002139

逆向擴散

正向擴展很好理解,那么接下來就是神奇的部分,如果我們能夠逆向擴散呢?就像倒放視頻一樣,倒退時間。

從一個嘈雜、毫無意義的圖像開始,逆向擴散可以恢復出一張原始的1girl的圖像。這就是主要的想法。

訓練過程

逆擴散的概念肯定是有創意的。但是,現在的問題是,“怎樣才能實現逆擴散呢?”

為了逆轉擴散,最根本的是我們需要知道圖像添加了多少噪音。

diffusion中使用了一個神經網絡模型來預測添加的噪音。這就是穩定擴散中的噪音預測器。它是一個U-Net模型。訓練過程如下。

  • 選擇一張訓練圖像,比如1girl的照片。

  • 生成一個隨機的噪音圖像。

  • 通過在訓練的不同步數中添加一定的噪音圖像來破壞訓練圖像。

  • 通過調整噪音預測器的權重,來訓練噪音預測器,從而告訴他,我們添加了多少噪音。

image-20240422154548041

訓練后,我們有了一個能夠預估圖像添加的噪音的噪音預測器。

逆擴散

現在我們有了噪聲預測器。如何使用它呢?

首先,我們生成一個完全隨機的圖像,并要求噪聲預測器告訴我們噪聲。然后我們從原始圖像中減去這個估計的噪聲。重復這個過程幾次。最終你會得到一張1girl的圖像。

image-20240422160214496

當然現在我們還無法控制生成的圖像,現在這個過程完全是隨機的。

穩定擴散模型Stable Diffusion model

上面講了那么多原理,但是其實那并不是stable diffusion的工作原理!

原因是上述擴散過程是在圖像空間進行的。因為圖像空間非常的大,所以計算速度非常的慢。

舉個例子:一個512×512像素的圖像有三個顏色通道(紅色、綠色和藍色),就是一個786,432維的空間!(你需要為一個圖像指定那么多數值。)這是一個非常大的數字,在現有的GPU硬件條件下,很難快速的生成需要的圖片。

所以很多公司對這個像素空間的擴散模型做了優化,比如谷歌的Imagen和Open AI的DALL-E,它們使用了一些技巧來加快模型速度,但這樣還是不夠的。

潛在擴散模型Latent diffusion model

Stable diffuion中引入了一個叫做潛在擴散空間的概念,從而解決在像素空間的擴散模型計算速度慢的問題。下面是它的工作原理。

穩定擴散是一種潛在擴散模型。它不是在高維圖像空間中運行,而是首先將圖像壓縮到潛在空間中。

以上面的512×512像素的圖像為例,穩定擴散模型的潛在空間是4x64x64,這個潛在空間是原圖像像素空間的1/48。

因為潛在空間只有之前的1/48,因此它能夠在計算更少的數字的情況下獲得結果。這就是為什么它更快的原因。

變分自動編碼器VAE

從像素空間到潛在空間的變化,是通過一種稱為**變分自動編碼器(variational autoencoder)**的技術來實現的。是的,這就是我們經常看到的VAE。

變分自動編碼器(VAE)是由兩部分組成:(1)編碼器和(2)解碼器。編碼器將圖像壓縮到潛在空間,解碼器從潛在空間恢復圖像。

image-20240422172146404

**我們所說的所有前向和反向擴散實際上都是在潛在空間中進行的。因此,在訓練過程中,它不是生成一個嘈雜的圖像,而是在潛在空間中生成一個隨機張量(潛在噪聲)。它不是用噪音損壞圖像,而是用潛在噪聲損壞圖像在潛在空間中的表示。**這樣做的原因是潛在空間較小,因此速度更快。

圖像分辨率

圖像分辨率反映在潛在圖像張量的大小上。對于僅有512×512像素的圖像,潛在圖像的大小為4x64x64。對于768×512像素的肖像圖像,潛在圖像的大小為4x96x64。

這就是為什么生成更大的圖像需要更長的時間和更多的VRAM。

這里想解釋一下為什么我們在使用stable diffusion的時候,如果生成大于512×512像素的圖像,有時候會出現雙頭的問題。

這是因為Stable Diffusion v1是在512×512像素圖像上進行訓練的。

圖像放大

那么我們怎么才能生成分辨率更大的圖片呢?最好的辦法是保證圖像至少有一邊達到512像素,然后使用AI放大器或img2img的功能進行圖像放大。

另外,可以使用SDXL模型。它具有更大的默認尺寸,為1024 x 1024像素。

為什么潛在空間可以工作?

你可能會想知道為什么變分自動編碼器(VAE)可以將圖像壓縮成一個更小的潛在空間而不丟失信息。

原因是,自然圖像并不是隨機的,它們具有很高的規律性:一張臉遵循著眼睛、鼻子、臉頰和嘴巴之間特定的空間關系。一只狗有四條腿并且具有特定的形狀。

換句話說,圖像的高維度是人為的。自然圖像可以很容易地壓縮到更小的潛在空間而不丟失任何信息。這在機器學習中被稱為流形假設。

潛在空間中的反向擴散

以下是stable diffusion中潛在空間反向擴散的工作原理。

  1. 生成一個隨機潛在空間矩陣。

  2. 噪聲預測器預測潛在矩陣的噪聲。

  3. 然后從潛在矩陣中減去預測的噪聲。

  4. 根據特定的采樣步數,重復2,3這兩步。

  5. VAE的解碼器將潛在矩陣轉換為最終圖像。

什么是VAE文件?

VAE文件是在Stable Diffusion v1中用于改進眼睛和臉部的生成效果。它們是我們剛剛談到的自動編碼器的解碼器。通過進一步微調解碼器,模型可以繪制出更精細的細節。

之前提到自然圖像并不是隨機的,它們具有很高的規律性,雖然是這樣,但是將圖像壓縮到潛在空間確實會丟失信息,因為原始的VAE沒有恢復細節。而這個VAE文件或者VAE解碼器的作用就是負責繪制細節。

條件控制

到這里基本上運行流程已經差不多了,但是我們還缺了一部分:我們寫的文本prompt是在哪里發揮作用的呢?

這些prompt實際上就是條件控制。條件控制的目的是引導噪聲預測器,使得預測的噪聲在從圖像中減去后能夠給我們想要的結果

txt2img(文本到圖像)

以下是對txt2img如何被處理并輸入到噪聲預測器的說明。

首先,分詞器(Tokenizer)將提示中的每個單詞轉換為一個稱為標記的數字。然后,每個標記被轉換為一個名為嵌入embedding的768值向量。這些嵌入然后被**文本變換器(text transformer)**處理,并準備好被噪聲預測器使用。

image-20240422203502407

接下來,讓我們詳細介紹每一部分的含義。

分詞器Tokenizer

image-20240422184029011

首先,文本提示被 CLIP 分詞器進行分詞。CLIP 是由 Open AI 開發的深度學習模型,用于生成任何圖像的文本描述。Stable Diffusion v1 使用了 CLIP 的分詞器。

分詞是計算機理解單詞的方法。我們人類可以讀單詞,但計算機只能讀數字。這就是為什么文本提示中的單詞首先被轉換為數字的原因。分詞器只能分詞它在訓練過程中見過的單詞。例如,CLIP 模型中有“butter”和“fly”,但沒有“butterfly”。分詞器會將單詞“butterfly”分解為兩個標記“butter”和“fly”。所以一個單詞并不總是意味著一個標記

另一個細節是空格字符也是標記的一部分。在上面的情況中,短語“butter fly”產生了兩個標記“butter”和“[space]fly”。這些標記與“butterfly”產生的不同,“butterfly”的標記是“butter”和“fly”(在“fly”之前沒有空格)。

Stable Diffusion 模型在提示中僅限于使用75個標記。(這并不等同于75個單詞)

嵌入embedding

Stable diffusion v1采用了Open AI的ViT-L/14 Clip模型。embedding嵌入是一個768值的向量。每個標記都有自己獨特的嵌入向量。嵌入是由CLIP模型決定的,在訓練過程中學習的。

為什么我們需要嵌入?因為一些詞是密切相關的,我們希望能夠充分利用這些信息。例如,mangentlemanguy的嵌入幾乎相同,因為它們可以互換使用。克勞德·莫奈、皮埃爾·奧古斯特·雷諾阿和愛德華·馬奈都是印象派風格繪畫的代表,但方式各有不同。所以這些名字在embedding中具有接近但不完全相同的值。

這就是我們討論的用于通過關鍵詞觸發樣式的嵌入。找到合適的嵌入可以觸發任意對象和風格,這是一種稱為文本反演(textual inversion)的微調技術。

embedding to noise predictor

image-20240422203533236

在發送到噪聲預測器之前,嵌入需要通過文本轉換器進行處理處理。

轉換器就像一個通用適配器,用于條件處理。在這種情況下,它的輸入是文本嵌入向量,但它也可以是其他東西,比如標簽、圖像和深度圖。

注意力機制

在Stable Diffusion AI和類似的文本到圖像生成模型中,U-Net是一個關鍵的組件,它負責將文本提示轉換成圖像。U-Net是一個深度學習模型,通常用于圖像到圖像的任務,如圖像分割。在Stable Diffusion中,U-Net利用了一種稱為“注意力機制”的技術來理解和處理文本提示。

  1. 自注意力 (Self-Attention)
    • 自注意力允許模型在處理提示時識別單詞之間的關系。比如一個藍色眼睛的男人,“藍”和“眼睛”通過自注意力機制被關聯起來,這樣模型就知道用戶想要生成的是一個擁有藍色眼睛的男人,而不是一個穿著藍色襯衫的男人。
  2. 交叉注意力 (Cross-Attention)
    • 交叉注意力是文本和圖像之間的橋梁。在生成圖像的過程中,U-Net使用交叉注意力機制來確保生成的圖像與文本提示保持一致。這意味著模型會根據文本提示中的關鍵詞生成相應的圖像特征。

超網絡是一種調整穩定擴散模型的技術,它利用交叉注意力網絡來插入風格。

LoRA模型修改交叉注意力模塊的權重來改變風格。

僅僅修改這個模塊就能調整穩定擴散模型的結果,可見這個模塊是多么重要。

還有其他控制條件嗎?

穩定擴散模型可以被修改和設置的方式不止文本提示一種。

除了文本提示,深度圖像也可以被用來設置圖像模型。

比如ControlNet就可以使用檢測到的輪廓、人體姿勢等來設置噪聲預測器,并實現對圖像生成的出色控制。

Stable difussion逐步解析

現在你已經了解了穩定擴散的所有內部機制,讓我們通過一些例子來看看它在幕后到底發生了什么。

文字轉圖像

在文字轉圖像中,你輸入文字,模型會返回一個生成好的AI圖片。

步驟1。穩定擴散在潛在空間中生成一個隨機張量。你可以通過設置隨機數生成器的種子來控制這個張量。

如果你把種子設置為固定的值,那么你將始終得到相同的隨機張量。

最開始的圖像只是一片噪音。

步驟2。噪聲預測器 U-Net 將潛在的嘈雜圖像和文本提示作為輸入,并在潛在空間中預測噪音。

image-20240422204010632

步驟3。從潛在圖像中減去潛在噪聲。這就成為了您的新潛在圖像

image-20240422204531142

步驟2和步驟3會重復一定數量的采樣步驟,這個步驟就是你設置的sample steps。

步驟4。最后,VAE 的解碼器將潛在圖像轉換回像素空間。這就是在運行穩定擴散后得到的圖像。

image-20240422204647493

噪聲調度(Noise schedule)

圖片從嘈雜變得清晰。是因為每一步我們都從原始latent space中減去了預測到的噪聲。

每步減少多少噪聲,這個減去噪聲的調度過程,就叫做noise schedule。

下面是一個噪聲調度的例子。

noise schedule是通過我們使用的采樣器和采樣步數來決定的,我們可以在每一步中減去相同量的噪聲,也可以在開始階段減去更多的噪聲,就像上面的例子。

采樣器在每一步中減去恰好足夠的噪聲,以便在下一步達到期望的噪聲。

圖像到圖像

圖像到圖像的意思是使用穩定擴散將一幅圖像轉換成另一幅圖像。

SDEdit是一種圖像到圖像的編輯方法,它允許用戶通過結合輸入圖像和文本提示來控制圖像生成過程。這種方法首次提出時,旨在提高對生成圖像的控制能力,使得用戶可以更精確地實現他們的創意愿景。SDEdit可以應用于任何擴散模型,包括Stable Diffusion。

圖像到圖像的輸入是一幅圖像和一個文本提示。生成的圖像將同時受到輸入圖像和文本提示的影響。

比如我通過這左邊的素描圖加上提示詞:

“photo of young woman,no suit,no shirt,no bar,on the street,
rim lighting,studio lighting,looking at the camera,dslr,ultra quality,sharp focus,tack sharp,dof,film grain,Fujifilm XT3,crystal clear,8K UHD,highly detailed glossy eyes,high detailed skin,skin pores,”

就可以把它轉換成一張真實的圖片:

image-20240422232635503

現在讓我們來看看具體的步驟。

步驟1. 將輸入圖像編碼為潛在空間。

image-20240422232959011

步驟2. 將噪聲添加到潛在圖像。去噪強度控制添加的噪聲量。

如果為0,則不添加噪聲。如果為1,則添加最大量的噪聲,使潛在圖像變成完全隨機的張量。

image-20240422233409529

步驟3. 噪聲預測器U-Net將潛在帶噪聲圖像和文本提示作為輸入,并預測潛在空間中的噪聲。

image-20240422233517705

步驟4. 從潛在圖像中減去潛在噪聲。這就成為了你的新潛在圖像

image-20240422204531142

步驟3和步驟4會重復一定數量的采樣步驟,這個步驟就是你設置的sample steps。

步驟5. 最后,VAE的解碼器將潛在圖像轉換回像素空間。這就是你通過運行圖像到圖像得到的圖像。

image-20240422233755177

所以現在你知道圖像到圖像是什么了:它只是在初始潛在圖像上加入一點噪聲和輸入圖像。

將去噪強度設置為1等同于文本到圖像,因為初始潛在圖像完全是隨機的。

圖像修復

圖像修復實際上只是圖像到圖像的特例。在需要修復的圖像部分添加了噪音。噪音的數量同樣由去噪強度控制。

什么是CFG值?

我們在使用stable diffusion的時候,有一個非常重要的參數叫做CFG。

在理解CFG之前,我們首先需要了解它的前身,分類器指導Classifier guidance

分類器指導Classifier guidance

分類器指導是在擴散模型中圖像標簽的一種整合方式。你可以使用標簽來指導擴散過程。例如,標簽“1girl”可以引導逆擴散過程生成女性的照片。

**分類器指導比例(**classifier guidance scale)是一個參數,用于控制擴散過程在多大程度上遵守這個分類標簽。

假設我們有三組圖像,分別帶有“貓”、“狗”和“人類”的標簽。如果擴散過程不受任何指導,模型可能會從每個類別中隨機抽取樣本。這可能導致生成的圖像同時符合兩個標簽的特征,比如一個男孩正在撫摸一只狗的場景。

classifier guidance scale指導的條件下,擴散模型產出的圖像往往會傾向于典型或明確的樣本。比如,當你要求模型生成一只貓的圖片時,它將提供一張清晰無疑的貓的圖像,而非其他任何生物。

分類器指導比例classifier guidance scale)調節著模型遵循標簽指導的嚴格程度,更高的值,意味著在生成圖像時,模型更加嚴格地依據所給標簽進行選擇。在實際操作中,這個比例的值實際上是一個乘數,它決定了模型在生成過程中向具有特定標簽的數據集偏移的程度。

無分類器引導Classifier-free guidance(CFG)

分類器引導雖然功能強大,但它需要額外的模型來提供指導,這給訓練過程帶來了一些挑戰。

無分類器引導是一種創新的方法,它允許實現“無需分類器的分類器引導”。通過使用圖像的標題來訓練一個有條件的擴散模型,將分類器的功能整合為噪聲預測器U-Net的一個條件,從而實現了一種無需單獨圖像分類器的圖像生成引導。

另外,文本提示為文本到圖像的生成提供了一種引導機制,使得模型能夠根據文本描述生成相應的圖像。

無分類器引導規模(CFG scale)

現在,我們有一個使用條件控制的無分類器擴散過程。我們如何控制AI生成的圖像應該多大程度上遵循引導?

無分類器引導規模(CFG scale)是一個控制文本提示如何引導擴散過程的值。當CFG規模設置為0時,AI圖像生成是無條件的(即忽略提示)。較高的CFG規模會將擴散引導到提示方向。

穩定擴散 v1.5 與 v2 比較

模型差異

SD v2使用OpenClip進行文本嵌入。SD v1使用Open AI的CLIP ViT-L/14進行文本嵌入。這一變化的原因是:

  • OpenClip比原先的模型大了多達五倍。更大的文本編碼器模型可以提高圖像質量。

  • 雖然Open AI的CLIP模型是開源的,但這些模型是使用專有數據進行訓練的。轉換到OpenClip模型能夠讓研究人員在研究和優化模型時更加透明。這對于長期發展是更有利的。

v2模型有兩種版本。

  • 512版本生成512×512像素的圖像

  • 768版本生成768×768像素的圖像

訓練數據差異

SD v1.4 是在名為 laion2B-en 的數據集上,以 256×256 的分辨率進行了 237,000 次訓練迭代。

接著,在 laion-high-resolution 數據集上,以 512×512 的分辨率進行了 194,000 次訓練迭代。

在“laion-aesthetics v2 5+”數據集上,同樣以 512×512 的分辨率,進行了 225,000 次訓練迭代,同時在文本條件中降低了 10% 的權重。

SD v2 則是在 LAION-5B 數據集的子集上,經過去除了顯式NSFW內容的篩選,并應用了 LAION-NSFW 分類器,以 punsafe=0.1 的參數和 aesthetic score >=4.5 的條件下,進行了 550,000 次訓練迭代。

此外,該模型還在相同數據集上以 256x256 的分辨率進行了 850,000 次訓練迭代,但這次只包括圖片分辨率大于或等于 512x512 的樣本。

之后,模型使用了 v-objective 目標函數,在相同數據集上進行了額外的 150,000 次訓練迭代。

最后,在 768x768 的圖片上繼續進行了 140,000 次訓練迭代。

SD v2.1 是在 v2.0 的基礎上進行了微調,先是以 punsafe=0.1 的參數額外訓練了 55,000 步,然后又以 punsafe=0.98 的參數額外訓練了 155,000 步。

值得注意的是,在最終的訓練階段,NSFW的過濾器被關閉了

輸出表現的差異

人們在使用SD v2 來控制風格和生成名人圖像時,會更加的困難。因為雖然 Stability AI 并沒有明確排除藝術家和名人的名字,但在 v2 版本中,這些名字的效果要弱得多。這很可能是因為訓練數據的差異所致。Open AI 的專有數據可能包含更多的藝術作品和名人照片,而且這些數據很可能經過了高度篩選,以確保每件作品和每位人物都看起來都非常美觀。

因為這種原因,SD V2 和v2.1并沒有流行起來,用戶們更傾向于使用經過精細調整的 v1.5 和 SDXL 模型。

SDXL model

作為一個規模更大的模型,在人工智能領域,人們普遍認為其性能會更為出色。SDXL 模型的參數總數達到了驚人的 66 億,而相比之下,v1.5 模型的參數總數則為 9.8 億。

SDXL model pipeline

  • 實際上,SDXL 模型由兩個模型組成:基礎模型細化模型。基礎模型負責構建整體構圖,而細化模型則在此基礎上添加更精細的細節。

    基礎模型可以獨立運行,不依賴細化模型。

    SDXL 基礎模型的改進包括:

    • 文本編碼器結合了最大的 OpenClip 模型(ViT-G/14)和 OpenAI 的專有 CLIP ViT-L。這樣的選擇讓 SDXL 更易于引導,同時保持了強大的性能,并且能夠使用 OpenClip 進行訓練。
    • 新的圖像尺寸調節旨在使用小于 256×256 的訓練圖像。這通過不丟棄 39% 的圖像,顯著增加了訓練數據量。
    • U-Net 的規模是 v1.5 模型的三倍
    • 默認的圖像尺寸為 1024×1024,是 v1.5 模型 512×512 的四倍。

點我查看更多精彩內容:www.flydean.com

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

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

相關文章

達摩院重大“遺產”!fluxonium量子比特初始化300納秒且保真度超過99%

通用量子計算機開發的主要挑戰之一是制備量子比特。十多年來,研究人員在構建量子計算機的過程中主要使用了transmon量子比特,這也是迄今為止商業上最成功的超導量子比特。 但與業界多數選擇transmon量子比特不同,(前)…

npm運行報錯:無法加載文件 C:\Program Files\nodejs\npm.ps1,因為在此系統上禁止運行腳本問題解決

問題其實已經顯而易見了 系統禁止運行腳本 以管理員身份運行 PowerShell: 右鍵點擊“開始”按鈕或按 Win X,然后選擇“Windows PowerShell(管理員)”。 查看當前執行策略: 在 PowerShell 中輸入以下命令來查看當前的執行策略: G…

Python文本處理利器:jieba庫全解析

文章目錄 Python文本處理利器:jieba庫全解析第一部分:背景和功能介紹第二部分:庫的概述第三部分:安裝方法第四部分:常用庫函數介紹1. 精確模式分詞2. 全模式分詞3. 搜索引擎模式分詞4. 添加自定義詞典5. 關鍵詞提取 第…

服務器遭遇UDP攻擊時的應對與解決方案

UDP攻擊作為分布式拒絕服務(DDoS)攻擊的一種常見形式,通過發送大量的UDP數據包淹沒目標服務器,導致網絡擁塞、服務中斷。本文旨在提供一套實用的策略與技術手段,幫助您識別、緩解乃至防御UDP攻擊,確保服務器穩定運行。我們將探討監…

最新PHP眾籌網站源碼 支持報名眾籌+商品眾籌+公益眾籌等多種眾籌模式 含完整代碼包和部署教程

在當今互聯網飛速發展的時代,眾籌模式逐漸成為了創新項目、商品銷售和公益活動融資的重要渠道。分享一款最新版的PHP眾籌網站源碼,支持報名眾籌、商品眾籌和公益眾籌等多種眾籌模式。該源碼包含了完整的代碼包和詳細的部署教程,讓新手也可以輕…

利用醫學Twitter進行病理圖像分析的視覺-語言基礎模型| 文獻速遞-視覺通用模型與疾病診斷

Title 題目 A visual–language foundation model for pathology image analysis using medical Twitter 利用醫學Twitter進行病理圖像分析的視覺-語言基礎模型 01 文獻速遞介紹 缺乏公開可用的醫學圖像標注是計算研究和教育創新的一個重要障礙。同時,許多醫生…

自動化測試-Selenium(一),簡介

自動化測試-Selenium 1. 什么是自動化測試 1.1 自動化測試介紹 自動化測試是一種通過自動化工具執行測試用例來驗證軟件功能和性能的過程。與手動測試不同,自動化測試使用腳本和軟件來自動執行測試步驟,記錄結果,并比較預期輸出和實際輸出…

【Python報錯】已解決ModuleNotFoundError: No module named ‘timm’

成功解決“ModuleNotFoundError: No module named ‘timm’”錯誤的全面指南 一、引言 在Python編程中,經常會遇到各種導入模塊的錯誤,其中“ModuleNotFoundError: No module named ‘timm’”就是一個典型的例子。這個錯誤意味著你的Python環境中沒有安…

Navicate 導入導出數據庫

導出數據庫 找地方存在來,別忘了放在那里。 新建一個數據庫,記得要和導出數據庫的 字符集與排序規則 相同 打開數據庫后,我們選擇它(就是單擊它)然后右鍵打開菜單-運行sql文件 找到剛才存儲的位置,開始 &a…

大中小面積紫外光老化加速試驗機裝置

高低溫試驗箱,振動試驗臺,紫外老化試驗箱,氙燈老化試驗箱,沙塵試驗箱,箱式淋雨試驗箱,臭氧老化試驗箱,換氣老化試驗箱,電熱鼓風干燥箱,真空干燥箱,超聲波清洗機,鹽霧試驗箱 一、產品用途 紫外光加速老化試驗裝置采用熒光紫外燈為光源,通過模擬自然陽光中…

oracle報錯ORA-01940: cannot drop a user that is currently connected解決方法

目錄 一.原因 二.解決方法 1.查詢活動會話 2.記下SID和SERIAL# 3.斷開會話 4.刪除用戶 一.原因 ORA-01940代表你正在刪除一個有活動會話的用戶 二.解決方法 1.查詢活動會話 SQL> SELECT sid, serial#, username, programFROM v$sessionWHERE username 你要刪除的u…

重寫mybatisPlus自定義ID生成策略

1.項目中需要引入mybatisplus核心組件 <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>${mp.version}</version></dependency> 2.新建一個類實現IdentifierGenera…

直接寫和放在函數中不同的R語言用法

索引數據框中的某一列 df$A可以索引數據框df中列名為A的列的所有值。那么假如列名是一個R對象怎么做&#xff1f; df <- data.frame(A1:5, B(1:5)*2)df$A## [1] 1 2 3 4 5needed_column A# df$needed_column ? Wrong# 注意是雙方括號 df[[needed_column]]## [1] 1 2 3 4…

微信小程序bindgetphonenumber獲取手機號阻止冒泡觸發

問題&#xff1a;點擊手機號彈出微信的手機號驗證組件&#xff0c;這是可以的。但是我點擊車牌號&#xff0c;也彈出來了&#xff0c;這就郁悶了。 以下是解決方法 點擊手機號時&#xff0c;彈出選擇手機號 解決&#xff1a; <view style"display: flex;justify-conte…

Pandas處理時間差的4種表達方式

在Pandas中處理時間差&#xff08;timedelta&#xff09;時&#xff0c;有多種方式可以表達時間差。以下是總結的Pandas時間差的四種主要表達方式和相關信息&#xff1a; 目錄 一、使用pd.Timedelta直接創建 二、使用DataFrame中計算時間差 三、轉換為分鐘數表示 四、使用…

pdf處理命令合集

安裝weasyprint用于生成pdf 單個文件合成多個pdf linux - Merge / convert multiple PDF files into one PDF - Stack Overflow

除了諾貝爾獎的紅利,Pasqal 還有哪些實力?

內容來源&#xff1a;量子前哨&#xff08;ID&#xff1a;Qforepost&#xff09; 文丨浪味仙 排版丨沛賢 深度好文&#xff1a;3700字丨13分鐘閱讀 摘要&#xff1a;與超導量子比特相比&#xff0c;中性原子量子技術的投資成本相對較低、中性原子量子比特無需布線、還能將單…

【YashanDB知識庫】outline固化執行計劃

【問題分類】性能優化&#xff0c;功能使用 【關鍵字】outline 【問題描述】防止SQL執行計劃突變&#xff0c;用outline固化執行計劃 【問題原因分析】防止SQL執行計劃突變&#xff0c;用outline固化執行計劃 【解決/規避方法】 SQL--創建測試outline&#xff1a;ol_ab/ol…

查看Linux端口占用和開啟端口命令

查看端口的使用的情況 lsof 命令 比如查看80端口的使用的情況 lsof -i tcp:80列出所有的端口 netstat -ntlp查看端口的狀態 /etc/init.d/iptables status開啟端口以開啟端口80為例。 1 用命令開啟端口 iptables -I INPUT -p tcp --dport 80 -j accpet --寫入要開放的端口/…

23 - 每位教師所教授的科目種類的數量(高頻 SQL 50 題基礎版)

23 - 每位教師所教授的科目種類的數量 考點&#xff1a; 排序和分組 selectteacher_id,count(distinct subject_id) cnt fromTeacher group byteacher_id;