【发布时间】:2019-12-26 15:47:32
【问题描述】:
我已经下载了一些 H5 文件,据我目前的理解,这些文件包含经过训练的图像识别模型。我可以使用 Python、Keras、Tensorflow 和 ImageAI 成功地将这些模型应用于图像。
从互联网上的一些例子中,我还发现其中一个模型被训练用于检测汽车和人。所以我在其中输入了一些汽车的图像并且它起作用了。
我现在正尝试从 H5 文件本身获取该信息,以便我可以将一些预期的输入和一些非预期的输入传递给检测器以查看会发生什么。
我在 Stack Overflow 上搜索了如何读取 H5 文件并从中获取信息[1]、[2]、[3]、[4],但我得到的所有输出都只是一堆技术数据。
让我们举一个具体的例子。我有一个可以明显识别汽车和卡车的模型:
正如我们在图像中看到的,矩形具有car 和truck 之类的标签,因此这是它可以识别的对象类型。我想从 H5 文件中准确获取该信息。
我有
import h5py
def printH5Content(filename: str):
with h5py.File(filename, 'r') as f:
print("Keys: %s" % f.keys())
a_group_key = list(f.keys())[0]
print(list(f[a_group_key]))
printH5Content(model_path)
但它只给了我
Keys: <KeysViewHDF5 ['model_weights']>
['add_1', 'add_10', 'add_11', 'add_12', 'add_13', 'add_14', ... 'zero_padding2d_4', 'zero_padding2d_5']
另外,访问者没有提供更多信息:
def printH5Content(filename: str):
with h5py.File(filename, 'r') as f:
f.visit(print)
如何从 H5 文件中获取 car 和 truck 这两个词,以便了解它的训练目的?
从 cmets 编辑:
我确信 car 和 truck 一词必须通过消除出现在 H5 文件中。我有 3 个输入:代码、H5 模型和 JPG 图像。
- JPG 只是像素的排列。它对内容一无所知。
- 我的代码只有 6 行,不包含任何条款
- 剩下的唯一选择是 H5 文件
我的代码的最小版本是:
from imageai.Detection import ObjectDetection
detector = ObjectDetection()
detector.setModelTypeAsTinyYOLOv3()
detector.setModelPath("./models/yolo-tiny.h5")
detector.loadModel()
detection = detector.detectObjectsFromImage(input_image="./input/cars.jpg", output_image_path="./output/cars.jpg")
【问题讨论】:
-
如果您的意思是将 HDF5 作为 keras 模型文件,则类不存储在 HDF5 文件中,因此您将无法找到此信息。那是在 python 中完成的后处理。
-
在您运行的python代码或程序中,您没有提供相关信息。
-
H5文件的内容是groups、datasets和每个级别的属性(如果有)。您可以使用h5py(阅读其文档)找到所有这些,或者使用HDF5阅读器之一可能更容易。h5dump可能在您的操作系统上可用。 -
那么你的问题无法回答,正如我所说的HDF5文件不包含类信息,类的语义含义是在进行model.predict时由HDF5文件之外的代码解释的。模型本身对索引以外的类一无所知。
-
不,您无法执行 H5 文件,您正在运行并加载 H5 模型的程序代码具有该信息。
标签: python tensorflow keras h5py imageai