mmdet/datasets创建数据名ourdata.py
from .coco import CocoDataset
from .registry import DATASETS
class our_data(CocoDataset):
CLASSES = ['xxx','xx','x']
mmdet/datasets/init.py注册数据集
from .ourdata import ourdata
__all__ = [
'CustomDataset', 'XMLDataset', 'CocoDataset', 'VOCDataset',
'CityscapesDataset', 'GroupSampler', 'DistributedGroupSampler',
'build_dataloader', 'ConcatDataset', 'RepeatDataset', 'WIDERFaceDataset',
'DATASETS', 'build_dataset','ourdata'
]
/configs/xx.py修改
num_classes+1(类别)
lr(学习率)
dataset_type(数据集名)
data_root(数据集路径)
imgs_per_gpu(batchsize)
workers_per_gpu(进程)
ann_file(标签路径)
img_prefix(图片路径)
work_dir(保存路径)
中断恢复
python tools/train.py ./configs/xx.py --gpus 1 --resume_from ./work_dirs/xx/epoch_xx.pth
验证
python tools/test_ins.py ./configs/xx.py ./work_dirs/xx/latest.pth --show --out results_xx.pkl --eval segm
检测
修改tools/test_ins_vis.py中class_names=['xx','x','xxx']
python tools/test_ins_vis.py configs/xx.py work_dirs/xx/lastest.pth --show --save_dir work_dirs/vis_solo
AssertionError: Caught AssertionError in DataLoader worker process 0
assert shape[i] >= img.shape[i]
AssertionError
做了以下尝试
1.检查环境版本匹配
2.并将线程workers_per_gpu设置为0
3.调整学习率
mmdet 默认的学习率是基于8个gpu,而且默认是1个GPU处理2个图像:
lr=imgs_per_gpu*0.00125
4.最后找出是所有图像数据的原始尺寸和标注尺寸需在同一大小下
The size of tensor a (x) must match the size of tensor b (81) at non-singleton dimension 1
/configs/xx.py中的某些模型的类别参数不止一个,要全部修改
'numpy.ndarray' object has no attribute 'cpu'
换模型验证时出现的问题,将检测脚本换为test.py
ap=0
由于2.3.3中设置了rescale=False,导致模型输出的bbox和segm结果都是相对于网络输入尺寸(1333,800)的,但是测试集的gt都是在原尺寸下的。
configs/xx.py中test_pipeline下的img_scale修改成自己数据集尺寸
ap=-1
标注中没有检测到该大小的对象
1mmdet2之后的类别数=本身数据集的类别数,不用加背景
2检查标注文件json2coco.py转换时area恒等于1
# annotation['area'] = 1.0 # 导致medium和large的ap都是-1
annotation['area'] = annotation['bbox'][2] * annotation['bbox'][3]