Github上发布了何凯明的Mask R-CNN目标检测和对象分割Keras和TensorFlow的实现代码。
这个实现基于Python 3、Keras和TensorFlow。模型对图片中的每个对象实例生成包围框(bounding boxes)和分割掩膜(segmentation masks)。基于特征金字塔网络(FPN)和ResNet101的主干(backbone)
github仓库包含以下内容:
建立在FPN和ResNet101上的Mask R-CNN源代码
MS COCO上的训练代码
MS COCO上的预训练权重
可视化每一步的训练管道(pipline)的Jupyter notebooks
用于多GPU训练的并行类
MS COCO上的指标评估
在你自己的数据集上训练的例子
源代码有注释而且设计得易于扩展。如果你在你的研究中用了这些代码,请引用本仓库。如果你从事3D视觉,你可能会觉得我们最近发布的Matterport3D数据集对你有用。
更多参考:https://github.com/matterport/Mask_RCNN
下面我们要来讲讲对无人机实现检测和分割
该工具将分别为每个原始图像生成三个图像
IMAGENAME_color_mask.png
IMAGENAME_mask.png
IMAGENAME_watershed_mask.png
这里共有546张图片。测试数据是每秒25帧的视频文件。最后一个注释完成后,我们需要IMAGENAME_color_mask.png文件。
需要将其重命名为:
IMAGENAME.png
Dataset folder数据集文件夹
Annotations folder注释文件夹,用于存储注释后的蒙版数据
JPEGImages文件夹,其中包含原始JPG图像
Train_data_dir运行脚本以创建tf记录文件所在的目录
Label_map.pbtxt数据分类JSON描述,这里是固定翼无人机的分类
创建tf记录数据,
首先你需要下载脚本文件create_mask_rcnn_tf_record.py,下载地址是:
https://github.com/vijendra1125/Custom-Mask-RCNN-using-Tensorfow-Object-detection-API
放置在tensorflow对象检测API框架中
研究\ object_detection\ dataset_tools
在目录下,然后打开修改后的代码行的第57行,并且必须正确索引标记的每个对象掩码。
然后运行如下
您将获得生成的tf记录文件。
上述数据标注和生成过程仅适用于单个对象标记。如果有多个对象,请首先使用labelImg标记框,生成XML标签文件,然后通过PixelAnnotation生成掩码数据。
其次迁移学习
要使用迁移学习训练Mask-RCNN来实现自定义对象检测,首先需要预训练模型。这里使用的预训练模型是:
Mask_rcnn_inception_v2_coco
下载地址是:
Http://download.tensorflow.org/models/object_detection/mask_rcnn_inception_v2_coco_2018_01_28.tar.gz
修改pipeline_config文件
从object_detection \ samples \ configs文件夹中查找相应的配置文件。
mask_rcnn_inception_v2_coco.config
将所有PATH_TO_BE_CONFIGURED更改指向实际路径,然后根据需要调整以下参数。
Keep_aspect_ratio_resizer
-min_dimension
-max_dimension
改为600
-num_classes字段的值更改为1,
表示我们只有一个类别
要防止在训练期间由资源耗尽导致的内存溢出错误,请将以下属性添加到train_config块。
Batch_queue_capacity:150
Num_batch_queue_threads:8
Prefetch_queue_capacity:10
Gradient_clipping_by_norm:10.0
保存配置文件后,运行以下命令行以开始训练。
通过tensorboard查看培训
在训练结果之后,运行以下脚本以导出pb文件。
使用导出的pb文件,测试结果如下
相关源码关注微信公众号:“图像算法”或者微信搜索账号imalg_cn关注公众号