計算機視覺技術實戰 課件 項目6-9 人臉識別:基于insightface的人臉檢索 -綜合應用:火情識別算法研發及部署_第1頁
計算機視覺技術實戰 課件 項目6-9 人臉識別:基于insightface的人臉檢索 -綜合應用:火情識別算法研發及部署_第2頁
計算機視覺技術實戰 課件 項目6-9 人臉識別:基于insightface的人臉檢索 -綜合應用:火情識別算法研發及部署_第3頁
計算機視覺技術實戰 課件 項目6-9 人臉識別:基于insightface的人臉檢索 -綜合應用:火情識別算法研發及部署_第4頁
計算機視覺技術實戰 課件 項目6-9 人臉識別:基于insightface的人臉檢索 -綜合應用:火情識別算法研發及部署_第5頁
已閱讀5頁,還剩117頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

項目6人臉識別:基于insightface的人臉檢索教學目標能力目標(1)

掌握insightface框架的安裝與使用。(2)了解人臉識別的4個步驟及其原理。(3)重點掌握人臉檢測與特征抽取的應用。(4)掌握余弦相似度的原理及應用。知識目標(1)掌握解決人臉檢索任務的基本步驟和實際操作技能。(2)掌握如何設置適合實際場景的相似度閾值。目錄2Insightface框架安裝與使用1認識人臉識別3基于insightface的人臉檢索目錄2Insightface框架安裝與使用1認識人臉識別3基于insightface的人臉檢索1.認識人臉識別

任務目標(1)了解人臉識別的4個步驟及其原理。(2)掌握人臉數據的規范要求。1.1人臉識別簡介隨著計算機視覺技術飛速發展,人臉識別已變成現實生活中的日常應用。人臉識別技術在經歷從基于幾何特征的方法,到基于代數特征和連接機制的方法,再到基于深度學習的方法,不斷提高識別準確性和魯棒性。日常應用人臉識別最常見的場景是人臉識別手機解鎖,這也得益于深度學習的發展與人臉識別算法的進步。基于計算機視覺技術的人臉識別實際是一系列算法組合的應用,主要分為4個步驟,分別是人臉檢測、人臉對齊、人臉編碼和人臉匹配。人臉檢測不同角度人臉圖像對齊成統一標準形態。由于人臉的姿態、表情以及拍攝角度等因素會影響人臉識別的準確性人臉對齊首先定位人臉上眼睛、鼻子、嘴巴等關鍵位置的特征點,然后通過仿射、旋轉、縮放等幾何變換的方式,使各個特征點對齊到統一預設的固定位置上,從而實現空間歸一化。人臉對齊人臉編碼人臉匹配FaceFeatureextractor人臉檢測是從圖像定位和標識出人臉的位置。人臉檢測本質是目標檢測,可以應用任何目標檢測類的算法,也經歷了基于傳統圖像處理的識別算法,再到基于機器學習的識別算法,如于深度學習的識別算法,如MTCNN、SCRFD算法等,在精度上有了極大的進步。在人臉檢測這一步,只檢測輸入圖像的人臉,標記出人臉的坐標位置,將人臉切割出來,作為下一步的輸入。人臉編碼,即人臉特征提取,是人臉識別中關鍵步驟,用于從人臉圖像中提取具有判別性的特征表示。人臉特征提取技術按照技術特點和發展時間,大致分為3類:(1)基于全局信息Holistic特征方法(2)基于局部信息的Local特征方法(3)基于深度學習的方法人臉匹配是指比較不同人臉特征向量并確定它們之間的相似度。人臉匹配一般分為人臉比對和人臉檢索兩種情況。人臉比對技術是對兩個人臉特征向量進行1:1比對,并提供相似度評分;人臉檢索技術是在一個已有人臉庫中找出與目標人臉最相似的一張或多張人臉,并提供相似度評分。1.2人臉采集說明importosregister_images_dir='./register_images'register_images=os.listdir(register_images_dir)#獲取文件列表register_images=sorted(register_images)#按文件名排序print(register_images)人臉識別還有一個前置任務就是人臉采集。人臉采集需要注意以下幾點:圖像大小:人臉圖像過小會影響識別效果,人臉圖像過大則會影響識別速度。一般情況下,人臉圖像的最大邊長不超過2000像素。另外,國家標準《公共安全人臉識別應用圖像技術要求》(GB/T35678-2017)規定了公共安全領域人臉識別圖像的技術要求,其中要求注冊圖像時,兩眼間距應大于等于60像素,宜大于等于90像素;識別圖像時,兩眼間距應大于等于30像素,宜大于等于60像素光照環境:過曝或過暗的光照環境都會影響人臉識別效果,光照環境以自然光為佳。遮擋程度:在實際場景中,遮擋物應不遮擋眉毛、眼睛、嘴巴、鼻子及臉部輪廓。如有戴眼鏡,眼鏡框應不遮擋眼睛,鏡片應無色無反光。采集角度:人臉相對于攝像頭角度為正臉最佳。當需要安裝攝像頭時,攝像頭與水平線之間的俯仰角宜在0-10°之間,不大于18°;安裝高度宜在2.2米-3.5米之間,不高于6米;出入口人臉門禁控制設備安裝高度在1.5-1.7米之間。合法合規:采集過程中務必遵循充分告知不強制、最小數量、非必要不存儲等數據安全原則,避免出現人臉數據濫采、泄露或丟失、過度存儲和使用等問題;更不可出現人臉數據非法買賣等行為。建議讀者詳細研讀《信息安全技術人臉識別數據安全要求》(國家標準GB/T41819-2022)。

代碼3-1將獲取待注冊人臉圖像文件名并打印。輸出結果:

['1.jpg','2.jpg','3.jpg','4.jpg',]本項目待注冊人臉圖像文件總共有4張,同時將以文件名編號作為人臉ID。

目錄2Insightface框架安裝與使用1認識人臉識別3基于insightface的人臉檢索2.深度學習環境部署

任務目標(1)了解insightface框架的基本原理。(2)掌握insightface框架的安裝與使用。2.1insightface框架簡介InsightFace是一個由曠視科技研發和開源2D&3D深度人臉分析庫。InsightFace有效地實現各種先進的人臉識別、人臉檢測和人臉對齊算法,并針對訓練和部署進行了優化。InsightFace相關算法曾參加過多個挑戰賽并獲得冠軍。InsightFace同時是一個用于2D和3D人臉分析的集成Python庫,可以使用pip安裝InsightFace。InsightFace庫打包了一系列模型提供使用,模型說明如表2-1所示。表2-1InsightFace模型包說明從表2-1可以看到,InsightFace模型包主要提供了四種不同規模大小,分別是l、m、s和sc級別,其中“buffalo_l”是InsightFace庫的默認模型包。模型包分別集成了人臉檢測、人臉識別(即人臉特征提取)、人臉對齊和人臉屬性(性別與年齡)的預訓練模型,以“buffalo_l”為例,說明如下:人臉檢測使用的是SCRFD(SampleandComputationRedistributionforEffificientFaceDetection)算法預訓練模型,10GF代表參數量和計算量的規模。人臉識別(人臉特征提取)使用的是以ResNet50為骨干網絡在WebFace600K人臉數據集上訓練的預訓練模型。人臉對齊使用的是以MobileNet-0.5為骨干網絡的可以識別108個2D關鍵點的2d106預訓練模型和以ResNet-50為骨干網絡的可以識別68個3D關鍵點的3d68預訓練模型。人臉屬性(性別與年齡)使用的是以MobileNet-0.25為骨干網絡在CelebA人臉數據集上訓練的預訓練模型。(1)insightface庫的安裝

