防止keras佔滿GPU視訊記憶體 keras yolo

2021-10-02 04:35:56 字數 1942 閱讀 9702

import os

import numpy as np

import keras.backend as k

from keras.layers import input, lambda

from keras.models import model

from keras.optimizers import adam

from keras.callbacks import tensorboard, modelcheckpoint, reducelronplateau, earlystopping

# 指定那幾塊gpu是對於本程式可見的 其實有沒有都沒有什麼區別 tensor預設占用全部的

# 一般用在忽略哪塊gpu 多gpu只能用一塊那種任務

from yolo3.model import preprocess_true_boxes, yolo_body, tiny_yolo_body, yolo_loss

from yolo3.utils import get_random_data

# 多gpu訓練

from keras.utils import multi_gpu_model

import keras.backend.tensorflow_backend as ktf

import tensorflow as tf

os.environ["cuda_visible_devices"] = "1"

def _main():

# 訓練前記得修改yolov3.cfg和model_data/voc_class.txt

annotation_path = '1.14/train/label1.txt' # 這裡是要的由voc生成的txt,裡面包括image位址和框和種類 需修改

log_dir = '1.14/weights/' # 是存放生成好的新的weights的

classes_path = '1.14/train/classes.txt' # 這個我只標記了4類,所以要修改,原來voc是有20類的

anchors_path = '1.14/train/anchors.txt' # 這裡的anchor暫時先不修改(最好從新kmean算anchors)

class_names = get_classes(classes_path)

num_classes = len(class_names)

anchors = get_anchors(anchors_path)

# 修改大小,按照最小的邊來修改

input_shape = (544,960) # multiple of 32, hw 這裡是否需要修改

config = tf.configproto()

config.gpu_options.allow_growth=true #不全部佔滿視訊記憶體, 按需分配

sess = tf.session(config=config)

ktf.set_session(sess)

is_tiny_version = len(anchors)==6 # default setting

if is_tiny_version:

model = create_tiny_model(input_shape, anchors, num_classes,

freeze_body=2, weights_path='model_data/tiny_yolo_weights.h5')

else:

# 這裡要修改,這裡的權重是基礎權重,在這個基礎上繼續訓練

model = create_model(input_shape, anchors, num_classes,

freeze_body=2, weights_path='12.5/weigths/dog_detect_544x960.h5') # make sure you know what you freeze

GPU顯示卡,視訊記憶體位寬

視訊記憶體位寬是顯存在乙個時鐘週期內所能傳送資料的位數,位數越大則瞬間所能傳輸的資料量越大,這是視訊記憶體的重要引數之一。1簡介視訊記憶體位寬是顯存在乙個時鐘週期內所能傳送資料的位數,位數越大則瞬間所能傳輸的資料量越大,這是視訊記憶體的重要引數之一。視訊記憶體頻寬 視訊記憶體頻率x視訊記憶體位寬 8...

GPU視訊記憶體未釋放問題

我們正在使用tensorflow或pytorch寫程式的時候,有時會在控制台將程式殺死,但是有時候程式已經結束了,用nvidia smi也看到程式已經停止,但是gpu還佔著記憶體沒有釋放。這是因為,在使用pytorch設定多執行緒 threads 進行資料讀取 data loader 時,其實是假的...

顯示卡和GPU 視訊記憶體的理解

顯示卡 gpu決定一切,打個比方,你去奇瑞買qq花3w它也是4個輪,卡宴160w也是4個輪,這裡車輪也就相當於視訊記憶體,大家視訊記憶體一樣,奇瑞什麼發動機卡宴什麼發動機?奇瑞絕對跑不到200邁,也就是說gpu的好壞直接決定了你的顯示卡跑多少分。另外視訊記憶體還有位寬問題,就好比卡宴是四驅qq是兩驅...