[英]how to train a custom object detection model ssd_mobilenet_v1_coco and ssd_inception_v2_coco on google colab tensorflow 1.15.2?
[英]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 種特定的輸入圖像尺寸, 300x300
和512x512
。 然而,它的主干是 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.