yuminstallglibcgccgcc-c++pipinstallonnxruntime-i/simplepipinstallinsightface-i/simple2.2insightface安裝與使用然后執行以下命令安裝insightface庫:先安裝onnxruntime包是因為insightface庫引用的預訓練模型是onnx格式,需要使用onnxruntime包來調用模型。如果是GPU環境,則安裝onnxruntime-gpu包。(2)推理insightface對其中一張待注冊圖像進行人臉識別并獲取識別結果為例,詳細講解了insightface的基本使用方法。(3)可視化insightface庫的安裝相對比較簡單,在Centos7環境下,先執行以下命令安裝配置gcc環境:

目錄2Insightface框架安裝與使用1認識人臉識別3基于insightface的人臉檢索3.模型訓練與評估

任務目標掌握人臉檢索的應用流程。掌握人臉特征的抽取與存放。掌握人臉特征的匹配。3.1人臉注冊在本項目中,人臉特征庫存放到數組里,并且將數組的索引號作為人臉ID。在實際生產環境中,人臉特征一般存放到向量數據庫,如此才能支撐億級的人臉檢索。因為向量數據庫知識不在本書范疇,請讀者自行探索。3.2人臉匹配下面使用訓練完的模型新數據進行推理識別的代碼塊,其中“save”參數代表保存識別的結果圖片,“imgsz”參數代表對圖片縮放到指定大小再推理,“conf”參數代表只有超過指定的置信度才輸出識別結果。(2)下面為向量的余弦相似度計算。首先將

vectors

target_vector

進行單位化處理,使用

np.linalg.norm

進行計算。接著,通過

np.dot

計算余弦相似度得到

similarities。找出大于閾值的相似度的索引和值,再對這些值進行倒序排序,并獲取相應的排序后的值和原始索引,最終將排序后的原始索引和值打包成元組序列返回。(1)代碼為加載人臉特征庫,讀取測試圖像并檢測人臉,計算相似度并輸出結果知識要點為幫助讀者回顧項目的重點內容,總結項目中涉及到的主要知識點: 人臉識別的4大步驟,人臉檢測、人臉對齊、人臉編碼和人臉匹配。

insightface人臉識別框架的安裝和使用。 人臉檢索的全流程任務,包括人臉采集、人臉注冊和人臉匹配。經驗總結人臉識別如要達到理想的效果,有以下幾個建議:1) 保證數據采集的規范保證人臉數據符合圖像大小、光照環境、遮擋程度、采集角度等要求,并且保證目標圖片只有一個人臉。2) 采用向量數據庫存儲人臉特征向量數據庫作為人臉識別的完美搭配,可以提供高效的向量存儲和檢索功能,支持大規模向量數據處理和相似度檢索,極大提升人臉識別的效率。3) 設備恰當的相似度閾值相似度閾值直接影響人臉識別的誤識率和通過率。通常閾值的設置要綜合考慮客戶體驗和防風險能力兩個因素,并通過大量測試數據的驗證,保證誤識率和通過率達到一個合適的平衡。項目7風格遷移:基于NST與AnimeGAN的圖像古風化教學目標能力目標(1)了解NeuralStyleTransfer圖像風格遷移原理。(2)掌握NeuralStyleTransfer(NST)安裝與使用。(3)了解AnimeGAN圖像風格遷移原理。(4)掌握AnimeGAN安裝與使用。知識目標(1)掌握基于NeuralStyleTransfer(NST)進行圖像風格遷移的實際操作技能。(2)掌握基于AnimeGAN進行圖像風格遷移的實際操作技能。目錄2基于NeuralStyleTransfer的圖像風格遷移1認識圖像風格遷移3基于AnimeGAN的圖像風格遷移目錄2基于NeuralStyleTransfer的圖像風格遷移1認識圖像風格遷移3基于AnimeGAN的圖像風格遷移1.認識數據集

任務目標(1)了解圖像風格遷移定義及方法。(2)了解圖像風格遷移應用領域。1.1圖像風格遷移方法圖像風格遷移是一種利用深度學習技術實現的圖像轉換過程,其目標是將一幅圖像(通常為藝術作品)的風格應用到另一幅目標圖像上,同時保留目標圖像內容的真實性。這一技術的背景起源于2015年的一篇開創性論文,由LeonA.Gatys等人提出。通過圖像風格遷移為藝術家和設計師提供了一種新型的創作工具,展示了AI技術在非傳統領域的潛力。圖像風格遷移主要方法包括基于卷積神經網絡(CNN)的方法、優化方法和生成對抗網絡(GAN)方法。以下是幾種主要方法的詳細介紹:基于卷積神經網絡的方法:利用深度學習中的卷積神經網絡,通過提取圖像內容特征和風格特征,實現風格遷移。經典的NeuralStyleTransfer是這種方法代表。它使用預訓練CNN來提取圖像的特征,并通過優化使得生成圖像的內容與輸入內容圖像相似,而風格則與風格圖像相似??。優化方法:通過定義一個損失函數,函數包括內容損失和風格損失,對生成圖像進行優化。內容損失衡量生成圖像與內容圖像在內容上的相似性,而風格損失衡量生成圖像與風格圖像在風格上的相似性。通過迭代優化損失函數,可生成既保留內容圖像結構又有風格圖像風格的圖像??。生成對抗網絡(GAN)方法:利用生成器和判別器的對抗訓練,生成高質量的風格遷移圖像。典型的例子有AnimeGAN。AnimeGAN專門用于將真實世界的人像圖像轉換為動漫風格的圖像,通過生成器和判別器的對抗訓練實現高質量的動漫風1.2數據集展示

