欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

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

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

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

使用KeyPointRCNN輕松獲取人體的17個(gè)關(guān)鍵點(diǎn)

OpenCV學(xué)堂 ? 來源:OpenCV學(xué)堂 ? 作者:gloomyfish ? 2022-10-14 17:33 ? 次閱讀

前言

TorchVision支持主流姿態(tài)評(píng)估模型關(guān)鍵點(diǎn)檢測(cè)模型KeyPointRCNN,通過它可以輕松獲取人體的17個(gè)關(guān)鍵點(diǎn),跟OpenPose等模型相比,KeyPointRCNN基于TorchVision框架,遷移學(xué)習(xí)訓(xùn)練簡(jiǎn)單,支持一鍵導(dǎo)出ONNX格式,可以部署到ONNXRUNTIME與OpenVINO,支持C++PythonSDK部署,可以說在易用性上絲毫不差!

14a3e83c-4b9d-11ed-a3b6-dac502259ad0.jpg

KeyPointRCNN模型介紹

Torchvision中KeyPointRCNN已經(jīng)是基于2021年的論文中的最新版本,效果非常好,2021年論文比2019論文最大的改動(dòng)在預(yù)測(cè)的編碼與解碼部分,提出了CIF與CAF兩種新的編碼方法,模型結(jié)構(gòu)圖示如下:

14ebe696-4b9d-11ed-a3b6-dac502259ad0.png

上述一段英文交代的比較清楚,模型輸入就是一張RGB彩色圖像,模型最終的輸出有四個(gè)部分組成,分別是boxes、labels、scores、keypoints,它們的輸出結(jié)構(gòu)如下:

15bba5ca-4b9d-11ed-a3b6-dac502259ad0.png

不是還有最后一個(gè)輸出層沒有解釋嗎,最后一個(gè)輸出層其實(shí)是各個(gè)關(guān)鍵點(diǎn)的得分信息,小于的基本上應(yīng)該都被干掉,不可信。

另外KeyPoint部分輸出是17x3,3表示x、y、v其中v表示是否可見,v為1表示該關(guān)鍵點(diǎn)可見、v為0表示該關(guān)鍵點(diǎn)不可見。 各個(gè)關(guān)節(jié)點(diǎn)的連接順序與編碼坐標(biāo)如下(寫代碼有用的):

27b1581a-4b9d-11ed-a3b6-dac502259ad0.png

27dd11da-4b9d-11ed-a3b6-dac502259ad0.png

KeyPointRCNN推理演示

Torchvision官方提供了預(yù)訓(xùn)練的模型,直接下載之后,通過下面的腳本就可以轉(zhuǎn)換為ONNX格式模型,然后通過ONNXRUNTIME就可以完成推理演示。

第一步,轉(zhuǎn)ONNX格式

相關(guān)腳本如下

model=torchvision.models.detection.keypointrcnn_resnet50_fpn(weights=KeypointRCNN_ResNet50_FPN_Weights.DEFAULT)
model.eval()
x=[torch.rand(3,300,400),torch.rand(3,500,400)]
predictions=model(x)

#optionally,ifyouwanttoexportthemodeltoONNX:
torch.onnx.export(model,x,"keypoint_rcnn.onnx",opset_version=11)
如果不工作,請(qǐng)參考這里的轉(zhuǎn)換腳本修改之: TorchVision對(duì)象檢測(cè)RetinaNet推理演示

第二步:ONNRUNTIME推理演示

這部分跟之前發(fā)過一篇RetinaNet推理文章非常相似,這篇文章的連接如下,代碼只是稍微改了那么一點(diǎn)點(diǎn),增加了KeyPoint部分的可視化,推理部分的代碼如下:
importonnxruntimeasort
importcv2ascv
importnumpyasnp
importtorchvision

