2

這個問題已被部分詢問herehere沒有跟進,所以也許這不是問這個問題的地點,但我已經想出了更多的信息,我希望能得到這些答案的問題。Tensorflow對象檢測訓練被破壞,資源匱乏?

我一直在試圖在大約1k張照片上自己的庫上訓練object_detection。我一直在使用提供的管道配置文件「ssd_inception_v2_pets.config」。 我相信,我已經正確設置了培訓數據。該計劃似乎開始訓練很好。當它無法讀取數據時,它會以錯誤提醒,我解決了這個問題。

我的train_config設置如下,雖然我已經改變了一些數字,以試圖讓它運行資源更少。

train_config: { 
    batch_size: 1000 #also tried 1, 10, and 100 
    optimizer { 
    rms_prop_optimizer: { 
     learning_rate: { 
     exponential_decay_learning_rate { 
      initial_learning_rate: 0.04 # also tried .004 
      decay_steps: 800 # also tried 800720. 80072 
      decay_factor: 0.95 
     } 
     } 
     momentum_optimizer_value: 0.9 
     decay: 0.9 
     epsilon: 1.0 
    } 
    } 
    fine_tune_checkpoint: "~/Downloads/ssd_inception_v2_coco_11_06_2017/model.ckpt" #using inception checkpoint 
    from_detection_checkpoint: true 
    data_augmentation_options { 
    random_horizontal_flip { 
    } 
    } 
    data_augmentation_options { 
    ssd_random_crop { 
    } 
    } 
} 

基本上,我認爲正在發生的是計算機資源越來越匱乏非常快,我想知道如果任何人有需要更多的時間來建立一個優化,但使用較少的資源?

或者我錯了爲什麼進程被殺死,有沒有辦法讓我從內核獲得更多的信息呢?

這是我在處理過程中遇到的Dmesg信息。

[711708.975215] Out of memory: Kill process 22087 (python) score 517 or sacrifice child 
[711708.975221] Killed process 22087 (python) total-vm:9086536kB, anon-rss:6114136kB, file-rss:24kB, shmem-rss:0kB 

回答

0

好的,所以在仔細研究之後,嘗試了幾件事情後,問題最終出現在我發佈的Dmesg信息中。

培訓佔用的內存超過了我所擁有的8GB,所以解決方案最終成爲了using Swap的空間,以便增加模型必須提供的內存量。

2

我遇到了和你一樣的問題。實際上,內存的完全使用是由data_augmentation_options ssd_random_crop引起的,所以你可以刪除這個選項並將批量大小設置爲8或更小,即2,4。當我將批量大小設置爲1時,我也遇到了一些由於損失而導致的問題。

另一件事是參數epsilon應該是一個非常小的數字,比如根據「深度學習」一書中的內容,如1e -6。由於epsilon用於避免零分母,但此處的默認值爲1,因此我認爲將它設置爲1是不正確的。

+1

歡迎來到堆棧溢出!我已經對你的答案做了一些小的格式編輯 - 這在社區中是完全正常的,而不是批評。 :) – brichins

1

這是一個問題many people face。有多種建議解決方案:

  • 減少批量大小 - 並不總是相關,特別是如果你在訓練一個GPU(你應該)
  • 提高你的記憶 - 通過添加更多的或使用掉,如你所建議的。但是,如果使用交換注意它比RAM慢10-100倍,所以一切都可能需要更長的時間
  • 最佳:decrease queue sizes - 有人指出,通常這個問題並不直接與模型相關聯,但是與配置。默認的隊列大小有點太大,因爲這些模型在計算量上很大,並且不能高速處理示例。

我相信第三種解決方案是因爲你正在運行的CPU內存(RAM),最適合你的。它不會減慢訓練速度,也不會影響你的模型。

要從問題引述,有我的評語:

的部分在新的配置將是這樣的:

train_input_reader: { tf_record_input_reader { input_path: "PATH_TO_BE_CONFIGURED/pet_train.record" } label_map_path: "PATH_TO_BE_CONFIGURED/pet_label_map.pbtxt" queue_capacity: 500 # change this number min_after_dequeue: 250 # change this number (strictly less than the above) }

您還可以設置這些爲eval_input_reader。對於這一個我使用20, 10train我使用400, 200,雖然我認爲我可以走低。我的培訓需要少於8Gb的RAM。