配置环境:
Windows10+VS2017+CUDA10.1+Python3.6+pytorch1.1
一、记录一下安装过程:
- anaconda中创建虚拟环境
conda create --name CenterNet python=3.6 #创建虚拟环境
source activate CenterNet #激活环境
2.安装pytorch1.1
conda install pytorch==1.1
也可以官网指令安装,或者先下载到本地离线安装
3.下载源代码,https://github.com/xingyizhou/CenterNet
4.安装依赖项
5.安装COCO API,之前安过了
6.编译DCNv2
这里的DCN需要下载另一版本的DCNv2,源代码中的DCNv2不支持pytorch1.0以上
https://github.com/CharlesShang/DCNv2
下载后,将源文件中的DCNv2删除,将下载的文件放到源文件夹,这里之前我是直接替换,一直编译报错,可以注意一下!
修改src/cuda/下的dcn_v2_cuda.cu文件:
//extern THCState *state;
THCState *state = at::globalContext().lazyInitCUDA();
返回setup.py进行编译
python setup.py build develop
7.编译NMS
cd CenterNet/src/lib/external
make
编译成功,安装结束
二、运行demo测试
python demo.py ctdet --demo ../images/16004479832_a748d55f21_k.jpg --load_model ../models/ctdet_coco_dla_2x.pth
不过直接输入命令需要在线下载预训练模型,比较慢,可以先用迅雷将模型下载
1.去GitHub下载预训练模型ctdet_coco_dla_2x.pth或其它放到CenterNet文件中的models中
2.但是运行时会发现它还会继续下载模型并没有用本地的,需要改代码,在pose_dla_dcn.py文件里面,第309行开始的一个函数
def dla34(pretrained=True, **kwargs): # DLA-34
model = DLA([1, 1, 1, 2, 2, 1],
[16, 32, 64, 128, 256, 512],
block=BasicBlock, **kwargs)
pretrained = False
if pretrained:
model.load_pretrained_model(data='imagenet', name='dla34', hash='ba72cf86')
return model
令pretrained = False,有的说这样就可以下载本地的模型,不过我的并没有不知道为啥,于是注释了两行代码,在…\CenterNet\src\lib\models\networks\pose_dla_dcn.py中
def dla34(pretrained=False, **kwargs): # DLA-34
model = DLA([1, 1, 1, 2, 2, 1],
[16, 32, 64, 128, 256, 512],
block=BasicBlock, **kwargs)
# if pretrained:
# model.load_pretrained_model(data='imagenet', name='dla34', hash='ba72cf86')
return model
在终端输入指令即可成功运行demo,输出图片,例
运行网络摄像头
python demo.py ctdet --demo webcam --load_model ../models/ctdet_coco_dla_2x.pth
三、训练
我电脑里有COCO2017,因此我就直接训练了COCO,自定义数据集需要时在调,main.py我在pycharm中调的,补充参数修改数据集路径即运行进入训练
1.其中问题:
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3:
路径转义问题,在路径前面加r
2.我是在笔记本调的,把修改参数numworks=0,batchsize=2,大了显存不足
3.
AttributeError: 'NoneType' object has no attribute 'shape'
解决方法:
训练图像不完整,修改训练的json文件或重新下载数据集。
有问题一起讨论~~~