coco_names={'0':'background','1':'person','2':'bicycle','3':'car','4':'motorcycle','5':'airplane','6':'bus',
'7':'train','8':'truck','9':'boat','10':'trafficlight','11':'firehydrant','13':'stopsign',
'14':'parkingmeter','15':'bench','16':'bird','17':'cat','18':'dog','19':'horse','20':'sheep',
'21':'cow','22':'elephant','23':'bear','24':'zebra','25':'giraffe','27':'backpack',
'28':'umbrella','31':'handbag','32':'tie','33':'suitcase','34':'frisbee','35':'skis',
'36':'snowboard','37':'sportsball','38':'kite','39':'baseballbat','40':'baseballglove',
'41':'skateboard','42':'surfboard','43':'tennisracket','44':'bottle','46':'wineglass',
'47':'cup','48':'fork','49':'knife','50':'spoon','51':'bowl','52':'banana','53':'apple',
'54':'sandwich','55':'orange','56':'broccoli','57':'carrot','58':'hotdog','59':'pizza',
'60':'donut','61':'cake','62':'chair','63':'couch','64':'pottedplant','65':'bed',
'67':'diningtable','70':'toilet','72':'tv','73':'laptop','74':'mouse','75':'remote',
'76':'keyboard','77':'cellphone','78':'microwave','79':'oven','80':'toaster','81':'sink',
'82':'refrigerator','84':'book','85':'clock','86':'vase','87':'scissors','88':'teddybear',
'89':'hairdrier','90':'toothbrush'}

transform=torchvision.transforms.Compose([torchvision.transforms.ToTensor()])

sess_options=ort.SessionOptions()
#Belowisforoptimizingperformance
sess_options.intra_op_num_threads=24
#sess_options.execution_mode=ort.ExecutionMode.ORT_PARALLEL
sess_options.graph_optimization_level=ort.GraphOptimizationLevel.ORT_ENABLE_ALL
ort_session=ort.InferenceSession("keypointrcnn_resnet50_fpn.onnx",sess_options=sess_options,
providers=['CUDAExecutionProvider'])
src=cv.imread("D:/images/messi_player.jpg")
cv.namedWindow("KeyPointRCNNDetectionDemo",cv.WINDOW_AUTOSIZE)
image=cv.cvtColor(src,cv.COLOR_BGR2RGB)
blob=transform(image)
c,h,w=blob.shape
input_x=blob.view(1,c,h,w)
defto_numpy(tensor):
returntensor.detach().cpu().numpy()iftensor.requires_gradelsetensor.cpu().numpy()

#computeONNXRuntimeoutputprediction
ort_inputs={ort_session.get_inputs()[0].name:to_numpy(input_x)}
ort_outs=ort_session.run(None,ort_inputs)
#(N,4)dimensionalarraycontainingtheabsolutebounding-box
boxes=ort_outs[0]
#labels
labels=ort_outs[1]
#scores
scores=ort_outs[2]
#key_points
multi_key_points=ort_outs[3]

print(boxes.shape,boxes.dtype,labels.shape,labels.dtype,scores.shape,scores.dtype,multi_key_points.shape)

index=0
forx1,y1,x2,y2inboxes:
ifscores[index]>0.5:
cv.rectangle(src,(np.int32(x1),np.int32(y1)),
(np.int32(x2),np.int32(y2)),(140,199,0),2,8,0)
label_id=labels[index]
label_txt=coco_names[str(label_id)]
cv.putText(src,label_txt,(np.int32(x1),np.int32(y1)),cv.FONT_HERSHEY_SIMPLEX,0.75,(0,0,255),1)
kpts=np.int32(multi_key_points[index])

