一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于YOLOv7的關(guān)鍵點模型測評

3D視覺工坊 ? 來源:GiantPandaCV ? 2023-04-03 09:46 ? 次閱讀

【前言】

目前人體姿態(tài)估計總體分為Top-down和Bottom-up兩種,與目標檢測不同,無論是基于熱力圖或是基于檢測器處理的關(guān)鍵點檢測算法,都較為依賴計算資源,推理耗時略長,今年出現(xiàn)了以YOLO為基線的關(guān)鍵點檢測器。玩過目標檢測的童鞋都知道YOLO以及各種變種目前算是工業(yè)落地較多的一類檢測器,其簡單的設(shè)計思想,長期活躍的社區(qū)生態(tài),使其始終占據(jù)著較高的話題度。

【演變】

在ECCV 2022和CVPRW 2022會議上,YoLo-Pose和KaPao(下稱為yolo-like-pose)都基于流行的YOLO目標檢測框架提出一種新穎的無熱力圖的方法,類似于很久以前谷歌使用回歸計算關(guān)鍵點的思想,yolo-like-pose一不使用檢測器進行二階處理,二部使用熱力圖拼接,雖然是一種暴力回歸關(guān)鍵點的檢測算法,但在處理速度上具有一定優(yōu)勢。

ac7f1868-d1ab-11ed-bfe3-dac502259ad0.png

kapao

去年11月,滑鐵盧大學(xué)率先提出了 KaPao:Rethinking Keypoint Representations: Modeling Keypoints and Poses as Objects for Multi-Person Human Pose Estimation,基于YOLOv5進行關(guān)鍵點檢測,該文章目前已被ECCV 2022接收,該算法所取得的性能如下:

ac880d92-d1ab-11ed-bfe3-dac502259ad0.png

paper:https://arxiv.org/abs/2111.08557 code:https://github.com/wmcnally/kapao

yolov5-pose

今年4月,yolo-pose也掛在了arvix,在論文中,通過調(diào)研發(fā)現(xiàn) HeatMap 的方式普遍使用L1 Loss。然而,L1損失并不一定適合獲得最佳的OKS。且由于HeatMap是概率圖,因此在基于純HeatMap的方法中不可能使用OKS作為loss,只有當(dāng)回歸到關(guān)鍵點位置時,OKS才能被用作損失函數(shù)。因此,yolo-pose使用oks loss作為關(guān)鍵點的損失

ac9a70c2-d1ab-11ed-bfe3-dac502259ad0.png

相關(guān)代碼在https://github.com/TexasInstruments/edgeai-yolov5/blob/yolo-pose/utils/loss.py也可見到:


		

ifself.kpt_label: #Directkptprediction pkpt_x=ps[:,6::3]*2.-0.5 pkpt_y=ps[:,7::3]*2.-0.5 pkpt_score=ps[:,8::3] #mask kpt_mask=(tkpt[i][:,0::2]!=0) lkptv+=self.BCEcls(pkpt_score,kpt_mask.float()) #l2distancebasedloss #lkpt+=(((pkpt-tkpt[i])*kpt_mask)**2).mean()#Trytomakethislossbasedondistanceinsteadofordinarydifference #oksbasedloss d=(pkpt_x-tkpt[i][:,0::2])**2+(pkpt_y-tkpt[i][:,1::2])**2 s=torch.prod(tbox[i][:,-2:],dim=1,keepdim=True) kpt_loss_factor=(torch.sum(kpt_mask!=0)+torch.sum(kpt_mask==0))/torch.sum(kpt_mask!=0) lkpt+=kpt_loss_factor*((1-torch.exp(-d/(s*(4*sigmas**2)+1e-9)))*kpt_mask).mean()

相關(guān)性能如下:

acb05518-d1ab-11ed-bfe3-dac502259ad0.png

yolov7-pose

上個星期,YOLOv7的作者也放出了關(guān)于人體關(guān)鍵點檢測的模型,該模型基于YOLOv7-w6,

acc22c98-d1ab-11ed-bfe3-dac502259ad0.png

目前作者提供了.pt文件和推理測試的腳本,有興趣的童靴可以去看看,本文的重點更偏向于對yolov7-pose.pt進行onnx文件的抽取和推理。

【yolov7-pose + onnxruntime】

首先下載好官方的預(yù)訓(xùn)練模型,使用提供的腳本進行推理:


		

%weigths=torch.load('weights/yolov7-w6-pose.pt') %image=cv2.imread('sample/pose.jpeg') !pythonpose.py

