計算機基礎項目實戰7_第1頁
計算機基礎項目實戰7_第2頁
計算機基礎項目實戰7_第3頁
計算機基礎項目實戰7_第4頁
計算機基礎項目實戰7_第5頁
已閱讀5頁,還剩89頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

計算機視覺項目開發實戰

(微課版)項目十工業零件質檢—卷積神經網絡基礎思維導圖學習目標概覽能夠實現CNN模型的基礎搭建與訓練知識目標學習目標素養目標技能目標培養精益求精的工匠精神培養社會責任感與合理使用資源的意識培養科學嚴謹的工作作風能夠優化模型訓練過程與性能能夠應用經典CNN模型與遷移學習熟悉經典CNN模型的改進思路掌握CNN的組成模塊的作用理解深度學習模型訓練的關鍵機制掌握遷移學習的理論與應用方法目錄項目導入知識準備項目拓展項目實施項目鞏固10.1CNN基礎10.2深度學習模型訓練基礎10.3經典CNN模型與改進10.4遷移學習與模型微調PART01項目導入項目導入工業生產的高效性與產品質量把控,已成為國家制造業競爭力的核心要素。工業零件作為各類精密設備的基礎構成單元,每一個缺陷都有可能引發連鎖反應,甚至造成嚴重的生命財產損失。工業智能質檢是突破“卡脖子”技術、保障產業鏈自主可控的核心環節。因此,在構建工業零件缺陷檢測模型時,我們不僅應追求算法在精度與效率上的卓越表現,更需將科學嚴謹、一絲不茍的態度貫穿于數據采集、模型設計、訓練優化與評估驗證的全過程。以“精益求精”的工匠精神編寫每一段代碼PART02知識準備知識準備—CNN基礎10.1.1卷積層卷積運算原理卷積層的核心是卷積核(濾波器),它在輸入圖像上滑動并進行加權求和,提取局部特征。卷積運算公式如下:其中:表示輸出特征在位置的值。表示輸入特征圖(或輸入圖像)。表示卷積核。表示卷積核的大小。表示偏置項。知識準備—CNN基礎10.1.1卷積層卷積運算原理圖10-1展示了卷積運算的具體過程。其中,輸入特征圖的大小為3×3,卷積核的大小為2×2,輸出特征圖的大小為2×2。藍色背景部分表示一次卷積運算,結果為0×0+1×1+3×2+4×3=19。圖10-1卷積運算知識準備—CNN基礎10.1.1卷積層卷積核大小與步長根據圖10-1的卷積運算過程可以看出,當卷積核大于1×1時,經過卷積之后,輸出特征圖小于輸入特征圖。按照這樣的方式經過多層卷積之后,輸出特征圖將會遠小于輸入特征圖,造成輸入特征圖的邊界信息大量丟失。為有效解決該問題,通常采用在輸入特征圖邊界填充元素(如填充元素0)的方式,如圖10-2所示。圖10-2填充操作知識準備—CNN基礎10.1.1卷積層卷積核大小與步長卷積運算中的步長指的是卷積核每次移動的元素個數(通常為1),步長越大,得到的輸出特征圖越小。圖10-3展示的是步長為3的卷積運算過程,將大小為5×5的輸入特征圖,經過步長為3,卷積核大小為2×2的卷積運算之后,得到一個大小為2×2的輸出特征圖,圖中的不同顏色表示每次卷積運算對應位置的卷積結果。圖10-3步長為3的卷積運算知識準備—CNN基礎10.1.1卷積層特征圖與感受野特征圖(FeatureMap)是每層卷積的輸出結果。卷積核在輸入特征圖上滑動時,在每個位置都會計算一個加權和,最終得到一個新的二維矩陣,這個矩陣就被稱為輸出特征圖。輸入特征圖經過不同卷積核,可以生成多個輸出特征圖,每個輸出特征圖旨在捕捉圖像的某一類特征(如水平邊緣、垂直邊緣、斑點、紋理等)。感受野(ReceptiveField)指的是輸出特征圖的某個元素在輸入特征圖上對應的區域大小,即當前輸出特征圖的一個元素值是由前一層輸入特征圖的范圍決定的。在單個卷積層中,感受野等于卷積核的大小。當網絡層數不斷增加時,感受野會逐層疊加和擴大。隨著網絡層數的增加,特征圖中每個元素的感受野將逐漸覆蓋整幅圖像。知識準備—CNN基礎10.1.1卷積層—案例【例10-1】使用PyTorch構建一個包含單個卷積層的簡單模型,并查看輸入特征圖、卷積核和輸出特征圖的元素值及其形狀。根據題目要求,編寫代碼如下:知識準備—CNN基礎10.1.1卷積層—案例【例10-1】使用PyTorch構建一個包含單個卷積層的簡單模型,并查看輸入特征圖、卷積核和輸出特征圖的元素值及其形狀。運行上述程序,輸出結果如下:知識準備—CNN基礎10.1.2池化層平均池化層池化層主要用于對特征圖進行下采樣,降低數據維度和參數量,同時提高模型的平移不變性。它通過一個固定大小的窗口在輸入特征圖上滑動,遍歷其所有位置并分別輸出一個值。平均池化(AveragePooling)層會輸出特征圖中滑動窗口內的平均值,平均池化操作如圖10-4所示。圖10-4平均池化操作知識準備—CNN基礎10.1.2池化層最大池化層最大池化(MaxPooling)層會輸出特征圖中滑動窗口內的最大值,最大池化操作如圖10-5所示。圖10-5最大池化操作知識準備—CNN基礎10.1.2池化層—案例【例10-2】使用PyTorch分別演示平均池化和最大池化操作。根據題目要求,編寫代碼如下:知識準備—CNN基礎10.1.2池化層—案例【例10-2】使用PyTorch分別演示平均池化和最大池化操作。運行上述代碼,輸出如下結果:知識準備—CNN基礎10.1.3激活函數ReLU激活函數激活函數是神經網絡中引入非線性特性的關鍵,使模型能夠擬合復雜的非線性關系。ReLU激活函數具有簡單高效、計算開銷小等特點,能夠緩解梯度消失問題,是目前在CNN中最常用的激活函數之一。當輸入為負值和0時,該函數輸出0,當輸入為正值時該函數輸出結果保持線性增長,其圖像如圖10-6所示,定義如下:圖10-6ReLU激活函數圖像知識準備—CNN基礎10.1.3激活函數LeakyReLU激活函數LeakyReLU激活函數通過在負區間保留一個很小的斜率,以解決ReLU激活函數容易出現的“神經元死亡”問題,函數圖像如圖10-7所示。它適合在深度網絡或稀疏特征學習任務中使用,其定義如下:圖10-7LeakyReLU激活函數圖像知識準備—CNN基礎10.1.3激活函數Softmax激活函數Softmax激活函數將一組實數映射為概率分布(所有輸出非負且和為1),常用于分類任務的輸出層,能直接得到各類別的概率,其定義如下:知識準備—CNN基礎10.1.3激活函數—案例【例10-3】使用PyTorch分別演示ReLU、LeakyReLU和Softmax這3種激活函數的使用方法和輸出結果。根據題目要求,編寫代碼如下:知識準備—CNN基礎10.1.3激活函數—案例【例10-3】使用PyTorch分別演示ReLU、LeakyReLU和Softmax這3種激活函數的使用方法和輸出結果。運行上述代碼,輸出如下結果:知識準備—CNN基礎10.1.4全連接層與輸出層—案例全連接層位于CNN的后端,用于將執行卷積和池化操作提取的特征映射到分類空間。輸出層通常結合Softmax激活函數,將最終結果轉化為類別概率,實現具體的識別或分類任務。源代碼地址文件

