class_docstr: Apply transformations per-channel
  
  Args:
      transforms (list): list of transformations to compose.
      channels (sequence): channels to apply the transform to. Pass None to apply to all.
                       Default: None (apply to all)
      p (float): probability of applying the transform. Default: 0.5.
class_docstr_tok: ["Apply","transformations","per-channel","Args",":","transforms","(","list",")",":","list","of","transformations","to","compose",".","channels","(","sequence",")",":","channels","to","apply","the","transform","to",".","Pass","None","to","apply","to","all",".","Default",":","None","(","apply","to","all",")","p","(","float",")",":","probability","of","applying","the","transform",".","Default",":","0.5","."]
code: def __init__(
      self,
      transforms: TransformsSeqType,
      channels: typing.Optional[typing.Sequence[int]] = None,
      p: float = 0.5,
  ):
      super(PerChannel, self).__init__(transforms, p)
      self.channels = channels
  
imports: from __future__ import division
  import random
  import typing
  import warnings
  from collections import defaultdict
  import numpy
  from ..None import random_utils
  from .bbox_utils import BboxParams, BboxProcessor
  from .keypoints_utils import KeypointParams, KeypointsProcessor
  from .serialization import SERIALIZABLE_REGISTRY, Serializable, get_shortest_class_fullname, instantiate_nonserializable
  from .transforms_interface import BasicTransform
  from .utils import format_args, get_shape
label_desc: Use image node_id 1 to create a new PerChannel object from inherited base classes: BaseCompose with example: obj = PerChannel(transforms, channels, p)