圖像風格遷移近年來得到了廣泛關注和應用,它通過優化圖像內容和風格特征,使得圖像能夠呈現出多樣的藝術效果。以下是圖像風格遷移在各個領域的應用及其詳細介紹。(1)藝術創作領域:圖像風格遷移在藝術創作中的應用尤為顯著。藝術家和設計師可以利用這項技術將普通的照片轉換成具有特定藝術風格的圖像,如水墨畫、油畫、水彩畫、素描等。這種轉換不僅提高了藝術創作的效率,還為藝術家提供了更多的靈感和創作自由。例如,使用NeuralStyleTransfer技術,用戶可以輕松地將吳道子、唐伯虎等古代畫家的畫風應用到現代攝影作品中,創造出獨特的視覺效果?。(2)電影和動畫領域:圖像風格遷移技術可以用于場景的藝術化處理,增強視覺效果和藝術表現力。例如,在電影制作中,可以將真實場景轉換為特定藝術風格的畫面,營造出特定的視覺氛圍。在動畫制作中,圖像風格遷移可以幫助動畫師將手繪風格應用到數字動畫中,節省大量的手工繪制時間和成本??。(3)廣告和營銷領域:圖像風格遷移技術可以用于創建吸引人的視覺效果,從而吸引更多的觀眾注意力。廣告設計師可以將產品照片轉換為不同藝術風格的圖像,增加廣告的藝術性和吸引力。例如,通過將產品圖像轉換為油畫風格或漫畫風格,可以使廣告更加生動有趣,吸引消費者的注意。(4)教育和培訓領域:通過將教學材料和訓練數據轉換為不同藝術風格,教育工作者可以提高教學內容趣味性和吸引力。例如在美術教育中,教師可以使用圖像風格遷移技術將學生的作品轉換為不同藝術家的風格,幫助學生更好地理解和學習不同的藝術流派和技法。目錄2基于NeuralStyleTransfer的圖像風格遷移1認識圖像風格遷移3基于AnimeGAN的圖像風格遷移2.深度學習環境部署

任務目標(1)了解NeuralStyleTransfer算法的基本原理和方法。(2)掌握NeuralStyleTransfer算法部署及項目工程結構。(3)掌握NeuralStyleTransfer算法的實現過程,包括損失模塊定義及預訓練模型嵌入。2.1NeuralStyleTransfer原理概述NeuralStyleTransfer(NST)是一種利用卷積神經網絡(CNN)實現圖像風格遷移的方法。NST算法的核心思想是使用預訓練的卷積神經網絡來提取圖像的內容特征和風格特征,通過優化過程生成融合了內容圖像和風格圖像特征的圖像。在風格遷移過程中,通常涉及兩幅圖像:內容圖像(ContentImage)和風格圖像(StyleImage)。內容圖像提供圖像的主要結構和主題,而風格圖像則貢獻其獨特的視覺風格,如紋理、色彩布局和筆觸。NST算法主要包括等6個步驟,下面分別是其詳細描述:特征提取使用深度卷積神經網絡來提取圖像的內容和風格特征。卷積神經網絡的不同層提取圖像的不同層次的特征.2)內容表示3)風格表示4)總變差損失為了使生成圖像更平滑,避免過多噪聲,加入總變差損失(TotalVariationLoss)最終的損失函數是內容損失、風格損失和總變差損失的加權和:5)總損失其中,α、β和γ和分別是內容損失、風格損失和總變差損失的權重系數。2.2自然風景國畫化實戰-NST模型部署NST項目部署主要從源碼下載、工程目錄及安裝依賴包三個部分來進行,下面分別簡單介紹其過程。

源碼下載。有兩種方式獲取源碼:一是通過本課程提供下載獲取。二是通過訪問項目網頁,下載項目源碼到本地。/tutorials/advanced/neural_style_tutorial.html

(2)工程目錄介紹下圖本次工程的主要文件和目錄結構。其中,weights為模型存放的目錄,inputs、outputs分別為輸入圖像文件夾及輸出風格化圖像文件夾。NeuralStyleTutorial.py為風格遷移的腳本實現,NeuralStyleTutorial.ipynb為記事本形式的圖像風格遷移腳本。requirements.txt中包含項目所需的依賴包。(3)安裝依賴包。下載源碼后,進入NST-landscape文件夾,打開Anacoda終端。利用conda創建Python=3.10的虛擬環境,并通過pip在該環境中安裝環境包。下面命令為創建虛擬環境、激活虛擬環境、安裝python依賴包:環境依賴包說明“requirements.txt”文件里包含了NST項目所依賴的python包,其中每個包的作用如下表所示:2.3自然風景國畫化實戰(基于NST風格遷移)基于NTS實現自然風景國畫化的代碼文件對應為”NeuralStyleTutorial.ipynb”,后文對代碼文件的重要組成部分分別進行說明講解,包括以下6個模塊。數據加載圖像數據顯示內容特征提取損失加權和優化基于VGG的NST模型及損失函數設置圖像生成2.3.1基于NST風格遷移–數據加載首先介紹數據加載。右側為導入風格和內容圖片的代碼。原始的PIL圖片的值介于0到255之間,但是當轉換成torch張量時,它們的值被轉換成0到1之間。圖片也需要被重設成相同的維度。一個重要的細節是,注意torch庫中的神經網絡用來訓練的張量的值為0到1之間。如果你嘗試將0到255的張量圖片加載到神經網絡,然后激活的特征映射將不能偵測到目標內容和風格。2.3.2基于NST風格遷移–圖像數據顯示圖形可視化的代碼如右圖所示,展示了如何在使用PyTorch進行深度學習操作的同時,使用matplotlib來顯示和檢查內容和風格圖像。這在圖像風格遷移任務的調試和可視化過程中是常見的步驟。

2.3.3基于NST風格遷移–內容特征提取像風格遷移(NeuralStyleTransfer,NST)的內容特征提取是一個關鍵的過程,它涉及從預定的內容圖像和風格圖像中提取出重要的特征以供后續的風格融合。內容特征提取首先需要從內容圖像中提取出代表其主要視覺內容的高層特征。這通常涉及識別圖像中的物體、形狀和結構等信息。然后使用預訓練的深度卷積神經網絡(例如VGG網絡),將內容圖像作為輸入,提取中間層的激活作為內容特征。一般來說,網絡中較深層的卷積層能夠捕捉圖像的更復雜、更抽象的內容信息。在本小節代碼中,內容特征提取通過以下步驟來實現:首先模型中第一個模塊是正則化模塊(Normalization),這是為了將輸入圖像的數據標準化,即調整圖像的均值和標準差,使模型在不同的圖像輸入上表現更穩定。然后在預訓練的卷積神經網絡(CNN)中選擇特定的卷積層作為內容層。在這個例子中,默認情況下選擇的是第四個卷積層(conv_4)。這個層被認為能夠捕捉足夠的高級內容信息,而不過于具體到細節。2.3.4基于NST風格遷移–損失函數設置在圖像風格遷移任務中,損失函數是優化過程的核心,它定義了目標圖像與內容圖像和風格圖像之間的目標差異。整個過程是通過最小化這些損失來調整生成圖像的像素值,以使其在視覺上同時捕捉到內容圖像的內容和風格圖像的風格。通常情況下,損失函數由兩個主要部分組成:內容損失(ContentLoss)和風格損失(StyleLoss)。左側代碼為內容損失,右側為風格損失代碼。風格損失的目的是測量目標圖像和風格圖像在風格上的差異。它是通過在多個卷積層的特征激活上使用Gram矩陣來實現的。本項目中是通過計算每個選定的風格層(stylelayers)特征,計算目標圖像和風格圖像的特征激活的Gram矩陣,然后使用這兩個Gram矩陣之間的平均平方誤差來定義風格損失。內容損失的作用是確保目標圖像在像素級別上與內容圖像保持相似。它通常是通過計算內容圖像和目標圖像在某些深度層(contentlayers)的激活之間的誤差來實現的。本項目中計算內容損失的方法是使用平均平方誤差(MeanSquaredError,MSE)來度量預選層的特征激活之間的差異。2.3.5基于NST風格遷移–基于VGG的NST模型及損失函數設置(1)模型加載,加載本地模型并設置內容風格層(2)構建包含內容損失和風格損失的模型2.3.6基于NST風格遷移–圖像生成

