mmdetection使用记录汇总

mmdetection及其他相关项目的使用汇总

最近需要用到多模态尤其是CV方面的知识, 所以学习和使用了一下mmdetection和其他CV项目, 总结记录下遇到的各种问题, 以便往后查阅。

一、mmdetection下载安装

1. 总的安装见 requirements.txt

mmdetection版本为当前最新的2.24.1, 总的安装见mmdetection/requirements.txt, 实际上包括requirements/build.txt/optional.txt/runtime.txt/tests.txt四个文件的包,
建议手动安装, 尤其是涉及的torch、mmcv-full、opencv-python、detectron2(文档智能LayoutLM系列用到)。
安装mmcv-full==1.5.1, 建议到到官方github查看版本要求, 需要指定cuda版本和torch版本, 例如下面的例子:

pip install mmcv-full==1.5.1 -f https://download.openmmlab.com/mmcv/dist/cu101/torch1.8.0/index.html
pip install mmcv-full==1.5.1 -f https://download.openmmlab.com/mmcv/dist/cu102/torch1.8.0/index.html
pip install mmcv-full==1.5.1 -f https://download.openmmlab.com/mmcv/dist/cu111/torch1.8.0/index.html

2. 安装 torch 以及其他

建议到官网指定下载, 因为需要指定cuda版本等

pip3 install torch==1.8.0 torchvision==0.9.0 torchmetrics==0.9.1 --extra-index-url https://download.pytorch.org/whl/cu113

3. 安装 detectron2

因为各种安装有问题, 所以改为源码安装, detectron20.6, datasets2.2.1。

git clone https://github.com/facebookresearch/detectron2.git
python -m pip install -e detectron2

4. 安装 PaddleOCR==2.5.0.3 【需要当前最新 paddle 2.3.0】

看着百度paddle的项目, 官方中文的各大任务, 颇有那么点京东直营的味道。
pip install paddleOCR==2.5.0.3
版本太低: ImportError: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.22’ not found (required by /home/anaconda3/envs/myzhuo/lib/python3.7/site-packages/paddle/fluid/core_avx.so)

sudo cp /home/myzhuo/cv/layoutlmft/examples/libstdc++.so.6.0.28 /usr/lib/x86_64-linux-gnu
sudo rm /usr/lib/x86_64-linux-gnu/libstdc++.so.6
sudo move /usr/lib/x86_64-linux-gnu/libstdc++.so.6 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.bak
sudo ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28 /usr/lib/x86_64-linux-gnu/libstdc++.so.6

5. 安装 protobuf

PaddleOCR的protobuf版本冲突(推理阶段), [libprotobuf FATAL google/protobuf/stubs/common.cc:83]

pip install protobuf==3.19.4

6. paddle 与 detectron2 冲突

这就是相对路径的问题了, 两个库都定义了tools这样常见的包名, 觉得还是依赖到项目名比较好, 这样不容易冲突。

将site-packages/paddleocr/目录中的所有tools.infer
改为
paddleocr.tools.infer

7. 安装 tensorboardX

tensorboardX报错, TypeError: init() got an unexpected keyword argument ‘serialized_options’

因为PaddleOCR需要protobuf低版本, 如3.10.0, 但是transformers需要protobuf至少3.19.0
pip install tensorboardX==1.8
pip install protobuf==3.19.4

二、mmdetection使用记录

1. 详情

尝试使用目标检测detection、实例分割instance等功能, 如算法YOLOX/YOLOv3/Faster-RCNN/Cascade-RCNN/Swin-T/Deformable_DETR。

2、自定义数据需要修改

修改mmdetection/configs/base/datasets/coco_detection.py或者coco_instance, dataset_type/data_root/data/classes等定义;
修改mmdet/datasets/coco.py中CocoDataset类的CLASSES, 以及evaluate函数的设置classwise=True;
修改mmdet/core/evaluation/class_names.py中coco_classes, 以及其他的类;
部分模型需要修改mmdetection/configs/base/models, 如faster_rcnn_r50_fpn.py的classes;

3、训练模型参数定义

以YOLOX_S为例, 修改mmdetection/configs/yolox/yolox_s_8x8_300e_coco.py的data_root/dataset_type/train_pipeline/train_dataset/test_pipeline/data等参数;

4、训练

cd mmdetection
nohup python tools/train.py configs/yolox/yolox_s_8x8_300e_coco_CDLA.py > tc_yolox.log 2>&1 &
tailf -1000 tc_yolox.log

5、推理

python image_demo.py

三、汇总

3.1 YOLOv5、YOLOX(mmdet)、PPYOLOE比较(单GPU)

默认条件下训练时间: YOLOv5 > YOLOX(mmdet) > PPYOLOE, 2k训练数据/1k验证数据, 如果记得没错的话, YOLOv5需要大半天, YOLOX(mmdet)需要一天, PPYOLOE需要5天(可能配得不对), 放弃PPYOLOE;
默认条件下自带指标: YOLOv5([email protected]86.65%) > YOLOX(mmdet, [email protected]), YOLOv5要稍微好一些;
个人的主观测试指标: YOLOX与YOLOv5效果大致相当, YOLOX(mmdet)的学习率除以4, 实测要比YOLOX默认参数好一点;
建议: 不过YOLOv5是GPL协议的, 建议还是用更宽松协议的源码。

希望对你有所帮助!

猜你喜欢

转载自blog.csdn.net/rensihui/article/details/125619229