實驗結果
資料集準備
圖片規格統一
為了符合訓練 yolo 模型的參數,我們將所有照片統一 resize 為 352*352 的尺寸,確保模型能夠在統一大小的圖片上進行訓練。
圖片影像調整
在這個階段,我們引入了資料增強的技術,以提升模型的泛化能力。我們嘗試在照片中引入5%的噪音,同時增加5塊佔照片20%大小的遮塊。這樣的處理模擬了實際應用中可能遇到的情況,例如背景中可能存在雜訊或遮擋物。

模型結果之評估比較
我們的專題中,我們針對兩個不同背心類別,綠色背心和紫色背心,進行訓練。在進行模型評估比較時,我們首先研究了相同資料集下不同訓練次數的影響。具體而言,訓練效果會隨著訓練次數的增加而提升
下圖顯示了相同資料集下模型結果的指標函數,其中橫軸代表訓練的 epoch 次數,縱軸則代表對應的指標數據。



但在訓練次數過大時會出現過度擬合(Overfitting)的現象而導致效果下降。
過度擬合(Overfitting)
是指在機器學習模型訓練過程中,模型過分學習訓練數據中的細節和噪聲,從而導致它在新的、未見過的數據上表現不佳的現象。
簡單來說,就是模型變得對訓練數據“太熟悉”,以至於失去了泛化能力,即在其他數據上的應用能力。
在過度擬合的情況下,模型可能在訓練集上表現出色,顯示出很低的錯誤率,但當面對新的數據時,它的表現卻大打折扣。這是因為模型學習到了訓練數據中的一些不具代表性的特征,這些特征並不適用於其他數據。
過度擬合通常發生在模型過於複雜,如參數太多,而可用於訓練的數據相對有限的情況下。為了避免過度擬合,可以採取多種方法,如簡化模型、引入正則化技術、使用更多或更多樣化的訓練數據,或者使用早停技術等。理解和防止過度擬合對於構建能夠良好泛化到新數據的模型至關重要。
1. 過度擬合的特徵:
過度擬合的一個明顯跡象是,當模型在訓練數據上的表現(如損失下降)不斷改善,但在驗證數據上的表現卻停滯不前或變差。這意味著模型可能只是在“記住”訓練數據,而不是學會從數據中概括和學習。
2. 損失曲線分析:
通过观察訓練損失和驗證損失的曲線,可以發現是否存在過度擬合。如果兩條曲線之間的差距逐漸增大,特別是當訓練損失持續下降而驗證損失不降或上升時,這通常表示過度擬合。
3. 解決過度擬合:
為了解決過度擬合,可以採取多種方法,如引入正則化(例如L1或L2正則化)、使用dropout技術、增加數據集的大小和多樣性、或採用早期停止(early stopping)策略等。
4. 適當的模型複雜度:
選擇合適的模型複雜度也很重要。過於複雜的模型容易導致過度擬合,而過於簡單的模型則可能導致欠擬合,即模型無法充分捕捉數據中的模式和關聯性。

