我遵循新的Tensorflow 2对象检测API 2文档,在Google平台TPU上使用传输学习来训练一个更快的RCNN检测器。培训完成后,我将结果加载到工作站上,并使用tensorflow 2实现导出模型(‘ObjectProtection/ exported _main_v2.py’)。我遵循官方指令并在本地设置环境(运行在macOS catalina、tensorflow 2.2、python3.6等上)
然而,推理管道的非最大补充(NMS)部分似乎不起作用,因为在某些情况下,不同类的边界框重叠几乎完成。我对代码进行了调试,以确保在推理管道中调用NMS (对象检测/core/post_processing.py中的batch_multiclass_non_max_suppression方法)的对象检测api实现,以获得更快的-RCNN模型。在推理时,Fast体系结构调用了它的两倍。
我为GCPs AI-Platform TPU使用的指令是官方对象检测api页面中的指令:链接。我修改了培训参数,以使用GCP上支持的TPU运行时和Python版本,因为不支持实际示例。相反,我用:
gcloud ai-平台作业提交培训whoamiobject_detectiondate +%m_%d_%Y_%H_%M_%S
-作业-dir=gs://${MODEL_DIR}
-包裹-路径./对象_检测
-模块-名称object_detection.model_main_tf2
-运行时-版本2.2
-python-版本3.7
-规模-层BASIC_TPU
-美国地区-中央1
--
-使用tpu真
-模型_dir=gs://${MODEL_DIR}
--pipeline_config_path=gs://${PIPELINE_CONFIG_PATH}
用于培训的dataset是官方对象检测api页面( 链接 )中的Pets示例。但是,为了保持一致性,我使用Tensorflow 2对象检测API 2方法导出了它。
我使用的预训练神经网络是在TPU上训练的更快的R-CNN ResNet101 V1 1024x1024。
我使用的配置文件是用于TPU培训的tpu-8.config。我把班次改成了37节。我还将批数改为batch_size: 32,因为tpu v2上的gpc正在崩溃。fine_tune_checkpoint_type改为fine_tune_checkpoint_type:“检测”,我使用的唯一数据增强是random_horizontal_flip。
官方物体检测2模型动物园报告的结果是TPU培训的架构,而不是SSD。然而,官方对象检测tpu兼容性指南提到,目前SSD只支持,而非最大抑制不是。
为什么NMS不起作用?
发布于 2021-05-31 08:53:36
我认为这是因为batch_multiclass_non_max_suppression方法是一个类感知的NMS (或者至少是我所理解的)。这意味着,对于每个类,在属于类的所有框中,如果IOU大于阈值,则只保留得分最高的框。
我想你想要一个不可知的NMS (use_class_agnostic_nms: True)。此外,如果您想要一个类来检测,您还应该设置max_classes_per_detection: 1。
https://stackoverflow.com/questions/65850309
复制相似问题