【踩坑】使用CenterNet训练自己的数据时的环境配置与踩坑

本文详细描述了如何在Ubuntu22.04系统上配置Python3.8、CUDA11.8、PyTorch2.2.1,以及如何安装和调整CenterNet框架,包括安装DCNv2、COCOAPI和处理自定义数据集的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

环境配置

系统:Ubuntu22.04
Python:3.8
CUDA:11.7
pytorch:2.2.1

因为种种原因没有使用原工程的老版本python和pytorch……但总之也跑通了,可喜可贺,可喜可贺。

  1. 新建conda环境:
 conda create --name CenterNet python=3.8
 conda activate CenterNet
  1. 安装CUDA
    使用nvidia-smi命令(前提是你安装了显卡驱动),可以看到显卡信息,其中右上角表示显卡最高支持的CUDA版本号,安装的CUDA版本不要超过这个版本。
    nvidia-smi
    因为pytorch官网写了对应CUDA11.8和12.1两种版本的安装方式,所以图省事我的CUDA版本也直接安装11.8了。
    首先找到你要安装的CUDA ToolKit版本:https://developer.nvidia.com/cuda-toolkit-archive
    安装CUDA ToolKit
    然后按你的机器配置一步一步选择好,运行给你的指令:
    选择机器配置
    接下来的安装选项可以参考这篇博客,以下是一些细节:
    如果你安装了其他版本的CUDA,会报一个询问是否continue的链接,continue即可。
    注意在安装选项处去掉Driver、CUDA Demo Suite 11.8、CUDA Documentation 11.8,仅安装CUDA Toolkit 11.8。
    使用如下命令设置CUDA环境变量:
export PATH=/usr/local/cuda-11.8/bin:$PATH
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-11.8/lib64

最后使用nvcc --version命令可以验证自己安装的CUDA版本。
使用ls -l /usr/local | grep cuda可以查看安装的所有CUDA版本和对应的路径。
3. 安装pytorch
pytorch官网:https://pytorch.org/get-started/locally/
没啥好说的,输入指令安装即可。
pytorch安装
4. 克隆CenterNet并安装依赖:

git clone https://github.com/xingyizhou/CenterNet
cd CenterNet
pip install -r requirements.txt
  1. 安装DCNv2
    首先将CenterNet/src/lib/models/networks/DCNv2这个目录的老版本DCNv2删除,然后在原位置克隆DCNv2的一个fork:https://github.com/lbin/DCNv2
https://github.com/lbin/DCNv2.git
cd DCNv2

使用git branch -r指令可以查看所有分支信息,切换到最新的2.0.1分支:

git checkout pytorch_2.0.1

然后编译:

./make.sh
  1. 安装COCO API
git clone https://github.com/cocodataset/cocoapi.git
cd cocoapi/PythonAPI
make
python setup.py install --user
  1. 下载预训练模型
    从作者提供的MODEL ZOO下载一个模型,放在/CenterNet/models/文件夹下。
  2. 运行demo
    不出意外的话(虽然生活总是充满意外),做完以上这些配置后,应该就可以运行CenterNet的demo了!
python demo.py ctdet --demo 图片路径 --load_model pth模型路径

根据这篇博客,如果你想要保存结果而不是弹窗展示图片的话,将src/lib/detectors/cdet.py的最后一个函数做如下更改即可:
更改函数

COCO格式数据集

参考原项目的README
首先你的数据集要是COCO格式的,具体来说,你要在/CenterNet/data/文件夹下,建立一个这样的目录结构:

|mydata
|-- annotations
|  	|--train.json
|  	|--val.json
|-- images

images放你的所有图片(训练集和测试集可以不分开),而两个标注的json文件,最简格式如下:

{
  "categories": [ # 分类
  	{
  	  "supercategory": # 父类,没有就填"None"
  	  "id": # 类的标识id,建议令__background__为0
  	  "name": # 类名
  	}
  ],
  "images":[
    {
      "id": # 图片的唯一标识id
      "file_name": # 图片名称,不用带文件夹路径
      "width": # 宽度
      "height": # 高度
    }
  ],
  "annotations":[
    {
      "id": #唯一标识id
      "segmentation": [] #图片分割,对于bbox类型的标注,直接[[left_x, top_y, left_x, bottom_y, right_x, bottom_y, right_x, top_y]]
      "area": # 标注的面积,对于bbox类型,直接长乘宽
      "bbox": [] # x, y, w, h
      "iscrowd": 0
      "ignore": 0
      "image_id": # 所在图片id
      "category_id": # 所属类别id
    }
  ]
}

