CornerNet
那么我们从bounding box左上角(top-left corner)看物体。视线横着的话,物体就在视线的下面(那么视线所在位置为the topmost boundary of an object)。视线竖着的话,物体就在视线的右边,那么视线位置为the leftmost boundary。
我们每次都将沿着图中箭头方向上已遇到的最大的值作为填充值即可快速实现 corner pooling。这样每行或者每列只需要进行少量的判断即可,不像之前那样,还需要每个点都要判断所沿方向上的所处行和列中的最大值,大大提升了效率。
1)anaconda3安装
安装软件包后配置好python 3.11环境变量。
2)创建隔离环境
conda create -n CenterNet python=3.8 #
activate CenterNet # 切换环境至CenterNet
3) 确认python版本
确认安装的python32位或64,若为32位,下文的torch文件whl 64会冲突,出现
xxx.whl is not a supported wheel on this platform.
(CenterNet) C:\Users\xxx>python
Python 3.8.18 (default, Sep 11 2023, 13:39:12) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
3)安装CUDA和CUDANN
在选择CUDA时要考虑好Pytorch、CUDA、驱动和显卡之间的版本关系。具体参考版本对应关系
4)下载 torchvision , 下载 torch
若按照如下命令直接下载并安装,可能不成功
conda install pytorch==1.8.0 torchvision==0.9.0
# pip install pytorch==1.8.0 torchvision==0.9.0
可先下载到本地路径,根据相应路径安装,
pip install "D:\downloads\torch-1.8.0+cu111-cp38-cp38-win_amd64.whl"
pip install "D:\downloads\torchvision-0.9.0+cu111-cp38-cp38-win_amd64.whl"
测试验证安装后的版本
import torch
print(torch.version.cuda)
print(torch.__version__)
print(torch.cuda.is_available()) #查看cuda是否可用
print(torch.cuda.device_count()) #查看可行的cuda数目
5)安装Visual Studio 2019 并配置环境
6)进入CenterNet路径下,cmd 切换到对应隔离环境。
E:\model\CenterNet>activate CenterNet
7)安装必需的依赖库,其中 opencv-python
pip install -r requirements.txt
###################################
opencv-python # 修改-> opencv_python,若继续无法安装成功,可下载后再安装
Cython
numba
progress
matplotlib
easydict
scipy
8) 编译NMS
cd ..\CenterNet\src\lib\external
python setup.py build_ext --inplace
在编译NMS时,cl: 命令行error D8021 :无效的数值参数“/Wno-cpp”,注释
..\CenterNet\src\lib\external\set_up.py 对应 extra_compile_args
import numpy
from distutils.core import setup
from distutils.extension import Extension
from Cython.Build import cythonize
extensions = [
Extension(
"nms",
["nms.pyx"],
# extra_compile_args=["-Wno-cpp", "-Wno-unused-function"] 注释掉
)
]
setup(
name="coco",
ext_modules=cythonize(extensions),
include_dirs=[numpy.get_include()]
)
9)编译DCNv2
#下载版本,pytorch_1.9,若选择默认的master版本可能导致后续编译报错
https://github.com/lbin/DCNv2.git
下载解压后置于下列路径下替换原有文件DCNv2
..\CenterNet\src\lib\models\networks
#编译DCNv2
cd ..\CenterNet\src\lib\models\networks
cd DCNv2
python setup.py build develop
10) 运行demo
cd ..\CenterNet\src
python demo.py ctdet --demo ../images/17790319373_bd19b24cfc_k.jpg --load_model ../models/ctdet_coco_dla_2x.pth --debug 2
python demo.py multi_pose --demo ../images/17790319373_bd19b24cfc_k.jpg --load_model ../models/multi_pose_dla_3x.pth --debug 2
运行过程中会在线下载ctdet_coco_dla_2x.pth,multi_pose_dla_3x.pth文件,可能会出现HTTP request请求超时报错。这里的两个文件,第一个是物体检测的,第二个是人体姿态检测的。
可以事先下载好以上两个文件,放入项目\CenterNet\models文件夹下.
若已经将文件下载至本地后,运行demo.py还是会在线下载模型,注释\CenterNet\src\lib\models\networkspose_dla_dcn文件中的pretrained行代码:
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 0:#pretrained model.load_pretrained_model(data='imagenet', name='dla34', hash='ba72cf86') return model
vscode配置python环境后,直接在终端窗口(Ctrl + `)切换隔离环境无效,
PS E:\XXX\CenterNet> conda activate CenterNet
原因
vscode 的 path 加载机制问题, vscode 的 Path 加载过程中,默认继承了一些 PATH,当这些 PATH 中包含系统全局的 PYTHON 版本路径时,则会出现永远加载系统版本的问题
解决方法
在 vscode 的首选项,设置中,去掉从 vscode 继承环境的选项,具体在窗口中
文件/首选项/设置/终端 去掉对应的勾选项
去掉后再次activate CenterNet 可切换到对应的隔离环境,但会导致常用的命令失效
(CenterNet) E:\XXX\CenterNet\src>ls
'ls' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
此时可在终端窗口右下角 + 添加新的终端窗口PowerShell,相应的ls命令可在新建终端运行。
注意:如果使用快捷键打开的终端窗口(Ctrl + `)默认位于powershell 窗口下,上述会方法失效
选择右侧 “+”,打开command prompt,在这个窗口下执行activate相关命令才能实现环境的切换。
{
"images": [
{
"id": 1,
"file_name": "image1.jpg",
"width": 640,
"height": 480
},
{
"id": 2,
"file_name": "image2.jpg",
"width": 1280,
"height": 1080
}
],
"annotations": [
{
"id": 1,
"image_id": 1,
"category_id": 1,
"segmentation": [[x1, y1, x2, y2, ...]],
"area": 1234,
"bbox": [x, y, width, height],
"iscrowd": 0
},
{
"id": 2,
"image_id": 1,
"category_id": 2,
"segmentation": [[x1, y1, x2, y2, ...]],
"area": 567,
"bbox": [x, y, width, height],
"iscrowd": 0
}
],
"categories": [
{
"id": 1,
"name": "person",
"supercategory": "human"
},
{
"id": 2,
"name": "car",
"supercategory": "vehicle"
}
],
"info": {
"description": "COCO 2017 dataset",
"version": "1.0",
"year": 2017,
"contributor": "Microsoft COCO group",
"url": "http://cocodataset.org"
},
"licenses": [
{
"id": 1,
"name": "CC BY-SA 2.0",
"url": "https://creativecommons.org/licenses/by-sa/2.0/"
}
]
}