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.