ex10-4.py見教材配套代碼,路徑如下:src/proj10/ex10-4.py根據題目要求,編寫代碼如下:【例10-4】使用PyTorch構建一個簡單的CNN分類模型,模型中包含卷積層、激活函數、最大池化層、全連接層和輸出層。知識準備—CNN基礎10.1.4全連接層與輸出層—案例【例10-4】使用PyTorch構建一個簡單的CNN分類模型,模型中包含卷積層、激活函數、最大池化層、全連接層和輸出層。運行上述代碼,輸出如下結果:前向傳播(ForwardPropagation)指的是輸入數據依次經過神經網絡的各層(卷積層、池化層、全連接層等),逐步計算出輸出結果的過程。例如,在工業零件質檢中,對輸入的零件圖像進行前向傳播,最終得到“合格/不合格”的預測概率。反向傳播(Backpropagation)指的是基于鏈式法則的梯度計算方法,用于將預測結果與真實標簽的差異(損失)逐層傳回網絡,并更新卷積核權重和偏置參數。通過反復的前向與反向傳播迭代,模型不斷減小誤差,從而學會自動識別零件缺陷。知識準備—深度學習模型訓練基礎10.2.1前向傳播與反向傳播知識準備—深度學習模型訓練基礎10.2.1前向傳播與反向傳播—案例【例10-5】使用PyTorch構建一個簡單的線性模型,并輸出前向傳播和反向傳播的梯度值。根據題目要求,編寫代碼如下:知識準備—深度學習模型訓練基礎10.2.1前向傳播與反向傳播—案例【例10-5】使用PyTorch構建一個簡單的線性模型,并輸出前向傳播和反向傳播的梯度值。運行上述代碼,輸出如下結果:知識準備—深度學習模型訓練基礎10.2.2損失函數均方誤差損失函數是衡量模型預測結果與真實標簽之間差異的指標,它為模型的參數更新提供了方向。均方誤差(MeanSquareError,MSE)計算預測值與真實值之間差的平方并取平均。該損失函數適用于回歸任務,能反映整體誤差大小,對離群點敏感,誤差大的樣本會被放大。MSE損失函數的定義如下:其中:表示樣本總數。表示第個樣本的真實值(GroundTruth)。表示第個樣本的預測值(模型的輸出值)。知識準備—深度學習模型訓練基礎10.2.2損失函數平均絕對誤差平均絕對誤差(MeanAbsoluteError,MAE)計算預測值與真實值之差的絕對值并取平均。MAE適用于回歸任務。相比MSE,MAE對離群點不那么敏感,但在零點處不可導(實際訓練中通常用次梯度或平滑替代)。該損失函數的定義如下:知識準備—深度學習模型訓練基礎10.2.2損失函數Huber損失Huber損失(HuberLoss)在誤差較小時使用平方項(類似MSE,梯度穩定),誤差較大時使用線性項(類似MAE,抑制離群點影響)。該損失函數常用于魯棒回歸,其定義如下:其中:表示分段閾值(超參數),用于控制從平方懲罰到線性懲罰的切換位置。知識準備—深度學習模型訓練基礎10.2.2損失函數交叉熵損失交叉熵損失用于度量預測的概率分布與真實分布之間的差異。該損失函數常用于分類任務,能有效區分不同類別。當預測概率與真實標簽差距大時,損失值增幅顯著,從而顯著推動模型參數的調整。該損失函數的定義如下:其中:表示類別總數。知識準備—深度學習模型訓練基礎10.2.2損失函數焦點損失焦點損失常用于類別極不平衡的分類任務(如目標檢測)。它會降低“容易樣本”(置信度較高)的損失權重,從而讓模型更關注“難樣本”(置信度較低)。該損失函數的定義如下:其中:表示樣本對真實類別的預測概率。表示類別平衡系數。表示聚焦因子(時更強調難樣本)。知識準備—深度學習模型訓練基礎10.2.2損失函數—案例源代碼地址文件

