新手零基础教程:Windows下运行CornerNet_lite源码

·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

随便安装到某个文件夹,全勾选。然后会进入安装包界面:
Package

点左边的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教程

  1. 进入 <你的程序文件夹>\CornerNet-Lite-master\core\models\py_utils/_cpools\src 下,分别将4个C++代码其中第一行
#include <torch/torch.h>

改成:

#include <torch/extension.h>
  1. 进入 <你的程序文件夹>\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项目(非常感谢我的导师给我推荐的课题),自己也是从小白一步步弄起,在学习了很多大佬的文章后,解决了遇到的问题,得出了本文,希望能帮助到大家。

心得的话,就是跑源码的过程肯定是曲折的。哪怕是有前人的参考,大家在跑代码的过程中,还会遇到很多问题,比如最常见的缺少插件,这就需要自己上网查,自己装了。
跑通源码的关键就是查,遇到报错,自己调试,上网查就完了!我就是一步步这么过来的,查就完了!(无慈悲)

最后,笔者刚入门,诠才末学。若有不足,还希望能和大家探讨!

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值