在定義好CNN網絡的特征提取層和損失函數后,就可以執行圖像風格遷移任務了,在代碼7-7中,定義了一個函數run_style_transfer,目標圖像被迭代地更新,以減少其內容與內容圖像間的差異性以及其風格與風格圖像間的差異性。圖像更新繼續進行,直到達到預定的迭代次數,或者直到損失函數收斂至某個閾值以下。最終,這段代碼輸出了具有風格圖像特征的內容圖像,完成了風格遷移任務。2.4基于NST風格遷移–結果展示(a)內容圖像(b)內容圖像(c)風格遷移結果圖(a)為內容圖像,圖(b)為風格圖像,圖(c)為風格遷移生成圖像,可以看出該算法能夠將風格圖像的特征融入到內容圖像中。目錄2基于NeuralStyleTransfer的圖像風格遷移1認識圖像風格遷移3基于AnimeGAN的圖像風格遷移3.基于AnimeGAN的圖像風格遷移任務目標(1)了解AnimeGAN的基本原理和方法。(2)掌握AnimeGAN算法部署及項目工程結構。(3)掌握AnimeGAN算法的實現細節,包括生成器模型網絡結構及模型推理。3.1AnimeGAN原理概述AnimeGAN是一種專門用于將真實世界的人像圖像轉換為動漫風格圖像的生成對抗網絡(GAN)方法。該方法通過生成器和判別器的對抗訓練,實現高質量的動漫風格遷移。AnimeGAN主要由兩個部分組成:生成器(Generator)和判別器(Discriminator)。生成器的任務是將輸入的真實圖像轉換為動漫風格的圖像,而判別器的任務是區分生成的動漫圖像和真實的動漫圖像。這兩個網絡通過對抗訓練相互提升,最終生成的圖像能夠以假亂真。生成器采用了卷積神經網絡的架構,其目的是將輸入圖像轉換為具有動漫風格的圖像。生成器網絡通常包括一系列的卷積層和反卷積層,逐步提取輸入圖像的特征并進行風格轉換。生成器的訓練目標是生成足以欺騙判別器的動漫風格圖像。判別器也是一個卷積神經網絡,其任務是區分生成的圖像和真實的動漫圖像。判別器通過不斷學習來提高自身的辨別能力,從而促使生成器生成更為真實的動漫風格圖像。生成器和判別器通過對抗訓練相互競爭和提升。生成器嘗試生成能夠欺騙判別器的圖像,而判別器則不斷改進,以便更好地識別生成的圖像是否真實。這個過程通過最小化生成器和判別器的損失函數來實現。3.2AnimeGAN部署gitclone/bryandlee/animegan2-pytorch.git有三種方式獲取源碼:一是通過本課程提供下載獲取。二是通過git命令clone項目代碼到本地:本次工程的主要文件和目錄結構。其中,weights為模型存放的目錄,inputs、outputs分別為輸入圖像文件夾及輸出風格化圖像文件夾。model.py中為生成器部分的腳本實現,test.py為推理腳本。Requirements.txt中包含項目所需的依賴包。(2)工程目錄介紹三是通過訪問項目網頁,下載項目zip包到本地后解壓。/bryandlee/animegan2-pytorch(1)源碼下載3.3.1基于AnimeGAN人臉風格化-網絡結構該部分主要為模型加載部分,主要為ConvNormLReLU模塊、倒置殘差塊及生成器網絡。ConvNormLReLU模塊組合了填充層、卷積層、歸一化層和LeakyReLU激活函數,方便構建網絡層。根據pad_mode選擇填充方式,包括零填充、復制填充和反射填充。倒置殘差塊(InvertedResBlock):包含擴展層、深度卷積層和點卷積層,使用跳躍連接來增強梯度傳遞.(1)定義帶有卷積層、歸一化層和LeakyReLU激活函數的模塊(2)倒置殘差塊3.3.2基于AnimeGAN人臉風格化-網絡結構生成器網絡包含多個順序塊,每個塊由ConvNormLReLU組合層組成,在塊之間使用雙線性插值進行上采樣處理。最終通過out_layer輸出結果,使用Tanh激活函數將輸出限制在[-1,1]范圍內。3.4模型推理(a)原始圖像(b)風格遷移結果圖(a)為原始圖像,圖中的紅框是腳本中提供的坐標;圖(b)為風格遷移結果展示,可以看到該模型能夠將動漫風格遷移到原始圖像中,在具備風格特征的同時能夠保持原始圖像的內容特征。下面分別為模型推理腳本及模型推理結果比對。其中模型推理腳本中有加載并預處理圖像,模型加載以及模型推理,結果圖像保存等部分腳本,見左側代碼。知識要點為幫助讀者回顧項目的重點內容,總結項目中涉及到的主要知識點:NeuralStyleTransfe的原理,包括使用深度神經網絡提取圖像的內容和風格特征,以及使用優化算法生成風格遷移后的圖像。NeuralStyleTransfe算法的網絡結構搭建及損失函數設置。NeuralStyleTransfe的實現過程,包括加載和預處理圖像數據,構建和初始化網絡模型,設置和調整超參數,執行優化算法,保存和展示風格遷移后的圖像。AnimeGAN算法原理,包括生成對抗網絡各模塊作用。AnimeGAN的實現過程,包括圖像加載與預處理,初始化預訓練模型以及模型推理經驗總結在圖像風格遷移任務中,有以下幾個實用的建議可以幫助優化模型的性能:(1) 理解神經風格遷移的基本原理。深入理解神經風格遷移的基本原理,包括內容損失、風格損失、總變分損失以及優化器的作用和原理,對于合理設計模型架構至關重要。(2) 合適的特征提取網絡選擇。選擇一個預訓練的特征提取網絡,如VGG3、ResNet等,作為神經風格遷移的基礎網絡,可以提高模型的效率和效果。一般來說,選擇一個在圖像分類任務上表現良好的網絡,可以更好地提取圖像的內容和風格特征。(3) 合適的內容和風格層選擇。選擇合適的內容和風格層是神經風格遷移的關鍵步驟。一般來說,選擇較淺的層作為內容層,可以保留圖像的低層次的細節信息;選擇較深的層作為風格層,可以捕捉圖像的高層次的抽象信息。同時,可以嘗試多個風格層的組合,以增加風格的多樣性和復雜度。(4) 合適的損失函數權重選擇。選擇合適的損失函數權重,是平衡內容和風格的重要因素。一般來說,內容損失的權重應該小于風格損失的權重,以避免生成的圖像過于接近內容圖像。同時,可以根據不同的風格圖像和內容圖像,調整損失函數權重,以達到最佳的視覺效果。(5) 合適的優化器和學習率選擇。選擇合適的優化器和學習率,是加速模型收斂和提高模型穩定性的重要因素。一般來說,使用Adam或L-BFGS等自適應的優化器,可以更快地找到最優解。同時,選擇一個合適的初始學習率,并使用學習率衰減策略,可以避免模型陷入局部最優或震蕩。(6) 合適的圖像尺寸和初始化選擇。選擇合適的圖像尺寸和初始化,是影響模型運行時間和生成效果的重要因素。一般來說,選擇較小的圖像尺寸,可以減少模型的計算量和內存消耗,但可能導致生成的圖像細節不清晰;選擇較大的圖像尺寸,可以提高生成的圖像質量,但可能增加模型的運行時間和內存占用。同時,選擇一個合適的圖像初始化方式,如隨機噪聲、內容圖像或風格圖像,可以影響模型的收斂速度和生成效果。項目8以文修圖:基于Grounded-SAM大模型的圖像編輯教學目標能力目標(1)

