4、picodet 小目标训练全流程( 二 )


voc_xmls_to_cocojson(annpath='dataset/pqdetection_voc/labels/',imgpath="dataset/pqdetection_voc/images",labelpath="dataset/pqdetection_voc/label_list.txt",output_dir="dataset/pqdetection_coco/",output_file='pddetection.json')
Start converting !100%|██████████| 1477/1477 [00:00<00:00, 11965.53it/s]
查看转换后数据的状态 , sahi有许多个的关于coco的函数 , 可以查看相关链接
from sahi.utils.coco import Cocococo=Coco.from_coco_dict_or_path("dataset/pqdetection_coco/pddetection.json")coco.stats
indexing coco dataset annotations...Loading coco annotations: 100%|██████████| 1477/1477 [00:00<00:00, 5365.99it/s]{'num_images': 1477,'num_annotations': 3924,'num_categories': 1,'num_negative_images': 0,'num_images_per_category': {'ball': 1477},'num_annotations_per_category': {'ball': 3924},'min_num_annotations_in_image': 1,'max_num_annotations_in_image': 25,'avg_num_annotations_in_image': 2.6567366283006093,'min_annotation_area': 36,'max_annotation_area': 1158852,'avg_annotation_area': 5425.130988786952,'min_annotation_area_per_category': {'ball': 36},'max_annotation_area_per_category': {'ball': 1158852}}
2、使用sahi切图
切图有两个尺度的 , 一个是416 , 一个是256
from sahi.slicing import slice_cocofrom sahi.utils.file import load_jsonfrom PIL import Image,ImageDrawimport matplotlib.pyplot as plt
2.1 切图分析及过程可视化
尝试其中的一张图像
coco_dict = load_json('dataset/pqdetection_coco/pddetection.json')f,axarr = plt.subplots(1,1,figsize=(12,12))#read imgimg_ind=100img = Image.open(os.path.join('dataset/pqdetection_voc/images',coco_dict['images'][img_ind]["file_name"]))# iter annotationsfor ann_ind in range(len(coco_dict['annotations'])):if coco_dict["annotations"][ann_ind]['image_id']==coco_dict['images'][img_ind]['id']:xywh = coco_dict["annotations"][ann_ind]["bbox"]xyxy=[xywh[0],xywh[1],xywh[0]+xywh[2],xywh[1]+xywh[3]]ImageDraw.Draw(img).rectangle(xyxy,width=2)axarr.imshow(img)
上图标注出了乒乓球位置 , 是个白框;更多的切图效果可以查看
2.2 使用完整的切图命令进行切图
进行切图 , 图片大小,重叠0.2
coco_dict,coco_path = slice_coco(coco_annotation_file_path="dataset/pqdetection_coco/pddetection.json", image_dir='dataset/pqdetection_voc/images',output_coco_annotation_file_name='sliced_coco.json',ignore_negative_samples=False,output_dir='sliced_coco',slice_height=256,slice_width=256,overlap_height_ratio=0.2,overlap_width_ratio=0.2,min_area_ratio=0.1,verbose=True)
以上代码如果图片多,最好放到一个脚本里执行 。其中的定义是(标注框面积/crop图面积)/(标注框面积/原图面积) les这个参数是指切后的图如果图片没有标注 , 是否进行忽略 , 默认是False,即不忽略 , 我们如果只关注有标注框的图那么可以设置成True.
以上切图工作会花一些时间 。
文件夹保存结果为
:
.jpg
.jpg等
后边是切图的时候左上右下的结果

4、picodet 小目标训练全流程

文章插图
还有一个
..json的文件 , 看来是我们指定的=‘.json’,后边又加一个"_coco.json"的结果 ,