使用MaskRCNN训练自己的ODAI数据集的思路 遇到的问题及解决方案

1.baseline选择

因为刚接触two-stage表示方法以及实例分割算法,而且正好ODAI项目是个目标检测任务,所以就使用maskRCNN作为baseline。初步思路是将DOTA数据集转化为coco数据集的格式,扔入MaskRCNN中训练,感觉是一个很简单的过程,但是实际上在实践中就遇到了很多问题。

2.数据集格式转化问题

第一步是要把DOTA数据集的格式转化为MaskRCNN能识别的coco数据集格式。下面先看DOTA数据集里的格式示例
ODAI数据集格式示例
主要分为5种类型的数据:
1.imagesource 图片来源
2.gsd 相当于比例尺
3.8个坐标值 表示boundingbox(不使用x,y,w,h表示的原因是这个数据集里的bbox可能是斜的)
4.category 16个分类中的一个
5.Difficulty 是否难以识别

转数据集格式:

{
    # coco数据集格式
    "info": info, # 可省略
    "licenses": [license], # 可省略
    "images": [image], # 有前三个就够了,后面置空字符串
    #image列表,每个image有file_name,height,width,license,coco_url,date_captured,flickr_urlid
    "annotations": [annotation], # 都需要转换
    #annotation列表,每个annotation有id,image id,category id,segmentation,area,bbox,iscrowd
    "categories": [category] # supercategory可以置空字符串
    #categories列表,每个category有id,name,supercategory
}
  1. 因为ODAI中只有bbox(还是倾斜的),并没有segmentation的概念,所以我干脆将DOTA-bbox扩展为coco-bbox和coco-segmentation两个概念,想法很简单,就是将原始的DOTA-bbox直接看作coco-segmentation,用一个横平竖直的框套住DOTA-bbox作为coco-bbox。category就用一个字典。键值是它的标号,作为coco-category id
  2. coco-segmentation有两种格式,我搞了半天才弄懂。
    [polygen] iscrowd为0时的格式,每个点用xy坐标表示,相当于用好多点把一个segmentation从图上划分出来了
    [RLE] iscrowd为1时的格式,相当于把图片看作一副同样大小的,用0/1表示的坐标矩阵,为1时就是此处有segmentation,就是在图上作掩码。把这个01矩阵展开成一维,按计数的方法表示为RLE格式
    eg: [0,0,0,1,0,0,1,1]->[3个0,1个1,2个0,2个1]->[3,0,1,1,2,0,2,1](好像是这样,我最终没采用这个方法测试)
  3. iscrowd有两种格式,我也搞了半天才弄懂
    iscrowd=1 表示这个segmentation里面有不止一个目标物体 但是分不开(俩人如胶似漆的抱在一起)
    iscrowd=0 表示这个segmentation里面就一个目标物体(一只单身狗)
    (好像就这么简单。。我咋看了那么久才理解呢。。。)

文末贴出转格式的代码,结构混乱。。求轻喷。。

3.把数据集扔到MaskRCNN里训练

我记得只需要改几个小地方就能运行了:

  1. 自己的数据集目录
  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值