簡體   English   中英

無法使用 TensorFlow Object 檢測 API 以更大的輸入分辨率訓練 SSD Inception-V2

[英]Can't Train SSD Inception-V2 with Larger Input Resolution with TensorFlow Object Detection API

我希望使用 TensorFlow Object 檢測 API 在分辨率大於 300x300 的自定義數據集上從頭開始訓練 SSD Inception-V2。

我將此作為示例配置文件引用: https://github.com/tensorflow/models/blob/master/research/object_detection/samples/configs/ssd_inception_v2_coco.config

我通過設置: num_classes: 4並將訓練數據路徑指向我的自定義數據集,成功地訓練了一個性能良好的 4 類自定義 model。

但是,輸入分辨率設置為 300x300,其中:

image_resizer {
  fixed_shape_resizer {
    height: 300
    width: 300
  }
}

我的數據集有非常小的對象,我想在訓練期間提高輸入分辨率。

但是,如果我只是將此設置更改為:

image_resizer {
  fixed_shape_resizer {
    height: 640
    width: 640
  }
}

model 根本沒有訓練,損失停滯不前。 我看到其他一些線程討論了更改錨框和自定義 SSD 網絡以與新分辨率兼容。

我已經嘗試了錨框和 model 自定義的幾種配置,但我永遠無法獲得 model 培訓。 (看起來像它的訓練,但損失沒有 go 下降,推斷是垃圾輸出)

有沒有人使用 TensorFlow object 檢測 API 以 300x300 以外的分辨率訓練 SSD Inception-V2,並且可以提供更具體的步驟來執行訓練?

2016 年問世的原始SSD 論文設計了 2 種特定的輸入圖像尺寸, 300x300512x512 然而,它的主干是 Mobilenet(考慮到速度是主要因素)。 您可以嘗試將圖像大小調整為512x512 ,然后進行訓練。 但是,考慮到 repo 將300x300作為默認值,這可能意味着 model 在輸入為該大小而不是其他大小時效果最佳。

然而,還有許多其他模型允許輸入大小為640x640

在 Tensorflow 模型 zoo - 版本 1 中,您有ssd_resnet50_v1 配置文件,在版本 2中,您有許多其他支持640x640的 SSD 和 EfficientDet 變體(但是具有不同的主干)。

通過使用上述模型進行訓練,您可能會得到更好的結果

因為您的數據中有小對象,所以我建議您嘗試以這種方式對 640x640 圖片進行二次采樣;

在此處輸入圖像描述

...其中“黑色 640x640”是您的原始圖像。 當您知道技巧后,您可以輕松地通過隨機位置采樣 300x300 圖像(上面用藍色、綠色、紅色矩形表示)來可靠地展示您的原始圖像,直接兼容 SSD-Inception V2。 也許您可以通過這種方式進行可靠的 object 識別? 訓練和推理。

另一種利用“眾所周知的主干 SSD-Inception V2 的全面智能但僅適用於 300x300 輸入圖像”的方法是按以下方式並行分割圖像; 在此處輸入圖像描述

...這意味着您將為 SSD Inceptions-V2 的並行副本配置 300x300 大小的輸入圖像的 static 位置。 並且,應用簡單的“計數邏輯”,例如計算原始 640x640 圖像中小對象的總數。

我希望這些想法可以幫助您解決最初的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM