




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
PyTorch計算機視覺與深度學習實戰(zhàn)基于視覺大數(shù)據(jù)檢索的圖搜圖應(yīng)用第七章目錄02視覺特征提取Visualfeatureextraction01應(yīng)用背景Background04視覺搜索引擎Visualsearchengine05集成應(yīng)用開發(fā)Visualsearchengine03視覺特征索引VisualFeatureIndex06案例小結(jié)CaseSummary應(yīng)用背景Background3017.1應(yīng)用背景4圖像和視頻等多媒體數(shù)據(jù)屬于非結(jié)構(gòu)化數(shù)據(jù)類型,它們之間存在的“語義鴻溝”使得直接利用圖像像素內(nèi)容進行搜索變得不現(xiàn)實。因此,需要創(chuàng)建一個有效的機制來橋接圖像的表層特征與深層意義。深度學習技術(shù)通過自適應(yīng)地學習視覺數(shù)據(jù),“理解”并“概括”圖像特征,建立起淺層特征與深層語義之間的聯(lián)系,進而應(yīng)用于分類識別、目標檢測等場景。圖像搜索技術(shù)通常是通過提取待搜索圖像的特征描述,并與現(xiàn)有圖像庫中的索引進行比較排序,實現(xiàn)直觀的檢索,現(xiàn)已應(yīng)用于多種實際場景如圖像識別服務(wù)、圖像匹配服裝、車輛識別等。圖像搜索技術(shù),不僅提升了視覺信息檢索的效率,同時也推動了智能化信息處理技術(shù)的發(fā)展,極大地改變了用戶與信息交互的方式。隨著深度學習技術(shù)的不斷進步和大數(shù)據(jù)處理能力的提升,基于視覺大數(shù)據(jù)檢索的圖搜圖應(yīng)用將在未來展現(xiàn)出更為強大的功能和更廣泛的應(yīng)用場景。視覺特征提取Visualfeatureextraction5027.2.1CNN模型選擇6在本案例中,將分析經(jīng)典的CNN模型如AlexNet、VGGNet和GoogLeNet,通過激活其中間層來提取特征向量,并將這些特征應(yīng)用于圖像搜索任務(wù)。#導(dǎo)入模型fromtorchvision.modelsimportalexnetalex=alexnet()#加載模型權(quán)重weights=torch.load('checkpoints/alexnet-owt-7be5be79.pth')alex.load_state_dict(weights)#切換至預(yù)測模式alex.eval()analyze_network(alex)2012年被看作是深度學習領(lǐng)域的轉(zhuǎn)折點,由AlexKrizhevsky設(shè)計的AlexNet在ImageNet比賽中以15.3%的Top-5錯誤率贏得冠軍,顯著低于第二名26.2%的錯誤率,這一成績當時引發(fā)了巨大震動并開啟了深度學習的新紀元。加載AlexNet模型的代碼如下:1AlexNet7.2.1CNN模型選擇7運行代碼7-1后,程序會自行啟動瀏覽器,并在瀏覽器中展示繪制好的AlexNet網(wǎng)絡(luò)結(jié)構(gòu)圖,如圖所示。代碼如下:7.2.1CNN模型選擇8#導(dǎo)入模型fromtorchvision.modelsimportvgg11vgg=vgg11()#加載模型權(quán)重weights=torch.load('checkpoints/vgg11-8a719046.pth')vgg.load_state_dict(weights)#切換至預(yù)測模式vgg.eval()analyze_network(vgg)2014年牛津大學計算機視覺組(VisualGeometryGroup,VGG)與DeepMind公司合作推出了VGGNet深度卷積神經(jīng)網(wǎng)絡(luò)模型,將其應(yīng)用于ImageNet競賽,獲得分類項目的亞軍和定位項目的冠軍,在Top-5評測中的錯誤率為7.5%。VGGNet在AlexNet基礎(chǔ)上做了改進,基于3×3的小型卷積核和2×2的最大池化層構(gòu)建了16~19層的卷積神經(jīng)網(wǎng)絡(luò),典型的有Vgg16、Vgg19網(wǎng)絡(luò)結(jié)構(gòu)。VGGNet結(jié)構(gòu)簡潔,具有更強的特征學習能力,易于與其他網(wǎng)絡(luò)結(jié)構(gòu)進行融合,廣泛應(yīng)用于圖像的特征提取模塊。下面加載Vgg11模型,代碼如下:2VGGNet7.2.1CNN模型選擇9代碼運行后,將會得到VGGNet的網(wǎng)絡(luò)結(jié)構(gòu)圖,如圖所示。7.2.1CNN模型選擇10#導(dǎo)入模型fromtorchvision.modelsimportgooglenetgoogle=googlenet()#加載模型權(quán)重weights=torch.load('checkpoints/googlenet-1378be20.pth')google.load_state_dict(weights)#切換至預(yù)測模式google.eval()analyze_network(google)2014年Google推出了基于Inception模塊的深度卷積神經(jīng)網(wǎng)絡(luò)模型,將其應(yīng)用于ImageNet競賽,獲得分類項目的冠軍,在Top-5評測中的錯誤率為6.67%。GoogLeNet的命名源自Google和經(jīng)典的LeNet模型,通過Inception模塊增強卷積的特征提取功能,在增加網(wǎng)絡(luò)深度和寬度的同時減少參數(shù)。GoogLeNet設(shè)計團隊在其初始版本取得ImageNet競賽冠軍后,又對其進行了一系列的改進,形成了InceptionV2、InceptionV3、InceptionV4等版本。下面加載原始的GoogLeNet模型并繪制其網(wǎng)絡(luò)結(jié)構(gòu),代碼如下:3GoogLeNet7.2.1CNN模型選擇11運行代碼,即可加載GoogLeNet模型預(yù)訓(xùn)練權(quán)重,并繪制網(wǎng)絡(luò)結(jié)構(gòu),GoogLeNet網(wǎng)絡(luò)結(jié)構(gòu)如圖所示。7.2.2CNN深度特征12CNN的應(yīng)用場景非常廣泛,包括文字識別、動物和植物的識別,以及人臉識別等方面。特別是在人臉識別技術(shù)方面,已被廣泛集成到人們的日常生活中,如人臉識別門禁系統(tǒng)和面部識別支付技術(shù),這些應(yīng)用均利用人臉這一獨特的生物識別標志來進行安全驗證。為了驗證深度神經(jīng)網(wǎng)絡(luò)在特征提取方面的效果,采用人臉圖像和著名的AlexNet模型進行實驗,將人臉圖像輸入AlexNet模型中,并激活模型中的conv層和relu層,同時生成并展示相關(guān)的特征圖,獲取激活層可以概括為如下四個步驟。(1)加載模型,讀取人臉圖像并進行維度對應(yīng),代碼如下:#讀取圖像image=Image.open('face.png').convert('RGB’)#數(shù)據(jù)轉(zhuǎn)換t=transforms.Compose([transforms.Resize(224),transforms.ToTensor(),transforms.Normalize((0.5,0.5,0.5),(0.5,0.5,0.5))])image=t(image)#擴展batch維度image=torch.unsqueeze(image,0)7.2.2CNN深度特征13(2)激活conv1層,按照卷積核的個數(shù)進行維數(shù)轉(zhuǎn)換,并進行可視化,如代碼所示。#取conv1conv1=alex.features[:1]#圖像輸入至第一層卷積output=conv1(image)#將圖片拼成網(wǎng)格output=make_grid(output.permute(1,0,2,3),nrow=8,normalize=True,scale_each=True)[0]#顯示圖像plt.imshow(output.numpy(),aspect='auto')plt.title('conv1特征圖')plt.axis('off')plt.savefig('conv1.png',dpi=200)plt.show()運行后,得到特征圖如圖所示。7.2.2CNN深度特征14(3)按照相同方式激活conv5層,調(diào)整通道順序,生成可視化網(wǎng)格圖像,如代碼所示。#取conv5conv5=alex.features[:-2]#圖像輸入至conv5output=conv5(image)#將圖片拼成網(wǎng)格output=make_grid(output.permute(1,0,2,3),nrow=16,normalize=True,scale_each=True,padding=0)[0]#顯示圖像plt.imshow(output.numpy(),aspect='auto')plt.title('conv5特征圖')plt.axis('off')plt.savefig('conv5.png',dpi=200)plt.show()運行后,得到特征圖如圖所示。7.2.2CNN深度特征15(4)激活relu5層,并進行可視化,如代碼所示。#取conv5conv5=alex.features[:-2]#圖像輸入至第一層卷積output=conv5(image)output=torch.relu(output)#將圖片拼成網(wǎng)格output=make_grid(output.permute(1,0,2,3),nrow=16,normalize=True,scale_each=True,padding=0)[0]#顯示圖像plt.imshow(output.numpy(),aspect='auto')plt.title('activations')plt.axis('off')plt.savefig('activations.png',dpi=200)plt.show()運行后,得到特征圖如圖所示。視覺特征索引VisualFeatureIndex16037.3視覺特征索引17選擇AlexNet分類層的上一層全連接層作為激活層,提取特征向量,特征向量的維度為1×4096。對于VGGNet,可以使用與AlexNet相同的策略,即使用倒數(shù)第二層的全連接層作為激活層,VGGNet中倒數(shù)第二層的全連接層輸出與AlexNet的激活輸出一致,返回維度均為1×4096。3.GoogLeNetGoogLeNet網(wǎng)絡(luò)結(jié)構(gòu)復(fù)雜,可選擇激活GoogLeNet的pool5-drop_7x7_s1層作為激活層,并提取其特征向量,GoogLeNet激活層返回維度較小,其維度為1×1024。1.AlexNet2.VGGNet視覺搜索引擎Visualsearchengine18047.4視覺搜索引擎19視覺搜索的關(guān)鍵步驟是判斷待搜索圖像與已知圖像的相似性,按設(shè)定的規(guī)則返回排序后的圖像列表。視覺特征索引由圖像特征向量構(gòu)成,而圖像間的相似性可由特征向量之間的距離進行度量,因此可選擇不同的向量距離計算方法來分析圖像的相似性,進而得到視覺搜索結(jié)果。本案例選擇經(jīng)典的余弦距離、閔可夫斯基距離和馬氏距離進行分析,主要內(nèi)容如下。(1)余弦距離。余弦距離(CosineDistance),也稱為余弦相似度。余弦距離通過計算兩個向量在向量空間中夾角的余弦值,來判斷兩個向量的相似程度,相似程度越高,余弦距離越近。余弦距離以向量夾角作為計算依據(jù),所以向量在方向上的差異影響比較大,但是對向量的絕對值大小并不敏感。假設(shè)輸入向量為,則余弦距離計算公式為:
(7-1)7.4視覺搜索引擎20(2)閔可夫斯基距離。閔可夫斯基距離(MinkowskyDistance),也稱為閔氏距離。閔可夫斯基距離計算兩個向量之間差值的范數(shù),通過改變p值可衍生出多種距離模式。距離越小表示兩個向量越相近。余弦距離以向量范數(shù)作為計算依據(jù),具有較強的直觀性,但對向量的內(nèi)在分布特性不敏感,具有一定的局限性。假設(shè)輸入向量為,,維度為n,則閔可夫斯基距離計算公式為:
(7-2)當時,稱為城區(qū)(City-blockdistance)距離,公式如下
(7-3)當時,稱為歐氏距離(Euclideandistance),公式如下(7-4)當時,稱為切比雪夫距離(Chebychvdistance),公式如下
(7-5)7.4視覺搜索引擎21(3)馬氏距離。馬氏距離(Mahalanobis
Distance),也稱為二次式距離。馬氏距離計算兩個向量之間的分離程度,距離越小表示兩個向量越相近。馬氏距離可視作對歐氏距離的一種修正,能夠兼容處理各分量間尺度不一致且相關(guān)的情況。假設(shè)輸入向量為,,維度為,則馬氏距離計算公式為:
(7-6)其中,S為多維隨機變量的協(xié)方差矩陣,可以發(fā)現(xiàn)如果S為單位矩陣,則馬氏距離就變成了歐氏距離。綜上所述,在計算向量相似性度量時,可選擇不同的距離計算方法,需結(jié)合實際情況進行充分考慮。特征提取過程中得到了AlexNet、VGGNet和GoogLeNet三種特征向量,可選擇計算余弦距離并加權(quán)融合的方法進行處理。集成應(yīng)用開發(fā)Visualsearchengine22057.5集成應(yīng)用開發(fā)23為了體現(xiàn)案例在實際中的應(yīng)用,集成對比不同步驟的處理效果,案例開發(fā)GUI界面,貫通整體的處理流程,同時集成了加載圖像索引庫、加載待檢索圖像、配置不同模型權(quán)值、以圖搜圖等關(guān)鍵步驟,并且對圖像的搜索結(jié)果進行展示。其中,集成應(yīng)用的界面設(shè)計如圖所示。應(yīng)用整體包括圖像顯示區(qū)、功能控制區(qū)。通過加載圖像索引庫按鈕可讀取已有的特征索引庫;載入待檢索圖像按鈕可彈出文件選擇對話框,可選擇待處理圖片并顯示到上方的獨立窗口;AlexNet特征、VGGNet特征和GoogLeNet特征按鈕可分別提取三個CNN特征;以圖搜圖按鈕將按照設(shè)置的權(quán)重進行檢索并將返回結(jié)果列表在右側(cè)區(qū)域進行顯示。為了驗證處理流程的有效性,選擇某測試圖像進行實驗,具體效果如圖所示。7.5集成應(yīng)用開發(fā)24對待檢索的郁金香圖像進行檢索可獲得正確的檢索結(jié)果,這也表明了CNN特征具有良好的普適性,可以對圖像進行深度抽象以得到匹配的特征表達,并得到了較為準確的檢索結(jié)果。為了驗證不同圖片、不同參數(shù)配置下的檢索效果,對互聯(lián)網(wǎng)上采集的蒲公英圖像、手繪的模擬圖像進行CNN特征提取及圖像檢索,運行效果如圖所示。如圖展示的,對新增加的蒲公英圖片和手繪模擬圖進行搜索后,可以找到與其在形狀和顏色上相似的圖片。這充分體現(xiàn)了先前提到的CNN的深層特征抽象化能力,這對于擴展深度學習在各領(lǐng)域的應(yīng)用提供了實用的參考。案例小結(jié)CaseSummary25067.6案例小結(jié)26最近幾年,隨著人工智能技術(shù)的持續(xù)進步,將AI技術(shù)應(yīng)用到各個行業(yè)的實踐越發(fā)受到關(guān)注。本案例主要分析了CNN模型的架構(gòu),對其中間層的特征圖進行解構(gòu)、激活及可視化處理,并將其用于圖像搜索這一視覺檢索任務(wù)中。特別是在應(yīng)用案例中,通過對手繪圖像應(yīng)用CNN的特征提取及圖像搜索功能,成功返回了在外觀上與原圖相似的結(jié)果,展現(xiàn)了深度學習在圖像特征描述上的高效能力,這是AI技術(shù)應(yīng)用的基礎(chǔ)之一。讀者可以嘗試采用不同的深度學習模型、圖像相似度評價方法以及多樣化的數(shù)據(jù)集來個性化實驗流程,從而進一步擴展該應(yīng)用的實踐范圍。感謝觀看!PyTorch計算機視覺與深度學習實戰(zhàn)驗證碼AI識別第八章目錄02驗證碼圖像生成Captchaimagegeneration01應(yīng)用背景Applicationbackground03驗證碼識別模型Verificationcoderecognitionmodel04集成應(yīng)用開發(fā)Integratedapplicationdevelopment05案例小結(jié)Casesummary應(yīng)用背景Applicationbackground30018.1應(yīng)用背景31驗證碼設(shè)計多樣,可以是輸入字母和數(shù)字、解答成語或數(shù)學題等不同類型。隨著驗證碼和網(wǎng)絡(luò)安全技術(shù)的持續(xù)進步,出現(xiàn)了更多復(fù)雜形式的驗證碼,如選擇特定物體的交互式驗證或?qū)⒒瑝K拖至指定位置等。盡管目前還沒有能夠普遍識別所有類型驗證碼的自動化服務(wù),但對于傳統(tǒng)的靜態(tài)驗證碼,通過分析其結(jié)構(gòu)特性并采用圖像處理技術(shù),通??梢詫崿F(xiàn)自動識別。驗證碼融入了大數(shù)據(jù)特性,可以通過編程手段收集、標記或生成大量數(shù)據(jù),結(jié)合計算機視覺和機器學習技術(shù),形成有效的自動識別方案。深度學習模型通過大規(guī)模的數(shù)據(jù)訓(xùn)練,具備了極強的圖像和文本識別能力。這使得利用AI技術(shù)識別驗證碼成為可能,并且這種技術(shù)在破解復(fù)雜驗證碼方面表現(xiàn)出色。通過構(gòu)建并訓(xùn)練卷積神經(jīng)網(wǎng)絡(luò)等模型,AI系統(tǒng)能夠自動化地識別各種類型的驗證碼。驗證碼AI識別技術(shù)的應(yīng)用,既揭示了傳統(tǒng)驗證碼機制的脆弱性,也推動了更為安全和智能的驗證碼設(shè)計的需求。同時,這項技術(shù)在學術(shù)研究、網(wǎng)絡(luò)安全和人工智能領(lǐng)域都有著重要的意義。它不僅為研究人員提供了驗證和提升深度學習模型性能的實際場景,還促使安全領(lǐng)域不斷創(chuàng)新,以應(yīng)對不斷演變的安全挑戰(zhàn)。驗證碼圖像生成Captchaimagegeneration32028.2驗證碼圖像生成33文本型驗證碼是最常用的一種驗證碼形式,它通常顯示一串字符構(gòu)成的圖片,要求用戶準確輸入這些字符以完成驗證。如圖所展示的,這類驗證碼主要由英文字符和數(shù)字組成,并通過添加顏色、干擾線和文字扭曲等手段來提高識別難度。這類驗證碼不區(qū)分大小寫字母,因其生成簡單、效率高、傳輸快捷等優(yōu)點,廣泛應(yīng)用于多數(shù)在線平臺。本案例選擇英文字母和數(shù)字,并結(jié)合顏色和干擾點生成四位字符的文本驗證碼,主要過程如圖所示。8.2.1基礎(chǔ)字符模板34選擇字符a~z、A~Z和0~9,設(shè)置字體格式,自動化生成字符模板庫。生成字符模板庫,代碼如下:
#初始化畫板
draw=ImageDraw.Draw(image)#繪制字體
draw.text((0,0),c,fill=255,font=font)#獲取字體大小
w,h=font.getsize(c)#裁剪圖像
image_crop=image.crop([0,0,w,h])#二值化
image_crop=image_crop.convert('1')#保存圖像
image_crop.save(f'{db}/{i:02d}.jpg')#設(shè)置字符列表:大寫字母、小寫字母、數(shù)字chars=[]forcinlist(range(97,123))+list(range(65,91))+list(range(48,58)):chars.append(chr(c))db='./db'ifnotos.path.exists(db):os.mkdir(db)fori,cinenumerate(chars):#初始化圖像
image=Image.new('L',(50,50))#初始化字體
font=ImageFont.truetype('simhei.ttf',20)8.2.1基礎(chǔ)字符模板35運行此段代碼,可以生成a~z、A~Z和0~9的標準字符模板圖像,保存到指定的文件夾,如圖所示。生成了統(tǒng)一高度的標準字符模板庫圖像,均為黑底白字的二值化圖,可方便的進行字符組合和顏色設(shè)置,為下一步的文本驗證碼生成提供基礎(chǔ)字符庫。8.2.2驗證碼圖模擬36本實驗?zāi)M生成四位字符的驗證碼圖像,增加斑點型的噪聲干擾,最終得到統(tǒng)一尺寸的文本驗證碼圖像,具體步驟如下:生成設(shè)定大小的底圖,增加噪聲點干擾一設(shè)置字符填充參數(shù),并生成字符顏色列表三設(shè)置驗證碼字符內(nèi)容,并對應(yīng)到字符模板庫二遍歷每個字符生成彩色的驗證碼字符圖像,填充到底圖四8.2.3驗證碼數(shù)據(jù)庫37驗證碼模擬生成后,可通過字符隨機生成的方式獲得驗證碼大數(shù)據(jù)集合,為后面的AI識別提供數(shù)據(jù)支撐。在實際應(yīng)用中,考慮到字符圖像“o”、“O”與“0”,“l(fā)”、“I”與“1”,“i”、“j”的頂部點狀區(qū)域與斑點噪聲在呈現(xiàn)形式上的相似性,將在字符隨機生成時將“o”、“O”、“l(fā)”、“I”、“i”、“j”排除,步驟如下:設(shè)置字符集合和排除字符,生成數(shù)據(jù)集存儲目錄一循環(huán)生成驗證碼大數(shù)據(jù)樣本集合二驗證碼樣本字符分割三驗證碼識別模型Verificationcoderecognitionmodel38038.3.1CNN模型訓(xùn)練39本案例涉及的驗證碼圖像經(jīng)字符分割后可轉(zhuǎn)換為4個字符圖像的分類識別問題,考慮到字符圖像本身的顏色和噪聲因素,可利用卷積神經(jīng)網(wǎng)絡(luò)強大的特征提取和抽象能力進行分類模型的設(shè)計。因此,結(jié)合之前的手寫數(shù)字識別應(yīng)用,可直接復(fù)用自定義的卷積神經(jīng)網(wǎng)絡(luò)模型,設(shè)置對應(yīng)的輸入層、輸出層參數(shù),最終得到驗證碼識別模型,步驟如下:讀取已有的字符數(shù)據(jù)集一定義CNN網(wǎng)絡(luò)模型二執(zhí)行CNN模型訓(xùn)練,存儲模型參數(shù)三8.3.2CNN模型測試40前面設(shè)計的CNN模型是針對單個字符圖像的識別,并且當前的驗證碼圖像由4個字符構(gòu)成,所以對驗證碼圖像進行字符分割后再調(diào)用CNN模型對4個字符分別進行分類識別,最終可得到組合后的識別結(jié)果。下面以某樣本圖像為例,通過字符分割、字符識別得到對應(yīng)的驗證碼識別結(jié)果,代碼如下:#獲取預(yù)測類別preds_cls=[]forpredinpreds: idx=torch.argmax(pred) c=idx2cls[int(idx)] preds_cls.append(c) #print(preds_cls)ifshow: forbox,cinzip(boxes,preds_cls): x,y,w,h=box cv2.rectangle(orig_image,(x,y),(x+w,y+h),(0,0,255),1) cv2.putText(orig_image,c,(x,y),cv2.FONT_HERSHEY_PLAIN,0.5,(0,0,255),1) cv2.imshow('result',orig_image) cv2.waitKey()#類別標簽cls2idx={'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9,'A':10,'B':11,'C':12,'D':13,'E':14,'F':15,'G':16,'H':17,'J':18,'K':19,'L':20,'M':21,'N':22,'P':23,'Q':24,'R':25,'S':26,'T':27,'U':28,'V':29,'W':30,'X':31,'Y':32,'Z':33}idx2cls={v:kfork,vincls2idx.items()}#對圖像進行分割crops,boxes,orig_image=char_segment(image)#數(shù)據(jù)預(yù)處理crops_tensor=preprocess(crops)#模型預(yù)測preds=model(crops_tensor)8.3.2CNN模型測試41運行后可對分割后的字符圖像進行CNN識別,并將結(jié)果進行可視化,具體效果如圖所示。對驗證碼圖像的識別結(jié)果進行標記顯示,可以看到識別結(jié)果是“6AQN”,這也能對應(yīng)驗證碼圖像的大寫字母的內(nèi)容,能夠通過校驗。集成應(yīng)用開發(fā)Integratedapplicationdevelopment42048.4.1數(shù)據(jù)集標注43上一節(jié)介紹了對可分割的驗證碼字符圖像進行CNN訓(xùn)練和識別的方案,這個處理過程可延伸應(yīng)用到其他的可分割驗證碼數(shù)據(jù)集。為此,收集其他類型的驗證碼圖像,分析其內(nèi)部組成結(jié)構(gòu)并進行標注,生成對應(yīng)的字符數(shù)據(jù)集進行CNN訓(xùn)練和識別。將驗證碼圖像字符信息作為其文件名進行標注,處理后的數(shù)據(jù)集如圖所示。新增的驗證碼數(shù)據(jù)集由4位英文大寫字母和數(shù)字構(gòu)成,存在斑點和干擾線噪聲,且4個字符呈現(xiàn)水平均勻排列的特點。8.4.2數(shù)據(jù)集分割44通過對此數(shù)據(jù)集樣本分析,可使用灰度化統(tǒng)一顏色信息、使用設(shè)定的間隔分割提取字符圖像。代碼如下:#將rgb圖像轉(zhuǎn)為灰度圖image_gray=cv2.cvtColor(image_bgr,cv2.COLOR_BGR2GRAY)#裁剪間隔szs=np.linspace(2,94,5)ims=[]foriinrange(len(szs)-1): i=int(i) ims.append(cv2.cvtColor(image_gray[:,int(szs[i])-2:int(szs[i+1])+2],cv2.COLOR_GRAY2BGR))8.4.2數(shù)據(jù)集分割45運行后可得到驗證碼的灰度圖,并對其進行字符切割得到單字符的序列圖,效果如圖所示。通過灰度化可統(tǒng)一將彩色圖轉(zhuǎn)換為灰白圖,再通過位置區(qū)間的切割可得到單字符圖像序列,因此可以將該數(shù)據(jù)集進行遍歷處理來得到對應(yīng)的字符訓(xùn)練集,如下圖所示。8.4.3CNN模型訓(xùn)練46當前驗證碼字符集合與前面的字符數(shù)據(jù)集差異主要表現(xiàn)在圖片路徑、圖片顏色和分類數(shù)目上,因此可直接參考前面的參數(shù)配置和模型搭建訓(xùn)練方法進行處理,代碼如下:#分割數(shù)據(jù)集train_data,val_data,cls2idx=split_data(data_dir='dbc',train_size=0.9)#加載數(shù)據(jù)集train_set=DataSet(train_data,cls2idx,transform=transforms.Compose([ transforms.Resize((28,28)), transforms.ToTensor(), transforms.Normalize((0.5,0.5,0.5),(0.5,0.5,0.5)),]))val_set=DataSet(val_data,cls2idx,transform=transforms.Compose([ transforms.Resize((28,28)), transforms.ToTensor(), transforms.Normalize((0.5,0.5,0.5),(0.5,0.5,0.5)),]))#數(shù)據(jù)迭代器train_loader=DataLoader(train_set,batch_size=batch_size, shuffle=True,num_workers=num_workers)val_loader=DataLoader(val_set,batch_size=batch_size, shuffle=True,num_workers=num_workers)8.4.3CNN模型訓(xùn)練47運行后得到當前字符集合的樣本列表,如圖所示。8.4.3CNN模型訓(xùn)練48當前的字符樣本圖像呈現(xiàn)灰度化、傾斜且存在噪聲點和干擾線因素。隨后對模型進行訓(xùn)練,代碼如下:#加載模型model=CNN()model.to(device)
#損失函數(shù)criterion=nn.CrossEntropyLoss().to(device)#優(yōu)化器optimizer=optim.SGD(model.parameters(),lr=lr,weight_decay=wd)
#訓(xùn)練指標metrics=[]#進行迭代訓(xùn)練forepochinrange(1,epochs+1):#訓(xùn)練模型
train_loss,train_acc=train_one_epoch() #評估模型
val_loss,val_acc=val_one_epoch() #保存指標
metrics.append((train_loss,train_acc,val_loss,val_acc)) #保存模型
torch.save(model.state_dict(),'model.pth')運行后可生成CNN網(wǎng)絡(luò)模型,并加載當前的數(shù)據(jù)集進行訓(xùn)練,最后將訓(xùn)練結(jié)果保存到模型文件,方便后面的加載調(diào)用。8.4.4CNN模型應(yīng)用49在AI模型訓(xùn)練好后,需要對模型進行部署,才可投入應(yīng)用,本案例開發(fā)GUI界面對訓(xùn)練好的AI模型進行部署。同時,集成驗證碼識別中的關(guān)鍵步驟,例如字符分割、CNN識別等。GUI將會及時展示處理過程中產(chǎn)生的中間結(jié)果。其中,集成應(yīng)用的界面設(shè)計如圖所示。8.4.4CNN模型應(yīng)用50應(yīng)用界面包括控制面板和顯示面板兩個區(qū)域,用戶可選擇驗證碼圖片并自動調(diào)用CNN模型進行識別,最終在右側(cè)顯示區(qū)域顯示中間的字符分割步驟和識別結(jié)果。如圖8-18所展示的,對數(shù)據(jù)集之外的一些驗證碼圖像使用CNN進行識別,結(jié)果顯示它們都被準確識別,這也證明了模型的有效性。案例小結(jié)Casesummary51058.5案例小結(jié)52互聯(lián)網(wǎng)的快速擴展不僅帶來了便捷,也提高了網(wǎng)絡(luò)安全的關(guān)注度,驗證碼作為網(wǎng)絡(luò)訪問中的常見安全校驗手段,其應(yīng)用日趨廣泛。為了有效防止惡意軟件攻擊和提高網(wǎng)絡(luò)安全,驗證碼的復(fù)雜性也在不斷增加,促進了驗證碼識別技術(shù)的進步。以傳統(tǒng)的靜態(tài)文本驗證碼為例,通常的識別流程包括圖像預(yù)處理、字符分離和最終的識別步驟,而基于深度學習的端到端識別方法近年來也逐漸興起,對現(xiàn)有的安全性校驗機制構(gòu)成挑戰(zhàn)。在本案例中,針對一種典型的靜態(tài)文本驗證碼進行了研究,通過字符分離方法構(gòu)建了訓(xùn)練數(shù)據(jù)集,并使用了一個較小的CNN網(wǎng)絡(luò)來進行模型訓(xùn)練和識別,即便是基于有限的數(shù)據(jù)集,也能達到令人滿意的識別效果,顯示了CNN模型的強大能力。因此,在實踐中,如果能夠?qū)︱炞C碼圖像進行準確的字符分離,采用不同的CNN模型架構(gòu)就可能實現(xiàn)高準確率的識別。讀者可以通過設(shè)計不同的網(wǎng)絡(luò)架構(gòu)或者利用其他驗證碼數(shù)據(jù)集來擴展這一研究。感謝觀看!PyTorch計算機視覺與深度學習實戰(zhàn)基于生成式對抗網(wǎng)絡(luò)的圖像生成應(yīng)用第九章目錄02生成式對抗網(wǎng)絡(luò)模型Generativecountermeasurenetworkmodel01應(yīng)用背景Background04案例小結(jié)CaseSummary03集成應(yīng)用開發(fā)Visualsearchengine應(yīng)用背景Background56019.1應(yīng)用背景57生成式對抗網(wǎng)絡(luò)(GenerativeAdversarialNetworks,GAN)自從2014年由IanGoodfellow提出以來,在人工智能和計算機視覺領(lǐng)域引起了廣泛關(guān)注。GAN通過生成器與判別器相互對抗,生成逼真的圖像、音頻和文本等數(shù)據(jù)。這種方法在理論上有重要的創(chuàng)新意義,并在多個實際應(yīng)用領(lǐng)域展現(xiàn)了巨大的潛力。在圖像生成方面,GAN已經(jīng)取得了顯著的成果。例如,在藝術(shù)創(chuàng)作領(lǐng)域,GAN能夠生成獨特的藝術(shù)作品,模仿不同畫家的風格;在游戲和影視制作中,GAN被用來生成逼真的場景和角色,大幅降低制作成本;在醫(yī)學影像處理上,GAN可以生成高分辨率的病灶圖像,輔助醫(yī)生進行診斷和研究;在時尚行業(yè),GAN被用于設(shè)計新穎的服裝和配飾樣式。此外,GAN在數(shù)據(jù)增強和圖像修復(fù)方面也展現(xiàn)了強大的能力,通過生成大量高質(zhì)量的訓(xùn)練數(shù)據(jù),提升機器學習模型的性能。基于生成式對抗網(wǎng)絡(luò)的圖像生成應(yīng)用,不僅展示了深度學習技術(shù)的前沿發(fā)展,也為各行各業(yè)帶來了全新的創(chuàng)作和應(yīng)用模式。4生成式對抗網(wǎng)絡(luò)模型Generativecountermeasurenetworkmodel58029.2.1卡通頭像大數(shù)據(jù)59Anime-faces數(shù)據(jù)集是一個著名的動漫頭像集合,含有成千上萬張高清的動漫角色頭像,大小通常在90×90到120×120像素范圍內(nèi),部分樣本展示圖。6樣本圖像的背景清晰且顏色信息豐富,頭像占據(jù)了圖像的主要區(qū)域。9.2.2GAN網(wǎng)絡(luò)設(shè)計607(2)判別器模型將實際訓(xùn)練樣本和由生成器產(chǎn)生的仿真樣本作為輸入,判別器負責判斷這些圖像是真實(輸出1)還是虛假(輸出0)。從輸入的隨機數(shù)字向量出發(fā),生成器能夠自動產(chǎn)生與訓(xùn)練樣本具有相似屬性的圖片。(1)生成器模型設(shè)計GAN網(wǎng)絡(luò)GAN網(wǎng)絡(luò)旨在通過真實數(shù)據(jù)的訓(xùn)練,最終生成與之高度相似的仿真數(shù)據(jù),它由兩個獨立的子模型組成:生成器和判別器。9.2.2GAN網(wǎng)絡(luò)設(shè)計61定義一個生成器模型,該模型將以隨機數(shù)向量作為輸入,并通過重構(gòu)投影、反卷積層和激活層的序列,最終產(chǎn)生64×64×3尺寸的仿真圖像。網(wǎng)絡(luò)結(jié)構(gòu)的詳細圖示如下。801生成器9.2.2GAN網(wǎng)絡(luò)設(shè)計62定義判別器模型,設(shè)置輸入為64×64×3的彩色圖像矩陣,經(jīng)卷積層、正則化層和激活層,最終輸出圖像的鑒定結(jié)果,其網(wǎng)絡(luò)結(jié)構(gòu)圖如圖所示。902判別器9.2.3GAN網(wǎng)絡(luò)訓(xùn)練63定義了GAN網(wǎng)絡(luò)的生成器和判別器模型后,可加載前面提到的卡通頭像大數(shù)據(jù),設(shè)置訓(xùn)練參數(shù)進行網(wǎng)絡(luò)模型的訓(xùn)練,步驟如下。100203設(shè)置訓(xùn)練參數(shù),初始化模型、損失函數(shù)、優(yōu)化器、數(shù)據(jù)讀取接口01循環(huán)訓(xùn)練判別器和生成器模型,更新模型參數(shù)循環(huán)驗證生成器模型,可視化中間訓(xùn)練狀態(tài)9.2.4GAN網(wǎng)絡(luò)測試64defdenorm(img_tensors):"""反歸一化"""returnimg_tensors*0.5+0.5
num=64#生成64張圖像torch.manual_seed(int(self.seed_value.get()))#設(shè)置隨機數(shù)種子noise=torch.randn(num,1024,1,1)#產(chǎn)生隨機數(shù)fake_images=self.model(noise)#生成圖像save_image(denorm(fake_images),'samples/show.jpg',nrow=8)#將圖像保存到本地網(wǎng)絡(luò)模型訓(xùn)練后可將其存儲到本地文件,按照對應(yīng)的輸入維度要求生成隨機向量,然后調(diào)用生成器模型獲得卡通頭像的生成圖,代碼如下:9.2.4GAN網(wǎng)絡(luò)測試65如上處理過程加載已訓(xùn)練的生成器模型,設(shè)置隨機輸入向量進行卡通頭像生成,運行效果如下所示。生成器模型能對輸入的隨機數(shù)向量生成對應(yīng)的卡通頭像模擬圖,受限于訓(xùn)練步數(shù)和生成圖像的分辨率大小,測試結(jié)果存在一定的模糊,可通過增加訓(xùn)練步數(shù)和提高分辨率可以有一定的效果改進,但同時也會增加新的訓(xùn)練資源投入。集成應(yīng)用開發(fā)Visualsearchengine66039.3集成應(yīng)用開發(fā)67本案例開發(fā)GUI界面,實現(xiàn)基于生成式對抗網(wǎng)絡(luò)的圖像生成應(yīng)用,應(yīng)用集成了圖像生成的關(guān)鍵步驟,包括加載模型、設(shè)置隨機數(shù)種子、卡通圖像生成等步驟,并對生成圖像進行展示。其中,集成應(yīng)用的界面設(shè)計如圖所示。應(yīng)用界面包括控制面板和顯示面板兩個區(qū)域,單擊加載模型會將GAN模型加載至內(nèi)存,單擊開始生成則會根據(jù)隨機數(shù)種子,調(diào)用生成器模型獲取批量的卡通頭像仿真圖,最終在右側(cè)區(qū)域顯示處理結(jié)果。9.3集成應(yīng)用開發(fā)68通過運行卡通頭像生成程序,能批量獲得仿真卡通頭像,顯示出生成器模型的有效性。這些頭像捕捉了卡通形象的主要特征。然而,由于訓(xùn)練次數(shù)限制和圖像分辨率的限制,生成的頭像可能會呈現(xiàn)一些模糊。為了改善這一點,讀者可以考慮提升圖像分辨率或增加訓(xùn)練的次數(shù)等措施。案例小結(jié)CaseSummary69049.4案例小結(jié)70在近幾年,伴隨著大數(shù)據(jù)和人工智能技術(shù)的進步,多種AI應(yīng)用已融入大家日常生活的多個方面,比如面部識別支付系統(tǒng)、AI國際象棋對手和智能客戶服務(wù)代表等。生成對抗網(wǎng)絡(luò)(GAN)由于其出色的數(shù)據(jù)模擬能力,在圖像和視頻生成、文圖轉(zhuǎn)換、人臉替換等熱門應(yīng)用領(lǐng)域獲得了廣泛應(yīng)用,并正在擴展至自然語言處理和人機交互等領(lǐng)域。在本案例中,選用了特定的卡通圖像數(shù)據(jù)集,并利用WGAN技術(shù)設(shè)計和訓(xùn)練生成器與判別器模型,成功實現(xiàn)了自動生成卡通頭像的功能,展現(xiàn)了WGAN的簡易設(shè)計和高效運作特性。但是,由于訓(xùn)練周期和圖像分辨率的限制,生成效果可能會有所模糊。讀者可以通過采取不同的網(wǎng)絡(luò)設(shè)計或使用不同的數(shù)據(jù)集來擴展這一實驗。17感謝觀看!PyTorch計算機視覺與深度學習實戰(zhàn)肺炎感染影像智能識別第十章目錄02肺炎感染影像識別Imagingrecognitionofpneumoniainfection01應(yīng)用背景Background03集成應(yīng)用開發(fā)Visualsearchengine04案例小結(jié)CaseSummary應(yīng)用背景Background740110.2.1肺炎感染影像大數(shù)據(jù)75人的肺部由左右兩個部分組成,它們看起來像兩個空氣囊,正常情況下,健康的肺泡主要充滿空氣,因此具有較低的密度。在X光的照射下,這樣的肺泡能有效地讓X光穿過,使得健康的肺部在X光圖像中呈現(xiàn)為深色。然而,如果肺部受到病毒侵襲導(dǎo)致發(fā)炎,其密度就會相應(yīng)增加,導(dǎo)致X光的穿透力下降,從而在X光圖像上形成異常的亮白色區(qū)域。特別是當肺部X光圖像顯示大面積的白色時,稱為“白肺”,這通常表明病情已經(jīng)相當嚴重。以下圖片展示了肺炎在CT影像中的早期征兆及其演變過程。410.2.1肺炎感染影像大數(shù)據(jù)765為了確保實驗數(shù)據(jù)的相關(guān)性和比例準確,篩選了這些影像資料并進行了重新命名,整理后的數(shù)據(jù)集展示如圖所示。"肺炎陽性"文件夾內(nèi)包含349張確診為肺炎陽性的CT掃描圖像,而“肺炎陰性”文件夾則含有397張肺炎陰性的CT圖像,明確地構(gòu)成了一個經(jīng)典的二元分類問題。鑒于數(shù)據(jù)集的規(guī)模較小,選擇采用遷移學習技術(shù),對現(xiàn)有的卷積神經(jīng)網(wǎng)絡(luò)(CNN)模型進行修改,并使用這些數(shù)據(jù)進行訓(xùn)練,從而得到經(jīng)過遷移學習的CNN分類模型。10.2.2CNN遷移設(shè)計77編輯全連接層這涉及選擇CNN模型的全連接層,保留模型中的其他層,并根據(jù)新的數(shù)據(jù)集重新配置全連接層,然后重新訓(xùn)練CNN模型。激活特征向量這包括選擇CNN模型中的一個中間層,并保留該層之前的所有層。然后用輸入數(shù)據(jù)激活這個中間層,并使用激活后的特征向量作為其他機器學習模型(如SVM、BP、CNN等)的輸入進行進一步訓(xùn)練。微調(diào)卷積層這包括保留模型接近輸入端的大部分卷積層,并對其余的層進行訓(xùn)練。6遷移學習是一種方法,它涉及修改和重新訓(xùn)練已經(jīng)預(yù)訓(xùn)練好的模型,以適應(yīng)新的數(shù)據(jù)集。這種方法可以利用預(yù)訓(xùn)練模型原有的結(jié)構(gòu)和參數(shù),使其適應(yīng)新的應(yīng)用場景,這種方式非常適合于小型數(shù)據(jù)集。遷移學習通常包括編輯全連接層、激活特征向量以及微調(diào)卷積層等策略。下面以CNN分類模型為例,說明這些方法。10.2.2CNN遷移設(shè)計787AlexNetAlexNet是一個著名的CNN模型,以其設(shè)計者AlexKrizhevsky命名,該模型在2012年的ImageNet比賽中取得了壓倒性的勝利,并引發(fā)了深度學習技術(shù)的廣泛關(guān)注。在此案例中,選擇使用AlexNet,并將其調(diào)整以適用于肺炎感染的CT影像分類。接下來,加載AlexNet模型在ImageNet數(shù)據(jù)集上的預(yù)訓(xùn)練權(quán)重,同時分析其網(wǎng)絡(luò)結(jié)構(gòu),如圖所示。10.2.2CNN遷移設(shè)計798GoogLeNet
GoogLeNet是Google推出的CNN模型,通過Inception模塊提高卷積的特征提取能力,在2014年的ImageNet競賽中GoogLeNet獲得分類項目的冠軍。選擇GoogLeNet進行編輯,將其應(yīng)用于肺炎感染影像數(shù)據(jù)集的分類識別。加載GoogLeNet預(yù)訓(xùn)練模型,并分析其網(wǎng)絡(luò)結(jié)構(gòu)。10.2.2CNN遷移設(shè)計809VGGNet
VGGNet是牛津大學和DeepMind聯(lián)合研發(fā)的CNN模型,具有結(jié)構(gòu)簡潔,特征學習能力強的特點,在2014年的ImageNet競賽中VGGNet獲得分類項目的亞軍和定位項目的冠軍。常見的VGGNet包括Vgg16和Vgg19兩種結(jié)構(gòu),選擇VGG19進行編輯,將其應(yīng)用于肺炎感染影像數(shù)據(jù)集的分類識別。加載VGG19的預(yù)訓(xùn)練模型,同時對VGG19的網(wǎng)絡(luò)模型結(jié)構(gòu)進行分析,其結(jié)構(gòu)圖如圖所示。10.2.3CNN遷移訓(xùn)練81一?加載數(shù)據(jù)10#設(shè)置隨機數(shù)種子random.seed(seed)#獲取路徑data_dir=Path(data_dir)#獲取類別cls=[p.stemforpindata_dir.glob('*')]cls2idx={c:ifori,cinenumerate(cls)}#訓(xùn)練集train_set=[]#驗證集val_set=[]forcincls: cls_dir=data_dir/c #獲取所有圖像路徑
images=list(cls_dir.glob('*'))
代碼如下:
#獲取訓(xùn)練集圖像
train_images=images[:n_train] #獲取驗證集圖像
val_images=images[n_train:]
#產(chǎn)生標簽
train_labels=[c]*n_train val_labels=[c]*(len(images)-n_train)
#保存訓(xùn)練集與驗證集
train_set.extend(list(zip(train_images,train_labels))) val_set.extend(list(zip(val_images,val_labels)))10.2.3CNN遷移訓(xùn)練82二?加載遷移模型11#alexnet遷移model=alexnet(weights=AlexNet_Weights.IMAGENET1K_V1)model.classifier=nn.Sequential( nn.Dropout(p=0.5), nn.Linear(256*6*6,4096), nn.ReLU(inplace=True), nn.Dropout(p=0.5), nn.Linear(4096,4096), nn.ReLU(inplace=True), nn.Linear(4096,2),) model.to(device) 代碼如下: #vggnet遷移model=vgg19(weights=VGG19_Weights.IMAGENET1K_V1)model.classifier=nn.Sequential( nn.Linear(512*7*7,4096), nn.ReLU(True), nn.Dropout(p=0.5), nn.Linear(4096,4096), nn.ReLU(True), nn.Dropout(p=0.5), nn.Linear(4096,2),)model.to(device)#googlenet遷移model=googlenet(weights=GoogLeNet_Weights.IMAGENET1K_V1)model.fc=nn.Linear(1024,2)model.to(device)10.2.3CNN遷移訓(xùn)練83三?訓(xùn)練模型12#訓(xùn)練集train_set=DataSet(train_data,cls2idx,transform=transforms.Compose([ transforms.Resize((224,224)), transforms.RandomHorizontalFlip(), transforms.ToTensor(), transforms.Normalize((0.5,0.5,0.5),(0.5,0.5,0.5)),]))#測試集val_set=DataSet(val_data,cls2idx,transform=transforms.Compose([ transforms.Resize((224,224)), transforms.ToTensor(), transforms.Normalize((0.5,0.5,0.5),(0.5,0.5,0.5)),]))代碼如下:#訓(xùn)練數(shù)據(jù)加載器train_loader=DataLoader(train_set,batch_size=batch_size,shuffle=True,num_workers=num_workers)#驗證數(shù)據(jù)加載器val_loader=DataLoader(val_set,batch_size=batch_size,shuffle=True,num_workers=num_workers)#損失函數(shù)criterion=nn.CrossEntropyLoss().to(device)#優(yōu)化器optimizer=optim.SGD(model.parameters(),lr=lr,weight_decay=wd)metrics=[]best_acc=0#開始迭代訓(xùn)練forepochinrange(1,epochs+1): train_loss,train_acc=train_one_epoch() val_loss,val_acc=val_one_epoch() metrics.append((train_loss,train_acc,val_loss,val_acc))10.2.4CNN遷移評測8413(1)封裝評測函數(shù),對輸入的模型和數(shù)據(jù)集進行數(shù)據(jù)維度轉(zhuǎn)換、計算錯誤率,并繪制混淆矩陣。(2)調(diào)用評測函數(shù),加載已保存的CNN遷移模型,分別調(diào)用評測進行測試,如圖所示。前面訓(xùn)練了3個CNN遷移模型,為了進行模型評測,在相同數(shù)據(jù)條件下對訓(xùn)練集和驗證集進行測試,并繪制在驗證集下識別的混淆矩陣,步驟如下。10.2.5CNN融合識別8514#獲取三個模型的預(yù)測結(jié)果alex_outputs=alex(images)_,predicted=torch.max(alex_outputs.data,1)alex_predicted=predicted.detach().cpu().numpy().tolist()google_outputs=google(images)_,predicted=torch.max(google_outputs.data,1)google_predicted=predicted.detach().cpu().numpy().tolist()vgg_outputs=vgg(images)_,predicted=torch.max(vgg_outputs.data,1)vgg_predicted=predicted.detach().cpu().numpy().tolist()獲取了3個遷移模型的識別結(jié)果后,考慮對其進行投票組合,提高識別率。根據(jù)前面混淆矩陣的分析結(jié)果,可對“肺炎陽性”類別的情況計算3個識別結(jié)果的眾數(shù)作為最終輸出,對“肺炎陰性”類別的情況則選擇VGG19遷移模型的識別結(jié)果作為最終輸出,代碼如下: predicted=[]fora,g,vinzip(alex_predicted,google_predicted,vgg_predicted): #眾數(shù)
zs=1ifsum([a,g,v])>=2else0 #對類別0遷移vgg結(jié)果
ifzs==0: zs=v predicted.append(zs) labels=labels.detach().cpu().numpy().tolist() targets.extend(labels) preds.extend(predicted)10.2.5CNN融合識別8615運行后可得到融合后識別結(jié)果,其識別率和混淆矩陣如圖所示。由此可見,通過對模型識別效果的分析和融合,最終可在一定程度上提高識別效果。不同的數(shù)據(jù)集和模型訓(xùn)練參數(shù)可能得到的結(jié)果也有所差異,但這種多模型融合方式相對簡單,對于其他相關(guān)應(yīng)用也有一定的借鑒意義。集成應(yīng)用開發(fā)Visualsearchengine870310.3集成應(yīng)用開發(fā)8817為了更好的展示肺炎感染的識別效果,顯示不同模型的處理結(jié)果,本案例開發(fā)了一個GUI界面供用戶操作,GUI界面中集成了模型加載、影像選擇和智能識別等關(guān)鍵步驟。其中,集成應(yīng)用的界面設(shè)計如圖所示。應(yīng)用界面包括控制面板和顯示面板兩個區(qū)域,可先選擇待測影像并在右側(cè)顯示,再單擊智能識別按鈕調(diào)用3個模型進行識別并融合處理,最終在右側(cè)區(qū)域顯示處理結(jié)果。10.3集成應(yīng)用開發(fā)8918如圖所示,選擇了待測樣本進行肺炎感染的智能識別,可以發(fā)現(xiàn)陽性圖例呈現(xiàn)了明顯的區(qū)域“白化”現(xiàn)象,這也是肺部炎癥在CT影像下的表征。由于數(shù)據(jù)集的規(guī)模限制,自動化的智能識別還需要進一步的優(yōu)化,例如增加其他的數(shù)據(jù)集、引入多種數(shù)據(jù)增廣策略、加載更多的CNN模型等,讀者可以嘗試不同的方法進行實驗的延伸。案例小結(jié)CaseSummary900410.4案例小結(jié)91語音交互腦機交互20在醫(yī)學CT影像分析領(lǐng)域,重點關(guān)注的是醫(yī)學圖像內(nèi)的器官和組織形態(tài),并對其進行病理分析。使用醫(yī)學影像技術(shù)對肺炎感染患者進行初期篩選和防控顯得尤為關(guān)鍵。尤其是將AI技術(shù)應(yīng)用于肺部影像的輔助檢測,可以顯著提升診療過程中的效率,幫助醫(yī)生快速做出診斷。在本案例中對公開的肺炎感染影像數(shù)據(jù)集進行分析,通過采用數(shù)據(jù)增強技術(shù)來擴大訓(xùn)練樣本量,并利用多種CNN架構(gòu)來訓(xùn)練和識別模型,最后將這些CNN模型整合成一個綜合的多模型肺炎感染影像識別工具。然而,目前的實驗僅限于對影像作整體的分類與識別,而沒有對具體的病變區(qū)域進行細致的檢測與分割,這留給了未來研究的空間。讀者可以通過自定義設(shè)計或選用不同的網(wǎng)絡(luò)架構(gòu)、引入其他CT影像數(shù)據(jù)集等手段,來擴展本次實驗。感謝觀看!PyTorch計算機視覺與深度學習實戰(zhàn)基于深度學習的人臉
二維碼識別第十一章目錄02QR編譯碼QRcodecompilation01應(yīng)用背景Background05集成應(yīng)用開發(fā)Visualsearchengine06案例小結(jié)CaseSummary03人臉壓縮Facialcompression04CNN分類識別CNNclassificationrecognition應(yīng)用背景Background950111.1應(yīng)用背景96隨著人工智能領(lǐng)域的不斷進步,以人臉識別為核心的生物識別技術(shù)已廣泛被應(yīng)用于各種便利生活的場景,如面部支付系統(tǒng)、人臉門禁系統(tǒng)和面部識別通行等。二維碼,作為一種流行的信息編碼方式,因其高可靠性、大信息量和快速識別特性,在多種場景下得到廣泛應(yīng)用,成為現(xiàn)代人生活的一部分。將人臉圖像與二維碼結(jié)合,通過將處理后的人臉生物信息嵌入二維碼中,并利用專用工具進行解碼和重構(gòu),可以建立一個獨特的人臉二維碼驗證系統(tǒng)。本章將探討基本的人臉識別技術(shù),選擇標準人臉數(shù)據(jù)集進行特征降維和Base64編碼轉(zhuǎn)換,從而生成加密字符串。這些字符串隨后被用來生成二維碼圖像,并建立一個雙向的操作流程,支持從人臉到二維碼的轉(zhuǎn)換以及反向解碼過程。通過使用典型的CNN模型對重建的人臉圖像進行識別,最終實現(xiàn)一個基于深度學習的人臉二維碼識別系統(tǒng)。4QR編譯碼QRcodecompilation9702
11.2QR編譯碼98QR碼(QuickResponseCode)的全稱為“快速響應(yīng)矩陣碼”,最早由日本Denso公司于1994年為追蹤汽車零件而開發(fā)的一種矩陣式二維碼,其結(jié)構(gòu)說明如圖11-1所示。QR
碼是最常用的二維碼編碼方式,具有制作成本低和存儲容量大的特點,可方便的進行多種類型的信息存儲和提取,應(yīng)用場景非常廣泛。本案例不過多地介紹QR碼的原理,重點敘述如何利用二維碼編譯工具qrcode與pyzbar進行集成應(yīng)用。6qrcode與pyzbar是經(jīng)典的條碼/二維碼處理類庫,可用于解析多種格式的條形碼、二維碼,能夠方便地對QR碼進行編譯處理。大家可以通過pipinstallqrcodepyzbar命令,對兩個庫進行安裝。QR編碼的主要實現(xiàn)方式對輸入的字符串進行編碼,調(diào)用qrcode的編碼接口生成二維碼圖像,這里需要參考工具包的數(shù)據(jù)格式進行統(tǒng)一的參數(shù)傳遞,步驟如下。
11.2.1QR編碼997設(shè)置二維碼圖片的寬度和高度,初始化待編碼的字符串,這里以常見的漢字、英文、數(shù)字構(gòu)成字符串組合,代碼如下:2初始化接口#設(shè)置寬度和高度qr_height=400qr_width=400#設(shè)置字符串內(nèi)容text='劉衍琦,ComputerVision'1參數(shù)設(shè)置#初始化接口qr=qrcode.QRCode()進行相關(guān)的接口初始化,代碼如下:
11.2.1QR編碼1008設(shè)置編碼的字符,調(diào)用編碼接口進行圖像生成,代碼如下:4圖像轉(zhuǎn)換#添加字符串qr.add_data(text)#產(chǎn)生二維碼qr.make(fit=True)#產(chǎn)生圖像img=qr.make_image(fill_color='black',back_color='white')3QR編碼#轉(zhuǎn)換為圖像數(shù)組img=np.array(img,dtype='uint8')*255#改變圖像大小img=cv2.resize(img,(qr_width,qr_height))#保存圖像cv2.imwrite('qrcode.jpg',img)#顯示圖像cv2.imshow('qrcode',img)cv2.waitKey()將PIL格式的圖像轉(zhuǎn)化為OpencCV格式的圖像,代碼如下:
11.2.1QR編碼101經(jīng)過以上處理,可得到編碼后的二維碼圖像矩陣,將其保存為demo.jpg,具體如圖所示。9得到了所設(shè)置字符串的二維碼圖像,可以用微信等工具的二維碼掃描服務(wù)進行驗證,查看識別效果。如圖11-3所示,通過微信掃描自定義生成的二維碼圖像進行解碼得到了相匹配的字符串內(nèi)容,這也表明了二維碼編碼過程的有效性。
11.2.2QR譯碼10210代碼如下:2圖像解碼#讀取圖像image=Image.open('qrcode.jpg')1讀取圖像#圖像解碼result=pyzbar.decode(image)[0]text=result.data.decode("utf-8")代碼如下:QR譯碼的主要實現(xiàn)方式對輸入的二維碼圖像進行讀取,調(diào)用pyzbar的解碼接口獲取字符串內(nèi)容,這里需要參考工具包的數(shù)據(jù)格式進行統(tǒng)一的參數(shù)傳遞,步驟如下:
11.2.3內(nèi)容加密103通過設(shè)置的明文字符串進行編碼得到的二維碼圖像,采用普通的二維碼掃描工具即可容易地獲得明文信息,這也容易出現(xiàn)信息泄露的情況。為此,選擇經(jīng)典的Base64加解密進行內(nèi)容轉(zhuǎn)碼來提高安全性,即對字符串經(jīng)Base64加密后再進行QR編碼,同理對圖像QR譯碼后再進行Base64解密來得到明文字符串,代碼如下:11因此,將字符串的QR編譯碼加入base64編解碼過程,可得到統(tǒng)一的加解密處理,具體過程如圖所示。#base64加密text=base64.b64encode(text.encode('utf-8'))#base64解密text_b64=base64.b64decode(text).decode('utf-8')
11.2.3內(nèi)容加密10412代碼如下:2二維碼內(nèi)容提取defmk_qr(text,b64=True):ifb64:#base64加密
text=base64.b64encode(text.encode('utf-8'))#初始化接口
qr=qrcode.QRCode()#添加字符串
qr.add_data(text)#產(chǎn)生二維碼
qr.make(fit=True)#產(chǎn)生圖像
img=qr.make_image(fill_color='black',back_color='white')returnimg1二維碼生成defread_qr(image:Image,b64=True):#圖像解碼
result=pyzbar.decode(np.array(image,dtype='uint8')*255)[0]text=result.data.decode("utf-8")text_b64=''ifb64:#base64解密
text_b64=base64.b64decode(text).decode('utf-8')returntext,text_b64代碼如下:二維碼生成、二維碼內(nèi)容提取的流程,為方便調(diào)用可將二者封裝為子函數(shù),具體內(nèi)容如下。人臉壓縮Facialcompression1050311.3.1人臉建庫10614ORL(OlivettiResearchLaboratory,ORL)人臉數(shù)據(jù)庫是一個著名的人臉識別數(shù)據(jù)集,它起源于英國劍橋的Olivetti實驗室。該數(shù)據(jù)庫含有40個不同人物的人臉數(shù)據(jù),每個人物由10張正面人臉照片組成,總共包含400張圖片。這些人臉圖片的分辨率為92×112像素,并在拍攝時間、光照等方面有細微的變化,而同一人物的各張照片中可能會呈現(xiàn)出不同的表情、光照條件和面部角度。ORL人臉數(shù)據(jù)庫由于其典型性,已經(jīng)成為進行人臉識別研究的常用標準數(shù)據(jù)庫。參考ORL來制作數(shù)據(jù)集,其詳細結(jié)構(gòu)如圖所示。數(shù)據(jù)庫共包含40個子文件夾,每個文件夾以類別標簽命名,且均為灰度人臉圖像。11.3.2人臉降維10715主成分分析(PrincipalComponentAnalysis,PCA)是一種廣泛使用的數(shù)據(jù)簡化和特征萃取技術(shù)?;贙arhunen-Loeve變換或Hotelling變換,PCA通過計算數(shù)據(jù)集的最優(yōu)正交基,實現(xiàn)了降維,同時最小化了原始數(shù)據(jù)和降維后數(shù)據(jù)之間的均方誤差。此過程創(chuàng)建了一個新的坐標系統(tǒng),減少了數(shù)據(jù)各個組成部分之間的相關(guān)性,并且可以去除較少包含信息的成分,以達到減少特征空間維度的目的。應(yīng)用于多個領(lǐng)域,如數(shù)據(jù)壓縮和降噪,PCA以其簡便和高效的優(yōu)點,成為數(shù)據(jù)處理的重要工具。在處理人臉數(shù)據(jù)降維的場景中,PCA的核心步驟包括:首先加載人臉數(shù)據(jù)集,將其轉(zhuǎn)化為數(shù)值矩陣形式;接著計算平均臉并建立協(xié)方差矩陣;最終提取特征向量以形成特征臉空間。
11.3.2人臉降維10816圖像的讀取可以通過遍歷各個文件夾完成,只選取特定比例的圖像進行后續(xù)處理,下面是實現(xiàn)此步驟的關(guān)鍵代碼,代碼如下:data_dir=Path(data_dir)#遍歷所有圖片all_data=[]forpindata_dir.glob("**/*.BMP"): image=cv2.imread(str(p),cv2.IMREAD_GRAYSCALE) #拉平圖像
image_flatten=np.reshape(image,-1)
#歸一化
max_value=im
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 企業(yè)亮化管理辦法
- 休閑菜園管理辦法
- 代理結(jié)算管理辦法
- 2025年雨季行車試題及答案
- 2025年銀行研發(fā)面試題目及答案
- 2025年小球追蹤測試題及答案
- 2025年程序設(shè)計競賽真題
- 2025年給排水試題及答案
- 2025年中醫(yī)科主任面試題及答案
- 2025年押鈔車押運試題及答案
- 追責問責申請書
- 某有限公司人才引進管理辦法
- 全國城市一覽表-excel
- 樓宇自控施工與方案-
- 110KV電流互感器介質(zhì)損耗測量
- 巖石可鉆性測試實驗
- GB/T 1885-1998石油計量表
- GB 7231-2003工業(yè)管道的基本識別色、識別符號和安全標識
- T-JSYLA 00007-2022 江蘇省智慧公園建設(shè)指南
- 輔酶Q10知識講座課件
- T-CCPITCSC 060-2020直播營銷人員職業(yè)能力要求
評論
0/150
提交評論