ex10-6.py見教材配套代碼,路徑如下:src/proj10/ex10-6.py【例10-6】使用PyTorch分別計算上述5種損失。根據題目要求,編寫代碼如下:知識準備—深度學習模型訓練基礎10.2.2損失函數—案例【例10-6】使用PyTorch分別計算上述5種損失。運行上述代碼,輸出如下結果:知識準備—深度學習模型訓練基礎10.2.3優化算法SGD隨機梯度下降法(StochasticGradientDescent,SGD)的核心思想是每次迭代從訓練集中隨機抽取一個或小批量樣本,計算梯度并更新模型參數。該優化算法具有實現簡單、計算效率高等特點,適合大規模數據訓練。但SGD的更新方向受樣本隨機性影響,可能收斂速度慢或在最優點附近振蕩,因此常配合學習率衰減策略使用。動量SGD動量SGD在SGD的基礎上引入歷史梯度的累積效應,使參數更新具有“慣性”。它能顯著減小振蕩、加速收斂,尤其在復雜曲面或噪聲梯度下更穩定。相比SGD,動量SGD通常能更快達到較小損失,但需要合理設置動量系數,并與學習率衰減策略配合,才能取得更理想的訓練效果。知識準備—深度學習模型訓練基礎10.2.3優化算法NGANesterovAcceleratedMomentum(NAG)是動量SGD的改進版本,其核心思想是在更新前對未來位置進行“前瞻”,再據此修正梯度方向。與動量SGD相比,NAG往往能更早發現方向偏差,使收斂過程更平滑、穩定,在接近最優點時不易過沖。它仍屬于SGD系列,通常與學習率衰減策略配合使用,適合希望保留SGD泛化優勢同時提升收斂效率的場景。AdaGradAdaGrad是一種自適應學習率優化算法,會根據參數在歷史訓練過程中累計的梯度大小來調整其更新步長:使“經常出現大梯度”的參數逐漸降低學習率,使“很少更新、梯度稀疏”的參數保持相對較高的學習率。但其缺點是學習率會不斷衰減,訓練后期可能變得過低,導致更新幾乎停滯。知識準備—深度學習模型訓練基礎10.2.3優化算法RMSPropRMSProp屬于自適應學習率優化算法,會根據近期梯度的變化為不同參數動態調整學習率,從而緩解不同維度梯度尺度差異帶來的訓練不穩定問題。它在非平穩目標、噪聲較大或梯度稀疏的情況下常表現良好,訓練收斂速度較快且不易振蕩。其缺點是超參數仍需調節,且在部分任務上最終泛化效果不一定優于精心設置的SGD系列。AdamAdam(AdaptiveMomentEstimation)在SGD的基礎上引入動量和自適應學習率綜合考慮梯度的一階矩估計(均值)和二階矩估計(方差)。該優化算法的收斂速度快,對不同參數能動態調整學習率,適用于非平穩或稀疏梯度問題。但在某些任務中其容易過快收斂到局部最優,需要配合學習率衰減策略。Adam是目前深度學習中最常用的優化算法之一,廣泛應用于圖像識別、自然語言處理等任務。知識準備—深度學習模型訓練基礎10.2.3優化算法AdamWAdamW是Adam的改進版本,其在權重衰減的實現方式上更為合理,使正則化效果更穩定、泛化性能更可靠。它是Transformer等架構的常用選擇,通常比Adam更不容易出現“收斂速度很快但泛化效果一般”的問題。實際使用中,AdamW仍需要設置合適的學習率、權重衰減系數和調度策略,但整體調參成本較低,適合多數深度學習任務。知識準備—深度學習模型訓練基礎10.2.3優化算法—案例源代碼地址文件

