CEASC项目环境搭建(训练VisDrone数据集)
论文地址:https://openaccess.thecvf.com/content/CVPR2023/papers/Du_Adaptive_Sparse_Convolutional_Networks_With_Global_Context_Enhancement_for_Faster_CVPR_2023_paper.pdf
Code:https://github.com/Cuogeihong/CEASC.git
1 创建conda虚拟环境
conda create -n name python==3.8
conda init bash && source /root/.bashrc
conda activate name
conda install pytorch==1.10.1 torchvision==0.11.2 torchaudio==0.10.1 cudatoolkit=11.3 -c pytorch
2 安装MMDection环境
pip install openmim
mim install mmdet==2.24.1 mmcv-full==1.5.1
3 下载CEASC源码 and Install albumentations and other packages.
git clone https://github.com/Cuogeihong/CEASC.git
cd CEASC
pip install nltk
pip install -r requirements/albu.txt
4 Install our Sparse Convolution Implementation
cd ./Sparse_conv
python setup.py install
cd ..
pip install -r requirements/build.txt
pip install -v -e . # or "python setup.py develop"
5 下载解压数据集
参考https://github.com/PuAnysh/UFPMP-Det
VisDrone:链接:https://pan.baidu.com/s/1FfAsAApHZruucO5A2QgQAg 提取码:qrvs
解压:
sudo apt-get install p7zip-full
7za x VisDrone_Dataset_COCO_Format.zip
6 在JupyterLab的Notebook中使用新的Conda环境
# 将新的Conda虚拟环境加入jupyterlab中
conda activate name # 切换到创建的虚拟环境:tf
conda install ipykernel
ipython kernel install --user --name=name # 设置kernel,--user表示当前用户,tf为虚拟环境名称
7 训练
- 更改配置文件中数据集路径
CEASC/configs/UAV/baseline_fasterrcnn_res18_visdrone.py
第118行
data_root = '/path/to/dataset/' -> data_root = '/root/autodl-tmp/CEASC/VisDrone_coco/VisDrone_Dataset_COCO_Format/'
下图路径与数据集文件相对应:
CUDA_VISIBLE_DEVICES=0 python tools/train.py ./configs/UAV/baseline_fasterrcnn_res18_visdrone.py --work-dir ./work-dir
报错:
Traceback (most recent call last):
File "tools/train.py", line 237, in <module>
main()
File "tools/train.py", line 226, in main
train_detector(
File "/root/autodl-tmp/CEASC/mmdet/apis/train.py", line 244, in train_detector
runner.run(data_loaders, cfg.workflow)
File "/root/miniconda3/envs/wgt/lib/python3.8/site-packages/mmcv/runner/epoch_based_runner.py", line 127, in run
epoch_runner(data_loaders[i], **kwargs)
File "/root/miniconda3/envs/wgt/lib/python3.8/site-packages/mmcv/runner/epoch_based_runner.py", line 45, in train
self.call_hook('before_train_epoch')
File "/root/miniconda3/envs/wgt/lib/python3.8/site-packages/mmcv/runner/base_runner.py", line 309, in call_hook
getattr(hook, fn_name)(self)
File "/root/autodl-tmp/CEASC/mmdet/datasets/utils.py", line 158, in before_train_epoch
self._check_head(runner)
File "/root/autodl-tmp/CEASC/mmdet/datasets/utils.py", line 144, in _check_head
assert module.num_classes == len(dataset.CLASSES), \
AssertionError: The `num_classes` (1) in RPNHeadExpand of MMDataParallel does not matches the length of `CLASSES` 10) in RepeatDataset
网上没找到答案!!!
经过对源码的查看,发现RPNHeadExpand是在RPNHEAD进行的修改
然而在CEASC/mmdet/datasets/utils.py文件中,这里是将RPNHEAD跳过,不检查module
是否具有num_classes
属性。所以同理,RPNHeadExpand 也应该跳过。
改为下面这俩行:
from mmdet.models.dense_heads import GARPNHead, RPNHead, RPNHeadExpand, RPNDYHeadExpand
if hasattr(module, 'num_classes') and not isinstance(
module, (RPNDYHeadExpand, RPNHeadExpand, RPNHead, VGG, FusedSemanticHead, GARPNHead)):
然后再进行编译,在主目录在面/CEASC
pip install -v -e .
然后再运行就可以了!!!