相关疑难解决方法(0)

"yield"关键字有什么作用?

yieldPython中关键字的用途是什么?它有什么作用?

例如,我试图理解这段代码1:

def _get_child_candidates(self, distance, min_dist, max_dist):
    if self._leftchild and distance - max_dist < self._median:
        yield self._leftchild
    if self._rightchild and distance + max_dist >= self._median:
        yield self._rightchild  
Run Code Online (Sandbox Code Playgroud)

这是来电者:

result, candidates = [], [self]
while candidates:
    node = candidates.pop()
    distance = node._get_dist(obj)
    if distance <= max_dist and distance >= min_dist:
        result.extend(node._values)
    candidates.extend(node._get_child_candidates(distance, min_dist, max_dist))
return result
Run Code Online (Sandbox Code Playgroud)

_get_child_candidates调用该方法时会发生什么?列表是否返回?单个元素?它又被召唤了吗?后续通话何时停止?


1.代码来自Jochen Schulz(jrschulz),他为度量空间创建了一个很棒的Python库.这是完整源代码的链接:模块mspace.

python iterator yield generator coroutine

9664
推荐指数
46
解决办法
212万
查看次数

TensorFlow - 从TFRecords文件中读取视频帧

TLDR; 我的问题是如何从TFRecords加载压缩视频帧.

我正在建立一个数据管道,用于在大型视频数据集(Kinetics)上训练深度学习模型.为此,我使用的是TensorFlow,更具体地说是结构tf.data.DatasetTFRecordDataset结构.由于数据集包含大约30万个10秒的视频,因此需要处理大量数据.在训练期间,我想从视频中随机采样64个连续帧,因此快速随机采样非常重要.为实现这一目标,培训期间可能存在许多数据加载方案:

  1. 来自视频的示例.使用ffmpegor OpenCV和示例帧加载视频.在视频中寻找是不太理想的,并且解码视频流比解码JPG要慢得多.
  2. JPG图片.通过将所有视频帧提取为JPG来预处理数据集.这会生成大量文件,由于随机访问可能不会很快.
  3. 数据容器.将数据集预处理为TFRecordsHDF5文件.需要更多工作才能准备好管道,但最有可能是这些选项中最快的.

我决定使用选项(3)并使用TFRecord文件来存储数据集的预处理版本.但是,这也不像看起来那么简单,例如:

  1. 压缩.将视频帧存储为TFRecords中的未压缩字节数据将需要大量磁盘空间.因此,我提取所有视频帧,应用JPG压缩并将压缩字节存储为TFRecords.
  2. 视频数据.我们正在处理视频,因此TFRecords文件中的每个示例都会非常大并且包含几个视频帧(对于10秒的视频,通常为250-300,具体取决于帧速率).

我编写了以下代码来预处理视频数据集,并将视频帧写为TFRecord文件(每个大小约为5GB):

def _int64_feature(value):
    """Wrapper for inserting int64 features into Example proto."""
    if not isinstance(value, list):
        value = [value]
    return tf.train.Feature(int64_list=tf.train.Int64List(value=value))

def _bytes_feature(value):
    """Wrapper for inserting bytes features into Example proto."""
    return tf.train.Feature(bytes_list=tf.train.BytesList(value=[value]))


with tf.python_io.TFRecordWriter(output_file) as writer:

  # Read and resize all video frames, np.uint8 of size [N,H,W,3]
  frames = ... …
Run Code Online (Sandbox Code Playgroud)

python deep-learning tensorflow tfrecord tensorflow-datasets

7
推荐指数
2
解决办法
4039
查看次数