ex10-7.py見教材配套代碼,路徑如下:src/proj10/ex10-7.py【例10-7】分別使用上述優化算法演示模型參數更新前后的變化。根據題目要求,編寫代碼如下:知識準備—深度學習模型訓練基礎10.2.3優化算法—案例【例10-7】分別使用上述優化算法演示模型參數更新前后的變化。根據題目要求,編寫代碼如下:知識準備—深度學習模型訓練基礎10.2.4正則化方法L1正則化正則化方法的核心功能就是降低模型的復雜度、提高其泛化能力,使模型不僅能“記住”訓練數據,還能對新數據進行有效預測。L1正則化通過在損失函數中添加權重的絕對值之和,使很多不重要的權重被壓縮到接近0,從而形成稀疏解。它的直觀效果是“自動做特征選擇”,這對高維、冗余特征較多的問題(如部分表格數據、線性模型)尤其有用。L2正則化L2正則化是一種在損失函數中添加權重的平方和的方法,主要作用是抑制過大權重,使模型更“平滑”,從而降低過擬合的風險。它通常不會產生稀疏解,而是讓權重整體更小、更穩定。在深度學習訓練中其更常見的實現方式是權重衰減,本質上也是限制權重大小。需要注意的是,在自適應學習率優化算法(如Adam)里,把權重的平方和直接加到損失函數里與“權重衰減”的效果并不完全一致。知識準備—深度學習模型訓練基礎10.2.4正則化方法ElasticNetElasticNet將L1正則化的稀疏性和L2正則化的穩定性結合起來,既能促使部分權重變為0(篩選特征),又能避免L1正則化在強相關特征下“隨機選擇某一個”的不穩定現象。ElasticNet在特征相關性很強同時又希望模型稀疏的場景(如高維回歸、表格數據、線性分類)中更有優勢。DropoutDropout正則化方法指的是在訓練過程中,以一定的概率隨機“丟棄”一部分神經元(即令其輸出為0),讓網絡不過度依賴某些特定特征。這相當于在訓練時動態地構建不同的子網絡,提升模型的泛化能力。該方法能夠有效減少神經元之間的“共適應”現象,提高模型的魯棒性。但在測試階段該方法不再“丟棄”神經元,而是使用完整網絡(同時按概率縮放參數,保證數值一致性)。知識準備—深度學習模型訓練基礎10.2.4正則化方法早停機制早停機制不修改模型結構,它是訓練策略級正則化方法,通過監控驗證集指標,當模型在驗證集上的性能在若干輪內不再提升時停止訓練,并回滾到最佳輪次的參數。它的優勢是簡單有效,尤其適合數據量有限、訓練輪數較多的場景,以防止模型繼續擬合噪聲。標簽平滑標簽平滑把one-hot標簽變成“軟分布”,減少模型對正確類別的過度自信,能提高泛化能力并改善校準(Calibration)。它常用于多分類任務,尤其在類別數多、數據噪聲或標注不確定性存在時有效。標簽平滑通常會帶來更穩定的驗證性能,但它也可能降低模型的“極限置信度”,在某些需要非常尖銳決策邊界的任務上可能讓訓練損失下降變慢或影響性能。一般平滑系數取較小值(如0.05~0.1)更穩妥。知識準備—深度學習模型訓練基礎10.2.4正則化方法數據增強數據增強是數據層面的技巧,但在深度學習中其常被當作最強正則化方法之一:通過隨機裁剪、翻轉、顏色抖動、Mixup/CutMix等方式增加數據多樣性,讓模型學到更穩定的判別特征。它的優點是提升效果顯著且“副作用小”,缺點是需要與任務匹配。例如,過強的增強可能破壞類別語義(尤其在細粒度分類、醫學影像分析等場景中),導致欠擬合或性能下降。知識準備—深度學習模型訓練基礎10.2.4正則化方法—案例源代碼地址文件