将数据处理好放好即可。

在CenterNet中应用自己的数据集

继续参考这篇博客,有很详细的代码修改说明,原项目README也有说明,主要是在src/lib/datasets/dataset下参考coco.py新增一个自己的dataloader类,然后将它引入src/lib/datasets/dataset_factory,并在/src/lib/opts.py中修改数据集默认值,添加类别标签即可。
运行训练:

python main.py ctdet --exp_id coco_dla --batch_size 32 --master_batch 1 --lr 1.25e-4  --gpus 0

模型会被保存在/exp/ctdet/coco_dla/文件夹下,其中测试集上效果最好的模型被命名为model_best.pth,而训出来的最后一个模型叫model_last.pth
运行测试:

python test.py --exp_id coco_dla --not_prefetch_test ctdet --load_model 模型路径
### 使用自定义数据集训练 CenterNet 模型 #### 准备环境和依赖项 要使用自定义数据集训练 CenterNet 模型,首先需要设置好开发环境并安装必要的库。假设已经有一个 Python 环境,在终端执行如下命令来创建虚拟环境并激活它: ```bash conda create -n centernet_env python=3.8 conda activate centernet_env ``` 接着安装 PyTorch 和 torchvision 库以及其他所需的包。 ```bash pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu113 pip install git+https://github.com/facebookresearch/fvcore.git pip install detectron2 -f https://dl.fbaipublicfiles.com/detectron2/wheels/cu113/torch1.9/index.html ``` #### 下载预训练权重 下载官方提供的预训练模型参数作为初始化起点可以加速收敛过程,并有助于提高最终性能。对于 CenterNet 来说,可以从公开资源获取预训练权重文件 `CenterNet2_R50_1x.pth` 并加载到项目中[^2]。 ```python import torch pretrained_weights = torch.load('models/CenterNet2_R50_1x.pth') ``` #### 数据集准备 构建适合于 CenterNet数据集非常重要。通常情况下,这涉及到收集图片及其相应的标签信息(即物体的位置)。这些标签应该按照特定格式保存下来,比如 COCO JSON 文件格式或简单的文本文件描述边界框位置等细节。如果现有的标注不符合预期,则可能还需要转换工具帮助调整至所需样式。 针对 CenterNet 训练数据集应当遵循一定的命名约定路径规划,确保程序能够自动识别哪些图像是用于训练而哪些又是验证用途;同也要注意检查所有图像尺寸是否统一,因为不一致可能导致错误发生。 #### 修改配置文件 根据实际需求编辑配置文件中的超参数设定,如批量大小(batch size)、学习率(learning rate),以及迭代次数(iterations)等等。此外还需指定输入图片分辨率(input resolution)、使用的骨干网络(backbone network)类型和其他任何影响算法行为的关键选项。 #### 开始训练流程 完成上述准备工作之后就可以调用 Detectron2 提供的功能接口启动正式的训练环节了。下面给出一段简化版代码片段展示如何操作: ```python from detectron2.engine import DefaultTrainer, default_argument_parser, launch from detectron2.config import get_cfg from detectron2.data.datasets import register_coco_instances if __name__ == "__main__": parser = default_argument_parser() args = parser.parse_args() cfg = get_cfg() cfg.merge_from_file("configs/COCO-Detection/centernet_r50_fpn_1x.yaml") # 加载默认配置 # 注册新的数据集 register_coco_instances("my_dataset_train", {}, "path/to/json/train.json", "path/to/images/") register_coco_instances("my_dataset_val", {}, "path/to/json/val.json", "path/to/images/") cfg.DATASETS.TRAIN = ("my_dataset_train", ) cfg.DATASETS.TEST = ("my_dataset_val", ) trainer = DefaultTrainer(cfg) trainer.resume_or_load(resume=False) trainer.train() ``` 通过以上步骤即可基于个人定制化的数据源对 CenterNet 进行有效的再训练工作。当然具体实施过程中还可能会遇到各种各样的挑战和技术难题,建议参考官方文档或其他社区资料寻求解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值