Anchor Free系列模型13

2021SC@SDUSC
CenterNet训练自己的数据集(接上文)
注意这里json文件的命名要通过datasets/pascal.py中第44到48行的内容确定的。

self.data_dir = os.path.join(data_dir, 'voc')
self.img_dir = os.path.join(self.data_dir, 'images')
_ann_name = {'train': 'trainval0712', 'val': 'test2007'}
self.annot_path = os.path.join(self.data_dir, 'annotations', 'pascal_%s.json' % _ann_name[split])

为了方便命名对这些字段进行了修改:

self.data_dir = os.path.join(data_dir, 'voc') # ./data/voc
self.img_dir = os.path.join(self.data_dir, 'images') # ./data/voc/images
_ann_name = {'train': 'train2020', 'val': 'test2020'}
# 意思是需要json格式数据集
self.annot_path = os.path.join(
self.data_dir, 'annotations', 'pascal_%s.json' % _ann_name[split])

所以要求json的命名可以按照以下格式准备:

# ./data/voc/annotations
#   - pascal_train2020
#   - pascal_test2020

数据集总体格式为:

- data
  - voc
   - annotations
    - pascal_train2020.json
    - pascal_test2020.json
   - images
    - *.jpg
   - VOCdevkit(这个文件夹主要是用于测评)
    - VOC2007
            - Annotations
                - *.xml
            - JPEGImages
                - *.jpg
            - ImageSets
             - Main
              - train.txt
              - val.txt
              - trainval.txt
              - test.txt    

2.3 其他
在datasets/pascal.py中21-22行,标准差和方差最好替换为自己的数据集的标准差和方差。

VOC_MEAN = [0.485, 0.456, 0.406]
VOC_STD = [0.229, 0.224, 0.225]

训练和测试
训练命令
训练命令比较多,可以写一个shell脚本来完成。

python train.py --log_name pascal_resdcn18_384_dp \
                --dataset pascal \
                --arch resdcn_18 \
                --img_size 384 \
                --lr 1.25e-4 \
                --lr_step 45,60 \
                --batch_size 32 \
                --num_epochs 70 \
                --num_workers 10

log name代表记录的日志的名称。

dataset设置pascal代表使用的是pascal voc格式。

arch代表选择的backbone的类型,有以下几种:

large_hourglass
small_hourglass
resdcn_18
resdcn_34
resdcn_50
resdcn_101
resdcn_152

img size控制图片长和宽。

lr和lr_step控制学习率大小及变化。

batch size是一个批次处理的图片个数。

num epochs代表学习数据集的总次数。

num workers代表开启多少个线程加载数据集。

3.2 测试命令
测试命令很简单,需要注意的是img size要和训练的时候设置的一致。

python test.py --log_name pascal_resdcn18_384_dp \
               --dataset pascal \
               --arch resdcn_18 \
               --img_size 384
flip test属于TTA(Test Time Augmentation),可以一定程度上提高mAP。

# flip test
python test.py --log_name pascal_resdcn18_384_dp \
               --dataset pascal \
               --arch resdcn_18 \
               --img_size 384 \
               --test_flip

这种方法将检测,姿态估计,甚至分割都可以统一起来,做法十分优雅。不过CenterNet仍有缺点,例如在图像中,同一个类别中的某些物体的GT中心点,在下采样时会挤到一块,也就是两个物体在GT中的中心点重叠了,CenterNet对于这种情况也是无能为力的,可能结果就是只能检测一个目标了,不过这种密集检测的问题本就是这个领域仍未解决的难题

上一篇:SpringCloud gateway源码走读(顺带聊聊响应式)


下一篇:Oracle11g 查看表空间使用率