ex10-8.py見教材配套代碼,路徑如下:src/proj10/ex10-8.py【例10-8】使用PyTorch演示L1正則化、L2正則化、ElasticNet、Dropout正則化方法。根據題目要求,編寫代碼如下:批歸一化(BatchNormalization,BN)是一種對神經網絡中間層的輸入進行標準化處理的技術。它通過將每一層的輸入數據按小批量(mini-batch)進行歸一化,使其均值接近0、方差接近1,從而緩解了深度網絡訓練中的梯度消失和梯度爆炸問題。通常,BN層常用于卷積層或全連接層之后、激活函數之前。總的來說,BN層具有以下特點:知識準備—深度學習模型訓練基礎10.2.5批歸一化加快收斂速度:通過穩定數據分布,模型能在更高學習率下訓練,加快收斂速度。提升穩定性:減少了不同層輸入分布的內部協變量偏移(InternalCovariateShift),訓練過程更加平滑。一定程度防止過擬合:BN在訓練時會引入輕微噪聲(因為批量均值/方差是估計值),具有類似正則化的效果。知識準備—深度學習模型訓練基礎10.2.5批歸一化—案例源代碼地址文件

ex10-9.py見教材配套代碼,路徑如下:src/proj10/ex10-9.py【例10-9】使用PyTorch演示BN方法。根據題目要求,編寫代碼如下:知識準備—經典CNN模型與改進10.3.1LeNet、AlexNetLeNet主要用于手寫體數字識別任務(MNIST數據集)。它是第一個在實際任務中成功應用的CNN模型,奠定了CNN的基本架構。LeNet共包含7層,即兩個卷積層、兩個平均池化層和3個全連接層,其輸入為32×32大小的灰度圖像。卷積層使用5×5的卷積核,步長為1,能夠提取圖像局部的邊緣和紋理特征。平均池化層則通過下采樣減小特征圖尺寸,從而減少參數量。最后的全連接層將特征映射為具體的分類結果。LeNet首次提出了卷積層、池化層和全連接層的組合結構,并通過局部連接和權重共享思想大大降低了網絡模型的計算復雜度,這一設計理念成為后續CNN的重要基礎。知識準備—經典CNN模型與改進源代碼地址文件

ex10-10.py見教材配套代碼,路徑如下:src/proj10/ex10-10.py10.3.1LeNet、AlexNet—案例【例10-10】使用PyTorch實現LeNet模型的架構。根據題目要求,編寫代碼如下:知識準備—經典CNN模型與改進10.3.1LeNet、AlexNetAlexNet在2012年被提出,并在ImageNet大規模視覺識別挑戰賽中取得了遠超傳統方法的成績。相較于LeNet,AlexNet顯著增加了網絡深度,擴大了網絡寬度,并與GPU并行訓練、大規模數據集以及數據增強策略結合,在視覺任務上取得了巨大突破。AlexNet由5個卷積層和3個全連接層構成,其輸入為224×224的彩色圖像。第一個卷積層使用了11×11的大卷積核,并將步長設為4,以快速降低圖像的分辨率,后續卷積層逐漸采用更小的卷積核(5×5或3×3)以提取更精細的特征。激活函數采用ReLU,以加速訓練并緩解梯度消失的問題。訓練模型時加入Dropout層,并且在訓練過程中使用數據增強策略(如裁剪、翻轉、顏色變換等)以防止出現過擬合現象。除此之外,AlexNet引入局部響應歸一化作為輔助機制提高了模型的泛化能力。AlexNet的出現使深度學習在計算機視覺中得到了廣泛應用,成為深度CNN發展的里程碑。知識準備—經典CNN模型與改進源代碼地址文件