acd08cde-d1ab-11ed-bfe3-dac502259ad0.png

一、yolov7-w6 VS yolov7-w6-pose

  1. 首先看下yolov7-w6使用的檢測頭

ace8c57e-d1ab-11ed-bfe3-dac502259ad0.png

  • 表示一共有四組不同尺度的檢測頭,分別為15×15,30×30,60×60,120×120,對應(yīng)輸出的節(jié)點為114,115,116,117
  • nc對應(yīng)coco的80個類別
  • no表示
  1. 再看看yolov7-w6-pose使用的檢測頭:
acf97266-d1ab-11ed-bfe3-dac502259ad0.png上述重復(fù)的地方不累述,講幾個點:
  • 代表person一個類別
  • nkpt表示人體的17個關(guān)鍵點
二、修改export腳本如果直接使用export腳本進行onnx的抽取一定報錯,在上一節(jié)我們已經(jīng)看到pose.pt模型使用的檢測頭為IKeypoint,那么腳本需要進行相應(yīng)更改:在export.py的這個位置插入:

		#原代碼: fork,minmodel.named_modules(): m._non_persistent_buffers_set=set()#pytorch1.6.0compatibility ifisinstance(m,models.common.Conv):#assignexport-friendlyactivations ifisinstance(m.act,nn.Hardswish): m.act=Hardswish() elifisinstance(m.act,nn.SiLU): m.act=SiLU() model.model[-1].export=notopt.grid#setDetect()layergridexport  #修改代碼: fork,minmodel.named_modules(): m._non_persistent_buffers_set=set()#pytorch1.6.0compatibility ifisinstance(m,models.common.Conv):#assignexport-friendlyactivations ifisinstance(m.act,nn.Hardswish): m.act=Hardswish() elifisinstance(m.act,nn.SiLU): m.act=SiLU() elifisinstance(m,models.yolo.IKeypoint): m.forward=m.forward_keypoint#assignforward(optional) #此處切換檢測頭 model.model[-1].export=notopt.grid#setDetect()layergridexport forward_keypoint在原始的yolov7 repo源碼中有,作者已經(jīng)封裝好,但估計是還沒打算開放使用。使用以下命令進行抽?。?/span>

		pythonexport.py--weights'weights/yolov7-w6-pose.pt'--img-size960--simplifyTrue 抽取后的onnx檢測頭:ad09a2da-d1ab-11ed-bfe3-dac502259ad0.png三、onnxruntime推理onnxruntime推理代碼:

		importonnxruntime importmatplotlib.pyplotasplt importtorch importcv2 fromtorchvisionimporttransforms importnumpyasnp fromutils.datasetsimportletterbox fromutils.generalimportnon_max_suppression_kpt fromutils.plotsimportoutput_to_keypoint,plot_skeleton_kpts device=torch.device("cpu") image=cv2.imread('sample/pose.jpeg') image=letterbox(image,960,stride=64,auto=True)[0] image_=image.copy() image=transforms.ToTensor()(image) image=torch.tensor(np.array([image.numpy()])) print(image.shape) sess=onnxruntime.InferenceSession('weights/yolov7-w6-pose.onnx') out=sess.run(['output'],{'images':image.numpy()})[0] out=torch.from_numpy(out) output=non_max_suppression_kpt(out,0.25,0.65,nc=1,nkpt=17,kpt_label=True) output=output_to_keypoint(output) nimg=image[0].permute(1,2,0)*255 nimg=nimg.cpu().numpy().astype(np.uint8) nimg=cv2.cvtColor(nimg,cv2.COLOR_RGB2BGR) foridxinrange(output.shape[0]): plot_skeleton_kpts(nimg,output[idx,7:].T,3) #matplotlibinline plt.figure(figsize=(8,8)) plt.axis('off') plt.imshow(nimg) plt.show() plt.savefig("tmp") ad1bc08c-d1ab-11ed-bfe3-dac502259ad0.png在這里插入圖片描述推理效果幾乎無損,但耗時會縮短一倍左右,另外有幾個點:
  • image = letterbox(image, 960, stride=64, auto=True)[0] 中stride指的是最大步長,yolov7-w6和yolov5s下采樣多了一步,導(dǎo)致在8,16,32的基礎(chǔ)上多了64的下采樣步長
  • output = non_max_suppression_kpt(out, 0.25, 0.65, nc=1, nkpt=17, kpt_label=True) ,nc 和 kpt_label 等信息在netron打印模型文件時可以看到
  • 所得到的onnx相比原半精度模型大了將近三倍,后續(xù)排查原因
  • yolov7-w6-pose極度吃顯存,推理一張960×960的圖像,需要2-4G的顯存,訓(xùn)練更難以想象