掌握Grounded-SAM安裝與使用。(2)了解Grounded-SAM圖像編輯的3個步驟及原理。(3)掌握Gradio快速演示工具。(4)掌握基于MMDetection的模型微調。知識目標(1)掌握基于Grounded-SAM項目進行圖像編輯的實際操作技能。(2)掌握Gradio快速演示工具使用。(3)掌握大模型GroundingDINO微調。目錄2基于Grounded-SAM的圖像編輯1認識Grounded-SAM開源項目3GroundingDINO模型的微調目錄2基于Grounded-SAM的圖像編輯1認識Grounded-SAM開源項目3GroundingDINO模型的微調1.認識數據集

任務目標1.了解Grounding-SAM項目。2.掌握GroundingDINO的安裝及使用。3.掌握SAM的安裝及使用。4.掌握stablediffusion的安裝及使用。1.1Grounded-SAM概述GroundingDINO:這是一個文本驅動的檢測模型,能夠根據文本提示檢測圖像中的物體。SegmentAnything:這是一個圖像分割模型,可以基于文本提示進行分割,簡稱SAM。StableDiffusion:這是一個圖像生成模型,可以用于生成新的圖像內容。

Grounded-SAM開源項目全名為"Grounded-Segment-Anything",由IDEA-Research團隊創建。項目的核心思想是結合不同的大模型優勢,構建一個強大的流程來解決復雜的問題。就本項目具體來說,該組合通過結合以下幾個關鍵組件來實現自動檢測、分割和生成任何物體:這種整合為連接各種視覺模型打開了一扇門,使得可以使用Grounded-SAM的組合流程來靈活完成廣泛的視覺任務(值得一提的是,這是一個結合強大專家模型的工作流程,其中的所有部分都可以單獨使用或組合使用,并且可以用任何類似但不同的模型替換)。例如,通過組合BLIP、GroundingDINO和SAM等模型用于自動標簽系統,可以實現僅基于輸入圖像實現自動標注流程;通過組合Whisper、GroundingDINO和SAM等模型可以實現通過語音檢測和分割任何物體。本項目主要利用Grounding-SAM項目中GroundingDINO、SAM和Stable-Diffusion進行組合,實現以文修圖的功能任務。1.2GroundingDINO、SAM、stablediffusion模型簡介GroundingDINO是一個由IDEA-Research團隊提出和發布的開集目標檢測算法模型,它的獨特之處在于能夠識別并定位圖像中由文本提示指定的任意對象,而且不受限于在訓練階段遇到的特定類別。這意味著,與傳統的閉集目標檢測模型(僅能識別訓練期間見過的類別)不同,GroundingDINO具有更強的靈活性和泛化能力,可以被稱為“DetectAnything”模型。SAM(SegmentAnythingModel)是由Meta(前Facebook)提出的一種圖像分割模型,旨在實現對圖像中任何內容的語義分割。SAM同樣結合了深度學習和自然語言處理技術,以支持對由文本提示指定的的任何對象或場景的分割。StableDiffusion是由StabilityAI等共同開發的。它是一種基于深度學習的圖像生成模型,采用擴散模型和變分自編碼器的技術,旨在生成高質量、高分辨率的圖像。它能夠根據用戶的文本描述生成詳細、逼真的圖像。用戶可以輸入任何描述,例如“一只在月光下飛翔的貓”,模型則能生成與描述相匹配的圖像。1.3Grounded-SAM的部署Grounded-SAM項目整合了多個視覺大模型的使用代碼,其中就包括了GroundingDINO、SAM和stablediffusion模型。本小節主要帶領讀者們通過對Grounded-SAM進行部署。(1)源碼下載。有三種方式獲取源碼(2)安裝依賴包(3)預訓練模型下載下載GroundingDINO模型的預訓練權重”GroundingDINO_swint_ogc.pth”和SAM模型的預訓練權重”sam_vit_h_4b8939.pth”,并放入根目錄Grounded-Segment-Anything-main的weights目錄下;然后需要下載stablediffusion模型的模型權重及配置文件,并放在根目錄的runwayml/stable-diffusion-inpainting路徑下;此外,因GroundingDINO用到BERT的預訓練權重,也需要下載”bert-base-uncased”版本的模型權重及配置文件,并放在根目錄的bert-base-uncased路徑下。以上預訓練權重及配置文件建議首選通過課程提供的資源下載,有條件也可自行到官網和HuggingFace網站上下載。下載源碼后,進入Grounded-Segment-Anything-main文件夾,打開Anacoda終端。利用conda創建Python=3.10的虛擬環境,并通過pip在該環境中安裝環境包。下面命令為創建虛擬環境、激活虛擬環境、安裝python依賴包繼續執行以下命令在虛擬環境安裝segment_anything、GroundingDINO及diffusers。一是通過本課程提供下載獲取;二是通過git命令clone項目代碼到本地:三是通過訪問項目網頁/IDEA-Research/Grounded-Segment-Anything,下載項目zip包到本地后解壓。1.3.1GroundingDINO代碼演示GroundingDINO模型是根據用戶輸入的文本提示對輸入圖像進行目標檢測,能夠將符合該描述的對象檢測出來。下面代碼是GroundingDINO模型演示demo的代碼塊,包括加載模型,提示詞樣例,圖片讀取及模型檢測等,最終將處理完成的圖像保存到指定路徑。(a)原始圖像(b)檢測結果1.3.2SAM大模型的使用演示SegmentAnythingModel模型具備零樣本分割能力,下面代碼是它的簡單樣例,能夠對提供的區域框內進行分割,并將其中的主體對象分割結果篩選出來,通過supervision工具完成繪圖并保存。(a)原始圖像(b)分割結果(a)為原始圖像,圖中的紅框是腳本中提供的坐標;圖(b)為分割結果的圖像展示,可以看到該模型能夠將框內對象給很好地分割出來。1.3.3stablediffusion圖片生成大模型的使用演示stablediffusion圖片生成大模型的使用演示。stablediffusion能夠將原始圖像中給定的掩碼區域中的圖像編輯為用戶給定的文本輸入的內容。下面代碼是一個簡單的圖片編輯和生成示例,通過輸入原始圖像、掩碼圖像,經過30次擴散過程,完成圖像編輯。(a)為原始圖像,該圖像中有一條狗坐在凳子上;(b)為原始圖像中狗的掩碼圖像;(c)為編輯生成后的圖像,可以看出該模型結合原始圖片和對象掩碼,成功按文本描述將原始圖像中的狗變成一只貓。目錄2基于Grounded-SAM的圖像編輯1認識Grounded-SAM開源項目3GroundingDINO模型的微調2.深度學習環境部署

