版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
基于卷積神經(jīng)網(wǎng)絡(luò)的野生菌識(shí)別與實(shí)現(xiàn)摘要該設(shè)計(jì)基于卷積神經(jīng)網(wǎng)絡(luò),旨在實(shí)現(xiàn)野生菌的自動(dòng)識(shí)別與分類。通過(guò)構(gòu)建深度學(xué)習(xí)模型,對(duì)采集到的野生菌圖像進(jìn)行分析和處理,以實(shí)現(xiàn)準(zhǔn)確、高效的菌種識(shí)別。設(shè)計(jì)首先搜集了大量的野生菌圖像數(shù)據(jù),并進(jìn)行預(yù)處理和標(biāo)注。然后,再通過(guò)卷積神經(jīng)網(wǎng)絡(luò)模型對(duì)圖像進(jìn)行訓(xùn)練與測(cè)試,提取特征并學(xué)習(xí)不同菌種之間的差異。通過(guò)優(yōu)化模型參數(shù)和超參數(shù),提高了識(shí)別的準(zhǔn)確性和魯棒性。實(shí)驗(yàn)結(jié)果表明,該系統(tǒng)在野生菌的分類上取得了較好的效果,并且能夠適應(yīng)不同光照、角度等條件下的野外環(huán)境。此外,該設(shè)計(jì)還實(shí)現(xiàn)了用戶友好的界面,使得普通用戶可以方便地上傳圖片并獲取識(shí)別結(jié)果。該設(shè)計(jì)具有一定的應(yīng)用價(jià)值,可用于野外菌種的快速識(shí)別和分類,為野生菌的科學(xué)研究和保護(hù)工作提供有效的支持。關(guān)鍵詞野生菌;圖像識(shí)別;卷積神經(jīng)網(wǎng)絡(luò)
WildconvolutionalneuralnetworkrecognitionandimplementationAbstractThedesignisbasedonconvolutionalneuralnetworkandaimstoachieveautomaticrecognitionandclassificationofwildbacteria.Byconstructingadeeplearningmodel,thecollectedimagesofwildbacteriaareanalyzedandprocessedtoachieveaccurateandefficientstrainidentification.Firstly,alotofimagedataofwildbacteriawerecollectedandpreprocessedandlabeled.Theimageswerethentrainedandtestedusingconvolutionalneuralnetworkmodelstoextractfeaturesandlearndifferencesbetweenthedifferentspecies.Byoptimizingthemodelparametersandsuper-parameters,theaccuracyandrobustnessofrecognitionareimproved.Theexperimentalresultsshowthatthesystemhasagoodeffectontheclassificationofwildbacteria,andcanadapttodifferentlight,angleandotherconditionsofthefieldenvironment.Inaddition,thedesignalsorealizesauser-friendlyinterface,sothatordinaryuserscaneasilyuploadpicturesandobtaintherecognitionresults.Thedesignhascertainapplicationvalue,andcanbeusedforrapididentificationandclassificationofwildbacteriaspecies,andprovideeffectivesupportforscientificresearchandprotectionofwildbacteria.KeywordsWildfungi;imagerecognition;convolutionalneuralnetwork
目錄TOC\o"1-3"\h\u1緒論 緒論研究背景及意義目的研究背景在傳統(tǒng)的野生菌識(shí)別中,人工鑒定一直是主要的方法。然而,由于野生菌種類繁多且形態(tài)差異大,人工鑒定需要專業(yè)的知識(shí)和經(jīng)驗(yàn),并且耗時(shí)費(fèi)力?;诰矸e神經(jīng)網(wǎng)絡(luò)的野生菌識(shí)別與實(shí)現(xiàn)的研究旨在利用深度學(xué)習(xí)模型,通過(guò)對(duì)野生菌圖像進(jìn)行訓(xùn)練和分析,實(shí)現(xiàn)自動(dòng)化的、高效精確的菌種識(shí)別。卷積神經(jīng)網(wǎng)絡(luò)(ConvolutionalNeulaNet,CNN)是一個(gè)在圖像處理領(lǐng)域應(yīng)用的深度學(xué)習(xí)模式,具有良好的特征提取能力和分類準(zhǔn)確性。該研究的背景是由于野生菌的多樣性和數(shù)量龐大,傳統(tǒng)的人工鑒定方法已經(jīng)無(wú)法滿足對(duì)大規(guī)模菌種進(jìn)行準(zhǔn)確鑒定和分類的需求。而基于卷積神經(jīng)網(wǎng)絡(luò)的自動(dòng)化野生菌識(shí)別方法可以極大地提高識(shí)別的準(zhǔn)確性和效率,并且減輕了對(duì)專業(yè)知識(shí)和經(jīng)驗(yàn)的依賴。此外,隨著人們對(duì)野生菌資源的重視和保護(hù)意識(shí)的提高,對(duì)于野生菌的科學(xué)研究和保護(hù)工作也越來(lái)越重要。基于卷積神經(jīng)網(wǎng)絡(luò)的野生菌識(shí)別與實(shí)現(xiàn)的研究具有廣泛的應(yīng)用價(jià)值,可以為野生菌的快速鑒定、資源調(diào)查、保護(hù)和科學(xué)研究提供有效的技術(shù)支持。通過(guò)自動(dòng)化的野生菌識(shí)別系統(tǒng),可以提高菌種識(shí)別的準(zhǔn)確性和效率,節(jié)省人力物力成本,并且為大眾提供更加便捷的野生菌識(shí)別服務(wù)。研究意義與目的研究野生菌的識(shí)別和實(shí)現(xiàn)是因?yàn)槠湓谑称?、藥物和生態(tài)領(lǐng)域具有重要意義。云南地區(qū)以其豐富的生態(tài)環(huán)境而聞名,擁有世界上最多樣化的野生菌種類之一。然而,由于野生菌的相似外觀和不同品種之間的微小差異,準(zhǔn)確區(qū)分不同的野生菌種類變得非常具有挑戰(zhàn)性。因此,通過(guò)開(kāi)展基于CNN的野生菌的對(duì)別與實(shí)現(xiàn)研究,我們可以解決以下問(wèn)題:首先,研究可以提供一種準(zhǔn)確、快速且非侵入性的方法用于區(qū)分和識(shí)別不同的野生菌種類。這對(duì)于保護(hù)地區(qū)的野生菌資源和促進(jìn)可持續(xù)利用至關(guān)重要。通過(guò)準(zhǔn)確識(shí)別野生菌,我們可以更好地了解其生態(tài)學(xué)和生物學(xué)特性,從而促進(jìn)其保護(hù)和管理。其次,這項(xiàng)研究對(duì)于食品和藥物行業(yè)具有重要作用。野生菌被廣泛用于食物烹飪和藥物制備中,但由于相似的外觀和品種的復(fù)雜性,存在著誤帶毒性或低效活性的風(fēng)險(xiǎn)。通過(guò)開(kāi)發(fā)準(zhǔn)確的基于CNN的野生菌鑒別系統(tǒng),我們可以幫助確保消費(fèi)者獲得高品質(zhì)、安全和有效的野生菌產(chǎn)品。最后,該研究也有助于推動(dòng)計(jì)算機(jī)視覺(jué)技術(shù)的發(fā)展和應(yīng)用。開(kāi)發(fā)基于CNN的野生菌對(duì)別與實(shí)現(xiàn)方法需要利用圖像處理和模式識(shí)別算法,為自動(dòng)化野生菌識(shí)別打下基礎(chǔ)。這對(duì)于拓展計(jì)算機(jī)視覺(jué)在生物學(xué)和生態(tài)學(xué)領(lǐng)域的應(yīng)用具有重要的推動(dòng)作用。綜上所述,基于CNN的野生菌的對(duì)別與實(shí)現(xiàn)研究具有廣泛的研究意義和應(yīng)用價(jià)值,對(duì)于野生菌資源保護(hù)、食品藥物安全和計(jì)算機(jī)視覺(jué)技術(shù)發(fā)展都有積極的影響。國(guó)內(nèi)外研究現(xiàn)狀分析基于卷積神經(jīng)網(wǎng)絡(luò)的野生菌識(shí)別與實(shí)現(xiàn)在國(guó)內(nèi)外的研究取得了一定的進(jìn)展。早期的研究主要集中在方法的初步探索和驗(yàn)證,對(duì)數(shù)據(jù)集規(guī)模小、魯棒性測(cè)試不足等缺陷存在一定限制。近年來(lái),研究者們開(kāi)始關(guān)注更大規(guī)模數(shù)據(jù)集和模型的泛化能力,提出了改進(jìn)方法和策略。然而,仍需要進(jìn)一步研究解決數(shù)據(jù)集規(guī)模有限、不同環(huán)境條件下的魯棒性等問(wèn)題,并提高野生菌識(shí)別系統(tǒng)的準(zhǔn)確性和實(shí)用性。由Yan等人于[11]提出了使用深度卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行野生菌識(shí)別的方法。通過(guò)訓(xùn)練一個(gè)多層卷積神經(jīng)網(wǎng)絡(luò)模型,實(shí)現(xiàn)對(duì)野生菌圖像的自動(dòng)分類和識(shí)別。然而,該研究在數(shù)據(jù)集規(guī)模上存在限制,并且沒(méi)有涉及到對(duì)不同光照和角度下的圖像進(jìn)行魯棒性測(cè)試。由Hin等人[12]使用卷積神經(jīng)網(wǎng)絡(luò)和遷移學(xué)習(xí)方法對(duì)野生菌進(jìn)行識(shí)別。研究表明,利用預(yù)訓(xùn)練的深度卷積神經(jīng)網(wǎng)絡(luò)模型,能夠有效獲得野生菌圖像的特點(diǎn),并實(shí)現(xiàn)準(zhǔn)確的分類。然而,該研究?jī)H使用了較小規(guī)模的數(shù)據(jù)集,并未對(duì)不同光照條件下的圖像進(jìn)行充分測(cè)試。另外由Li等人[13]回顧了野生菌識(shí)別與分類領(lǐng)域的深度學(xué)習(xí)方法。研究指出,卷積神經(jīng)網(wǎng)絡(luò)在野生菌識(shí)別中取得了顯著的成果,但仍然存在一些挑戰(zhàn)和缺陷,如數(shù)據(jù)集規(guī)模有限、不同光照和角度下的魯棒性等。該研究提出了對(duì)大規(guī)模數(shù)據(jù)集的需求以及對(duì)模型魯棒性和泛化能力的進(jìn)一步研究。在野生菌的對(duì)別與實(shí)現(xiàn)方面,雖然已經(jīng)有一些相關(guān)研究進(jìn)行了嘗試。其中一些研究使用了傳統(tǒng)的圖像處理技術(shù),如形態(tài)學(xué)操作、顏色特征提取、紋理特征提取等。這些方法雖然能夠?qū)N進(jìn)行初步分類,但由于野生菌的形態(tài)和顏色變化較大,仍然存在識(shí)別率低和容易受到光照條件影響的問(wèn)題。此外,由于野生菌種類繁多且存在細(xì)微的差異,單純依靠傳統(tǒng)圖像處理方法的特征提取也很難準(zhǔn)確區(qū)分不同的種類。本文的主要工作本論文的主要工作是基于卷積神經(jīng)網(wǎng)絡(luò)(CNN)實(shí)現(xiàn)野生菌的自動(dòng)識(shí)別。論文通過(guò)設(shè)計(jì)和實(shí)現(xiàn)了一個(gè)完整的系統(tǒng),包括數(shù)據(jù)集的準(zhǔn)備、模型的建立與訓(xùn)練、以及對(duì)測(cè)試樣本進(jìn)行預(yù)測(cè)和評(píng)估。下面將分別對(duì)三個(gè)部分進(jìn)行說(shuō)明。首先,通過(guò)采集并整理了大量的野生菌圖像數(shù)據(jù)集,包括常見(jiàn)的八類野生菌。為了提高模型的泛化能力和魯棒性,數(shù)據(jù)集在導(dǎo)入過(guò)程中進(jìn)行了預(yù)處理操作,如調(diào)整圖像大小、轉(zhuǎn)換顏色空間等。這些步驟有助于提取出更具代表性的特征,并為后續(xù)的模型訓(xùn)練和測(cè)試提供了可靠的數(shù)據(jù)基礎(chǔ)。其次,設(shè)計(jì)了一個(gè)基于CNN的野生菌識(shí)別模型中,并利用預(yù)訓(xùn)練的ResNet和ResNeSt模型作為特征提取器。通過(guò)替換全連接層,將輸出大小設(shè)置為8,即表示8個(gè)野生菌分類。此外,為了提高模型的性能,論文還引入了FocalLoss損失函數(shù)來(lái)解決類別不均衡問(wèn)題。通過(guò)優(yōu)化器和學(xué)習(xí)率衰減策略,對(duì)模型進(jìn)行訓(xùn)練,使其能夠更好地學(xué)習(xí)和分類野生菌圖像。最后,實(shí)現(xiàn)了對(duì)單張圖片進(jìn)行野生菌識(shí)別的功能。通過(guò)加載訓(xùn)練好的模型權(quán)重,并使用測(cè)試集數(shù)據(jù)加載器,對(duì)測(cè)試樣本進(jìn)行預(yù)測(cè)和評(píng)估。在預(yù)測(cè)過(guò)程中,利用訓(xùn)練好的模型對(duì)輸入圖片進(jìn)行特征提取和分類,輸出預(yù)測(cè)結(jié)果,并計(jì)算準(zhǔn)確率等指標(biāo)。同時(shí),為了直觀展示識(shí)別結(jié)果,論文還通過(guò)在圖片上繪制預(yù)測(cè)類別信息,生成帶有預(yù)測(cè)結(jié)果的圖片。本論文的主要工作是基于卷積神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)了一個(gè)完整的野生菌識(shí)別系統(tǒng)。通過(guò)構(gòu)建數(shù)據(jù)集、設(shè)計(jì)模型并進(jìn)行訓(xùn)練,實(shí)現(xiàn)了對(duì)野生菌圖像的自動(dòng)分類和識(shí)別。該系統(tǒng)具有較高的準(zhǔn)確性和魯棒性,并可應(yīng)用于野生菌領(lǐng)域的實(shí)際應(yīng)用中,如野生菌識(shí)別APP、農(nóng)業(yè)領(lǐng)域的病蟲害識(shí)別等。這項(xiàng)工作對(duì)于促進(jìn)野生菌資源的保護(hù)、利用與研究具有重要意義,并為相關(guān)領(lǐng)域的進(jìn)一步研究和開(kāi)發(fā)提供了參考和借鑒。積卷神經(jīng)網(wǎng)絡(luò)相關(guān)理論CNN是一種深度學(xué)習(xí)模型,用于處理圖像、視頻等具有空間結(jié)構(gòu)的數(shù)據(jù)。它使用卷積運(yùn)算作為核心運(yùn)算來(lái)獲取特征。卷積操作包括通過(guò)在輸入數(shù)據(jù)上拖動(dòng)一個(gè)小窗口(卷積內(nèi)核)來(lái)獲得局部感知中的特征。該窗口將輸入數(shù)據(jù)的位置逐個(gè)元素相乘,并將數(shù)據(jù)組合成一個(gè)卷積輸出。通過(guò)在整個(gè)輸入數(shù)據(jù)上實(shí)現(xiàn)卷積操作,CNN能夠捕捉到不同位置的局部特征,并且保留了輸入數(shù)據(jù)的空間結(jié)構(gòu)。卷積操作能夠捕捉到圖像中的局部模式,并保留空間結(jié)構(gòu)信息。公式如下:y其中,yij表示卷積后的輸出特征圖中的一個(gè)元素,Wmn表示濾波器的權(quán)重,x常用的激活函數(shù)有ReLU(RectifierLinearUnit)、Sigmoid和Tanh等。激活函數(shù)的主要功能是增強(qiáng)模型的表達(dá)能力,以便能夠更好地適應(yīng)復(fù)雜的數(shù)據(jù)分布。池化操作:池化操作是CNN中的一個(gè)關(guān)鍵步驟,用來(lái)減少特征圖的維度并保留關(guān)鍵信息。在池化操作中,將輸入特征映射劃分為不重疊的區(qū)域,并對(duì)這些區(qū)域進(jìn)行聚合。每個(gè)區(qū)域的最大池選擇的平均值即為池輸出,池平均值計(jì)算為每個(gè)區(qū)域的平均值。這減少了特征映射的大小,從而減少了參數(shù)和計(jì)算的數(shù)量。CNN通常由多個(gè)卷積層、激活函數(shù)層和池化層所組成。每個(gè)卷積層都可以提取出不同級(jí)別的特征,從低級(jí)別的邊緣和紋理到高級(jí)別的形狀和物體等。通過(guò)多層疊加,CNN可以逐漸變得更加抽象和語(yǔ)義化。在經(jīng)過(guò)多個(gè)卷積層和池化層之后,最后一層是一個(gè)將高維屬性映射到輸出類型的全連接層。全連接層中的神經(jīng)元與前一層的所有神經(jīng)元相連,通過(guò)權(quán)重矩陣進(jìn)行線性變換,并應(yīng)用激活函數(shù)對(duì)結(jié)果進(jìn)行非線性映射。公式如下:y其中,y表示全連接層的輸出,在CNN中,每個(gè)卷積層、池化層和全連接層都有自己的權(quán)重矩陣W和偏置項(xiàng)b。當(dāng)進(jìn)行前向傳播時(shí),輸入向量x通過(guò)卷積操作和激活函數(shù)f(),以及池化操作,逐漸轉(zhuǎn)化為更高級(jí)的特征表示。最后,通過(guò)全連接層的預(yù)測(cè)結(jié)果??偟膩?lái)說(shuō),卷積神經(jīng)網(wǎng)絡(luò)通過(guò)卷積、激活函數(shù)、池化等操作實(shí)現(xiàn)對(duì)圖像等空間結(jié)構(gòu)數(shù)據(jù)的特征提取和分類。多層網(wǎng)絡(luò)結(jié)構(gòu)以及反向傳播算法保證了模型的深度和學(xué)習(xí)能力。此外,預(yù)訓(xùn)練模型的使用可以加快模型訓(xùn)練過(guò)程,并提高識(shí)別性能。這些理論內(nèi)容的應(yīng)用使得卷積神經(jīng)網(wǎng)絡(luò),是圖像識(shí)別、目標(biāo)檢測(cè)和語(yǔ)義分割等任務(wù)中最常用的深度學(xué)習(xí)模式之一。卷積層卷積神經(jīng)網(wǎng)絡(luò)(CNN)是一種用來(lái)圖像處理和模型識(shí)別的深度學(xué)習(xí)模型。其核心層之一為卷積層,該層在圖像中提取特征以進(jìn)行分類或識(shí)別任務(wù)。積卷層的計(jì)算原理基于卷積操作,它通過(guò)對(duì)輸入數(shù)據(jù)和一組可學(xué)習(xí)的濾波器(也稱為卷積核)進(jìn)行逐元素乘積并求和的方式來(lái)生成輸出特征圖。這種局部連接和權(quán)值共享的方式使得卷積層能夠有效地捕捉到輸入數(shù)據(jù)中的空間結(jié)構(gòu)信息。具體而言,卷積層的計(jì)算公式如下:Z[i,J]=(X*W)[i,j]+b其中,Z是輸出特征映射,X是輸入數(shù)據(jù),W為卷積核,b是偏置項(xiàng)。*表示卷積運(yùn)算,即對(duì)應(yīng)位置元素相乘后的和。I和j分別代表了輸出特征映射的行和列索引。在卷積操作中,卷積核通過(guò)逐元素相乘并求和的方式,對(duì)輸入數(shù)據(jù)的每個(gè)窗口進(jìn)行處理,得到一個(gè)標(biāo)量值作為輸出特征圖的一個(gè)元素。通過(guò)滑動(dòng)窗口的方式遍歷整個(gè)輸入數(shù)據(jù),我們可以得到完整的輸出特征圖。卷積層在CNN中的作用是獲取輸入數(shù)據(jù)中的局部特征。每個(gè)卷積核都掌握了不同的特征,比如邊緣、紋理等。卷積核的參數(shù)是可學(xué)習(xí)的,它們會(huì)根據(jù)訓(xùn)練數(shù)據(jù)自動(dòng)調(diào)整,以便更好地捕捉輸入數(shù)據(jù)中的關(guān)鍵特征。通過(guò)使用多個(gè)卷積核,卷積層可以同時(shí)獲得各種各樣的屬性。這使得網(wǎng)絡(luò)能夠?qū)W習(xí)更復(fù)雜和抽象的特征表示。隨著網(wǎng)絡(luò)深度的增加,卷積層逐漸實(shí)現(xiàn)從低級(jí)特征(如邊緣)到高級(jí)特征(如形狀和對(duì)象組合)的分層特征提取。這些提取的特征隨后在后續(xù)層(例如,池化層,全連接層)中用于分類或識(shí)別任務(wù)。如圖1-1積卷層計(jì)算原理。圖SEQ圖\*ARABIC1-1積卷層計(jì)算原理池化層池化層(PoolingLayer)是卷積神經(jīng)網(wǎng)絡(luò)(CNN)中的一個(gè)常用層,用于下采樣特征映射,減少參數(shù)計(jì)數(shù)和計(jì)算負(fù)荷,從而增強(qiáng)模型學(xué)習(xí)平移不變性的能力。池化層的原理是在輸入特征圖的每個(gè)子區(qū)域上應(yīng)用某種池化操作,將該區(qū)域內(nèi)的信息進(jìn)行聚合或統(tǒng)計(jì),生成新的輸出特征圖。常見(jiàn)的池化操作有最大池化(MaxPooling)和平均池化(AveragePooling)。最大池化操作的公式如下:Z[i,j]=max(X[(i*s):(i*s+f),(j*s):(j*s+f)])在最大池化操作中,將輸入特征圖X劃分為大小為f的不重疊窗口。在每個(gè)窗口內(nèi),最大池化操作選擇最大值作為輸出特征圖z的元素。通過(guò)設(shè)置池化窗口的大小f和步長(zhǎng)s來(lái)控制窗口的移動(dòng)。對(duì)于每個(gè)窗口,該操作提取其最大值并將其分配到輸出特征映射Z中的對(duì)應(yīng)位置。平均池化操作的公式如下:Z[i,j]=mean(X[(i*s):(i*s+f),(j*s):(j*s+f)])平均池化操作計(jì)算池化窗口內(nèi)元素的平均值,并將其分配給輸出特征映射中相應(yīng)的元素。池化層采用的降采樣技術(shù)在減少冗余信息的同時(shí)有效地保留了重要的特征。它具有降低維度、提高計(jì)算效率和增強(qiáng)平移不變性的作用。池化層通常緊隨卷積層之后,可以多次堆疊使用,如圖2-1全連接和平均池化層對(duì)比圖。圖2-1全連接和平均池化層對(duì)比圖激活函數(shù)激活函數(shù)是神經(jīng)網(wǎng)絡(luò)中的一種非線性函數(shù),被應(yīng)用于卷積神經(jīng)網(wǎng)絡(luò)(CNN)等深度學(xué)習(xí)模型的各個(gè)層中。其的主要功能是引入非線性變換,增強(qiáng)模型的表達(dá)能力和擬合復(fù)雜函數(shù)的能力。神經(jīng)網(wǎng)絡(luò)中的激活函數(shù)用于非線性映射輸入信息,從而引入非線性關(guān)系,增強(qiáng)模型的表達(dá)能力。通過(guò)利用激活函數(shù),神經(jīng)網(wǎng)絡(luò)能夠?qū)斎霐?shù)據(jù)進(jìn)行非線性變換,使其能夠捕獲更復(fù)雜和抽象的特征表示。這有助于增強(qiáng)模型的擬合能力,使其能夠有效地處理圖像分類、語(yǔ)音識(shí)別等非線性問(wèn)題。Sigmoid函數(shù)在[0,1]范圍內(nèi)映射輸入值,而ReLU函數(shù)在其為正時(shí)輸出與輸入相同的值,否則為零。此外,LeakyReLU函數(shù)為負(fù)輸入引入了較小的斜率,而tanh函數(shù)將輸入值映射在[-1,1]之間。Sigmoid函數(shù)的基本公式如下:F(x)=1/(1+ex(-x))它映射0到1之間的輸入值,并具有平滑的s形曲線。然而,當(dāng)輸入較大或較小時(shí),Sigmoid函數(shù)容易出現(xiàn)梯度飽和,導(dǎo)致梯度消失,限制了網(wǎng)絡(luò)的學(xué)習(xí)能力。ReLU(RectifiedLinearUnit)函數(shù)的公式如下:f(x)=max(0,x)ReLU函數(shù)在正數(shù)范圍內(nèi)保持線性關(guān)系,使得模型更易訓(xùn)練和收斂,并且避免了梯度飽和問(wèn)題。它是目前最常用的激活函數(shù)之一。LeakyReLU函數(shù)是對(duì)ReLU函數(shù)的改進(jìn),并修復(fù)了ReLU函數(shù)的負(fù)數(shù)部分的死亡神經(jīng)元問(wèn)題。公式如下:f(x)=max(0.01x,x)tanh函數(shù)是雙曲正切函數(shù),將輸入映射到-1到1之間,具有平滑的S形曲線。它比Sigmoid函數(shù)更易于訓(xùn)練,但仍存在梯度消失問(wèn)題。
系統(tǒng)需求分析可行性分析基于Python卷積神經(jīng)網(wǎng)絡(luò)的野生菌識(shí)別研究具有較高的可行性。首先,卷積神經(jīng)網(wǎng)絡(luò)(CNN)在圖像識(shí)別領(lǐng)域表現(xiàn)出了強(qiáng)大的能力。由于野生菌具有多樣的形態(tài)和特征,傳統(tǒng)的機(jī)器學(xué)習(xí)方法可能無(wú)法有效地提取并識(shí)別這些特征。而CNN能夠自動(dòng)從圖像中學(xué)習(xí)特征,并進(jìn)行準(zhǔn)確的分類和識(shí)別,因此非常適用于野生菌的識(shí)別研究。Python是一種簡(jiǎn)單、易學(xué)、功能強(qiáng)大的深度學(xué)習(xí)應(yīng)用程序編程語(yǔ)言。它擁有豐富的科學(xué)計(jì)算庫(kù)和深度學(xué)習(xí)庫(kù),使得實(shí)現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)變得相對(duì)簡(jiǎn)單。通過(guò)使用這些庫(kù),可以方便地搭建、訓(xùn)練和評(píng)估野生菌識(shí)別模型。另外,近年來(lái)公開(kāi)的大規(guī)模野生菌圖像數(shù)據(jù)集的增加也為該研究提供了支持。這些數(shù)據(jù)集包含了各種野生菌的圖像,覆蓋了不同的物種、形態(tài)與生境,為訓(xùn)練和測(cè)試卷積神經(jīng)網(wǎng)絡(luò)模型提供了大量的數(shù)據(jù)。此外,卷積神經(jīng)網(wǎng)絡(luò)也可以應(yīng)用于遷移學(xué)習(xí)。遷移學(xué)習(xí)利用大規(guī)模圖像數(shù)據(jù)集上預(yù)先訓(xùn)練好的模型參數(shù),將其轉(zhuǎn)移到野生菌識(shí)別任務(wù)中,從而加快了訓(xùn)練過(guò)程,提高了模型的準(zhǔn)確性。這種方法對(duì)于數(shù)據(jù)量較小的野生菌識(shí)別研究非常有效。功能需求分析圖3-1功能需求用例圖基于Python卷積神經(jīng)網(wǎng)絡(luò)的野生菌識(shí)別研究的功能需求如圖3-1所示。具體分析如下:數(shù)據(jù)預(yù)處理實(shí)現(xiàn)了對(duì)野生菌圖像數(shù)據(jù)的預(yù)處理,包括圖像縮放、剪切和增強(qiáng)等操作,以提高模型的魯棒性和泛化能力。模型搭建設(shè)計(jì)并實(shí)現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)模型,該模型由卷積層、池化層和全連接層組成,用于學(xué)習(xí)和獲取野生菌圖像的特征并對(duì)其進(jìn)行分類。訓(xùn)練過(guò)程是利用野生菌圖像數(shù)據(jù)集對(duì)CNN模型進(jìn)行訓(xùn)練,并通過(guò)反向傳播算法優(yōu)化模型參數(shù),以使其逐漸收斂并提高準(zhǔn)確性。模型評(píng)估與驗(yàn)證對(duì)訓(xùn)練好的模型進(jìn)行了評(píng)估和驗(yàn)證,并通過(guò)測(cè)試集對(duì)模型的精度等特征指標(biāo)進(jìn)行測(cè)量,以確保模型的有效性和可靠性。其他需求分析基于Python卷積神經(jīng)網(wǎng)絡(luò)的野生菌識(shí)別研究的業(yè)務(wù)需求分析如下:準(zhǔn)確性要求野生菌識(shí)別系統(tǒng)需要具備高準(zhǔn)確性,能夠準(zhǔn)確地識(shí)別不同種類的野生菌。這是保證系統(tǒng)可靠性和實(shí)用性的關(guān)鍵要求。實(shí)時(shí)性需求野生菌識(shí)別系統(tǒng)需要具備較快的響應(yīng)速度,能夠在短時(shí)間內(nèi)完成圖像的識(shí)別和分類,以滿足用戶對(duì)實(shí)時(shí)性的需求??蓴U(kuò)展性要求為了適應(yīng)不斷增長(zhǎng)的野生菌數(shù)據(jù)和用戶規(guī)模,系統(tǒng)需要具備良好的可擴(kuò)展性,能夠處理大規(guī)模的數(shù)據(jù)集和并發(fā)請(qǐng)求。易用性要求野生菌識(shí)別系統(tǒng)需要提供簡(jiǎn)潔、直觀的用戶界面,方便用戶上傳圖像并獲得識(shí)別結(jié)果。同時(shí),系統(tǒng)應(yīng)該具備友好的錯(cuò)誤提示和幫助信息,提供良好的用戶體驗(yàn)。
系統(tǒng)設(shè)計(jì)系統(tǒng)架構(gòu)設(shè)計(jì)野生菌識(shí)別的架構(gòu)如下:野生菌識(shí)別的流程首先涉及收集豐富的野生菌圖像數(shù)據(jù),并為每個(gè)樣本添加正確的標(biāo)注,以確立其所屬的菌種類別。接下來(lái),對(duì)采集到的圖像數(shù)據(jù)進(jìn)行多項(xiàng)預(yù)處理操作,包括但不限于調(diào)整圖像大小、灰度處理和歸一化,以便為后續(xù)的模型訓(xùn)練和測(cè)試做準(zhǔn)備。采用卷積神經(jīng)網(wǎng)絡(luò)(CNN)作為主要的模型架構(gòu),根據(jù)實(shí)際需求選擇適合的CNN模型,如VGG、ResNet等。然后,將經(jīng)過(guò)預(yù)處理的圖像數(shù)據(jù)集按照特定比例(通常為70%的訓(xùn)練集和30%的驗(yàn)證集)進(jìn)行劃分,以支持模型的有效訓(xùn)練和評(píng)估。這一流程旨在構(gòu)建一個(gè)準(zhǔn)確可靠的野生菌識(shí)別系統(tǒng),為野生菌種類的快速識(shí)別提供可靠的技術(shù)支持。在訓(xùn)練集上使用標(biāo)注信息進(jìn)行監(jiān)督學(xué)習(xí),通過(guò)反向傳播算法優(yōu)化網(wǎng)絡(luò)參數(shù),使得模型能夠準(zhǔn)確地預(yù)測(cè)野生菌的類別。通過(guò)不斷迭代訓(xùn)練過(guò)程,直到模型在驗(yàn)證集上達(dá)到較好的性能指標(biāo),如準(zhǔn)確率、精確率等。使用經(jīng)過(guò)訓(xùn)練的模型對(duì)新的野生菌圖像進(jìn)行分類預(yù)測(cè)。對(duì)輸入的野生菌圖像按照與訓(xùn)練相同的方式進(jìn)行預(yù)處理,然后輸入到訓(xùn)練好的模型中。將根據(jù)學(xué)習(xí)到的特征和權(quán)值進(jìn)行預(yù)測(cè),并輸出預(yù)測(cè)結(jié)果,判斷該野生菌屬于哪個(gè)種類。對(duì)模型的分類結(jié)果和真實(shí)標(biāo)簽進(jìn)行比對(duì),計(jì)算準(zhǔn)確度、精確度、召回率等性能指標(biāo),評(píng)估模型的識(shí)別效果。如果模型的性能指標(biāo)達(dá)到要求,則可以將該模型部署到實(shí)際應(yīng)用中進(jìn)行野生菌的自動(dòng)識(shí)別,野生菌識(shí)別框架如圖4-1所示圖4-1野生菌識(shí)別架構(gòu)算法模型卷積神經(jīng)網(wǎng)絡(luò)的搭建加載數(shù)據(jù)集,并進(jìn)行數(shù)據(jù)預(yù)處理。首先定義了輸入圖像的大小,并使用transforms.Compose方法構(gòu)建了訓(xùn)練集和測(cè)試集的數(shù)據(jù)轉(zhuǎn)換操作。這些轉(zhuǎn)換操作包括圖像大小調(diào)整、填充、隨機(jī)裁剪、隨機(jī)水平翻轉(zhuǎn)和標(biāo)準(zhǔn)化等。然后將數(shù)據(jù)集按類別劃分為訓(xùn)練集和測(cè)試集。創(chuàng)建模型。根據(jù)參數(shù)選擇使用ResNet還是ResNeSt作為基礎(chǔ)模型。對(duì)于ResNet,通過(guò)models.resnet50(pretrained=True)加載預(yù)訓(xùn)練模型,然后修改全連接層的輸出大小為8。對(duì)于ResNeSt,通過(guò)resnest50(pretrained=False)加載預(yù)訓(xùn)練模型,并同樣修改全連接層的輸出大小為8。定義訓(xùn)練函數(shù)和測(cè)試函數(shù)。訓(xùn)練函數(shù)中,首先將模型設(shè)置為訓(xùn)練模式。然后遍歷訓(xùn)練數(shù)據(jù)集,將輸入數(shù)據(jù)和標(biāo)簽發(fā)送到設(shè)備(GPU或CPU),清除優(yōu)化器的梯度,計(jì)算模型的輸出,利用損失函數(shù)計(jì)算損失值,進(jìn)行反向傳遞,并更新模型參數(shù),同時(shí)記錄訓(xùn)練準(zhǔn)確率和損失值。測(cè)試函數(shù)中,首先將模型設(shè)置為評(píng)估模式。然后遍歷測(cè)試數(shù)據(jù)集,將輸入數(shù)據(jù)和標(biāo)簽發(fā)送到設(shè)備,計(jì)算模型的輸出,再通過(guò)損失函數(shù)計(jì)算損失值,統(tǒng)計(jì)預(yù)測(cè)準(zhǔn)確的樣本數(shù)量和總樣本數(shù)量,同時(shí)記錄測(cè)試準(zhǔn)確率和平均損失值。在訓(xùn)練過(guò)程中,通過(guò)測(cè)試數(shù)據(jù)集進(jìn)行模型評(píng)估。如果當(dāng)前的測(cè)試精確度大于之前的最佳精度,則保留了最佳模型的參數(shù)。最后通過(guò)調(diào)用train函數(shù)來(lái)訓(xùn)練模型。算法功能設(shè)計(jì)該算法的功能設(shè)計(jì)可以分為以下四個(gè)部分:數(shù)據(jù)加載和預(yù)處理、模型搭建、訓(xùn)練和測(cè)試。首先,進(jìn)行卷積操作:H=σ(W?x+b)其中,*代表卷積操作,W代表卷積核(權(quán)重),b代表偏置項(xiàng),σ代表激活函數(shù)(例如ReLU)ReLU)。接下來(lái),進(jìn)行池化操作:P=pooling(h)池化操作,可能是最大池化或平均池化等。然后,將池化結(jié)果展開(kāi)成向量:F=flatten(p)再次,再利用全連接層進(jìn)行特征映射:Z=σ(Wf*f+bf)其中,Wf為全連接層的權(quán)重矩陣,bf為偏置項(xiàng)。最后,通過(guò)輸出層進(jìn)行分類預(yù)測(cè):Y^=softmax(Wo*z+bo)其中,Wo為輸出層的權(quán)重矩陣,bo為偏置項(xiàng),softmax函數(shù)將輸出轉(zhuǎn)換為概率分布。數(shù)據(jù)加載和預(yù)處理部分該部分負(fù)責(zé)加載蘑菇圖像數(shù)據(jù)集,并進(jìn)行預(yù)處理操作。首先,通過(guò)調(diào)用LoadData函數(shù)加載數(shù)據(jù)集。在LoadData函數(shù)中,遍歷了各個(gè)類別的圖像文件夾,讀取圖像并將其轉(zhuǎn)換為PIL圖像格式。然后,將圖像添加到X列表中,將對(duì)應(yīng)的標(biāo)簽添加到Y(jié)列表中。接下來(lái),創(chuàng)建了一個(gè)MushroomDataset類實(shí)例,并傳入X和Y作為參數(shù)。在MushroomDataset類中,定義了__len__方法返回?cái)?shù)據(jù)集的長(zhǎng)度,以及__getitem__方法用于獲取指定索引位置的圖像數(shù)據(jù)和標(biāo)簽。同時(shí),在數(shù)據(jù)預(yù)處理階段,采用了一系列的圖像轉(zhuǎn)換操作,包括調(diào)整大小、填充、裁剪、隨機(jī)水平翻轉(zhuǎn)和標(biāo)準(zhǔn)化等。這些操作旨在將原始圖像數(shù)據(jù)轉(zhuǎn)換為模型可接受的格式,并提供更好的輸入特征。模型搭建部分該部分負(fù)責(zé)創(chuàng)建卷積神經(jīng)網(wǎng)絡(luò)(CNN)模型。根據(jù)參數(shù)選擇使用ResNet還是ResNeSt作為基礎(chǔ)模型。對(duì)于ResNet,通過(guò)調(diào)用models.resnet50(pretrained=True)加載預(yù)訓(xùn)練模型,并獲取其全連接層的輸入特征數(shù)量。然后,將全連接層替換為一個(gè)新的線性層,輸出大小設(shè)置為8,以適應(yīng)8個(gè)蘑菇類別的分類任務(wù)。對(duì)于ResNeSt,通過(guò)調(diào)用resnest50(pretrained=False)加載預(yù)訓(xùn)練模型,并同樣修改全連接層的輸出大小為8。這樣就構(gòu)建了相應(yīng)的模型架構(gòu)。訓(xùn)練部分該部分負(fù)責(zé)訓(xùn)練模型。首先,定義了損失函數(shù)和優(yōu)化器。在損失函數(shù)方面,使用了FocalLoss,它是一種解決類別分布不均衡問(wèn)題的損失函數(shù)。在優(yōu)化器方面,選擇了Adam優(yōu)化器來(lái)更新模型參數(shù)。接下來(lái),通過(guò)調(diào)用load_data函數(shù)加載訓(xùn)練數(shù)據(jù)集和測(cè)試數(shù)據(jù)集。在訓(xùn)練過(guò)程中,循環(huán)遍歷每個(gè)epoch,并在每個(gè)epoch內(nèi)執(zhí)行訓(xùn)練。在訓(xùn)練階段,首先將模型設(shè)置為訓(xùn)練模式,然后遍歷訓(xùn)練數(shù)據(jù)集。對(duì)于每批,輸入數(shù)據(jù)和標(biāo)簽都被發(fā)送到GPU或CPU設(shè)備。優(yōu)化器的梯度被清除,然后模型計(jì)算其輸出并使用指定的損失函數(shù)計(jì)算損失。隨后,執(zhí)行向后傳遞以更新模型參數(shù),并記錄訓(xùn)練準(zhǔn)確率和損失值。在訓(xùn)練過(guò)程中,還根據(jù)測(cè)試數(shù)據(jù)集對(duì)模型進(jìn)行評(píng)估。將模型設(shè)置為評(píng)估模式,遍歷測(cè)試數(shù)據(jù)集,計(jì)算預(yù)測(cè)準(zhǔn)確率和損失值,并統(tǒng)計(jì)每個(gè)類別的準(zhǔn)確率。如果當(dāng)前的測(cè)試準(zhǔn)確度大于之前的最佳準(zhǔn)確度,則保留了最佳模型的參數(shù)。評(píng)價(jià)分析這一部分負(fù)責(zé)測(cè)試訓(xùn)練好的模型。在測(cè)試階段,首先將模型設(shè)置為評(píng)估模式。然后遍歷測(cè)試數(shù)據(jù)集,將輸入數(shù)據(jù)和標(biāo)簽發(fā)送到設(shè)備,計(jì)算模型的輸出,并使用損失函數(shù)計(jì)算損失值。同時(shí),統(tǒng)計(jì)預(yù)測(cè)準(zhǔn)確的樣本數(shù)量和總樣本數(shù)量,并記錄測(cè)試準(zhǔn)確率和平均損失值。此外,還根據(jù)類別統(tǒng)計(jì)每個(gè)類別的準(zhǔn)確率,以及整體的準(zhǔn)確率。這些結(jié)果可以評(píng)估模型在新樣本上的性能。卷積神經(jīng)網(wǎng)絡(luò)的野生菌識(shí)別實(shí)現(xiàn)野生菌圖像數(shù)據(jù)集本文采用的野生菌數(shù)據(jù)集為飛漿提供的數(shù)據(jù)集,均為蘑菇圖像。其中訓(xùn)練集包含八類每類包括有50-1600張圖片,共計(jì)5669張,圖5-1為訓(xùn)練數(shù)據(jù)集中的部分野生菌。這些野生菌圖像在比例、形態(tài)和光照方面表現(xiàn)出顯著的差異,同時(shí)顯示了類間的相似性和類內(nèi)的姿勢(shì)差異。圖5-1野生菌訓(xùn)練集數(shù)據(jù)圖像預(yù)處理預(yù)處理操作,包括調(diào)整圖像大小、填充、隨機(jī)裁剪、轉(zhuǎn)換為歸一化等操作。transform_test定義了測(cè)試集的預(yù)處理操作,包括調(diào)整圖像大小、轉(zhuǎn)換為張量和歸一化等操作。在按類別劃分?jǐn)?shù)據(jù)集后,通過(guò)MushroomDataset類創(chuàng)建訓(xùn)練集和測(cè)試集的數(shù)據(jù)集實(shí)例,并將定義好的預(yù)處理操作應(yīng)用于數(shù)據(jù)集實(shí)例中。最后,使用DataLoader類創(chuàng)建訓(xùn)練和測(cè)試的數(shù)據(jù)加載器,以便按批次提供數(shù)據(jù)給模型進(jìn)行訓(xùn)練和測(cè)試。數(shù)據(jù)預(yù)處理過(guò)程的詳細(xì)描述:首先,加載野生菌圖像數(shù)據(jù)集,并根據(jù)類別將圖像進(jìn)行組織。每個(gè)類別的圖像樣本存儲(chǔ)在對(duì)應(yīng)的類別文件夾中。接下來(lái),對(duì)每個(gè)圖像樣本進(jìn)行以下預(yù)處理操作:首先,調(diào)整圖像大小為指定的輸入尺寸,例如384x384像素。這樣可以統(tǒng)一圖像的尺寸,以便于模型的輸入。使用雙線性插值等方法進(jìn)行圖像的調(diào)整,確保圖像質(zhì)量和細(xì)節(jié)不受損失。然后,對(duì)調(diào)整大小的圖像執(zhí)行填充操作。填充操作能夠在圖像周圍添加額外的圖像,以增加圖像邊界的信息。這有助于模型更好地捕捉到圖像中的特征。接著,進(jìn)行隨機(jī)裁剪操作。通過(guò)隨機(jī)選擇圖像的一部分區(qū)域,并剪切出固定大小的圖像塊。這種隨機(jī)裁剪操作可以增加訓(xùn)練數(shù)據(jù)的多樣性,并使模型對(duì)不同區(qū)域的特征具有更好的感知能力。此外,還進(jìn)行了水平翻轉(zhuǎn)操作。通過(guò)隨機(jī)隨機(jī)水平翻轉(zhuǎn)圖像,能夠提高訓(xùn)練數(shù)據(jù)的多樣性,使模型可以更好地適應(yīng)野生菌形態(tài)的不同方向。最后,將預(yù)處理后的圖像轉(zhuǎn)換為張量,并進(jìn)行歸一化操作。將圖像的像素值縮放到[0,1]的范圍內(nèi),以便更好地適應(yīng)卷積神經(jīng)網(wǎng)絡(luò)的輸入要求。這樣,能夠確保了模型在訓(xùn)練和測(cè)試期間的輸入數(shù)據(jù)之間具有相同的數(shù)據(jù)分布和范圍。如圖6-1處理前后圖像和圖6-2歸一化圖像對(duì)比所示。通過(guò)以上數(shù)據(jù)預(yù)處理操作,野生菌圖像數(shù)據(jù)集被準(zhǔn)備好并可供卷積神經(jīng)網(wǎng)絡(luò)模型使用。這樣的數(shù)據(jù)預(yù)處理過(guò)程有助于提高模型的魯棒性、泛化能力和分類準(zhǔn)確率。同時(shí),通過(guò)增強(qiáng)數(shù)據(jù)集的多樣性,還可以幫助模型更好地適應(yīng)各種野生菌的特征和變化。核心代碼:#數(shù)據(jù)預(yù)處理img_size=args.image_sizetransform_train=transforms.Compose([transforms.Resize(img_size,interpolation=3),#調(diào)整圖像大小transforms.Pad(10),#填充操作transforms.RandomCrop(img_size),#隨機(jī)裁剪transforms.RandomHorizontalFlip(p=0.5),#水平翻轉(zhuǎn)transforms.ToTensor(),#轉(zhuǎn)換為張量transforms.Normalize(mean=[0.485,0.456,0.406],std=[0.229,0.224,0.225])#歸一化操作])transform_test=transforms.Compose([transforms.Resize(img_size),#調(diào)整圖像大小transforms.ToTensor(),#轉(zhuǎn)換為張量transforms.Normalize(mean=[0.485,0.456,0.406],std=[0.229,0.224,0.225])#歸一化操作#按類別劃分?jǐn)?shù)據(jù)集class_indices=np.unique(Y)train_X,train_Y,test_X,test_Y=[],[],[],[]forclass_indexinclass_indices:class_X=X[Y==class_index]class_Y=Y[Y==class_index]class_size=len(class_X)train_size=int(class_size*0.7)train_X.extend(class_X[:train_size])train_Y.extend(class_Y[:train_size])test_X.extend(class_X[train_size:])test_Y.extend(class_Y[train_size:])#創(chuàng)建數(shù)據(jù)集實(shí)例train_dataset=MushroomDataset(train_X,train_Y,transform=transform_train)test_dataset=MushroomDataset(test_X,test_Y,transform=transform_test)#創(chuàng)建數(shù)據(jù)加載器batch_size=args.bstrain_loader=DataLoader(train_dataset,batch_size=batch_size,shuffle=True,num_workers=1)test_loader=DataLoader(test_dataset,batch_size=batch_size,num_workers=1)詢圖6-1處理前后圖像對(duì)比圖6-2歸一化圖像對(duì)比搭建卷積神經(jīng)網(wǎng)絡(luò)模型訓(xùn)練實(shí)現(xiàn)基于卷積神經(jīng)網(wǎng)絡(luò)的野生菌識(shí)別模型的訓(xùn)練過(guò)程。通過(guò)調(diào)整模型結(jié)構(gòu)、優(yōu)化器、損失函數(shù)和超參數(shù),我以不斷改進(jìn)模型的性能,并實(shí)現(xiàn)更準(zhǔn)確和可靠的野生菌識(shí)別。首先,引入所需要的庫(kù)和模塊,包括numpy、pandas、matplotlib等。然后設(shè)置隨機(jī)種子,以保證試驗(yàn)的可重復(fù)性。定義FocalLoss類,用于解決數(shù)據(jù)集類別分布不均衡的問(wèn)題。這個(gè)損失函數(shù)將使用交叉熵?fù)p失和焦點(diǎn)因子來(lái)計(jì)算損失值。然后,加載野生菌圖像數(shù)據(jù)集,并對(duì)圖像進(jìn)行預(yù)處理。預(yù)處理過(guò)程主要包括調(diào)整圖像尺寸、填充、剪切、水平翻轉(zhuǎn)、歸一化等操作,以準(zhǔn)備好輸入到CNN模型中的數(shù)據(jù)。接下來(lái),創(chuàng)建自定義的MushroomDataset類,用于加載和處理圖像數(shù)據(jù)。這個(gè)類將提供__len__和__getitem__方法,以便可以迭代地獲取數(shù)據(jù)樣本。在load_data函數(shù)中,將數(shù)據(jù)集劃分為訓(xùn)練集和測(cè)試集,并創(chuàng)建數(shù)據(jù)加載器。這些數(shù)據(jù)加載器將幫助我們批量加載數(shù)據(jù),并為模型的訓(xùn)練和評(píng)估提供支持。然后,創(chuàng)建CNN模型,選擇使用ResNet或ResNeSt等預(yù)訓(xùn)練模型作為基礎(chǔ)網(wǎng)絡(luò)結(jié)構(gòu)。替換模型的最后一層全連接層,以適應(yīng)我們的具體分類任務(wù)。接下來(lái),我定義了損失函數(shù)的優(yōu)化器。在這里,采用了FocalLoss的損失函數(shù),以解決類別分布不均衡的問(wèn)題。同時(shí),選擇Adam優(yōu)化器來(lái)更新模型的參數(shù)。開(kāi)始訓(xùn)練循環(huán),我歷指定數(shù)量的訓(xùn)練輪次。在每個(gè)訓(xùn)練輪次中,將模型設(shè)置為訓(xùn)練模式,并迭代地獲取訓(xùn)練數(shù)據(jù)樣本。然后,將輸入數(shù)據(jù)傳遞給模型,使用指定的損失函數(shù)計(jì)算輸出和損失值,通過(guò)反向傳播和優(yōu)化技術(shù)對(duì)模型參數(shù)進(jìn)行更新。在整個(gè)訓(xùn)練過(guò)程中,使用測(cè)試集評(píng)估模型的性能。將模型設(shè)置為評(píng)估模式,并使用測(cè)試數(shù)據(jù)進(jìn)行推理。計(jì)算準(zhǔn)確率和損失,并記錄最佳結(jié)果的模型參數(shù)。最后,在每個(gè)訓(xùn)練輪次完成后,輸出訓(xùn)練集和測(cè)試集的準(zhǔn)確度和損失值。這些指標(biāo)可以幫助了解模型的訓(xùn)練進(jìn)展和性能,模型訓(xùn)練的準(zhǔn)確率和損失值如圖7-1所示。核心代碼:#訓(xùn)練deftrain(args):device=torch.device("cuda")#創(chuàng)建模型model=create_model(args)model=model.to(device)#定義損失函數(shù)labels=['Cortinarius','Russula','Suillus','Entoloma','Hygrocybe','Amanita','Boletus','Lactarius']scale=1.1class_weights=torch.tensor([scale,1,1,scale,1,scale,1,scale],dtype=torch.float,device=device,requires_grad=False)criterion=FocalLoss(class_weights)#定義優(yōu)化器optimizer=optim.Adam(model.parameters(),lr=0.001)#加載數(shù)據(jù)train_loader,test_loader=load_data(args)#開(kāi)始訓(xùn)練best_result=0num_epochs=args.max_epochforepochinrange(1,num_epochs+1):#訓(xùn)練階段model.train()train_loss=0.0train_correct=0train_total=0forinputs,labelsintrain_loader:inputs=inputs.to(device)labels=labels.to(device)optimizer.zero_grad()outputs=model(inputs)loss=criterion(outputs,labels)loss.backward()optimizer.step()_,predicted=torch.max(outputs.data,1)train_total+=labels.size(0)train_correct+=(predicted==labels).sum().item()train_loss+=loss.item()*inputs.size(0)train_loss=train_loss/len(train_loader.dataset)train_accuracy=100*train_correct/train_total圖7-1訓(xùn)練準(zhǔn)確率評(píng)價(jià)指標(biāo)分析定義loadData函數(shù)用于加載野生菌圖像數(shù)據(jù)集。在這個(gè)函數(shù)中,遍歷每個(gè)類別的文件夾,并將圖像數(shù)據(jù)和對(duì)應(yīng)的標(biāo)簽保存到X和Y列表中。然后,創(chuàng)建自定義的MushroomDataset類,用于加載和處理圖像數(shù)據(jù)。該類提供了__len__和__getitem__方法,以便可以迭代地獲取數(shù)據(jù)樣本。在load_data函數(shù)中,加載測(cè)試集數(shù)據(jù),并進(jìn)行數(shù)據(jù)預(yù)處理。預(yù)處理步驟主要分為調(diào)整圖像大小、水平翻轉(zhuǎn)、剪切、歸一化等操作,為輸入模型的數(shù)據(jù)做準(zhǔn)備。接著,創(chuàng)建模型,并加載之前訓(xùn)練得到的模型權(quán)重。根據(jù)參數(shù)選擇使用ResNet還是ResNeSt模型,并替換最后一層全連接層以適應(yīng)具體的分類任務(wù)。然后,調(diào)用load_data函數(shù)加載測(cè)試集數(shù)據(jù)并創(chuàng)建數(shù)據(jù)加載器。數(shù)據(jù)加載器可以幫助批量加載數(shù)據(jù),并為模型的測(cè)試提供支持。最后,調(diào)用test函數(shù)進(jìn)行模型的測(cè)試。在測(cè)試階段,將模型設(shè)置為評(píng)估模式,并迭代地獲取測(cè)試數(shù)據(jù)樣本。通過(guò)將輸入數(shù)據(jù)傳遞給模型,計(jì)算輸出并使用torch.max函數(shù)找到預(yù)測(cè)結(jié)果。然后,根據(jù)預(yù)測(cè)結(jié)果和實(shí)際標(biāo)簽計(jì)算準(zhǔn)確率和每個(gè)類別的準(zhǔn)確率,最終測(cè)試結(jié)果為圖8-1所示:核心代碼:deftest(model,test_loader):labels_name=['Cortinarius','Russula','Suillus','Entoloma','Hygrocybe','Amanita','Boletus','Lactarius']device=torch.device("cuda"iftorch.cuda.is_available()else"cpu")model=model.to(device)model.eval()class_correct=[0]*len(labels_name)class_total=[0]*len(labels_name)test_correct=0val_total=0withtorch.no_grad():forinputs,labelsintest_loader:inputs=inputs.to(device)labels=labels.to(device)outputs=model(inputs)_,predicted=torch.max(outputs,1)c=(predicted==labels).squeeze()test_correct+=(predicted==labels).sum().item()val_total+=labels.size(0)foriinrange(len(labels)):label=labels[i]class_correct[label]+=c[i].item()class_total[label]+=1val_accuracy=100*test_correct/val_totalprint(f"Totalaccuracy:{val_accuracy:.2f}%")foriinrange(len(labels_name)):acc=100*class_correct[i]/class_total[i]print(f"Accuracyof{labels_name[i]}:{acc:.2f}%")returnval_accuracyif__name__=='__main__':parser=argparse.ArgumentParser(description="Training")#...args=parser.parse_args()set_seed(1234)do_test(args)圖8-1測(cè)試準(zhǔn)確率模型應(yīng)用首先,加載訓(xùn)練好的模型和測(cè)試數(shù)據(jù)集。通過(guò)解析命令行參數(shù),獲取測(cè)試集數(shù)據(jù)路徑和模型權(quán)重路徑。然后,創(chuàng)建一個(gè)函數(shù)test用于進(jìn)行模型的評(píng)估。在評(píng)估階段,將模型設(shè)置為評(píng)估模式,并使用測(cè)試數(shù)據(jù)加載器迭代地獲取測(cè)試樣本。將測(cè)試樣本輸入到模型中,計(jì)算輸出結(jié)果。通過(guò)與實(shí)際標(biāo)簽進(jìn)行比較,統(tǒng)計(jì)預(yù)測(cè)正確的樣本數(shù)量和每個(gè)類別的準(zhǔn)確率。最后,在主函數(shù)__main__中,調(diào)用test函數(shù)進(jìn)行模型的評(píng)估。輸出總體精度和單個(gè)類的精度。模型評(píng)估的結(jié)果是得到模型在測(cè)試數(shù)據(jù)集上的準(zhǔn)確度,以及各個(gè)類別的準(zhǔn)確度??傮w精度表示模型在所有測(cè)試樣本上的分類精度。每個(gè)類別的準(zhǔn)確率表示該模型對(duì)該類別樣本的分類準(zhǔn)確率。通過(guò)這個(gè)評(píng)估過(guò)程,可以了解模型在野生菌圖像分類任務(wù)上的性能表現(xiàn),判斷模型是否準(zhǔn)確地識(shí)別不同種類的野生菌圖像,如圖9-1預(yù)測(cè)結(jié)果,可以正確識(shí)別。圖9-1預(yù)測(cè)識(shí)別結(jié)論本研究旨在開(kāi)發(fā)一種基于卷積神經(jīng)網(wǎng)絡(luò)(CNN)的野生菌識(shí)別模型,以實(shí)現(xiàn)對(duì)野生菌圖像的自動(dòng)分類。通過(guò)使用深度學(xué)習(xí)技術(shù),我們探索了ResNet和ResNeSt等預(yù)訓(xùn)練模型,并將其應(yīng)用于野生菌分類任務(wù)。針對(duì)數(shù)據(jù)集中類別分布不均衡的問(wèn)題,我們引入了FocalLoss作為損失函數(shù),以解決
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 妊娠期心臟病合并血栓的防治策略
- 妊娠合并心血管疾病的智能管理策略
- 操作系統(tǒng)實(shí)驗(yàn)考試試題及答案
- 妊娠合并SBS腸內(nèi)營(yíng)養(yǎng)管理策略
- 頭頸機(jī)器人術(shù)后心理干預(yù)策略-1
- 大數(shù)據(jù)驅(qū)動(dòng)下的個(gè)性化醫(yī)療實(shí)踐
- 語(yǔ)文考試準(zhǔn)備題庫(kù)及答案
- 初中藝術(shù)考試及答案解析
- 多組學(xué)數(shù)據(jù)整合的系統(tǒng)生物學(xué)視角
- 2026年倉(cāng)儲(chǔ)管理(倉(cāng)儲(chǔ)安全)試題及答案
- 英語(yǔ)高考詞性詞形詞義轉(zhuǎn)換總匯(答案版)
- 關(guān)于要求XX人壽全額退還被誤導(dǎo)保費(fèi)的投訴信
- 《我與地壇》省級(jí)優(yōu)質(zhì)課一等獎(jiǎng)原創(chuàng)課件
- 設(shè)備安裝工程設(shè)備安裝安全技術(shù)交底記錄
- 外研版小學(xué)英語(yǔ)三年級(jí)教學(xué)的上冊(cè)-Module 6《 Unit 1 This is my school.》課件
- ZJ20350鉆機(jī)使用說(shuō)明書(并車)
- 人物速寫經(jīng)典教程課件
- GB/T 4393-2008呆扳手、梅花扳手、兩用扳手技術(shù)規(guī)范
- GB/T 26218.2-2010污穢條件下使用的高壓絕緣子的選擇和尺寸確定第2部分:交流系統(tǒng)用瓷和玻璃絕緣子
- 涉外法治的概念與體系
- 公路工程施工安全監(jiān)督重點(diǎn)課件
評(píng)論
0/150
提交評(píng)論