在利用tensorflow和keras进行目标检测时,针对多个摄像头进行多进程调用GPU,在执行以下代码
import tensorflow as tf
os.environ["CUDA_VISIBLE_DEVICES"] = '0'
# '''使用tf.GPUOptions限制GPU资源的使用方法一'''
config = tf.ConfigProto()
# config.gpu_options.allow_growth = True # 动态申请显存
config.gpu_options.per_process_gpu_memory_fraction = 0.2 # 占用20%显存
出现UnknownError (see above for traceback): Failed to get convolution algorithm. This is probably because cuDNN failed to initialize, so try looking to see if a warning log message was printed above.的情况
解决办法是将类的实例化过程移到函数内部,针对每个摄像头分别实例化。举例
# yolo = YOLO()
# 类的实例化如果在这里执行,会出现错误
# UnknownError (see above for traceback): Failed to get convolution algorithm.
# 将此行代码移到函数process内部,针对每个进程分别进行类的实例化即可。
def process(position):
yolo = YOLO() # 类的实例化
image = yolo.detect_image(image)
return image
if __name__ == '__main__':
mp.freeze_support()
processAll = []
processAll.append(mp.Process(target=process, args=('1')))
processAll.append(mp.Process(target=process, args=('2')))
processAll.append(mp.Process(target=process, args=('3')))
processAll.append(mp.Process(target=process, args=('4')))
[setattr(p, "daemon", True) for p in processAll]
[p.start() for p in processAll]
[p.join() for p in processAll]