背景
我有一個ssd320x320來自tensorflow-zoo的訓練有素的tensorflow 模型。報告非常好,因為火車日志顯示低loss,評估日志表明 9 個測驗影像中有 7 個被成功檢測到。該模型經過訓練GPU并保存為ckpt3.
目標是檢測一個人何時用手“喜歡”。
問題
從最后一個檢查點加載模型效果很好,我使用以下函式實作了檢測:
def test1(self):
# Works great
for img_path in glob.glob("test_dir\*.jpg"):
plt.figure()
plt.imshow(self.get_image_np_with_detections(self._load_image_into_numpy_array(img_path)))
plt.show()
# Note that get get_image_np_with_detections() is the detection @tf.function()
# as it is written in tensorflow documentation, with no changes.
# _load_image() function simply returns np.array(Image.open(path))
成功實作了影像中的目標檢測。問題是我未能檢測到網路攝像頭框架中的物件。test1
從打開我的網路攝像頭的另一個函式中,我為每一幀呼叫相同的檢測函式。此功能失敗,因為螢屏上連一個綠色檢測框都沒有出現。
def open_webcam(self):
# Doesn't show detection green boxes at all
cap = cv2.VideoCapture(0)
while cap.isOpened():
ret, image_np = cap.read()
im_detected = self.get_image_np_with_detections(image_np)
cv2.imshow('object detection', cv2.resize(im_detected, (800, 600)))
# release, destroy...
哪里有問題
在除錯期間,我保存了網路攝像頭的螢屏截圖,同時運行該open_webcam()功能(每秒鐘拍攝一次螢屏截圖1-2)。螢屏截圖被保存到test_dir,然后被處理到test1. 測驗成功,因為所有螢屏截圖都標有綠色檢測框(手狀標志)。
該測驗表明問題與我將幀傳遞給函式的方式有關,因為在該test1方法中已成功檢測到所有幀,但不是實時檢測到的。總結一下:
- 我未能在網路攝像頭框架(實時)中檢測到類似符號。
- 我將框架保存在內部
test_dir,并帶有唯一 ID。 - 在打開
jpg, intest1()(9/10 螢屏截圖)后,我設法檢測到了一個類似的符號。
我已經嘗試...
numpy array沒有運氣就通過幀。- 再次擴展 tf-documentation 中提到的維度,但沒有成功。
注意...
- 我只有 1 個標簽,即
Like(手簽)。 - 我使用了大約 25 張訓練影像和 9 張測驗影像。
- 如前所述,該模型在打開保存的
jpg檔案時效果很好。評估報告看起來不錯。 - PY 是
3.7TF 是2.7CV 是4.5.5。
提前致謝!
uj5u.com熱心網友回復:
TensorFlow 模型最有可能在 RGB 影像上進行訓練,而 cv2 則適用于 BGR。嘗試
image_np = cv2.cvtColor(image_np, cv2.COLOR_BGR2RGB)
此外,模型可能會在標準化影像上進行訓練,因此,如果將 BGR 更改為 RGB 沒有幫助,請嘗試
image_np = image_np / 255.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/408481.html
標籤:
