博主在进行DINO实验过程中,发现在提取了3个类别的COCO数据集中,DINO-DETR对car,truck的检测性能并不理想,又通过实验自己的数据集,发现AP值相差不大且较为符合预期,因此便猜想是否是由于DINO中加入了负样本约束导致背景难以学习进而使效果差,因此便使用了DN-DETR来进行实验。下图为DN-DETR模型框架图。
接下来介绍自己的实验过程。
由于DN-DETR也是DETR模型的一部分,所以我们不需要再额外配置conda环境了,使用原本的detr的conda环境即可。
随后要做的就是选择我们需要的模型,修改数据集目录与数据集路径配置即可。
modelname即我们需要选择训练的模型,在DN-DETR中,其提供了四种选择,由于我们是要与DINO的结果做对比,我们直接选择了与DINO模型结果最为接近的dn_dab_deformable_detr
parser.add_argument('--modelname',
default="dn_dab_deformable_detr", type=str,
choices=[
'dn_dab_detr',
'dn_dab_deformable_detr', 'dn_dab_deformable_detr_deformable_encoder_only',
'dn_dab_dino_deformable_detr'
])
coco-path即数据集文件地址。
parser.add_argument('--coco_path', default="/home/ubuntu/datasets/",type=str, )
随后我们修改datasets/coco.py
中的数据集配置路径。
PATHS = {
"train": (root / "images/train2017", root / "annotations" / f'{mode}_train2017.json'),
"val": (root / "images/val2017", root / "annotations" / f'{mode}_val2017.json'),
}
其实在readme中已经给出了示例,我们按照其要求即可。
python main.py -m dn_dab_detr \
--output_dir logs/dn_DABDETR/R50 \
--batch_size 1 \
--epochs 50 \
--lr_drop 40 \
--coco_path /path/to/your/COCODIR # replace the args to your COCO path
--use_dn
博主的epoch设置为50,batch-size=2。修改完这些参数后,运行main.py即可。
与所有的DETR模型相同,其在训练时占用的显存极大。
category names: ['truck', 'car', 'bus']
博主先前在Terminal可以成功运行,但在pycharm中却报如下错误,归根结底是缺失了相应的链接文件。
OSError:
/home/ubuntu/.conda/envs/detr/lib/python3.7/site-packages/nvidia/cublas/lib/libcublas.so.11:
cannot open shared object file: No such file or directory
首先我们切换到/usr/local
目录,查看我们的cuda环境,随后ls查看
ubuntu@VM-16-3-ubuntu:~$ cd /usr/local
ubuntu@VM-16-3-ubuntu:/usr/local$ ls
bin cuda cuda-11.2 etc games include lib man miniconda3 qcloud sbin share src
cuda-11.2即我们的cuda环境文件目录。执行下面的代码即可。
sudo ldconfig /usr/local/cuda-11.2/lib64
再次运行,问题解决。