ex10-11.py見教材配套代碼,路徑如下:src/proj10/ex10-11.py10.3.1LeNet、AlexNet—案例【例10-11】使用PyTorch實現AlexNet模型的架構。根據題目要求,編寫代碼如下:知識準備—經典CNN模型與改進10.3.2VGGNetVGGNet在2014年提出,它通過實驗驗證了“更深的網絡結構+小卷積核”的設計思路。VGGNet的結構整齊劃一,主要由多個卷積塊堆疊而成,每個卷積塊包含多個3×3的卷積層和一個最大池化層。這樣的設計既保證了有足夠的感受野,又在相同感受野下大幅減少了模型的參數量。以VGG-16為例,該網絡共有16層,最后通過3個全連接層完成分類預測。VGGNet的優點是結構規則、容易理解和實現,并且對細節特征的提取能力很強,因此在遷移學習和下游任務中被廣泛使用。然而,其缺點是參數量和計算量仍然非常龐大,模型推理速度較慢,不適合資源受限或對實時性要求高的應用場景。知識準備—經典CNN模型與改進源代碼地址文件

ex10-12.py見教材配套代碼,路徑如下:src/proj10/ex10-12.py10.3.2VGGNet—案例【例10-12】使用PyTorch實現VGG-16模型的架構。根據題目要求,編寫代碼如下:知識準備—經典CNN模型與改進10.3.3ResNetResNet由何愷明等人在2015年提出,它首次解決了深度網絡的退化問題,即隨著層數增加訓練誤差不減反增的現象。ResNet的核心在于提出了殘差塊(ResidualBlock),通過“殘差連接”(SkipConnection)將輸入直接加到輸出上,使得網絡能夠學習殘差函數而不是直接學習目標映射。這一設計極大地緩解了模型的梯度消失和梯度爆炸問題,使得網絡可以輕松擴展到數十層甚至上百層。典型的ResNet包括卷積層、BN層和ReLU激活函數層,再加上恒等映射的殘差連接。ResNet的出現使超深網絡訓練成為可能,其廣泛應用于圖像識別、檢測與分割等任務,并成為眾多后續網絡模型的基礎。知識準備—經典CNN模型與改進源代碼地址文件

ex10-13.py見教材配套代碼,路徑如下:src/proj10/ex10-13.py10.3.3ResNet—案例【例10-13】使用PyTorch實現ResNet-18模型的架構。根據題目要求,編寫代碼如下:知識準備—經典CNN模型與改進10.3.4GoogleNetGoogLeNet是由Google團隊在2014年提出的深度CNN,并在當年的ImageNet大規模視覺識別挑戰賽中奪冠。GoogLeNet的最大特點是提出了Inception模塊,它通過在同一層中并行使用不同大小的卷積核(如1×1、3×3、5×5)和進行池化操作,從而實現多尺度特征的同時提取。為了避免計算量過大,GoogLeNet在Inception模塊中大量使用1×1的卷積核來進行降維和通道融合,既提高了網絡的表達能力,又有效控制了模型的參數規模。GoogLeNet模型共有22層,比AlexNet和VGGNet的層數多,但參數量卻顯著減少,僅有VGGNet的十分之一左右。此外,GoogLeNet還在中間層引入了輔助分類器,用來緩解梯度消失問題并提升訓練穩定性。這種結構的優勢在于既能捕捉大缺陷特征,也能檢測到細微紋理。GoogLeNet非常適合用于工業零件質檢中存在多尺度缺陷的復雜場景。知識準備—經典CNN模型與改進源代碼地址文件

ex10-14.py見教材配套代碼,路徑如下:src/proj10/ex10-14.py10.3.4GoogleNet—案例【例10-14】使用PyTorch實現GoogLeNet模型的架構。根據題目要求,編寫代碼如下:知識準備—經典CNN模型與改進10.3.5輕量化網絡MobileNet是Google在2017年提出的輕量級CNN,主要面向移動端和嵌入式設備的實時應用場景。MobileNet的核心在于引入了深度可分離卷積(DepthwiseSeparableConvolution),即將傳統卷積分解為逐通道卷積(DepthwiseConvolution)和逐點卷積(PointwiseConvolution)。這種分解策略極大地減少了參數量和計算量,使得模型在保持較好精度的同時能夠在低功耗設備上高效運行。MobileNet模型在設計中還引入了寬度因子和分辨率因子,使得其可以根據實際應用場景的需求在速度與精度之間進行靈活權衡。與MobileNet類似,ShuffleNet也是一種面向輕量化的模型,它在設計中引入了通道分組卷積和通道混洗(ChannelShuffle)操作,使得跨組特征能夠充分融合,從而進一步提升效率。MobileNet和ShuffleNet在保持模型小型化的同時,保證了特征提取的有效性,因此廣泛應用于移動端圖像識別、目標檢測和工業現場質檢等對實時性要求高的任務。知識準備—經典CNN模型與改進源代碼地址文件

