PKINet(2024CVPR)复现

论文:Poly Kernel Inception Network for Remote Sensing Detection

文章地址:https://arxiv.org/pdf/2403.06258.pdf

code地址:GitHub - NUST-Machine-Intelligence-Laboratory/PKINet

环境安装:

首先,从AutoDL上面租一台服务器,服务器类型根据自己的情况选择吧,我选择的是3090单卡来跑实验。

这一步就是按照作者的配置:

conda create --name openmmlab python=3.8 -y
conda activate openmmlab
conda install pytorch==1.11.0 torchvision==0.12.0 cudatoolkit=11.3 -c pytorch
pip install yapf==0.40.1
pip install -U openmim
mim install mmcv-full
mim install mmdet
mim install mmengine
git clone 
cd PKINet
mim install -v -e .

这个环境还是很好安装的,没有出现向我以前复现的论文中mmcv环境问题的出现。

数据集的准备:

(如果你使用服务器的话需要进行ms或者ss类型的DOTA数据集跑程序,我建议你开服务器前扩容一下数据盘,因为后面我们需要对DOTA数据集进行分割。)

把数据集拷贝到程序中,我为了符合作者的路径,我在PKINet文件下创建了data/DOTA/文件夹。

接下来解压数据使用unzip解压。

然后就是数据集分割了,按照tools/data/dota文件夹中的README文件的指令进行分割,我这里选择分割为ms类型,就是多尺度的小目标类型。指令如下:

python tools/data/dota/split/img_split.py --base-json \
  tools/data/dota/split/split_configs/ms_trainval.json

python tools/data/dota/split/img_split.py --base-json \
  tools/data/dota/split/split_configs/ms_test.json

开始分割:

这个分割过程还是挺慢的。

然后改一下configs/_base_/datasets/dotav1_ms1024.py中的文件路径改成你自己存放的路径。

还有一个地方记住也要改,就是configs/pkinet/pkinet-s_fpn_o-rcnn-dotav1-ss_le90.py文件中的这个,如下图所示:改成你自己想要测试的尺度类型,就像我需要改为ms类型的。

开始训练:

使用如下图指令开始训练:

python  /root/autodl-tmp/PKINet/tools/train.py   /root/autodl-tmp/PKINet/configs/pkinet/pkinet-s_fpn_o-rcnn-dotav1-ss_le90.py

备注:pkinet-s_fpn_o-rcnn-dotav1-ss_le90.py,这个是你要跑的模型的代码,你也可以自己选择其他的。

我丢,mmcv报错还是来了,换个mmcv版本试一试。先去这个网站找适合我们pytorch和cuda版本的mmcv版本:Installation — mmcv 2.1.0 documentation

我换了1.7.1的mmcv-full,运行又出现问题,看看怎么回事。

这次的问题是初始化权重没有加载,哦,对了我忘记把预训练的权重加载进去了,再去把预训练权重下载过来。

此时,我们要改这里,看图说话:

备注:作者默认是多卡跑的。

再输入:python  /root/autodl-tmp/PKINet/tools/train.py   /root/autodl-tmp/PKINet/configs/pkinet/pkinet-s_fpn_o-rcnn-dotav1-ss_le90.py 跑一下,我丢怎么又报错。这玩意ValueError: need at least one array to concatenate,debug看下,发现导入数据集路径错了,导致未加载成功。改写后,再跑。

OK,能训练了,时间太久了,那先直接拿作者训练好的权重文件来测试吧。

这次错误的解决,主要是因为以前复现过LSKNet,文章中又提到了LSKNet,然后看了下LSK的train.py的代码,两者差不多,找到以前我看过LSKNet复现的帖子,才发现没导入权重文件和改单卡模式,LSKNet复现的帖子在这里ICCV 2023 | LSKNet【保姆级】训练自己的目标检测模型-CSDN博客,这个博主讲得很仔细。

测试:

我们进行测试和demo实验,从官网上下载权重文件,如下,我测试的是DOTAv1.0的,但是只有ss的权重文件,先试一试能不能跑,不能跑再换ss类型的数据集。

在服务器上可以输入:

python ./tools/test.py  \
  configs/rotated_retinanet/rotated_retinanet_obb_r50_fpn_1x_dota_le90.py \
  checkpoints/pkinet_s_o-rcnn_dotav1-ss.pth --format-only \
  --eval-options submission_dir=work_dirs/Task1_results

结果:

时间太久了吧,快两个小时了,有实力的童鞋可以等着看看结果,我直接进行demo实验吧。

Demo实验:

使用这段指令进行demo实验:

demo/huge_image_demo.py \
    demo/dota_demo.jpg \
   configs/pkinet/pkinet-s_fpn_o-rcnn-dotav1-ss_le90.py \
    PKINet/pkinet_s_o-rcnn_dotav1-ss.pth \

我在pycharm上跑的结果如下:

这里导入的权重文件一定要对号入座,我就犯了一个错误,用错了权重文件,导致检测的目标不完整。

本次复现也踩了很多的坑,这也是我第一篇博客,不对之处请各位指教,也当做我自己的一个笔记吧,毕竟好记性不如烂笔头。

  • 39
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
要用PyCharm复现GitHub上的CVPR代码,可以按照以下步骤进行: 1. 下载或克隆代码库:在GitHub上找到要复现的CVPR代码库,并将其下载到本地计算机,或者使用PyCharm的Git工具克隆代码库。 2. 创建虚拟环境:为了避免不同代码库之间的依赖冲突,可以使用PyCharm创建一个虚拟环境,然后在虚拟环境中安装所需的依赖项。在PyCharm中,可以通过File -> Settings -> Project:your_project_name -> Python Interpreter -> Show All -> +按钮来创建虚拟环境。 3. 安装依赖项:打开终端窗口,进入代码库的根目录,然后在虚拟环境中使用pip命令安装代码库所需的依赖项。通常,代码库中都会提供一个requirements.txt文件,其中列出了需要安装的所有依赖项。可以使用以下命令来安装依赖项: ``` pip install -r requirements.txt ``` 4. 运行代码:在PyCharm中打开要运行的主程序或测试程序,并确保已选择正确的Python解释器和虚拟环境。然后,可以直接在PyCharm中运行程序,或者在终端窗口中使用以下命令来运行程序: ``` python your_program_name.py ``` 5. 调试代码:如果代码复现时出现了错误或问题,可以使用PyCharm的调试工具来查找和解决问题。可以在程序中设置断点,然后使用Debug按钮来启动调试器,并逐步执行程序,查看变量的值和程序的状态。 需要注意的是,不同的CVPR代码库可能有不同的环境配置和依赖项,需要根据具体情况进行调整和安装。同时,代码库中的文档和注释也是复现代码的重要参考,需要认真阅读和理解。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值