#nose->left_eye->left_ear.(0,1),(1,3)
cv.line(src,(kpts[0][0],kpts[0][1]),(kpts[1][0],kpts[1][1]),(255,255,0),2,8,0)
cv.line(src,(kpts[1][0],kpts[1][1]),(kpts[3][0],kpts[3][1]),(255,255,0),2,8,0)
#nose->right_eye->right_ear.(0,2),(2,4)
cv.line(src,(kpts[0][0],kpts[0][1]),(kpts[2][0],kpts[2][1]),(255,255,0),2,8,0)
cv.line(src,(kpts[2][0],kpts[2][1]),(kpts[4][0],kpts[4][1]),(255,255,0),2,8,0)
#nose->left_shoulder->left_elbow->left_wrist.(0,5),(5,7),(7,9)
cv.line(src,(kpts[0][0],kpts[0][1]),(kpts[5][0],kpts[5][1]),(255,255,0),2,8,0)
cv.line(src,(kpts[5][0],kpts[5][1]),(kpts[7][0],kpts[7][1]),(255,255,0),2,8,0)
cv.line(src,(kpts[7][0],kpts[7][1]),(kpts[9][0],kpts[9][1]),(255,255,0),2,8,0)
#nose->right_shoulder->right_elbow->right_wrist.(0,6),(6,8),(8,10)
cv.line(src,(kpts[0][0],kpts[0][1]),(kpts[6][0],kpts[6][1]),(255,255,0),2,8,0)
cv.line(src,(kpts[6][0],kpts[6][1]),(kpts[8][0],kpts[8][1]),(255,255,0),2,8,0)
cv.line(src,(kpts[8][0],kpts[8][1]),(kpts[10][0],kpts[10][1]),(255,255,0),2,8,0)
#left_shoulder->left_hip->left_knee->left_ankle.(5,11),(11,13),(13,15)
cv.line(src,(kpts[5][0],kpts[5][1]),(kpts[11][0],kpts[11][1]),(255,255,0),2,8,0)
cv.line(src,(kpts[11][0],kpts[11][1]),(kpts[13][0],kpts[13][1]),(255,255,0),2,8,0)
cv.line(src,(kpts[13][0],kpts[13][1]),(kpts[15][0],kpts[15][1]),(255,255,0),2,8,0)
#right_shoulder->right_hip->right_knee->right_ankle.(6,12),(12,14),(14,16)
cv.line(src,(kpts[6][0],kpts[6][1]),(kpts[12][0],kpts[12][1]),(255,255,0),2,8,0)
cv.line(src,(kpts[12][0],kpts[12][1]),(kpts[14][0],kpts[14][1]),(255,255,0),2,8,0)
cv.line(src,(kpts[14][0],kpts[14][1]),(kpts[16][0],kpts[16][1]),(255,255,0),2,8,0)
forx,y,_,inkpts:
cv.circle(src,(int(x),int(y)),3,(0,0,255),2,8,0)

index+=1
cv.imshow("KeyPointRCNNDetectionDemo",src)
cv.waitKey(0)
cv.destroyAllWindows()
測(cè)試與運(yùn)行結(jié)果如下:

39f23f08-4b9d-11ed-a3b6-dac502259ad0.jpg

3a16916e-4b9d-11ed-a3b6-dac502259ad0.jpg

基于3050的卡,GPU推理,速度!沒辦法模型有點(diǎn)大,速度有點(diǎn)慢,需要好N卡加持才能實(shí)時(shí)檢測(cè)!

3a53ac7a-4b9d-11ed-a3b6-dac502259ad0.png







審核編輯:劉清

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

    關(guān)注

    1

    文章

    140

    瀏覽量

    19666
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4811

    瀏覽量

    85077
  • CAF
    CAF
    +關(guān)注

    關(guān)注

    1

    文章

    19

    瀏覽量

    14654

原文標(biāo)題:姿態(tài)評(píng)估之使用KeyPointRCNN關(guān)鍵點(diǎn)檢測(cè)模型輕松搞定!