任務目標(1)掌握Grounding-SAM圖像編輯。(2)掌握Gradio工具使用。(3)測試圖像編輯效果。2.1以文修圖的實現過程Grounded-SAM圖像編輯流程由三個關鍵步驟構成。首先,執行目標檢測,利用GroundingDINO模型精確定位文本描述中提及的對象。接著,執行指定區域的主體分割,通過SAM模型提取出特定區域內的主要對象的掩碼。最后,利用stablediffusion模型對原始圖像中被掩碼覆蓋的部分進行精細編輯,從而實現高質量的圖像編輯效果。圖像編輯過程展示圖2.2基于Gradio實現可視化圖像編輯本節實現一個交互式的圖像編輯web程序,該程序可以提供圖像選擇、文本輸入、類型選擇等功能,且能夠對輸入進行處理并可視化輸出結果。出于這一目標,利用Gradio這個機器學習演示快速構建工具,將圖像編輯這一過程中的檢測、分割及編輯功能均抽象出來,實現了一個多功能的交互演示系統。Gradio簡介程序代碼介紹程序的整體流程模型加載模型推理結果輸出Gradio頁面實現圖像編輯效果展示2.3Gradio簡介

請注意,以上命令僅是示例,實際上可能需要根據系統配置和需求進行一些調整,輸出結果也會根據版本不同而有所不同。此外,為了獲得更好的性能和穩定性,在使用GPU版本時需確保GPU驅動和CUDA版本與PyTorch兼容。Gradio是一個開源的Python庫,專為簡化機器學習模型和數據科學項目的演示與分享過程而設計。它允許開發者和數據科學家在不需要深入掌握Web開發技術的情況下,迅速為他們的模型或數據處理工作流創建交互式的Web界面。Gradio提供了一個簡潔的API,用戶只需幾行代碼就能將模型包裝成一個具備圖形用戶界面的Web應用。Gradio支持多種輸入和輸出類型,涵蓋了文本、圖像、音頻、視頻等多種數據格式。Gradio的核心是Interface類,它允許用戶定義輸入和輸出類型,創建交互式的Web界面。Gradio中典型的組件有輸入組件、輸出組件及頁面布局組件。輸入組件輸出組件頁面布局組件2.3.1Gradio輸入組件說明及示例

請注意,以上命令僅是示例,實際上可能需要根據系統配置和需求進行一些調整,輸出結果也會根據版本不同而有所不同。此外,為了獲得更好的性能和穩定性,在使用GPU版本時需確保GPU驅動和CUDA版本與PyTorch兼容。組件名說明示例Audio允許用戶上傳音頻文件或直接錄音。gr.Audio(source="microphone",type="filepath")Checkbox提供復選框,用于布爾值輸入。gr.Checkbox(label="同意條款")CheckboxGroup允許用戶從一組選項中選擇多個。gr.CheckboxGroup(["選項1","選項2","選項3"],label="選擇你的興趣")ColorPicker用于選擇顏色,通常返回十六進制顏色代碼。gr.ColorPicker(default="#ff0000")Dataframe允許上傳CSV文件或輸入DataFrame。gr.Dataframe(headers=["列1","列2"],row_count=5)Dropdown下拉菜單,用戶可以從中選擇一個選項gr.Dropdown(["選項1","選項2","選項3"],label="選擇一個選項")File用于上傳任意文件,支持多種文件格式。gr.File(file_count="single",type="file")Image用于上傳圖片,支持多種圖像格式。gr.Image(type='pil')Number數字輸入框,適用于整數和浮點數。gr.Number(default=0,label="輸入一個數字")Radio單選按鈕組,用戶從中選擇一個選項。gr.Radio(["選項1","選項2","選項3"],label="選擇一個選項")Slider滑動條,用于選擇一定范圍內的數值。gr.Slider(minimum=0,maximum=10,step=1,label="調整數值")Textbox單行文本輸入框,適用于簡短文本。gr.Textbox(default="默認文本",placeholder="輸入文本")Textarea多行文本輸入區域,適合較長的文本輸入。gr.Textarea(lines=4,placeholder="輸入長文本")Time用于輸入時間。gr.Time(label="選擇時間")Video視頻上傳組件,支持多種視頻格式。gr.Video(label="上傳視頻")Data用于上傳二進制數據,如圖像或音頻的原始字節。gr.Data(type="auto",label="上傳數據")2.3.2Gradio輸出組件說明及示例

