参考:https://blog.csdn.net/qian1122221/article/details/88579684python
问题描述:
最近在用RFBnet (源码是pytorch的)训练RSNA的比赛数据,除了要修改一点代码支持RSNA的数据集外(打算后续再写个博客),发如今使用dataloader读取数据时,若是设置num_workers为0,也就是用主进程读取数据,模型训练程序运行正常。若是设置num_workers为其余任何一个大于0的整数,也就是使用子进程读取数据时,训练程序会卡住,卡在训练以前,GPU使用率和显存占用率都为0。
docker
解决过程:
因为是多进程就,用print调试大法,定位到是一行opencv代码的问题,在dataloader子类的__getitem__方法里面调用了
.net
image_array = cv2.cvtColor(image_array, cv2.COLOR_GRAY2BGR)
全部子进程的代码都卡在这里了。以前也有遇到过相似的问题,python多进程调用opencv的代码会出现问题。因而就用numpy的concate替代了这个方法
调试
image_array = np.concatenate([image_array,image_array,image_array],axis=2)
绕过这个问题就能够正常训练了。
blog
问题探索:
其实这个问题,我在另一台机器上是没有遇到了,该机器是python3.6+opencv3.4.2
进程
遇到问题的环境是docker环境,python3.5+opencv3.2get
我感受跟opencv的版本可能有关系,等后续训练完成以后把docker里面opencv的版本升级到3.4.2再试一下源码