正如 Tensorflow* 在其网站上所说,Estimators API通常应该使大多数 ML 任务更加友好。过去我一直使用 Tensorflow 的Model Zoo进行对象检测,因为我没有(现在仍然没有)拥有从头开始完全训练模型的硬件。
最近,我处理的图像越来越多,在训练(微调)期间动态提供数据的需求变得很重要。我当前的设置本质上是train.py用于训练的遗留脚本和feed_dict用于推理的方法。
我已经阅读了很多关于Estimators API及其常用管道的内容,但我只是找不到关于如何使用预训练模型的教程或帮助,就像我在该管道中所拥有的那样;所有示例都适用于图像分类,并且没有混合数据集创建和模型训练,这是一个真正的难题。
*张量流 r1.14
第 1 步:数据集创建
因此,鉴于我的数据格式如下:
data = [
[img_path_1, boxes_1],
[img_path_2, boxes_2],
...,
[img_path_N, boxes_N]
]
每个boxes_i格式的格式:
[
[label_A, xa, ya, xb, xb],
[label_B, xa, ya, xb, xb],
[label_A, xa, ya, xb, xb],
...,
[label_D, xa, ya, xb, xb],
]
根据一些教程并针对对象检测而不是分类进行了调整,似乎我需要像这样处理图像(为简单起见,省略了进一步的预处理和批处理功能):
dataset = tf.data.Dataset.from_tensor_slices(data)
def load_image_and_annotations(path_and_boxes):
path, boxes = path_and_boxes
image_string = tf.read_file(path)
image = tf.image.decode_jpeg(image_string, channels=3)
image = tf.image.convert_image_dtype(image, tf.float32)
return (image, boxes)
dataset = dataset.map(load_image_and_annotations, num_parallel_calls=...)
然后根据需要使用tf.data.Iterator对象遍历数据集。
第 2 步:培训
这主要是我不确定如何进行的地方。预制估算器和自定义估算器教程似乎不适合我的任务,因为我已经有一个冻结模型,我希望将其转换为估算器(而不是完全构建一个)。
我应该如何从旧设置过渡到这个新管道?