MCPcopy Create free account
hub / github.com/THUYimingLi/BackdoorBox / PoisonedDatasetFolder

Class PoisonedDatasetFolder

core/attacks/Refool.py:238–319  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

236 return img
237
238class PoisonedDatasetFolder(DatasetFolder, AddDatasetFolderTriggerMixin):
239 def __init__(self, benign_dataset, y_target, poisoned_rate, poisoned_transform_index, poisoned_target_transform_index, reflection_cadidates,\
240 max_image_size=560, ghost_rate=0.49, alpha_b=-1., offset=(0, 0), sigma=-1, ghost_alpha=-1.):
241 """
242 Args:
243 reflection_cadidates (List of numpy.ndarray of shape (H, W, C) or (H, W))
244 max_image_size (int): max(Height, Weight) of returned image
245 ghost_rate (float): rate of ghost reflection
246 alpha_b (float): the ratio of background image in blended image, alpha_b should be in $(0,1)$, set to -1 if random alpha_b is desired
247 offset (tuple of 2 interger): the offset of ghost reflection in the direction of x axis and y axis, set to (0,0) if random offset is desired
248 sigma (interger): the sigma of gaussian kernel, set to -1 if random sigma is desired
249 ghost_alpha (interger): ghost_alpha should be in $(0,1)$, set to -1 if random ghost_alpha is desired
250 """
251 super(PoisonedDatasetFolder, self).__init__(
252 benign_dataset.root,
253 benign_dataset.loader,
254 benign_dataset.extensions,
255 benign_dataset.transform,
256 benign_dataset.target_transform,
257 None)
258 total_num = len(benign_dataset)
259 poisoned_num = int(total_num * poisoned_rate)
260 assert poisoned_num >= 0, 'poisoned_num should greater than or equal to zero.'
261 tmp_list = list(range(total_num))
262 random.shuffle(tmp_list)
263 self.poisoned_set = frozenset(tmp_list[:poisoned_num])
264
265 # Add trigger to images
266 if self.transform is None:
267 self.poisoned_transform = Compose([])
268 else:
269 self.poisoned_transform = copy.deepcopy(self.transform)
270
271 # split transform into two pharses
272 if poisoned_transform_index < 0:
273 poisoned_transform_index = len(self.poisoned_transform.transforms) + poisoned_transform_index
274 self.pre_poisoned_transform = Compose(self.poisoned_transform.transforms[:poisoned_transform_index])
275 self.post_poisoned_transform = Compose(self.poisoned_transform.transforms[poisoned_transform_index:])
276
277 # Modify labels
278 if self.target_transform is None:
279 self.poisoned_target_transform = Compose([])
280 else:
281 self.poisoned_target_transform = copy.deepcopy(self.target_transform)
282 self.poisoned_target_transform.transforms.insert(poisoned_target_transform_index, ModifyTarget(y_target))
283
284 # Add Trigger
285 AddDatasetFolderTriggerMixin.__init__(
286 self,
287 total_num,
288 reflection_cadidates,
289 max_image_size,
290 ghost_rate,
291 alpha_b,
292 offset,
293 sigma,
294 ghost_alpha)
295

Callers 1

CreatePoisonedDatasetFunction · 0.70

Calls

no outgoing calls

Tested by

no test coverage detected