審核編輯 :李倩


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 檢測器
    +關(guān)注

    關(guān)注

    1

    文章

    882

    瀏覽量

    48302
  • 算法
    +關(guān)注

    關(guān)注

    23

    文章

    4684

    瀏覽量

    94394
  • 模型
    +關(guān)注

    關(guān)注

    1

    文章

    3469

    瀏覽量

    49854

原文標題:YOLOv7-Pose嘗鮮 | 基于YOLOv7的關(guān)鍵點模型測評

文章出處:【微信號:3D視覺工坊,微信公眾號:3D視覺工坊】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦
    熱點推薦

    YOLOV7網(wǎng)絡(luò)架構(gòu)解讀

    繼美團發(fā)布YOLOV6之后,YOLO系列原作者也發(fā)布了YOLOV7。
    的頭像 發(fā)表于 11-29 10:00 ?2228次閱讀
    <b class='flag-5'>YOLOV7</b>網(wǎng)絡(luò)架構(gòu)解讀

    在英特爾AI開發(fā)板上用OpenVINO NNCF優(yōu)化YOLOv7

    提高了性能和效率。YOLO算法作為one-stage目標檢測算法最典型的代表,其基于深度神經(jīng)網(wǎng)絡(luò)進行對象的識別和定位,運行速度很快,可以用于實時系統(tǒng)。YOLOv7 是 YOLO 模型系列的下一個演進階段,在不增加推理成本的情況下,大大提高了實時目標檢測精度。
    的頭像 發(fā)表于 01-05 09:29 ?995次閱讀
    在英特爾AI開發(fā)板上用OpenVINO NNCF優(yōu)化<b class='flag-5'>YOLOv7</b>

    yolov7 onnx模型在NPU上太慢了怎么解決?

    我將 yolov7tiny.pt(yolov7-tiny 模型)轉(zhuǎn)換為具有 uint8 權(quán)重的 yolov7tiny.onnx,然后在 i.MX 8M Plus NPU 上運行
    發(fā)表于 04-04 06:13

    無法使用MYRIAD在OpenVINO trade中運行YOLOv7自定義模型怎么解決?

    無法確定如何將 YOLOv7 模型的重量(.pt 文件)轉(zhuǎn)換為OpenVINO?中間表示 (IR) 并推斷有 MYRIAD 的 IR。 分辨率 轉(zhuǎn)換使用此 GitHub* 存儲庫
    發(fā)表于 08-15 08:29

    關(guān)于YOLOU中模型的測試

    整個算法完全是以YOLOv5的框架進行,主要包括的目標檢測算法有:YOLOv3、YOLOv4、YOLOv5、YOLOv5-Lite、
    的頭像 發(fā)表于 08-16 10:24 ?947次閱讀

    深度解析YOLOv7的網(wǎng)絡(luò)結(jié)構(gòu)

    最近,Scaled-YOLOv4的作者(也是后來的YOLOR的作者)和YOLOv4的作者AB大佬再次聯(lián)手推出了YOLOv7,目前來看,這一版的YOLOv7是一個比較正統(tǒng)的YOLO續(xù)作,
    的頭像 發(fā)表于 09-14 11:16 ?7953次閱讀

    在AI愛克斯開發(fā)板上用OpenVINO?加速YOLOv8目標檢測模型

    《在 AI 愛克斯開發(fā)板上用 OpenVINO 加速 YOLOv8 分類模型》介紹了在 AI 愛克斯開發(fā)板上使用 OpenVINO 開發(fā)套件部署并測評 YOLOv8 的分類
    的頭像 發(fā)表于 05-12 09:08 ?1584次閱讀
    在AI愛克斯開發(fā)板上用OpenVINO?加速<b class='flag-5'>YOLOv</b>8目標檢測<b class='flag-5'>模型</b>

    AI愛克斯開發(fā)板上使用OpenVINO加速YOLOv8目標檢測模型

    《在AI愛克斯開發(fā)板上用OpenVINO加速YOLOv8分類模型》介紹了在AI愛克斯開發(fā)板上使用OpenVINO 開發(fā)套件部署并測評YOLOv8的分類
    的頭像 發(fā)表于 05-26 11:03 ?1578次閱讀
    AI愛克斯開發(fā)板上使用OpenVINO加速<b class='flag-5'>YOLOv</b>8目標檢測<b class='flag-5'>模型</b>

    YOLOv7訓(xùn)練自己的數(shù)據(jù)集包括哪些

    ? YOLOv7訓(xùn)練自己的數(shù)據(jù)集整個過程主要包括:環(huán)境安裝—制作數(shù)據(jù)集—模型訓(xùn)練—模型測試—模型推理 一、準備深度學(xué)習(xí)環(huán)境 本人的筆記本電腦系統(tǒng)是:Windows10 首先下載
    的頭像 發(fā)表于 05-29 15:18 ?1330次閱讀
    <b class='flag-5'>YOLOv7</b>訓(xùn)練自己的數(shù)據(jù)集包括哪些

    在AI愛克斯開發(fā)板上用OpenVINO?加速YOLOv8-seg實例分割模型

    《在 AI 愛克斯開發(fā)板上用 OpenVINO 加速 YOLOv8 目標檢測模型》介紹了在 AI 愛克斯開發(fā)板上使用 OpenVINO 開發(fā)套件部署并測評 YOLOv8 的目標檢測
    的頭像 發(fā)表于 06-05 11:52 ?1304次閱讀
    在AI愛克斯開發(fā)板上用OpenVINO?加速<b class='flag-5'>YOLOv</b>8-seg實例分割<b class='flag-5'>模型</b>

    一文徹底搞懂YOLOv8【網(wǎng)絡(luò)結(jié)構(gòu)+代碼+實操】

    從上面可以看出,YOLOv8 主要參考了最近提出的諸如 YOLOX、YOLOv6、YOLOv7 和 PPYOLOE 等算法的相關(guān)設(shè)計,本身的創(chuàng)新不多,偏向工程實踐,主推的還是 ult
    的頭像 發(fā)表于 06-15 17:15 ?1.3w次閱讀
    一文徹底搞懂<b class='flag-5'>YOLOv</b>8【網(wǎng)絡(luò)結(jié)構(gòu)+代碼+實操】

    在AI愛克斯開發(fā)板上用OpenVINO?加速YOLOv8-seg實例分割模型

    《在 AI 愛克斯開發(fā)板上用 OpenVINO 加速 YOLOv8 目標檢測模型》介紹了在 AI 愛克斯開發(fā)板上使用 OpenVINO 開發(fā)套件部署并測評 YOLOv8 的目標檢測
    的頭像 發(fā)表于 06-30 10:43 ?1458次閱讀
    在AI愛克斯開發(fā)板上用OpenVINO?加速<b class='flag-5'>YOLOv</b>8-seg實例分割<b class='flag-5'>模型</b>

    yolov5和YOLOX正負樣本分配策略

    整體上在正負樣本分配中,yolov7的策略算是yolov5和YOLOX的結(jié)合。因此本文先從yolov5和YOLOX正負樣本分配策略分析入手,后引入到YOLOv7的解析中。
    發(fā)表于 08-14 11:45 ?2550次閱讀
    <b class='flag-5'>yolov</b>5和YOLOX正負樣本分配策略

    使用OpenVINO優(yōu)化并部署訓(xùn)練好的YOLOv7模型

    在《英特爾銳炫 顯卡+ oneAPI 和 OpenVINO 實現(xiàn)英特爾 視頻 AI 計算盒訓(xùn)推一體-上篇》一文中,我們詳細介紹基于英特爾 獨立顯卡搭建 YOLOv7 模型的訓(xùn)練環(huán)境,并完成了 YOLOv7
    的頭像 發(fā)表于 08-25 11:08 ?1846次閱讀
    使用OpenVINO優(yōu)化并部署訓(xùn)練好的<b class='flag-5'>YOLOv7</b><b class='flag-5'>模型</b>

    詳細解讀YOLOV7網(wǎng)絡(luò)架構(gòu)設(shè)計

    YOLOV7提出了輔助頭的一個訓(xùn)練方法,主要目的是通過增加訓(xùn)練成本,提升精度,同時不影響推理的時間,因為輔助頭只會出現(xiàn)在訓(xùn)練過程中。
    發(fā)表于 11-27 10:45 ?1041次閱讀
    詳細解讀<b class='flag-5'>YOLOV7</b>網(wǎng)絡(luò)架構(gòu)設(shè)計