請注意,以上命令僅是示例,實際上可能需要根據系統配置和需求進行一些調整,輸出結果也會根據版本不同而有所不同。此外,為了獲得更好的性能和穩定性,在使用GPU版本時需確保GPU驅動和CUDA版本與PyTorch兼容。組件名說明示例Audio播放音頻文件。gr.Audio(type="auto")Carousel以輪播方式展示多個輸出,適用于圖像集或多個數據點。gr.Carousel(item_type="image")DataframePandasDataFrame展示,適用于表格數據。gr.Dataframe(type="pandas")Gallery以畫廊形式展示一系列圖像。gr.Gallery(label="images",show_label=False,elem_id="gallery",columns=[2],rows=[1],object_fit="contain",height="auto")HTML展示HTML內容,適用于富文本或網頁布局。gr.HTML(value=generate_html())Image展示圖像。gr.Image(type="pil")JSON以JSON格式展示數據,便于查看結構化數據。gr.JSON(value=json.dumps({"a":30})Label展示文本標簽,適用于簡單的文本輸出。gr.Label(value="cat")

Markdown支持Markdown格式的文本展示。gr.Markdown(value="##Mark")Plot展示圖表,如matplotlib生成的圖表。gr.Plot(value=plt.gcf())Text用于顯示文本,適合較長的輸出。gr.Text(value=echo("Hello,World!"))Video播放視頻文件。gr.Video(value="VideoPath.mp4")2.3.3Gradio布局組件說明及示例

請注意,以上命令僅是示例,實際上可能需要根據系統配置和需求進行一些調整,輸出結果也會根據版本不同而有所不同。此外,為了獲得更好的性能和穩定性,在使用GPU版本時需確保GPU驅動和CUDA版本與PyTorch兼容。組件名說明示例Row播放音頻文件。withgr.Blocks()asdemo:withgr.Row():gr.Button("Button1")gr.Button("Button2")Column以輪播方式展示多個輸出,適用于圖像集或多個數據點。withgr.Blocks()asdemo:withgr.Column():gr.Textbox(label="Enteryourname")gr.Button("Submit")Accordion允許用戶通過展開和折疊來顯示或隱藏其內容。withgr.Blocks()asdemo:withgr.Accordion("Clickmetoexpand"):gr.Text("Thistextishidden")Tab用于創建帶有多個標簽頁的界面,用戶可以在這些標簽頁之間切換withgr.Blocks()asdemo:withgr.Tab("Tab1"):gr.Text("ThisisinTab1.")withgr.Tab("Tab2"):gr.Text("ThisisinTab2.")2.4 程序代碼介紹-程序的整體流程

請注意,以上命令僅是示例,實際上可能需要根據系統配置和需求進行一些調整,輸出結果也會根據版本不同而有所不同。此外,為了獲得更好的性能和穩定性,在使用GPU版本時需確保GPU驅動和CUDA版本與PyTorch兼容。四個組件分別為Sam全分割、GroundingDINO目標檢測、SamPredictor指定區域分割、StableDiffusion圖像編輯。該程序對應的四個功能及其過程為:1.全分割功能:無需輸入參數,通過圖中①⑤進行;2.目標檢測功能:需要輸入待檢測對象文本,通過圖中②⑥進行;3.文本分割功能:需要輸入待檢測對象文本,通過圖中②③⑦進行;4.圖像編輯功能:需要輸入待檢測對象文本及編輯提示文本,通過圖中②③④⑧進行。程序的整體流程。該程序的整體過程如下圖所示,程序由SamAutomaticMaskGenerator、GroundingDINO、SamPredictor、StableDiffusionInpaintPipeline等四個算法組件及1-8個路徑組成。2.4.1 程序代碼介紹–模型加載

請注意,以上命令僅是示例,實際上可能需要根據系統配置和需求進行一些調整,輸出結果也會根據版本不同而有所不同。此外,為了獲得更好的性能和穩定性,在使用GPU版本時需確保GPU驅動和CUDA版本與PyTorch兼容。模型加載。該部分主要為模型加載部分,主要為模型路徑設置,模型加載。具體可見右側代碼,其中run_grounded_sam函數中僅有圖像獲取及轉換過程,模型推理、結果輸出部分在后面介紹。2.4.2 程序代碼介紹-模型推理

請注意,以上命令僅是示例,實際上可能需要根據系統配置和需求進行一些調整,輸出結果也會根據版本不同而有所不同。此外,為了獲得更好的性能和穩定性,在使用GPU版本時需確保GPU驅動和CUDA版本與PyTorch兼容。模型推理。推理部分封裝了四個功能的推理腳本,見右側代碼。當task_type為'automask'直接進行全分割模型;當task_type為'det',僅進行文本提示目標檢測;當task_type為'seg'或'inpainting'進行文本提示目標檢測模型及指定區域主體分割算法。2.4.3 程序代碼介紹-結果輸出

請注意,以上命令僅是示例,實際上可能需要根據系統配置和需求進行一些調整,輸出結果也會根據版本不同而有所不同。此外,為了獲得更好的性能和穩定性,在使用GPU版本時需確保GPU驅動和CUDA版本與PyTorch兼容。下面為結果輸出部分,其輸出為圖像列表。當任務類型為目標檢測或全分割時,返回繪制的推理結果的圖像;當任務類型為文本提示分割、圖像編輯兩種情況時,返回的是繪制推理結果圖像及掩碼圖像。2.4.4 程序代碼介紹-Gradio頁面實現Gradio包含豐富的組件,能夠快速構建展示程序。本項目頁面中設置圖像組件、文本輸入組件、下拉框組件、滑動組件等,并設定單擊按鈕,將按鈕與上文run_grounded_sam函數綁定。能夠自動獲取輸入的圖片、文本以及參數等,調用推理函數。最后將函數返回結果呈現到輸出組件。defvisual_interface():

withgr.Blocks(title="Grounded-SAMStyleImage")asblock:#設置界面名

withgr.Row():#添加一行

input_image=gr.Image(type="pil")#創建輸入圖像組件

gallery=gr.Gallery(#創建輸出結果組件

label="Generatedimages",show_label=False,elem_id="gallery"

,columns=[2],rows=[1],object_fit="contain",height="auto"

)

withgr.Row():

#選擇框,選擇任務(全分割、文本提示檢測、文本提示分割、圖像編輯)

task_type=gr.Dropdown(["automask","det","seg","inpainting"],value="inpainting",label="task_type")

withgr.Row():#添加圖像檢測的文本輸入行

text_prompt=gr.Textbox(label="TextPrompt")

withgr.Row():#添加圖像編輯的文本輸入行

inpaint_prompt=gr.Textbox(label="InpaintPrompt")

withgr.Row():#添加擴散迭代次數

infer_steps_num=gr.Textbox(label="InpaintInferenceSteps")

withgr.Row():#設置按鈕

run_button=gr.Button()

withgr.Row():#高級屬性,用于修改對象檢測文本、框閾值及圖像編輯方式

withgr.Accordion("Advancedoptions",open=False):box_threshold=gr.Slider(label="BoxThreshold",minimum=0.0,maximum=1.0,value=0.3,step=0.05)text_threshold=gr.Slider(label="TextThreshold",minimum=0.0,maximum=1.0,value=0.25,step=0.05)

inpaint_mode=gr.Dropdown(["merge","first"],value="merge",label="inpaint_mode")

#將按鈕與推理函數綁定

run_button.click(run_grounded_sam,

inputs=[input_image,text_prompt,task_type,inpaint_prompt,

box_threshold,text_threshold,inpaint_mode,infer_steps_num],

outputs=gallery)

block.launch()2.5.1 圖像編輯操作界面展示

請注意,以上命令僅是示例,實際上可能需要根據系統配置和需求進行一些調整,輸出結果也會根據版本不同而有所不同。此外,為了獲得更好的性能和穩定性,在使用GPU版本時需確保GPU驅動和CUDA版本與PyTorch兼容。如圖所示,第一行左側為圖像輸入組件,右側為結果輸出組件;接下來分別為task_type選擇欄,能用于選擇功能類別,默認為”inpainting”,即圖像編輯;TextPrompt用于輸入檢測(待編輯)對象的提示文本;InpaintPrompt用于輸入需要生成對象的提示文本;InpaintInferenceSteps用于輸入擴散循環次數(決定了生成對象的特征程度)。后面的高級選項用于設定閾值和模式。當輸入及參數設置完成,點擊run按鈕后進行處理。2.5.2圖像編輯效果展示

請注意,以上命令僅是示例,實際上可能需要根據系統配置和需求進行一些調整,輸出結果也會根據版本不同而有所不同。此外,為了獲得更好的性能和穩定性,在使用GPU版本時需確保GPU驅動和CUDA版本與PyTorch兼容。針對圖像編輯進行了兩組實驗,分別以提示詞、擴散迭代次數為變量來進行比對。圖像(a)為原始圖像,該測試設置檢測文本提示為dog,擴散迭代次數為30,中間為當編輯提示詞為”acat”時的輸出圖像,右側為當編輯提示詞為”apig”時的輸出圖像。可見,當要編輯生成的對象與原檢測對象的大小和類型比較一致的時候,編輯生成的效果較好。2.5.3圖像編輯效果展示

請注意,以上命令僅是示例,實際上可能需要根據系統配置和需求進行一些調整,輸出結果也會根據版本不同而有所不同。此外,為了獲得更好的性能和穩定性,在使用GPU版本時需確保GPU驅動和CUDA版本與PyTorch兼容。針對圖像編輯進行了兩組實驗,分別以提示詞、擴散迭代次數為變量來進行比對。(a)為原始圖像,該測試設置檢測文本提示為”Hair”,編輯生成提示詞為”Whitehair”,如圖8-9(b)

為擴散迭代次數為20時的輸出圖像,如圖(c)

為擴散迭代次數為40時的輸出圖像。可以看出不同的擴散次數會編輯出不同效果的圖像,可通過設置不同的迭代次數來編輯出較為滿意的圖像。目錄2基于Grounded-SAM的圖像編輯1認識Grounded-SAM開源項目3GroundingDINO模型的微調3.模型訓練與評估

任務目標(1)模型微調環境部署。(2)模型微調配置文件設置。(3)基于數據加載及損失函數編寫。3.1.1微調任務分析–貓咪數據集自建貓咪寵物數據集數據集圖像來自于家里兩只不同貓咪的拍攝,分別為橘貓和英短,具體可見圖,圖中(a)為橘貓(Gingercat),(b)的為英短(BritishShorthair)。本項目中,數據集格式轉為coco樣式,訓練集、測試集圖片以文件夾形式存放,標注文件分別是對應一個json文件。訓練集中有300張圖像,圖像包含的橘貓、英短兩種對象數量分別為160個、157個;測試集中有26張圖像,圖像包含的橘貓、英短兩種對象數量分別為18個、12個。(b)英短(a)橘貓3.1.2微調任務分析–貓咪檢測測試2)GroundingDINO細類貓咪檢測測試在貓咪數據集中篩選出了典型圖像用于測試GroundingDINO對貓咪的細類描述的檢測效果,圖(a)為測試圖像,該圖中同時存在橘貓和英短兩只貓咪。圖(b)、(c)、(d)是在輸入的檢測文本描述分別為Gingercat、BritishShorthair、Gingercat.BritishShorthair這三種種情況下的結果展示:從測試結果中可看出GroundingDINO原始模型實際上分不清楚Gingercat、BritishShorthair兩種貓,當輸入提示文本為Gingercat時,模型將兩只貓都識別為Gingercat;當輸入提示文本為BritishShorthair時,模型將兩只貓都識別為BritishShorthair;當輸入提示文本為Gingercat.BritishShorthair時,模型將圖像上側的BritishShorthair識別為Gingercat,將Gingercat識別為BritishShorthair。鑒于上述的測試結果,接下來的主要任務是在該數據集上微調GroundingDINO模型,使該模型能夠識別橘貓、英短兩種類別貓咪。3.2模型微調-工程結構介紹本次微調工程的主要文件和目錄結構。其中,bert-base-uncased/、weight分別為存放模型的目錄,configs/中包含GroundingDINO微調的配置文件。Demo中image_demo.py為推理代碼,tools中dist_train.sh為訓練腳本。Data中為數據集存放目錄,cats/train中為訓練集圖像、cats/val中為驗證集圖像、annotations中為標簽文件。3.2.1模型微調-環境部署首先需要部署好MMDetection框架微調GroundingDINO所需要的環境。根據本機硬件環境安裝cuda、torch、torchvision,這里不做詳細說明。需注意:訓練需要8G以上的顯存。下面分別介紹環境包安裝、預訓練模型及所依賴的語言模塊下載。(1)依賴包安裝。執行以下命令安全相關依賴包。其中MMDetection的代碼也可從課程資源下載。pipinstall-Uopenmimmiminstallmmenginemiminstall"mmcv>=2.0.0"gitclone/open-mmlab/MMDetection.gitcdMMDetectionpipinstall-v-e.(2)預訓練模型及NLTK庫模塊下載。下載預訓練模型bert-base-uncased、GroundingDINO_swint_ogc_mmdet-822d7e9d.pth,分別將其放置在項目根路徑及項目根路徑下的weight中。MMDetection微調GroundingDINO過程依賴于NLTK庫(NaturalLanguageToolkit)中的部分模塊,分別為punkt、averaged_perceptron_tagger,前者是NLTK庫中用于句子分割(句子切分)的模塊,后者是NLTK庫中用于詞性標注的模塊。由于nltk包的download方法無法下載,會導致程序長時間等待后發生錯誤。因此通過手動方式下載這兩個模塊,首先在MMDetection安裝路徑下的mmdet/models/detectors/glip.py中刪除nltk.download,如下圖所示。之后在github上下載其壓縮包后分別以下面的文件格式存放在用戶home文件夾中nltk_data中,具體的目錄結構如下圖所示。|+--~/nltk_data/|+--taggers/

|+--averaged_perceptron_tagger/

|+--averaged_perceptron_tagger.zip|+--tokenizers/

|+--punkt/

|+--punkt.zip3.2.2模型微調利用MMDetection微調GroundingDINO主要涉及準備數據集、配置訓練參數、運行訓練腳本并評估模型性能。

(1)配置文件參數設置:

設置data_root、class_name、palette、train_dataloader、test_dataloader、val_evaluator、max_epoch等參數。data_root為數據集目錄;class_name為微調數據集類別名;palette為顏色列表,用于可視化檢測結果;train_dataloader、test_dataloader、val_evaluator為數據集圖像路徑及標簽路徑;max_epoch為訓練迭代次數。(2)終端執行微調命令:

./tools/dist_train.shconfigs/grounding_dino/grounding_dino_swin-t_finetune_8xb2_20e_cat_custom.py1--workdir-dircats_gb_work_dir(3)微調模型測試:pythondemo/image_demo.py/home/aiservice/workspace/mmGroundingDINO/da

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論