实验室换了GPU,记录下centernet在新电脑上的配置过程,如果对下面很多不理解先阅读我以前的这篇博客即可初学者复现CornerNet:详细指导零基础在Ubuntu系统运行该代码并完全理解论文思路的教程
CenterNet-duan-2080Ti代码
按照 README上面的操作即可
/home/psdz/anaconda3/envs/CenterNet/lib/python3.6/site-packages/torch/cuda/__init__.py:114: UserWarning:
Found GPU0 GeForce RTX 2080 Ti which requires CUDA_VERSION >= 9000 for
optimal performance and fast startup time, but your PyTorch was compiled
with CUDA_VERSION 8000. Please install the correct PyTorch binary
using instructions from http://pytorch.org
...
...
...
File "/home/psdz/anaconda3/envs/CenterNet/lib/python3.6/site-packages/torch/nn/modules/conv.py", line 301, in forward
self.padding, self.dilation, self.groups)
RuntimeError: CuDNN error: CUDNN_STATUS_MAPPING_ERROR
这个的原因是因为CUDA版本问题,先确认机器安装好了cuda和cuDNN,要保证:
显卡驱动的cuda版本(10.2)> 机器的运行cuda版本(10.0) > 环境内的cuda-toolkit 版本(9.0)
当然,pytorch版本也很重要,详见下文
安装方法参考这两个:
Ubuntu 18.04上安装cuda
ubuntu 18.04 cuda安装
通过下面指令验证即可
#查看显卡驱动和驱动cuda版本
nvidia-smi
#查看电脑runtime cuda版本
nvcc -V
nvcc --version
#查看centernet环境内的,当然自己安装的直接选安装包就行
>>> print(torch.__version__)
0.4.1
>>> print(torch.version.cuda)
8.0.61
>>>
那么我们这样就可以保证cuda大于9.0同时小于驱动版本。
多说几句
cat /usr/local/cuda/version.txt
也可以查看cuda版本,但是我的电脑显示不一致,肯定是依据nvcc --version为准,原因在这
CUDA版本检测
检查nvcc
which nvcc,发现是/usr/bin/nvcc,而实际上nvcc是应该在/usr/local/cuda/bin/nvcc。
所以,sudo gedit /usr/bin/nvcc,把里面的内容"exec /usr/lib/nvidia-cuda-toolkit/bin/nvcc" 改成"exec /usr/local/cuda/bin/nvcc"
然后继续nvcc --version这次得到10.0
Traceback (most recent call last):
File "train.py", line 5, in
import torch
ModuleNotFoundError: No module named 'torch'
如果直接安装最新版本的pytorch是不匹配的,所以试了多个版本最后1.0的还是能用的,当然cuda版本也是试出来的,我最后的pytorch是pytorch-1.0.0-py3.6_cuda9.0.176_cudnn7.4.1_1,最好用迅雷下载
(centernet) psdz@dj:~/桌面/CenterNet-master$ python train.py CenterNet-52
Traceback (most recent call last):
File "train.py", line 18, in
from nnet.py_factory import NetworkFactory
File "/home/psdz/桌面/CenterNet-master/nnet/py_factory.py", line 8, in
from models.py_utils.data_parallel import DataParallel
File "/home/psdz/桌面/CenterNet-master/models/py_utils/__init__.py", line 6, in
from ._cpools import TopPool, BottomPool, LeftPool, RightPool
File "/home/psdz/桌面/CenterNet-master/models/py_utils/_cpools/__init__.py", line 8, in
import top_pool, bottom_pool, left_pool, right_pool
ImportError: /home/psdz/.local/lib/python3.6/site-packages/cpools-0.0.0-py3.6-linux-x86_64.egg/top_pool.cpython-36m-x86_64-linux-gnu.so: undefined symbol: _ZN2at6detail20DynamicCUDAInterface10set_deviceE
这个问题其实就是池化编译过程中除了问题,官方解决方案两个
cd /models/py_utils/_cpools/
python setup.py install --user
把后面的–user去掉,我试过并没有什么用
最后参考这篇博客的思路解决的
装不了 pytorch=0.4.0? ubuntu下 基于 cuda=92 和 pytorch=1.2 配置环境跑通 CornerNet 训练和测试流程 步骤详解(包括GPU限制问题详解)
我简单讲下思路,就是把新版本的CornerNet-Lite里面的CornerNet-Lite/core/models/py_utils/_cpools文件夹复制替换CornerNet源代码下的CornerNet/models/py_utils/_cpools/,然后运行命令进行重新编译
CenterNet-Lite代码
cd /models/py_utils/_cpools/
python setup.py install
我们测试自己的数据集需要改动如下几个地方
1. config里面的json文件,用哪个改哪个
"batch_size": 48,
"max_iter": 48000,
"stepsize": 45000,
"snapshot": 500,
chunk_sizes": [6,6,6,6,6,6,6,6],
"data_dir": "../data"
2. db里面的detection.py文件
(self._configs["categories"] = 80)
3. model里面的centernet-52.py
out_dim = 80
4. test里面的coco.py
colours = np.random.rand(80,3)
改成啥看个人需求了,实际上就是输出的类别不同