最佳的訓練次數應當在模型開始過度擬合之前,這通常是在訓練損失和驗證損失的曲線開始分開的時候,也就是train_loss(紅色)跟val_loss(藍色)之交點。
模型套用至Jetson Nano並進行測試
加裝ssd記憶卡
在進行模型套用至Jetson Nano並進行測試的過程中,我們遇到了Emmc內存空間不足的問題,因此我們選擇額外購買一個SSD,將其安裝在Jetson Nano上,然後將操作系統灌 入SSD中,以擴大存儲空間,確保足夠的容量來運行和儲存模型及相關資源。
Moblienetv3加速
在解決了Emmc空間不足的問題後,但在實際測試YOLOv7模型在Jetson Nano上的性能時,我們發現速度仍然過慢,僅為0.58張/秒,所以我們開始尋找一個更高效的模型,以提高推論速度。我們選擇了由Google開發的MobileNetV3,這是一種輕量級深度神經網絡(DNN)架構,專為移動設備和嵌入式設備上的視覺任務而設計。
MobileNetV3具有倒殘差結構和幾何平均等新特性,這些改進有助於提高模型的效能。倒殘差結構是一種改進的殘差連接結構,用於增強模型性能,而幾何平均的引入則有助於改善模型在不同尺度上的表現。
總的來說,MobileNetV3通常應用於影像分類、目標檢測和語義分割等視覺任務,特別是在資源受限的環境中,例如移動設備和嵌入式系統。我們將這一輕量級模型應用在Jetson Nano上,進行了權重的修改和調整,成功提高了推論速度,使其達到每秒0.14到0.17張的水平,進一步優化了在Jetson Nano上運行模型的效能。
Pwm運作邏輯
脈衝寬度(Pulse-Width)
脈衝寬度(Pulse-Width)是脈衝寬度調製(PWM)信號中,脈衝處於高電位狀態的時間長度。這是控制伺服馬達角度的關鍵參數。在您提供的圖片中,脈衝寬度被用來指定伺服馬達應該旋轉到的位置。
在50Hz的頻率下,整個PWM週期是20ms,這是一個固定的時間範圍,在這個時間範圍內脈衝寬度可以變化。伺服馬達根據脈衝寬度的不同,旋轉到對應的角度。通常情況下,伺服馬達的脈衝寬度範圍是0.5ms到2.5ms:
(1)0度:脈衝寬度通常設為0.5ms,這表示在20ms的週期中,脈衝在一開始的0.5ms內是高電平,在剩餘的19.5ms內是低電平。
(2)90度:脈衝寬度設為1.5ms,意味著在20ms的週期中有1.5ms的時間是高電平。
(3)180度:脈衝寬度設為2.5ms,在週期的前2.5ms內是高電平。
伺服馬達的控制電路會測量這個高電平的持續時間,並將它轉換成旋轉角度。這種方式允許非常精確地控制馬達的位置,因為即使是微小的脈衝寬度變化也會導致馬達角度的變化
Servo 控制


(1) PWM信號與伺服馬達:
PWM信號是通過變化脈衝的寬度來控制伺服馬達的角度。在50Hz的頻率下,一個完整的PWM週期是20毫秒(ms),這意味著每秒有50個這樣的週期。
(2) 脈衝寬度與角度映射:
伺服馬達通常設計為在脈衝寬度介於0.5ms到2.5ms之間時,能夠旋轉0到180度。這個範圍內的每一個脈衝寬度值對應伺服馬達的一個特定角度。
(3) 12位解析度:
為了更精確地控制脈衝寬度,使用了12位的解析度,即4096個不同的脈衝寬度級別。這使得每一位的改變都能對應到細微的角度變化,從而實現更加平滑和精準的控制。
(4)脈衝寬度計算:
在20ms的週期內,每位的時間為20ms除以4096,等於大約4.88微秒。因 此,0.5ms的脈衝寬度相當於約102位,而2.5ms的脈衝寬度則相當於約512位。
(5) 角度到脈衝寬度的轉換:
為了從角度轉換到對應的脈衝寬度,可以將角度除以最大角度(在這個情況下是180度),然後乘以最大脈衝寬度範圍(2ms或者2000微秒)。例如,若要將伺服馬達設定為90度,則90度除以180度,乘以2000微秒,結果為1000微秒,對應的脈衝寬度級別為1000除以4.88,大約為205位。
12位元解析度(212=4096),精度計算如下:
PWM週期: 1/50 sec = 0.02s = 20ms = 20000us
時間解析度:20000 us / 4096 = 4.88us
最大與最小脈寬時間差:2.5ms - 0.5ms = 2ms = 2000us
最大脈寬時間可分的份數:2000us / 4.88us = 410
0-180度的舵機,角度解析度:180度 / 410 = 0.439度
JeJtson Nano搭載伺服馬達進行模擬瞄準
伺服馬達控制之電器訊號及角度的換算調整
在經過實際的測試調整後,我們將距離目標物的x軸差距(diff_x)跟y軸差距(diff_y)轉換成以舊角度為準的正負u角度(每次進行轉動的幅度)進行調整,並設計剁個判斷式進行階段式降速避免過轉。
結合影像辨識並使馬達進行模擬瞄準
在此模擬中我們先不架設水彈槍而是以箭頭來模擬水彈槍瞄準方向
製作機殼以固定馬達、水彈槍
為了將馬達與水彈槍固定,我們以壓克力板進行裁量拼裝
在經過拆解水彈槍後我們發現控制水彈槍發射的是最基本的按鈕,但
考慮到按鈕本身按壓面積太小不易操控,因此我們換成 微動開關並透過jstson nano 操控小型舵機來操控板機
最後將連結機構與馬達連接固定後並與jetson nano作連結



