零、寫在最前面:
2023.01.11 更新:
新增加onnxruntime的1.13.x版本支持。
由于onnxruntime從1.12升級到1.13之后,GetOutputName()這個API變成了GetOutputNameAllocated(),坑就出現(xiàn)在這里,新版api的返回值是一個unique_ptr指針,這就意味著他使用一次時候就失效了,所以在循環(huán)跑模型的時候基本的第二次都報錯了。目前能想到的解決方法就是將其使用std::move()轉(zhuǎn)成shared_ptr,這樣可以在類生命周期之內(nèi)都能存在,不會出現(xiàn)跑第一次就掛掉的情況。
2022.12.19更新:
新增onnxruntime推理實例分割模型,支持動態(tài)推理和批次推理,避免opencv不支持動態(tài)推理的尷尬境地。
2022.11.10更新:
上次的版本更新中,摳圖是在最后的mask中摳圖,而如果目標多并且目標小的話,特征圖中的大部分區(qū)域都是無效數(shù)據(jù),但是卻參與了特征掩碼與特征圖計算mask圖像的過程,在最后的步驟中才摳圖去掉多余的無效數(shù)據(jù)。所以新版本我做了改變,直接從特征圖中摳出有效區(qū)域進行計算,可以節(jié)省一大部分的時間,特別是檢測框多,并且檢測框都比較小的情況下效果更明顯。
2022.10.13更新:
yolov5的實例分割結(jié)果mask從原來的整張圖片的mask改成檢測結(jié)果框內(nèi)mask,節(jié)省內(nèi)存空間和計算的速度,特別是計算crop區(qū)域和分割結(jié)果大于閾值的速度,這里用整張圖的話,圖片越大,檢測結(jié)果越多,速度下降的厲害,也就是作者講的計算分割結(jié)果需要的資源昂貴。貼個領(lǐng)帶的mask結(jié)果示意圖就明顯看出來改動了:左邊是整張圖的mask,可以看到大部分黑色區(qū)域都是無效區(qū)域。
yolov5-seg分割模型目前已經(jīng)發(fā)布了,而yolov7-mask目前由于opencv無法正確的讀取問題,加上這個分支本身需要facebook的第三方庫(這個庫win下不好弄),所以一直沒搞,opencv或者onnxruntime部署還在研究中,先開個貼占坑。
詳細信息請移步:
yolov5-seg:https://github.com/ultralytics/yolov5
yolov7-mask:GitHub - WongKinYiu/yolov7 at mask
一、yolov5-seg
需要注意的是,有些人使用的是最新的torch1.12.x版本,在導(dǎo)出onnx的時候需要將do_constant_folding=True,這句換成false,否者dnn讀取不了onnx文件,而onnxrutime可以,具體原因未知。
torch.onnx.export(
model.cpu() if dynamic else model, # --dynamic only compatible with cpu
im.cpu() if dynamic else im,
f,
verbose=False,
opset_version=opset,
do_constant_folding=False,
input_names=['images'],
output_names=output_names,
dynamic_axes=dynamic or None)
需要運行自己模型的小伙伴,需要跟你你自己的onnx導(dǎo)出情況,修改一些參數(shù),包括,其中_segWidth和_segWidth和_segChannels可以通過https://netron.app/
const int _netWidth = 640; //ONNX圖片輸入寬度
const int _netHeight = 640; //ONNX圖片輸入高度
const int _segWidth = 160;
const int _segHeight = 160;
const int _segChannels = 32;
const int _strideSize = 3; //stride size
其中,output0為目標檢測的輸出口+32通道m(xù)ask的候選特征,與ouput1的mask圖像proto叉乘之后得到縮小的mask圖,再根據(jù)縮放情況進行縮放得到最終的mask圖。
最后貼一張結(jié)果圖:
?yolov5的實例分割模型目前已經(jīng)更新,詳細地址在:GitHub - UNeedCryDear/yolov5-seg-opencv-dnn-cpp: 使用opencv-dnn部署yolov5實例分割模型
測試模型可以自己導(dǎo)出或者用我導(dǎo)出的測試,建議跑自己模型的小伙伴先將demo跑通再去修改成自己的模型。文章來源:http://www.zghlxwxcb.cn/news/detail-530775.html
測試模型:https://download.csdn.net/download/qq_34124780/86745135文章來源地址http://www.zghlxwxcb.cn/news/detail-530775.html
到了這里,關(guān)于2022.09.29更新 c++下面部署yolov5實例分割模型(六)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!