| 130 | |
| 131 | |
| 132 | class SlicePipeline(Pipeline): |
| 133 | def __init__( |
| 134 | self, |
| 135 | device, |
| 136 | batch_size, |
| 137 | pos_size_iter, |
| 138 | num_threads=1, |
| 139 | device_id=0, |
| 140 | is_fused_decoder=False, |
| 141 | axes=None, |
| 142 | axis_names=None, |
| 143 | normalized_anchor=True, |
| 144 | normalized_shape=True, |
| 145 | ): |
| 146 | super().__init__(batch_size, num_threads, device_id, seed=1234) |
| 147 | self.is_fused_decoder = is_fused_decoder |
| 148 | self.pos_size_iter = pos_size_iter |
| 149 | self.device = device |
| 150 | self.input = ops.readers.Caffe(path=caffe_db_folder, random_shuffle=False) |
| 151 | self.input_crop_pos = ops.ExternalSource() |
| 152 | self.input_crop_size = ops.ExternalSource() |
| 153 | |
| 154 | if self.is_fused_decoder: |
| 155 | self.decode = ops.decoders.ImageSlice( |
| 156 | device="cpu", |
| 157 | output_type=types.RGB, |
| 158 | normalized_anchor=normalized_anchor, |
| 159 | normalized_shape=normalized_shape, |
| 160 | axis_names=axis_names, |
| 161 | axes=axes, |
| 162 | ) |
| 163 | else: |
| 164 | self.decode = ops.decoders.Image(device="cpu", output_type=types.RGB) |
| 165 | self.slice = ops.Slice( |
| 166 | device=self.device, |
| 167 | normalized_anchor=normalized_anchor, |
| 168 | normalized_shape=normalized_shape, |
| 169 | axis_names=axis_names, |
| 170 | axes=axes, |
| 171 | ) |
| 172 | |
| 173 | def define_graph(self): |
| 174 | inputs, labels = self.input(name="Reader") |
| 175 | self.crop_pos = self.input_crop_pos() |
| 176 | self.crop_size = self.input_crop_size() |
| 177 | |
| 178 | if self.is_fused_decoder: |
| 179 | images = self.decode(inputs, self.crop_pos, self.crop_size) |
| 180 | else: |
| 181 | images = self.decode(inputs) |
| 182 | if self.device == "gpu": |
| 183 | images = images.gpu() |
| 184 | images = self.slice(images, self.crop_pos, self.crop_size) |
| 185 | return images |
| 186 | |
| 187 | def iter_setup(self): |
| 188 | crop_pos, crop_size = self.pos_size_iter.next() |
| 189 | self.feed_input(self.crop_pos, crop_pos) |
no outgoing calls