1. 程式人生 > >yolo v2 訓練自己資料集遇到的問題

yolo v2 訓練自己資料集遇到的問題

1.CUDA Error: out of memory darknet: ./src/cuda.c:36: check_error: Assertio `0' failed.

需要修改所使用的模型cfg檔案中的subdivision的引數。

由subdivisions=8改成subdivisions=64。


subdivision:這個引數很有意思的,它會讓你的每一個batch不是一下子都丟到網路裡。而是分成subdivision對應數字的份數,一份一份的跑完後,在一起打包算作完成一次iteration。這樣會降低對視訊記憶體的佔用情況。如果設定這個引數為1的話就是一次性把所有batch的圖片都丟到網路裡,如果為2的話就是一次丟一半。


http://blog.csdn.net/renhanchi/article/details/71077830?locationNum=11&fps=1

若上述方法不能解決:

導致cuda真正的原因是:

大致意思就是 伺服器的GPU大小為M

tensorflow只能申請N(N<M)

也就是tensorflow告訴你 不能申請到GPU的全部資源 然後就不幹了

解決方法:

找到程式碼中Session

在session定義前 增加

config = tf.ConfigProto(allow_soft_placement=True)

#最多佔gpu資源的70%
gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.7)

#開始不會給tensorflow全部gpu資源 而是按需增加
config.gpu_options.allow_growth = True
sess = tf.Session(config=config)

這樣就沒問題了

其實tensorflow 算是一個比較貪心的工具了

就算用device_id指定gpu 也會佔用別的GPU的視訊記憶體資源 必須在執行程式前

執行 export CUDA_VISIBLE_DEVICES=n(n為可見的伺服器編號)

再去執行python 程式碼.py 才不會佔用別的GPU資源

最近剛開始搞tensorflow 之前都是caffe

這周連續3天被實驗室的人 舉報 佔用過多伺服器資源 真是心累 只要用上面的方法

也就是執行程式碼前 執行 export CUDA_VISIBLE_DEVICES=n

只讓1個或者個別GPU可見 其他GPU看不見 就行了

http://blog.csdn.net/wangkun1340378/article/details/72782593

解決方法:執行ytiny-yolo-voc.cfg不會遇到此類情況,但是使用yolo-voc.cfg等多層模型會遇到cuda error out of memory錯誤,由於本人能力在darknet中並沒有找到上述資料中所說的修改gpu資源分配的地方。故需執行yolo-voc.cfg時先檢視nvidia-smi中檢視gpu使用情況,只有完全gpu完全閒置才可以正常執行。(若有人同時在跑其他程式就不行啦)

2.使用detector recall函式前需要先修改examples/detector.c的程式碼


//改成infrared_val.txt的完整路徑

然後記得一定要make一下

http://blog.csdn.net/hysteric314/article/details/54097845

3.