易百納ss928開發板移植自訓練模型跑通yolov5演算法

风止意难平’發表於2024-09-10

ss928平臺移植官方yolov5s演算法參考文章:https://www.ebaina.com/articles/140000017418,這位大佬也開源了程式碼,gitee連結:https://gitee.com/apchy_ll/ss928_yolov5s
本文在參考上述文章的基礎上,將官方yolov5s模型跑通,驗證推理圖片正確,然後移植自訓練的推理模型,在移植過程中遇到了一些問題,解決後記錄一下。
一、模型轉換
自訓練模型是在yolov5-v7.0版本下訓練的,透過export.py將pt模型轉為onnx模型,需要注意的是在執行export.py轉出前,需要將yolo.py檔案裡的foward函式修改為如下:

點選檢視程式碼
def forward(self, x):
     for i in range(self.nl):
        x[i] = self.m[i](x[i])  
        bs, _, ny, nx = x[i].shape  
        x[i] = x[i].view(bs, self.na, self.no, ny, nx).permute(0, 1, 3, 4, 2).contiguous()

      return x
這樣修改的目的是為了讓模型推理輸出三層output,進一步透過後處理解算目標檢測框。目前試過yolov5_62_export_ncnn、yolov5-v6.2、yolov5-v7.0、瑞芯微rk的yolov5程式碼(在官方yolov5-v7.0版本上做了些最佳化)這些版本轉出的onnx模型都相同,可以進行下一步運用atc工具轉換為om模型轉換om模型。

二、模型部署
在參考上述提到的文章裡的程式碼移植自己訓練好的模型,與官方yolov5s不同的是自訓練模型檢測8類目標,需要修改如下幾個地方:
1.模型呼叫路徑
2.模型輸入影像資料路徑
3.後處理程式碼中的檢測類別數量

4.畫圖視覺化時目標標籤型別

經過以上修改編譯完成得到可執行檔案,就可以用自訓練模型推理了。
** 三、推理驗證**
採用一張測試集中的圖片進行推理測試,在板端推理結果如圖1所示,在PC端用python工程推理結果如圖2所示。

圖1 板端推理結果

圖2 PC端推理結果
明顯可看出PC端檢測結果要比板端檢測結果好很多,驗證了pt、onnx模型的推理結果都正常以及板端後處理程式碼無誤後,定位問題出在om模型或輸入推理模型的影像。進一步研究發現在使用act工具轉om模型時會開啟aipp_op配置,預設配置檔案裡是將YUV420SP_U8轉為GRAY灰度圖格式,對應程式碼中將輸入的jpg圖片轉為YUV420SP_U8格式資料再輸入給推理函式。這裡推測自訓練模型效果差是因為輸入的是GRAY格式圖片,訓練的資料集都是jpg圖片,可能不像官方yolov5s用的coco資料集那麼多,導致模型推理GRAY格式影像檢測精度下降。因此將程式碼修改如下:
1.輸入圖片letterbox預處理後不轉為YUV420SP格式,直接儲存為BGR格式的bin檔案,然後再輸入給推理函式。

2.此時儲存的bin影像資料是BGR格式,在onnx轉換om模型時,開啟通道交換開關,將BGR格式轉換為RGB格式。

這裡配置時輸入格式引數是RGB888_U8,其實應該寫BGR的,但是檢視了act工具手冊裡,該引數沒有BGR合適的輸入,最後驗證這裡寫RGB888_U8,只開啟通道交換功能,最後推理結果是正確的,說明BGR格式轉為了RGB格式,aipp裡的其它功能暫時沒有使用過,不確定這樣配置是否會影響其它功能正確使用。
修改後重新編譯推理測試圖片,推理結果如圖所示。

相關文章