Closed fanweiya closed 3 years ago
推荐使用PaddlePaddle2.1版本,和PaddleDetection目前默认的分支release/2.1或者develop分支,默认是动态图,原先静态图在static文件夹下。可以再给出详细点的环境或配置细节。
@fanweiya 由于SOLOv2需要将poly转成mask,和mask-rcnn有些不同。这个报错是由于你的标注文件中segmentation字段只有4维,pycocotools解析成了box,导致转换mask过程报错:https://github.com/cocodataset/cocoapi/blob/master/PythonAPI/pycocotools/_mask.pyx#L292 建议重新标注一下segmentation信息,每个标注最好多于4个点
@yghstill 我的标注都是超过4个点的,标注在这train.json
@nemonameless 就是最新的,还是不行
TrainReader:
batch_size: 2
worker_num: 2
inputs_def:
fields: ['image', 'im_id', 'gt_segm']
dataset:
!COCODataSet
dataset_dir: dataset/instance_seg
anno_path: train.json
image_dir: JPEGImages
sample_transforms:
- !DecodeImage
to_rgb: true
- !Poly2Mask {}
- !ResizeImage
target_size: 800
max_size: 1333
interp: 1
use_cv2: true
resize_box: true
- !RandomFlipImage
prob: 0.5
- !NormalizeImage
is_channel_first: false
is_scale: true
mean: [0.485,0.456,0.406]
std: [0.229, 0.224,0.225]
- !Permute
to_bgr: false
channel_first: true
batch_transforms:
- !PadBatch
pad_to_stride: 32
- !Gt2Solov2Target
num_grids: [40, 36, 24, 16, 12]
scale_ranges: [[1, 96], [48, 192], [96, 384], [192, 768], [384, 2048]]
coord_sigma: 0.2
shuffle: True
EvalReader:
inputs_def:
fields: ['image', 'im_info', 'im_id']
dataset:
!COCODataSet
image_dir: JPEGImages
anno_path: val.json
dataset_dir: dataset/instance_seg
sample_transforms:
- !DecodeImage
to_rgb: true
- !ResizeImage
interp: 1
max_size: 1333
target_size: 800
use_cv2: true
- !NormalizeImage
is_channel_first: false
is_scale: true
mean: [0.485,0.456,0.406]
std: [0.229, 0.224,0.225]
- !Permute
channel_first: true
to_bgr: false
batch_transforms:
- !PadBatch
pad_to_stride: 32
use_padded_im_info: false
# only support batch_size=1 when evaluation
batch_size: 1
shuffle: false
drop_last: false
drop_empty: false
worker_num: 2
TestReader:
inputs_def:
fields: ['image', 'im_info', 'im_id', 'im_shape']
dataset:
!ImageFolder
anno_path: dataset/instance_seg/val.json
sample_transforms:
- !DecodeImage
to_rgb: true
- !ResizeImage
interp: 1
max_size: 1333
target_size: 800
use_cv2: true
- !NormalizeImage
is_channel_first: false
is_scale: true
mean: [0.485,0.456,0.406]
std: [0.229, 0.224,0.225]
- !Permute
channel_first: true
to_bgr: false
batch_transforms:
- !PadBatch
pad_to_stride: 32
use_padded_im_info: false
@fanweiya 再检查下这个json文件吧,我根据你提供的json文件,利用下面脚本测试:
#Find JSON that gives errors
import json
JSON_LOC="train.json"
#Open JSON
val_json = open(JSON_LOC, "r")
json_object = json.load(val_json)
val_json.close()
for i, instance in enumerate(json_object["annotations"]):
if len(instance["segmentation"][0]) == 4:
print("instance number", i, "raises arror:", instance["segmentation"][0])
结果如下:
('instance number', 697, 'raises arror:', [1804.9079754601225, 1321.4723926380368, 1684.049079754601, 1201.2269938650306])
('instance number', 700, 'raises arror:', [933.3333333333334, 2821.4285714285716, 621.4285714285714, 2890.4761904761904])
('instance number', 1179, 'raises arror:', [2896.363636363636, 936.3636363636363, 2918.181818181818, 623.6363636363636])
修改到正确的json文件后再启动训练吧。
@yghstill 好的,谢谢提醒,一直没发现
同一批数据使用maskrcnn可以训练,使用solov2报错,2.1和rc2.0版本都是同一个错误