RetinaNet網(wǎng)絡(luò)介紹
2017發(fā)布,實(shí)現(xiàn)了一階段網(wǎng)絡(luò)首次在精度方面超過二階段網(wǎng)絡(luò)的經(jīng)典網(wǎng)絡(luò),作者最大的一個(gè)創(chuàng)新就是在訓(xùn)練損失函數(shù)方面,論文比較了CE、BCE、以及論文提出感知損失函數(shù)(FL),最后說明感知損失可以有效解決一階段網(wǎng)絡(luò)訓(xùn)練中的樣本不平衡現(xiàn)象,從而取得更佳的訓(xùn)練效果。論文中提出的感知損失函數(shù)如下:最終RetinaNet網(wǎng)絡(luò)結(jié)構(gòu)如下:
數(shù)據(jù)集準(zhǔn)備與制作
自己百度收集了一個(gè)無人機(jī)與飛鳥的數(shù)據(jù)集,其中訓(xùn)練集270張圖像,測試集26張圖像。
使用labelImg工具完成標(biāo)注,工具下載地址:
https://gitee.com/opencv_ai/opencv_tutorial_data/tree/master/tools
三:模型訓(xùn)練
制作好數(shù)據(jù)集之后,模型訓(xùn)練就成為一件很簡單事情,基于OpenMV工具軟件,零代碼即可實(shí)現(xiàn)模型訓(xùn)練。運(yùn)行下面界面如下:總計(jì)訓(xùn)練了25個(gè)輪次以后,發(fā)現(xiàn)效果已經(jīng)是相當(dāng)?shù)牟诲e(cuò)了,直接導(dǎo)出ONNX格式RetinaNet模型文件。 把模型轉(zhuǎn)換為ONNX格式,Pytorch是原生支持的,只需要把通過torch.onnx.export接口,填上相關(guān)的參數(shù),然后直接運(yùn)行就可以生成ONNX模型文件。相關(guān)的轉(zhuǎn)換代碼如下:
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'}}
)
運(yùn)行時(shí)候控制臺(tái)會(huì)有一系列的警告輸出,但是絕對(duì)不影響模型轉(zhuǎn)換,影響不影響精度我還沒做個(gè)仔細(xì)的對(duì)比。
模型轉(zhuǎn)換之后,可以直接查看模型的輸入與輸出結(jié)構(gòu),圖示如下:
推理運(yùn)行
推理部分的代碼很簡單,只有三十幾行,Python就是方便使用,這里最需要注意的是輸入圖像的預(yù)處理必須是RGB格式,需要歸一化到0~1之間。對(duì)得到的三個(gè)輸出層分別解析,就可以獲取到坐標(biāo)(boxes里面包含的實(shí)際坐標(biāo),無需轉(zhuǎn)換)。基于OpenMV工具軟件,可以實(shí)現(xiàn)一鍵零代碼推理演示,效果如下:
-
網(wǎng)絡(luò)
+關(guān)注
關(guān)注
14文章
7449瀏覽量
88466 -
無人機(jī)
+關(guān)注
關(guān)注
226文章
10272瀏覽量
178745 -
數(shù)據(jù)集
+關(guān)注
關(guān)注
4文章
1199瀏覽量
24595
原文標(biāo)題:Pytoorch輕松學(xué) – RetinaNet自定義對(duì)象檢測
文章出處:【微信號(hào):CVSCHOOL,微信公眾號(hào):OpenCV學(xué)堂】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評(píng)論請先 登錄
相關(guān)推薦
評(píng)論