文章出處:【微信號(hào):CVSCHOOL,微信公眾號(hào):OpenCV學(xué)堂】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    XenD101H | 人體生命存在感應(yīng)參考設(shè)計(jì)

    傳感器特征覆蓋更廣:廣覆蓋兼容掛頂掛壁的檢測(cè)方式精準(zhǔn)探測(cè):具備靜臥及睡眠狀態(tài)的人體生命存在感知輕松部署:自動(dòng)化生成參數(shù)配置,快速適配多樣化場(chǎng)景量產(chǎn)無憂:易用的配套資源,快速導(dǎo)入量
    的頭像 發(fā)表于 12-11 19:16 ?218次閱讀
    XenD101H | <b class='flag-5'>人體</b>生命存在感應(yīng)參考設(shè)計(jì)

    ADS1293獲取人體心電信號(hào),如何實(shí)現(xiàn)隔直?

    1. ADS1293獲取人體心電信號(hào),如何實(shí)現(xiàn)隔直?ECG信號(hào)沒有隔直處理的話,基線會(huì)偏離0電壓位置,并且不同的人在不同的時(shí)間,偏置的電壓不盡相同。 2. ADS1293評(píng)估板手冊(cè)上,波形十分
    發(fā)表于 12-10 08:25

    常見人體姿態(tài)評(píng)估顯示方式的兩種方式

    ,基于Deeplabv3+ 與ResNet34構(gòu)建的一個(gè)人體語義分割模型。 火柴人 主要是基于關(guān)鍵點(diǎn)人體姿態(tài)評(píng)估顯示方式,基于YOLOv8等人體
    的頭像 發(fā)表于 11-11 11:21 ?288次閱讀
    常見<b class='flag-5'>人體</b>姿態(tài)評(píng)估顯示方式的兩種方式

    處理器指令的獲取過程

    微處理器指令的獲取是計(jì)算機(jī)執(zhí)行程序過程中的關(guān)鍵環(huán)節(jié),它決定了微處理器如何對(duì)數(shù)據(jù)和指令進(jìn)行處理。以下將詳細(xì)闡述微處理器指令的獲取過程,包括指令的來源、存儲(chǔ)位置、讀取方式以及相關(guān)的硬件和軟件支持。
    的頭像 發(fā)表于 10-05 15:16 ?463次閱讀

    人體體溫監(jiān)測(cè)傳感器怎么用

    體溫。人體是一個(gè)天然的紅外輻射源,其輻射能量主要集中在3-50微米的波長(zhǎng)范圍內(nèi),其中90%集中在8-14微米。體溫監(jiān)測(cè)傳感器通過接收這些輻射能量,將其轉(zhuǎn)換為電信號(hào),再通過算法處理得到體溫值。 2. 人體體溫監(jiān)測(cè)傳感器的分類 2.
    的頭像 發(fā)表于 09-25 10:23 ?1220次閱讀

    人體紅外傳感器的作用是什么

    人體紅外傳感器是一種利用人體發(fā)出的紅外輻射來檢測(cè)人體存在的傳感器。它在許多領(lǐng)域都有廣泛的應(yīng)用,如安全監(jiān)控、智能照明、自動(dòng)門禁等。以下是關(guān)于人體紅外傳感器的介紹:
    的頭像 發(fā)表于 08-20 09:16 ?1556次閱讀

    超詳細(xì)!晶振電路設(shè)計(jì)的7個(gè)關(guān)鍵因素,小白也能變高手!

    關(guān)鍵組件中的每一個(gè)。什么是晶體振蕩器電路?(振蕩器電路基礎(chǔ)知識(shí))晶體振蕩器電路由放大器和反饋網(wǎng)絡(luò)組成。反饋網(wǎng)絡(luò)從放大器獲取特定輸出,并將其發(fā)送回放大器輸入。拉出來
    的頭像 發(fā)表于 07-13 07:20 ?835次閱讀
    超詳細(xì)!晶振電路設(shè)計(jì)的7<b class='flag-5'>個(gè)</b><b class='flag-5'>關(guān)鍵</b>因素,小白也能變高手!

    EVASH + 云漢芯城戰(zhàn)略合作 購買EVASH Ultra EEPROM,解決采購難題,輕松獲取高性能存儲(chǔ)解決方案!

    EVASH + 云漢芯城戰(zhàn)略合作 購買EVASH Ultra EEPROM,解決采購難題,輕松獲取高性能存儲(chǔ)解決方案!
    的頭像 發(fā)表于 06-26 18:38 ?427次閱讀

    時(shí)間繼電器應(yīng)用的三個(gè)關(guān)鍵點(diǎn)是什么?

    時(shí)間繼電器應(yīng)用的三個(gè)關(guān)鍵點(diǎn):選型、安裝和調(diào)試。 一、時(shí)間繼電器的選型 確定時(shí)間繼電器的類型 時(shí)間繼電器按照工作原理可以分為電磁式、電子式和干簧式等幾種類型。電磁式時(shí)間繼電器具有結(jié)構(gòu)簡(jiǎn)單、價(jià)格低廉、可靠性高等特點(diǎn),
    的頭像 發(fā)表于 06-21 10:00 ?945次閱讀

    開發(fā)者申請(qǐng)Gemini 1.5 Pro API Key:輕松獲取Gemini 1.5 Pro模型API Key并開發(fā)部署AI應(yīng)用

    Pro 開放 API 讓開發(fā)者申請(qǐng)使用!輕松獲取Gemini 1.5 Pro API Key教程:開發(fā)者申請(qǐng)部署ai應(yīng)用。 Gemini Pro 1.5 超過180個(gè)國家或地區(qū)的Gemini API公測(cè)
    的頭像 發(fā)表于 06-10 18:21 ?1786次閱讀
    開發(fā)者申請(qǐng)Gemini 1.5 Pro API Key:<b class='flag-5'>輕松</b><b class='flag-5'>獲取</b>Gemini 1.5 Pro模型API Key并開發(fā)部署AI應(yīng)用

    英碼科技EA500I基于昇騰Mind SDK實(shí)現(xiàn)實(shí)時(shí)人體關(guān)鍵點(diǎn)檢測(cè)

    在教育、體育、安防、交通、醫(yī)療等領(lǐng)域中,實(shí)時(shí)人體關(guān)鍵點(diǎn)檢測(cè)應(yīng)用發(fā)揮著至關(guān)重要的作用,比如在體育訓(xùn)練時(shí),實(shí)時(shí)人體關(guān)鍵點(diǎn)檢測(cè)可以精確、實(shí)時(shí)地捕捉運(yùn)動(dòng)員的動(dòng)作,從而進(jìn)行動(dòng)作分析和優(yōu)化;在安防
    的頭像 發(fā)表于 04-21 17:44 ?1079次閱讀
    英碼科技EA500I基于昇騰Mind SDK實(shí)現(xiàn)實(shí)時(shí)<b class='flag-5'>人體</b><b class='flag-5'>關(guān)鍵</b>點(diǎn)檢測(cè)

    英碼科技EA500I基于昇騰Mind SDK實(shí)現(xiàn)實(shí)時(shí)人體關(guān)鍵點(diǎn)檢測(cè)

    在教育、體育、安防、交通、醫(yī)療等領(lǐng)域中,實(shí)時(shí)人體關(guān)鍵點(diǎn)檢測(cè)應(yīng)用發(fā)揮著至關(guān)重要的作用,比如在體育訓(xùn)練時(shí),實(shí)時(shí)人體關(guān)鍵點(diǎn)檢測(cè)可以精確、實(shí)時(shí)地捕捉運(yùn)動(dòng)員的動(dòng)作,從而進(jìn)行動(dòng)作分析和優(yōu)化;在安防
    的頭像 發(fā)表于 04-20 08:25 ?626次閱讀
    英碼科技EA500I基于昇騰Mind SDK實(shí)現(xiàn)實(shí)時(shí)<b class='flag-5'>人體</b><b class='flag-5'>關(guān)鍵</b>點(diǎn)檢測(cè)

    什么是人體靜電

    深圳比創(chuàng)達(dá)電子EMC|什么是人體靜電
    的頭像 發(fā)表于 04-15 10:58 ?784次閱讀

    【量子計(jì)算機(jī)重構(gòu)未來 | 閱讀體驗(yàn)】第二章關(guān)鍵知識(shí)點(diǎn)

    質(zhì)量的不足 作者著重講解了目前離商用落地最近的量子計(jì)算機(jī)---量子退火計(jì)算機(jī),此類計(jì)算機(jī)在組合最優(yōu)化問題上,能高效地提供較高質(zhì)量的輸出結(jié)果,讓人在解決組合最優(yōu)化的過程中少走彎路。 量子退火最關(guān)鍵點(diǎn)
    發(fā)表于 03-06 23:17

    獲取當(dāng)前日本時(shí)間

    各位大咖,我需要獲取日本時(shí)間。我是在中國時(shí)間的小時(shí)上加了一個(gè)小時(shí),但這個(gè)有缺陷,如果在晚上11點(diǎn)到12點(diǎn)之間,這個(gè)星期幾得變。如果在月末最后一天的晚上11
    發(fā)表于 02-27 10:43