traitlets.dlink
時(shí)間:2022-03-16 16:24:01 | 來(lái)源:行業(yè)動(dòng)態(tài)
時(shí)間:2022-03-16 16:24:01 來(lái)源:行業(yè)動(dòng)態(tài)
((camera, 'value'), (image, 'value'), transform=bgr8_to_jpeg)
執(zhí)行這個(gè)階段代碼之后,下面應(yīng)該會(huì)出現(xiàn)如下圖左方的顯示框,試著在鏡頭前晃動(dòng)手,看看畫面內(nèi)容十分產(chǎn)生變化?顯示框右邊與下方分別出現(xiàn) blocked 與 speed 兩個(gè)滑塊,就是前面代碼所建立的小工具。
由于后面會(huì)使用到這個(gè) speed 滑塊對(duì)Jetbot進(jìn)行速度調(diào)整,并且我們也希望能實(shí)時(shí)觀察到攝像頭的畫面,因此建議用鼠標(biāo)在畫面上點(diǎn)擊右鍵,點(diǎn)選上圖右方 Create New View for Output 去創(chuàng)建另一個(gè)獨(dú)立輸出框,然后進(jìn)行位置調(diào)整如下圖,這樣就方便后續(xù)的操作。
- 將控制元件與網(wǎng)絡(luò)模型、機(jī)電控制進(jìn)行結(jié)合:
這是整個(gè)應(yīng)用中最核心的整合與計(jì)算過(guò)程,雖然代碼量不多,但信息量卻非常大,現(xiàn)在將這部分切割成幾個(gè)小塊來(lái)進(jìn)行說(shuō)明。
- 獲取圖像進(jìn)行識(shí)別:
| def update(change):
x = change['new']
x = preprocess(x)
y = model(x)
。。。
update({'new': camera.value})
|
- 這里首先定義 update(change),在最下方用update()進(jìn)行調(diào)用。
- 在 update({'new': camera.value}) 里使用{key:value}對(duì)的方式,將camera.value圖像內(nèi)容透過(guò)change['new']傳給x變量;
- 將x變量傳入進(jìn)行前面定義的preprocess()格式轉(zhuǎn)換與正規(guī)化處理;
- y是model(x)推理計(jì)算所得出來(lái)blocked與free兩個(gè)類的個(gè)別置信度,例如為[-0.9425, 0.4077];
- 將置信度轉(zhuǎn)換成[0,1]范圍的值:
| y = F.softmax(y, dim=1)
prob_blocked = float(y.flatten()[0])
blocked_slider.value = prob_blocked
|
- 這里調(diào)用torch.nn.functional.softmax函數(shù),