我目前正在 Tensorflow( ver:1.8 os:Ubuntu MATE16.04) 平臺上構(gòu)建模型。該模型的目的是檢測/匹配人體的關(guān)鍵點。訓(xùn)練時,出現(xiàn)錯誤“沒有任何變量的梯度”,我很難修復(fù)它。他們展示了根據(jù)卷積網(wǎng)絡(luò)生成的哈希碼匹配圖像是可能的。兩張圖片的相似度由它們對應(yīng)的哈希碼之間的漢明距離決定。我認(rèn)為可以開發(fā)一個極輕的模型來對具有“恒定人體主體”和“固定背景”的視頻進(jìn)行實時人體姿態(tài)估計。模型結(jié)構(gòu)01.數(shù)據(jù)來源:來自一個視頻的 3 幅圖像,具有相同的人物主題和相似的背景。每個圖像中的每個人類關(guān)鍵點都被很好地標(biāo)記。其中 2 張圖像將用作“提示源”,最后一張圖像將作為關(guān)鍵點檢測/匹配的目標(biāo)。02.提示:將根據(jù)人體關(guān)鍵點的位置從“提示源”圖像中裁剪 23x23 像素的 ROI。這些 ROI 的中心是關(guān)鍵點。03.卷積網(wǎng)絡(luò)“提示”:簡單的三層結(jié)構(gòu)。前兩層使用 3x3 過濾器按 [2,2] 步幅進(jìn)行卷積。最后一層是在 5x5 輸入上的 5x5 卷積,沒有 padding(相當(dāng)于一個全連接層)這會將 23x23pixel Hint ROI 轉(zhuǎn)換為一個 32 位哈希碼。一個提示源圖像將生成一組 16 個哈希碼。04.“用于目標(biāo)圖像”的卷積網(wǎng)絡(luò): 網(wǎng)絡(luò)與提示網(wǎng)絡(luò)共享smae權(quán)重。但在這種情況下,每個卷積層都有填充。301x301pixel的圖片會變成76x76的“Hash map”05.Hash匹配:我創(chuàng)建了一個名為“l(fā)ocateMin_and_get_loss”的函數(shù)來計算“提示哈?!焙凸D每個點上的哈希碼之間的漢明距離。此函數(shù)將創(chuàng)建一個“距離圖”。具有最小距離值的點的位置將被視為關(guān)鍵點的位置。06.損耗計算:我做了一個函數(shù)“get_total_loss_and_result”來計算16個關(guān)鍵點的總損失。損失是地面實況標(biāo)簽點與模型定位的點之間的歸一化歐幾里德距離。07.建議工作流程:在初始化該模型之前,用戶將從不同角度拍攝目標(biāo)人物主體的兩張照片。圖片將由 OpenPose 或 DeepPose 等最先進(jìn)的模型標(biāo)記,并使用 03 中提到的卷積網(wǎng)絡(luò)從它們生成 Hint Hash。最后視頻流將被模型啟動和處理。08.為什么有“兩套”提示?從不同角度觀察的一個人體關(guān)節(jié)/關(guān)鍵點會有非常不同的外觀。我不想增加神經(jīng)網(wǎng)絡(luò)的維度,而是想通過收集兩個提示而不是一個提示來“欺騙游戲”。我想知道它是否可以提高模型的精度和泛化能力。我遇到的問題:01.“沒有任何變量的梯度”錯誤 (我這篇文章的主要問題):02.“批量”問題:由于其獨特的結(jié)構(gòu),很難使用傳統(tǒng)的占位符來包含多個批次的輸入數(shù)據(jù)。我通過將批號設(shè)置為 3 并手動組合損失函數(shù)的值來修復(fù)它。
添加回答
舉報
0/150
提交
取消