ex10-15.py見教材配套代碼,路徑如下:src/proj10/ex10-15.py10.3.5輕量化網絡—案例【例10-15】使用PyTorch實現MobileNetV1模型的架構。根據題目要求,編寫代碼如下:知識準備—經典CNN模型與改進10.3.6現代改進模型ConvNeXt是2022年提出的一種現代CNN模型,它在設計中借鑒了ViT的思想,但依然保持了CNN的基本框架。ConvNeXt對傳統CNN進行了全面的現代化改造:首先,它采用了更大的卷積核(如7×7),提升了全局特征建模能力;其次,殘差塊被重新設計,更加簡單,類似于Transformer中的架構;此外,ConvNeXt在歸一化、激活函數、網絡寬度和深度的分配上也進行了優化,使得網絡在精度和效率上都能與Transformer相媲美。與早期的CNN相比,ConvNeXt在大規模圖像分類任務中表現優異,同時保持了CNN的高效性和易部署性。對工業質檢而言,ConvNeXt代表了CNN發展的新趨勢,它能夠在復雜檢測任務中提供更強的表達能力和更好的魯棒性,為未來工業智能質檢系統的發展提供了新的解決方案。知識準備—經典CNN模型與改進源代碼地址文件

ex10-16.py見教材配套代碼,路徑如下:src/proj10/ex10-16.py10.3.6現代改進模型—案例【例10-16】使用PyTorch實現ConvNeXt-T模型的架構。根據題目要求,編寫代碼如下:知識準備—遷移學習與模型微調10.4.1遷移學習的基本概念在傳統的深度學習任務中,通常需要大量標注數據來訓練模型。但在許多實際應用場景中,數據(比如某種特定零件的缺陷樣本、醫學影像中的罕見病案例)往往有限。使用這些數據直接訓練深度神經網絡不僅容易過擬合,而且訓練成本高昂。遷移學習(TransferLearning)提供了一種有效的解決方案。遷移學習的核心思想是知識的遷移,即將從一個任務中學到的知識(模型參數、特征表示)應用到另一個相關任務中。其背后的邏輯是視覺世界中存在許多共性特征,如邊緣、角點、紋理,這些特征在不同任務間是共享的。知識準備—遷移學習與模型微調10.4.1遷移學習的基本概念CNN的層次結構為遷移學習提供了支持。低層卷積層:通常能學習到一些通用特征,如邊緣、顏色梯度、簡單形狀,這些特征在不同視覺任務中普遍適用。中層卷積層:能夠提取更復雜的模式,比如紋理、局部結構,既有一定通用性,也具備一定的任務相關性。高層卷積層:更貼近具體任務類別,通常能學習到與某一特定任務相關的高級語義特征,因此需要針對新任務進行重新訓練。因此,遷移學習的常見模式是保留低層和中層網絡參數,僅對高層卷積層或全連接層進行調整。這種方式能有效減少對數據量的需求,提升少樣本任務的執行效率。知識準備—遷移學習與模型微調10.4.2預訓練模型加載為了實現遷移學習,我們通常使用在大規模數據集如ImageNet數據集的子集ILSVRC2012(包含1000個類別、超過100萬幅圖像)上預訓練好的模型。這些模型已經學到了豐富的視覺特征,經過適當調整后即可應用到新的任務中。在PyTorch中,torchvision.models模塊提供了多種經典模型的預訓練版本,例如VGGNet、ResNet、DenseNet、MobileNet等,加載方法十分簡便。知識準備—遷移學習與模型微調10.4.2預訓練模型加載—案例【例10-17】使用PyTorch中的torchvision.models模塊實現對VGG-16和ResNet-18預訓練模型的加載。根據題目要求,編寫代碼如下:知識準備—遷移學習與模型微調10.4.2預訓練模型加載—案例運行上述代碼,可以看到網絡的層次化結構。對于用來分類的全連接層,VGG-16的是全連接層(classifier[6]),而ResNet-18的是全連接層(fc)。為了適應新的任務,我們只需替換最后的全連接層,代碼如下:這樣,網絡前幾層依舊保留了從ImageNet學到的通用特征,而新的全連接層則用于新的分類任務。知識準備—遷移學習與模型微調10.4.3微調策略與凍結層選擇固定特征提取器做法:凍結預訓練模型所有卷積層的參數,只訓練新加入的全連接層。適用場景:目標任務數據量極少(例如只有幾百幅圖像)的場景。優缺點:優點是訓練成本低、結果穩定;缺點是模型適應性不足,如果新任務與預訓練任務差異較大,效果可能不佳。在遷移學習中,明白如何選擇“哪些層要凍結,哪些層要訓練”是至關重要的。這一策略取決于目標任務的數據規模和與預訓練任務的相似度,通常包括固定特征提取器、部分解凍和全模型微調。知識準備—遷移學習與模型微調10.4.3微調策略與凍結層選擇部分解凍做法:凍結前幾層,只解凍網絡的高層卷積層和全連接層。適用場景:目標任務數據量中等,且與預訓練任務有一定差異的場景。優缺點:優點是既能利用通用特征,又能讓模型更好地適應新任務,是遷移學習中常用的策略;缺點是模型適應能力有限,仍可能出現過擬合。知識準備—遷移學習與模型微調10.4.3微調策略與凍結層選擇全模型微調做法:對整個預訓練模型進行訓練,權重初始化來自預訓練參數,而不是隨機初始化。適用場景:目標任務數據量相對較大(有數萬幅圖像),或新任務與預訓練任務差異較大的場景。優缺點:適應性最強,能獲得最佳性能,但訓練開銷最大,需要更多數據作為訓練集以避免過擬合。知識準備—遷移學習與模型微調10.4.3微調策略與凍結層選擇3種微調策略的區別如表10-1所示。PART03項目實施項目實施項目任務基于掩模和異或運算的圖像區域加密、解密。任務實現步驟1:圖像基本操作讀取walkbridge.jpeg源圖像,將圖像轉換為單通道灰度圖像,并獲取源圖像尺寸。具體代碼如下:項目實施項目任務構建并訓練一個深度學習模型,實現工業零件缺陷檢測。任務實現步驟1:數據集選擇與預處理本項目可使用以下兩類數據集。公開數據集:如NEUSurfaceDefectDataset(包含鋼材表面6類缺陷)。自定義數據集:自行采集的工業零件圖像,包含“正常樣本”與“缺陷樣本”。項目實施本項目選擇NEUSurfaceDefectDataset數據集,實現工業零件缺陷檢測。該數據集是由東北大學提供的一個公開數據集,用于熱軋帶鋼(鋼材)表面的缺陷檢測,如圖10-8所示。圖10-8NEUSurfaceDefectDatabase數據集示例步驟1:數據集選擇與預處理項目實施該數據集包含6種典型的鋼材表面缺陷類型,每種缺陷類型各包含300個樣本,總計1800個樣本,其中訓練集包含270個樣本,測試集包含30個樣本,每個樣本均為200像素×200像素大小的灰度圖像。在本項目中,數據集的組織格式如下:步驟1:數據集選擇與預處理項目實施在訓練階段,為加強模型的魯棒性,加入縮放、隨機旋轉、翻轉、顏色擾動等數據增強操作。測試集則保持原始分布,僅進行尺度統一和標準化處理。具體代碼如下:步驟1:數據集選擇與預處理項目實施步驟2:構建并訓練CNN模型使用一個輕量化的CNN模型(類似簡化版VGGNet),適用于中小型數據集的訓練。具體代碼如下:項目實施使用交叉熵損失與Adam優化算法。具體代碼如下:模型訓練的具體代碼如下:源代碼地址文件

train.py見教材配套代碼,路徑如下:src/proj10/project/train.py步驟2:構建并訓練CNN模型項目實施運行上述訓練代碼,可得到如下所示的訓練結果,經過10次的迭代訓練,模型在測試集上可達到93.89%的分類準確率:步驟2:構建并訓練CNN模型項目實施步驟3:模型優化與調參觀察訓練損失曲線,若收斂速度過慢或振蕩,可采用學習率衰減策略。具體代碼如下:在訓練時使用BN以減少過擬合。具體代碼如下:項目實施從零訓練模型(如步驟2)需要大量數據和時間調參。在工業質檢中,缺陷樣本往往有限,使用遷移學習是更高效的優化策略。我們可以加載torchvision中在ImageNet上預訓練好的MobileNetV2。這是一個輕量化的高效模型,適合需要實時檢測的工業場景。然后將基礎模型(特征提取器)的參數凍結(requires_grad=False),使其在訓練中不被更新,以保留其通用的特征提取能力。接著,將MobileNetV2原本用于ImageNet分類的分類頭(1000類)替換為本

溫馨提示

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

最新文檔

評論

0/150

提交評論