TensorFlow iNaturalist模型detection_classes含义及物种名转换问询
如何将Faster RCNN FGVC模型的detection_classes转换为iNaturalist物种名称?
嗨,我来帮你解决这个问题!你看到的detection_classes里的数值其实是模型训练时用的iNaturalist数据集内部类别ID,不是GBIF的物种编号,这就是你没法直接匹配GBIF表格的原因。接下来给你具体的解决步骤:
- 先确认模型对应的数据集版本:
faster_rcnn_resnet101_fgvc一般基于iNaturalist 2017或2018数据集训练,这两个版本的类别ID对应关系略有差异,得先搞清楚你用的模型依赖哪个版本。 - 获取类别ID到物种名称的映射文件:iNaturalist官方数据集里会附带
categories.json或类似标注文件,里面记录了每个内部ID对应的物种常用名、学名等信息。比如2018版数据集的映射条目结构大概是这样:{"id": 2135, "name": "western gull", "scientific_name": "Larus occidentalis"}
- 编写代码完成转换:把映射文件加载成字典,将检测结果里的浮点数ID转成整数,再匹配对应的物种名称。这里给你一个Python示例:
import json # 替换成你的映射文件实际路径 with open('categories.json', 'r') as f: category_map = json.load(f) # 构建ID到学名的映射字典 id_to_species = {item['id']: item['scientific_name'] for item in category_map} # 你的检测结果中的classes数组 detection_classes = [2135.0, 1752.0, 360.0, 1160.0, 2553.0] # 转成整数ID(模型输出是浮点数,实际对应整数类别ID) class_ids = [int(cid) for cid in detection_classes] # 获取对应的物种名称,未知ID会返回提示文本 result_species = [id_to_species.get(cid, f"未知类别ID: {cid}") for cid in class_ids] print("检测到的物种:", result_species)
需要注意的是,如果找不到现成的映射文件,你可以去iNaturalist数据集的官方发布页面下载对应的标注包,里面肯定包含完整的类别对应关系。千万不要直接用这个内部ID去查GBIF——这两个编号体系完全不互通哦!
内容的提问来源于stack exchange,提问作者candrwow
相关产品推荐
相关产品推荐

