·CornerNet的相关学习可以参看我的其它文章~
这篇文章较为详尽,零基础小白也可以通过本文跑出程序。笔者也是刚入门,若有不足还请大家多多指出!
文章目录
一、前言
1. 相关参考
本教程的关键参阅,写的很好,大家可以看看:图灵工作室Ling: Windows下pytorch运行CornerNet教程
论文源码及教程:https://github.com/princeton-vl/CornerNet-Lite
2. 环境
Windows 10,64位
CPU: i7-7700HQ,4G显存
内存条:8G
英伟达GPU驱动:Cuda 10.1
Anaconda3下创建的虚拟环境:python 3.7、torch1.7.0、torchvision0.8.1、torchaudio0.7.0
3. 注意
因为每个人的环境都不一样,按照本文方法跑程序,仍会遇到一些小问题,比如缺插件报错,这就需要自己上网查自己装,但这些都很简单,大坑都已在本文解决了。
二、环境安装
1. 安装CUDA
在这里下载英伟达GPU驱动CUDA 10.1:https://developer.nvidia.com/cuda-10.1-download-archive-update2?target_os=Windows&target_arch=x86_64&target_version=10&target_type=exelocal
想下载CUDA其他版本的在这里找:https://developer.nvidia.com/cuda-toolkit-archive
默认装C盘就好。
然后在以下CUDA路径添加至环境变量:
< 你的文件夹 >\NVIDIA GPU Computing Toolkit\CUDA\v10.1\bin
(不知道怎么添加环境变量?右键我的电脑→属性→高级系统设置→环境变量→系统变量-Path→编辑,将上边的路径添加到里边去)
接下来在cmd中输入nvcc -V验证cuda版本,
nvcc -V
成功安装如下图:
(至于CUDA和GPU、torch包匹配的问题?管它呢,暴力装能运行就完了!)
2. Anaconda虚拟环境
建议用Anaconda3构建代码运行的环境
强烈建议看这篇文章:【Anaconda教程01】怎么安装Anaconda3
注意装好Anaconda3后配置环境变量(不会的话参考上面):
然后打开Anaconda Prompt,输入指令,创建虚拟环境(建议以管理员身份运行):
conda create -n environment_name python=3.7
//(注:“environment_name”是要创建的环境名,可以自己定义;“python=X.X”是选择的Python版本)
如果下载速度很慢的话,可以输入以下指令,添加清华源:
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
进入这个环境(激活环境):
//每次要在这个环境下跑代码时,都需激活
activate environment_name
3. 安装PyTorch包
强烈建议离线安装PyTorch相关包。
先进入这个网址下载PyTorch文件:https://download.pytorch.org/whl/torch_stable.html
下载torch1.7.0、torchvision0.8.1、torchaudio0.7.0就好(windows),注意因为这里使用的是python 3.7,因此需要选择cp37的。
然后在环境中,按顺序安装这三个PyTorch包:
pip install <.whl文件所在路径>\torch文件名.whl
pip install <.whl文件所在路径>\torchvision文件名.whl
pip install <.whl文件所在路径>\torchaudio文件名.whl
4. 安装C++编辑器VS
安装Microsoft Visual Studio 2019(自己上网下载)
安装好后,将其中cl.exe(Microsoft C/C++编译器)的路径添加至环境变量。(不会的看上文)
注意下载后的VS2019文件夹会有多个cl.exe编译器,要选择和自己的机器匹配的,比如我的路径是:
D:\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29910\bin\Hostx64\x64
三、测试
1. 安装minGW
安装minGW,用于windows下的make
在这里下载 mingw-get-setup.exe:https://sourceforge.net/projects/mingw/files/latest/download?source=files
随便安装到某个文件夹,全勾选。然后会进入安装包界面:
点左边的all packages,选择mingw32-gcc-g++和mingw32-make,class都为bin。(当然也可以暴力全勾选)
然后点左上角Installation→Apply Changes→Apply
完成后将 <你的安装路径>\MinGW\bin 路径下的mingw32-make.exe重命名为make.exe
再将以上路径添加进环境变量。(不会的看上文)
2. 修改源代码
修改代码参照了大佬的文章:图灵工作室Ling: Windows下pytorch运行CornerNet教程
- 进入 <你的程序文件夹>\CornerNet-Lite-master\core\models\py_utils/_cpools\src 下,分别将4个C++代码其中第一行
#include <torch/torch.h>
改成:
#include <torch/extension.h>
- 进入 <你的程序文件夹>\CornerNet-Lite-master\core\external 下,将setup.py代码中以下代码行(有2个)注释掉:
#把我注释掉
#extra_compile_args=["-Wno-cpp", "-Wno-unused-function"]
3. 下载模型权重
在下面下载三种模型的权重文件(下载自己想使用的模型即可,建议科学上网下载):
CornerNet权重:https://drive.google.com/file/d/1e8At_iZWyXQgLlMwHkB83kN-AN85Uff1/view
CornerNet-Saccade权重:https://drive.google.com/file/d/1MQDyPRI0HgDHxHToudHqQ-2m8TVBciaa/view
CornerNet-Squeeze权重:https://drive.google.com/file/d/1qM8BBYCLUBcZx_UmLT0qMXNTh-Yshp4X/view
进入<你的程序文件夹>\CornerNet-Lite-master\cache\nnet 路径下(没有的话自己创建)
在其中分别创建三个文件夹:CornerNet、CornerNet_Saccade、CornerNet_Squeeze。
将上面下载的.pkl权重文件放置于对应的文件夹下。
4. 编译依赖函数
1.输入指令跳转目录,并运行python程序编译角点池化:
cd <你的程序文件夹>\CornerNet-Lite-master\core\models\py_utils\_cpools\
python setup.py install --user
2.输入指令跳转目录,并用make指令编译非极大值抑制:
cd <你的程序文件夹>\CornerNet-Lite-master\core\external
make
以上完成后,以后无需再次进行编译。
5. 开始测试
运行测试程序demo.py,读取demo.jpg(源代码有默认),输出预测结果demo_out.jpg:
cd <你的程序文件夹>\CornerNet-Lite-master
python demo.py --user
demo.jpg可以自己更改,注意图片太大电脑可能会带不起,而且格式必须为jpg。
代码默认的预测模型是CornerNet-Saccade,可以自己更改。
我自己的测试代码如下,因为电脑性能有限,写入了图像裁剪,输出三种网络的预测结果,大家可以使用:
demo.py:
import cv2
from core.detectors import CornerNet_Saccade
from core.detectors import CornerNet_Squeeze
from core.detectors import CornerNet
from core.vis_utils import draw_bboxes
import time #自己加进来的
image0 = cv2.imread("demo.jpg")#读进来应该是三维的
###显存不够,缩小图片
max_len = 2048 #最宽2048像素
if max(image0.shape) > max_len:
ratio = max_len/max(image0.shape)
image0 = cv2.resize(image0, (int(image0.shape[1]*ratio), int(image0.shape[0]*ratio)))
###
t=time.strftime("%Y-%m-%d_%H-%M-%S", time.localtime())
t=str(t)
cv2.imwrite("%sInput.jpg"%t, image0)
print(image0.shape)
start =time.clock() #####time
detector = CornerNet_Saccade() #detector = CornerNet_Squeeze() #detector = CornerNet()
bboxes = detector(image0)
image = draw_bboxes(image0, bboxes)
cv2.imwrite("%sOut_Saccade.jpg"%t, image)
end = time.clock()
print('CornerNet_Saccade Running time: %s Seconds'%(end-start))###############time
start =time.clock() #####time
######################################
detector = CornerNet_Squeeze()
bboxes = detector(image0)
image = draw_bboxes(image0, bboxes)
cv2.imwrite("%sOut_Squeeze.jpg"%t, image)
end = time.clock()
print('CornerNet_Squeeze Running time: %s Seconds'%(end-start))###############time
###显存不够,缩小图片
max_len = 1024 #最宽1024像素吧
if max(image0.shape) > max_len:
ratio = max_len/max(image0.shape)
image0 = cv2.resize(image0, (int(image0.shape[1]*ratio), int(image0.shape[0]*ratio)))
###
start =time.clock() #####time
detector = CornerNet()
bboxes = detector(image0)
image = draw_bboxes(image0, bboxes)
cv2.imwrite("%sOut_CornerNet.jpg"%t, image)
end = time.clock()
print('CornerNet_Cornernet Running time: %s Seconds'%(end-start))###############time
下面是对自己图像的输出的结果(笑)
CornerNet:
CornerNet_Saccade:
CornerNet_Squeeze:
四、训练
1. 下载数据集
去coco官网下载训练集2014 Train images、验证集2014 Val images、测试集2017 Train images、标注文件2014 Train/Val annotations:https://cocodataset.org/#download(建议科学上网下载)
在 <你的程序文件夹>\CornerNet-Lite-master\data\coco\images\下建三个文件夹:
trainval2014、 minival2014 、 testdev2017
将图像数据集压缩包内的图像对应着放在以上文件夹内。(没有的话自己创建,上面三个文件夹进去就直接是一堆图片了)
解压标注文件压缩包,将其中三个.json文件放置于:
<你的程序文件夹>\CornerNet-Lite-master\data\coco\annotations (没有的话自己创建)
2. 安装cocoAPI
下载cocoAPI压缩包:https://github.com/cocodataset/cocoapi
解压至:<你的程序文件夹>\CornerNet-Lite-master\data\coco
然后修改其中PythonAPI文件夹下的setup.py代码,将以下语句注释:
#把我注释掉
#extra_compile_args=['-Wno-cpp', '-Wno-unused-function', '-std=c99'],
然后跳转到这个文件夹,输入指令安装cocoAPI:
cd <你的程序文件夹>\CornerNet-Lite-master\data\coco\PythonAPI
python setup.py build_ext --inplace
python setup.py build_ext install
如果报错安装失败的话,安装cython可以解决:
pip3 install cython
3. 修改模型训练预设
可以修改 <你的程序文件夹>\CornerNet-Lite-master\configs 下对应模型训练配置文件。
其中"batch_size"为批大小,电脑性能不够的可以设置的小一些;
"chunk_sizes"为每块GPU上处理的图片数,其和等于批大小,一般我们设置它只有一个元素。(因为在后面的训练我们只用一块GPU)
4. 开始训练
运行训练程序train.py,训练模型:
cd <你的程序文件夹>\CornerNet-Lite-master
#训练CornerNet网络(使用1块GPU)
python train.py CornerNet --workers 1
#或 训练CornerNett_Squeeze网络
python train.py CornerNett_Squeeze --workers 1
#或 训练CornerNett_Saccade网络
python train.py CornerNett_Saccade --workers 1
我的训练结果:
可惜我显卡太渣(悲):
五、写在后面
这是我第一个研究的CV项目(非常感谢我的导师给我推荐的课题),自己也是从小白一步步弄起,在学习了很多大佬的文章后,解决了遇到的问题,得出了本文,希望能帮助到大家。
心得的话,就是跑源码的过程肯定是曲折的。哪怕是有前人的参考,大家在跑代码的过程中,还会遇到很多问题,比如最常见的缺少插件,这就需要自己上网查,自己装了。
跑通源码的关键就是查,遇到报错,自己调试,上网查就完了!我就是一步步这么过来的,查就完了!(无慈悲)
最后,笔者刚入门,诠才末学。若有不足,还希望能和大家探讨!