2017發布,實現了一階段網絡首次在精度方面超過二階段網絡的經典網絡,作者最大的一個創新就是在訓練損失函數方面,論文比較了CE、BCE、以及論文提出感知損失函數(FL),最后說明感知損失可以有效解決一階段網絡訓練中的樣本不平衡現象,從而取得更佳的訓練效果。論文中提出的感知損失函數如下:
最終RetinaNet網絡結構如下:
數據集準備與制作
自己百度收集了一個無人機與飛鳥的數據集,其中訓練集270張圖像,測試集26張圖像。
使用labelImg工具完成標注,工具下載地址:
https://gitee.com/opencv_ai/opencv_tutorial_data/tree/master/tools
三:模型訓練
制作好數據集之后,模型訓練就成為一件很簡單事情,基于OpenMV工具軟件,零代碼即可實現模型訓練。運行下面界面如下:總計訓練了25個輪次以后,發現效果已經是相當的不錯了,直接導出ONNX格式RetinaNet模型文件。 把模型轉換為ONNX格式,Pytorch是原生支持的,只需要把通過torch.onnx.export接口,填上相關的參數,然后直接運行就可以生成ONNX模型文件。相關的轉換代碼如下:
model=tv.models.detection.retinanet_resnet50_fpn(pretrained=True)
dummy_input=torch.randn(1,3,1333,800)
model.eval()
model(dummy_input)
im=torch.zeros(1,3,1333,800).to("cpu")
torch.onnx.export(model,im,
"retinanet_resnet50_fpn.onnx",
verbose=False,
opset_version=11,
training=torch.onnx.TrainingMode.EVAL,
do_constant_folding=True,
input_names=['input'],
output_names=['output'],
dynamic_axes={'input':{0:'batch',2:'height',3:'width'}}
)
運行時候控制臺會有一系列的警告輸出,但是絕對不影響模型轉換,影響不影響精度我還沒做個仔細的對比。
模型轉換之后,可以直接查看模型的輸入與輸出結構,圖示如下:
推理運行
推理部分的代碼很簡單,只有三十幾行,Python就是方便使用,這里最需要注意的是輸入圖像的預處理必須是RGB格式,需要歸一化到0~1之間。對得到的三個輸出層分別解析,就可以獲取到坐標(boxes里面包含的實際坐標,無需轉換)。基于OpenMV工具軟件,可以實現一鍵零代碼推理演示,效果如下:
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
網絡
+關注
關注
14文章
7518瀏覽量
88632 -
無人機
+關注
關注
228文章
10342瀏覽量
179639 -
數據集
+關注
關注
4文章
1205瀏覽量
24644
原文標題:Pytoorch輕松學 – RetinaNet自定義對象檢測
文章出處:【微信號:CVSCHOOL,微信公眾號:OpenCV學堂】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
如何在android設備上安裝自定義rom
完成后,請執行相同的操作,但不要選擇自定義rom,而是選擇間隙。安裝間隙之前需要使用一些自定義rom,您可以從自定義rom的開發人員網頁上了解,如果他們沒有提及任何相關內容,只需在自定義
蘋果新版Reality Converter應用可自定義3D對象
蘋果在今日向開發人員通報了新版Reality Converter應用的發布,該程序旨在協助用戶在Mac上轉換、查看和自定義USDZ 3D對象。
自定義視圖組件教程案例
自定義組件 1.自定義組件-particles(粒子效果) 2.自定義組件- pulse(脈沖button效果) 3.自定義組件-progress(progress效果) 4.
發表于 04-08 10:48
?14次下載
自定義算子開發
一個完整的自定義算子應用過程包括注冊算子、算子實現、含自定義算子模型轉換和運行含自定義op模型四個階段。在大多數情況下,您的模型應該可以通過使用hb_mapper工具完成轉換并順利部署到地平線芯片上……
評論