{"id":158,"date":"2021-12-13T20:25:01","date_gmt":"2021-12-13T12:25:01","guid":{"rendered":"http:\/\/139.9.1.231\/?p=158"},"modified":"2021-12-20T15:55:50","modified_gmt":"2021-12-20T07:55:50","slug":"1","status":"publish","type":"post","link":"http:\/\/139.9.1.231\/index.php\/2021\/12\/13\/1\/","title":{"rendered":"\u6570\u636e\u6269\u5145\u548c\u589e\u5e7f"},"content":{"rendered":"\n<div class=\"wp-block-cover has-background-dim\"><img class=\"wp-block-cover__image-background\" alt=\"\" src=\"https:\/\/images.pexels.com\/photos\/10297721\/pexels-photo-10297721.jpeg?cs=srgb&amp;dl=pexels-lukas-rodriguez-10297721.jpg&amp;fm=jpg\" data-object-fit=\"cover\"\/><div class=\"wp-block-cover__inner-container\">\n<p class=\"has-large-font-size\">                                                               chenpaopao<\/p>\n<\/div><\/div>\n\n\n\n<p>       \u6700\u8fd1\u5728\u5b66\u4e60 torch\uff0c\u5bf9\u4e8e\u56fe\u50cf\u6570\u636e\u7684\u9884\u5904\u7406\uff0c torchvision \u63d0\u4f9b\u4e86torchvision.transforms \u6a21\u5757\uff0c\u7528\u4e8e\u9884\u5904\u7406\u3002<\/p>\n\n\n\n<ol><li>1. \u88c1\u526a\u2014\u2014Crop \u4e2d\u5fc3\u88c1\u526a\uff1atransforms.CenterCrop \u968f\u673a\u88c1\u526a\uff1atransforms.RandomCrop \u968f\u673a\u957f\u5bbd\u6bd4\u88c1\u526a\uff1atransforms.RandomResizedCrop \u4e0a\u4e0b\u5de6\u53f3\u4e2d\u5fc3\u88c1\u526a\uff1atransforms.FiveCrop \u4e0a\u4e0b\u5de6\u53f3\u4e2d\u5fc3\u88c1\u526a\u540e\u7ffb\u8f6c\uff0ctransforms.TenCrop<\/li><li>2. \u7ffb\u8f6c\u548c\u65cb\u8f6c\u2014\u2014Flip and Rotation \u4f9d\u6982\u7387p\u6c34\u5e73\u7ffb\u8f6c\uff1atransforms.RandomHorizontalFlip(p=0.5) \u4f9d\u6982\u7387p\u5782\u76f4\u7ffb\u8f6c\uff1atransforms.RandomVerticalFlip(p=0.5) \u968f\u673a\u65cb\u8f6c\uff1atransforms.RandomRotation<\/li><li>3. \u56fe\u50cf\u53d8\u6362 resize\uff1atransforms.Resize \u6807\u51c6\u5316\uff1atransforms.Normalize \u8f6c\u4e3atensor\uff0c\u5e76\u5f52\u4e00\u5316\u81f3[0-1]\uff1atransforms.ToTensor \u586b\u5145\uff1atransforms.Pad \u4fee\u6539\u4eae\u5ea6\u3001\u5bf9\u6bd4\u5ea6\u548c\u9971\u548c\u5ea6\uff1atransforms.ColorJitter \u8f6c\u7070\u5ea6\u56fe\uff1atransforms.Grayscale \u7ebf\u6027\u53d8\u6362\uff1atransforms.LinearTransformation() \u4eff\u5c04\u53d8\u6362\uff1atransforms.RandomAffine \u4f9d\u6982\u7387p\u8f6c\u4e3a\u7070\u5ea6\u56fe\uff1atransforms.RandomGrayscale \u5c06\u6570\u636e\u8f6c\u6362\u4e3aPILImage\uff1atransforms.ToPILImage transforms.Lambda\uff1aApply a user-defined lambda as a transform.<\/li><li>4. \u5bf9transforms\u64cd\u4f5c\uff0c\u4f7f\u6570\u636e\u589e\u5f3a\u66f4\u7075\u6d3b transforms.RandomChoice(transforms)\uff0c \u4ece\u7ed9\u5b9a\u7684\u4e00\u7cfb\u5217transforms\u4e2d\u9009\u4e00\u4e2a\u8fdb\u884c\u64cd\u4f5c transforms.RandomApply(transforms, p=0.5)\uff0c\u7ed9\u4e00\u4e2atransform\u52a0\u4e0a\u6982\u7387\uff0c\u4f9d\u6982\u7387\u8fdb\u884c\u64cd\u4f5c transforms.RandomOrder\uff0c\u5c06transforms\u4e2d\u7684\u64cd\u4f5c\u968f\u673a\u6253\u4e71<\/li><\/ol>\n\n\n\n<p>\u6b64\u5916\uff0c\u8fd8\u63d0\u4f9b\u4e86 <code>torchvision.transforms.Compose( ),\u53ef\u4ee5\u540c\u65f6\u4f20\u9012\u591a\u4e2a\u51fd\u6570<\/code> <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mytransform = transforms.Compose(&#91;\ntransforms.ToTensor()\n]\n)\n\n# torch.utils.data.DataLoader\ncifarSet = torchvision.datasets.CIFAR10(root = \"..\/data\/cifar\/\", train= True, download = True, transform = mytransform )\ncifarLoader = torch.utils.data.DataLoader(cifarSet, batch_size= 10, shuffle= False, num_workers= 2)<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">&gt;&gt;&gt; <strong>transforms.Compose([<\/strong> <br>&gt;&gt;&gt;     <strong>transforms.CenterCrop(<\/strong>10<strong>),<\/strong> <br>&gt;&gt;&gt;     <strong>transforms.PILToTensor(),<\/strong> &gt;&gt;&gt;         <strong>transforms.ConvertImageDtype(torch.float),<\/strong> &gt;&gt;&gt; <strong>])<\/strong><\/pre>\n\n\n\n<p>\u4f5c\u4e3a Dataset\u7c7b\u7684\u53c2\u6570\u4f20\u9012 \uff1a<\/p>\n\n\n\n<p><code>torchvision.datasets.Caltech101<\/code>(<em>root:&nbsp;<a href=\"https:\/\/docs.python.org\/3\/library\/stdtypes.html#str\">str<\/a><\/em>,&nbsp;<em>target_type:&nbsp;Union[List[<a href=\"https:\/\/docs.python.org\/3\/library\/stdtypes.html#str\">str<\/a>],&nbsp;<a href=\"https:\/\/docs.python.org\/3\/library\/stdtypes.html#str\">str<\/a>]&nbsp;=&nbsp;&#8216;category&#8217;<\/em>,&nbsp;<em>transform:&nbsp;Optional[Callable]&nbsp;=&nbsp;None<\/em>,&nbsp;<em>target_transform:&nbsp;Optional[Callable]&nbsp;=&nbsp;None<\/em>,&nbsp;<em>download:&nbsp;<a href=\"https:\/\/docs.python.org\/3\/library\/functions.html#bool\">bool<\/a>&nbsp;=&nbsp;False<\/em>) <\/p>\n\n\n\n<p>\u6216\u8005\u81ea\u5b9a\u4e49\u7684\u7c7b\uff1a <br>\uff08\u81ea\u5df1\u5b9e\u73b0torchvision.datasets.CIFAR10\u7684\u529f\u80fd\uff09 <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\uff08\u81ea\u5df1\u5b9e\u73b0torchvision.datasets.CIFAR10\u7684\u529f\u80fd\uff09\nimport os\nimport torch\nimport torch.utils.data as data\nfrom PIL import Image\n\ndef default_loader(path):\nreturn Image.open(path).convert('RGB')\n\nclass myImageFloder(data.Dataset):\ndef __init__(self, root, label, transform = None, target_transform=None, loader=default_loader):\nfh = open(label)\nc=0\nimgs=&#91;]\nclass_names=&#91;]\nfor line in fh.readlines():\nif c==0:\nclass_names=&#91;n.strip() for n in line.rstrip().split('    ')]\nelse:\ncls = line.split()\nfn = cls.pop(0)\nif os.path.isfile(os.path.join(root, fn)):\nimgs.append((fn, tuple(&#91;float(v) for v in cls])))\nc=c+1\nself.root = root\nself.imgs = imgs\nself.classes = class_names\nself.transform = transform\nself.target_transform = target_transform\nself.loader = loader\n\ndef __getitem__(self, index):\nfn, label = self.imgs&#91;index]\nimg = self.loader(os.path.join(self.root, fn))\nif self.transform is not None:\nimg = self.transform(img)\nreturn img, torch.Tensor(label)\n\ndef __len__(self):\nreturn len(self.imgs)\ndef getName(self):\nreturn self.classes<\/code><\/pre>\n\n\n\n<p> \u5b9e\u4f8b\u5316torch.utils.data.DataLoader <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mytransform = transforms.Compose(&#91;\ntransforms.ToTensor()\n]\n)\n\n# torch.utils.data.DataLoader\nimgLoader = torch.utils.data.DataLoader(\nmyFloder.myImageFloder(root = \"..\/data\/testImages\/images\", label = \"..\/data\/testImages\/test_images.txt\", transform = mytransform ),\nbatch_size= 2, shuffle= False, num_workers= 2)\n\nfor i, data in enumerate(imgLoader, 0):\nprint(data&#91;i]&#91;0])\n# opencv\nimg2 = data&#91;i]&#91;0].numpy()*255\nimg2 = img2.astype('uint8')\nimg2 = np.transpose(img2, (1,2,0))\nimg2=img2&#91;:,:,::-1]#RGB-&gt;BGR\ncv2.imshow('img2', img2)\ncv2.waitKey()\nbreak<\/code><\/pre>\n\n\n\n<h3>2 \u4f7f\u7528Python+OpenCV\u8fdb\u884c\u6570\u636e\u6269\u5145\uff08\u9002\u7528\u4e8e\u76ee\u6807\u68c0\u6d4b\uff09<\/h3>\n\n\n\n<figure class=\"wp-block-pullquote\"><blockquote><p>https:\/\/pythonmana.com\/2021\/12\/202112131040182515.html<\/p><cite>\u4e0b\u9762\u5185\u5bb9\u6765\u81ea<\/cite><\/blockquote><\/figure>\n\n\n\n<p> \u6570\u636e\u6269\u5145\u662f\u4e00\u79cd\u589e\u52a0\u6570\u636e\u96c6\u591a\u6837\u6027\u7684\u6280\u672f\uff0c\u65e0\u9700\u6536\u96c6\u66f4\u591a\u771f\u5b9e\u6570\u636e\uff0c\u4f46\u4ecd\u6709\u52a9\u4e8e\u63d0\u9ad8\u6a21\u578b\u7cbe\u5ea6\u5e76\u9632\u6b62\u6a21\u578b\u8fc7\u62df\u5408\u3002 <\/p>\n\n\n\n<p>\n\n\n\u6570\u636e\u6269\u5145\u65b9\u6cd5\u5305\u62ec\uff1a\n\n\n\n\n<\/p>\n\n\n\n<ol><li>\u968f\u673a\u88c1\u526a<\/li><li>Cutout<\/li><li>\u989c\u8272\u6296\u52a8<\/li><li>\u589e\u52a0\u566a\u97f3<\/li><li>\u8fc7\u6ee4<\/li><\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>import os\n\nimport cv2\n\nimport numpy as np\n\nimport random\n\n\ndef file_lines_to_list(path):\n\n    '''\n\n    ### \u5728TXT\u6587\u4ef6\u91cc\u7684\u884c\u8f6c\u6362\u4e3a\u5217\u8868 ###\n\n    path: \u6587\u4ef6\u8def\u5f84\n\n    '''\n\n    with open(path) as f:\n\n        content = f.readlines()\n\n    content = &#91;(x.strip()).split() for x in content]\n\n    return content\n\n\ndef get_file_name(path):\n\n    \n'''\n\n    ### \u83b7\u53d6Filepath\u7684\u6587\u4ef6\u540d ###\n\n    path: \u6587\u4ef6\u8def\u5f84\n\n    '''\n\n    basename = os.path.basename(path)\n\n    onlyname = os.path.splitext(basename)&#91;0]\n\n    return onlyname\n\n\ndef write_anno_to_txt(boxes, filepath):\n\n    \n'''\n\n    ### \u7ed9TXT\u6587\u4ef6\u5199\u6ce8\u91ca ###\n\n    boxes: format &#91;&#91;obj x1 y1 x2 y2],...]\n\n    filepath: \u6587\u4ef6\u8def\u5f84\n    '''\n\n    txt_file = open(filepath, \"w\")\n\n    for box in boxes:\n\n        print(box&#91;0], int(box&#91;1]), int(box&#91;2]), int(box&#91;3]), int(box&#91;4]), file=txt_file)\n\n    txt_file.close()<\/code><\/pre>\n\n\n\n<h3><strong>\u968f\u673a\u88c1\u526a<\/strong><\/h3>\n\n\n\n<p>\u968f\u673a\u88c1\u526a\u968f\u673a\u9009\u62e9\u4e00\u4e2a\u533a\u57df\u5e76\u8fdb\u884c\u88c1\u526a\u4ee5\u751f\u6210\u65b0\u7684\u6570\u636e\u6837\u672c\uff0c\u88c1\u526a\u540e\u7684\u533a\u57df\u5e94\u5177\u6709\u4e0e\u539f\u59cb\u56fe\u50cf\u76f8\u540c\u7684\u5bbd\u9ad8\u6bd4\uff0c\u4ee5\u4fdd\u6301\u5bf9\u8c61\u7684\u5f62\u72b6\u3002\n\n\n\n\n<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img src=\"https:\/\/pic1.zhimg.com\/v2-10f4156f7fb93a12faf1a32bce2aed40_r.jpg\" alt=\"\"\/><\/figure>\n\n\n\n<pre class=\"wp-block-code\"><code>def randomcrop(img, gt_boxes, scale=0.5):\n\n    \n'''\n\n    ### \u968f\u673a\u88c1\u526a ###\n\n    img: \u56fe\u50cf\n\n    gt_boxes: format &#91;&#91;obj x1 y1 x2 y2],...]\n\n    scale: \u88c1\u526a\u533a\u57df\u767e\u5206\u6bd4\n    '''\n\n\n    # \u88c1\u526a\n\n    height, width = int(img.shape&#91;0]*scale), int(img.shape&#91;1]*scale)\n\n    x = random.randint(0, img.shape&#91;1] - int(width))\n\n    y = random.randint(0, img.shape&#91;0] - int(height))\n\n    cropped = img&#91;y:y+height, x:x+width]\n\n    resized = cv2.resize(cropped, (img.shape&#91;1], img.shape&#91;0]))\n\n\n    # \u4fee\u6539\u6ce8\u91ca\n\n    new_boxes=&#91;]\n\n    for box in gt_boxes:\n\n        obj_name = box&#91;0]\n\n        x1 = int(box&#91;1])\n\n        y1 = int(box&#91;2])\n\n        x2 = int(box&#91;3])\n\n        y2 = int(box&#91;4])\n\n        x1, x2 = x1-x, x2-x\n\n        y1, y2 = y1-y, y2-y\n\n        x1, y1, x2, y2 = x1\/scale, y1\/scale, x2\/scale, y2\/scale\n\n        if (x1&lt;img.shape&#91;1] and y1&lt;img.shape&#91;0]) and (x2&gt;0 and y2&gt;0):\n\n            if x1&lt;0: x1=0\n\n            if y1&lt;0: y1=0\n\n            if x2&gt;img.shape&#91;1]: x2=img.shape&#91;1]\n\n            if y2&gt;img.shape&#91;0]: y2=img.shape&#91;0]\n\n            new_boxes.append(&#91;obj_name, x1, y1, x2, y2])\n\n    return resized, new_boxes<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img src=\"https:\/\/pic1.zhimg.com\/v2-737dfb28572fe1c0f9487d55754c5434_r.jpg\" alt=\"\"\/><\/figure>\n\n\n\n<h3><strong>Cutout<\/strong><\/h3>\n\n\n\n<p>Terrance DeVries\u548cGraham W.Taylor\u57282017\u5e74\u7684\u8bba\u6587\u4e2d\u4ecb\u7ecd\u4e86Cutout\uff0c\u5b83\u662f\u4e00\u79cd\u7b80\u5355\u7684\u6b63\u5219\u5316\u6280\u672f\uff0c\u7528\u4e8e\u5728\u8bad\u7ec3\u8fc7\u7a0b\u4e2d\u968f\u673a\u5c4f\u853d\u8f93\u5165\u7684\u65b9\u5757\u533a\u57df\uff0c\u53ef\u7528\u4e8e\u63d0\u9ad8\u5377\u79ef\u795e\u7ecf\u7f51\u7edc\u7684\u9c81\u68d2\u6027\u548c\u6574\u4f53\u6027\u80fd\u3002\u8fd9\u79cd\u65b9\u6cd5\u4e0d\u4ec5\u975e\u5e38\u5bb9\u6613\u5b9e\u73b0\uff0c\u800c\u4e14\u8fd8\u8868\u660e\u5b83\u53ef\u4ee5\u4e0e\u73b0\u6709\u5f62\u5f0f\u7684\u6570\u636e\u6269\u5145\u548c\u5176\u4ed6\u6b63\u5219\u5316\u5de5\u5177\u7ed3\u5408\u4f7f\u7528\uff0c\u4ee5\u8fdb\u4e00\u6b65\u63d0\u9ad8\u6a21\u578b\u6027\u80fd\u3002\u5982\u672c\u6587\u6240\u8ff0\uff0c\u526a\u5207\u7528\u4e8e\u63d0\u9ad8\u56fe\u50cf\u8bc6\u522b\uff08\u5206\u7c7b\uff09\u7684\u51c6\u786e\u6027\uff0c\u56e0\u6b64\uff0c\u5982\u679c\u6211\u4eec\u5c06\u76f8\u540c\u7684\u65b9\u6848\u90e8\u7f72\u5230\u5bf9\u8c61\u68c0\u6d4b\u6570\u636e\u96c6\u4e2d\uff0c\u53ef\u80fd\u4f1a\u5bfc\u81f4\u4e22\u5931\u5bf9\u8c61\u7684\u95ee\u9898\uff0c\u5c24\u5176\u662f\u5c0f\u5bf9\u8c61\u3002\n\n\n\n\n<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-style-rounded\"><img src=\"https:\/\/pic1.zhimg.com\/v2-bc8b4fb7ef57cfbd4de99a5f3a5ec1d8_r.jpg\" alt=\"\"\/><\/figure>\n\n\n\n<p>\n\n\n\u526a\u5207\u8f93\u51fa\u662f\u65b0\u751f\u6210\u7684\u56fe\u50cf\uff0c\u6211\u4eec\u4e0d\u79fb\u9664\u5bf9\u8c61\u6216\u66f4\u6539\u56fe\u50cf\u5927\u5c0f\uff0c\u5219\u751f\u6210\u56fe\u50cf\u7684\u6ce8\u91ca\u4e0e\u539f\u59cb\u56fe\u50cf\u76f8\u540c\u3002\n\n\n\n\n<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img src=\"https:\/\/pic3.zhimg.com\/v2-441f37ce3bc5a47f4e4e2da5dfa8cdba_r.jpg\" alt=\"\"\/><\/figure>\n\n\n\n<pre class=\"wp-block-code\"><code>def cutout(img, gt_boxes, amount=0.5):\n\n    \n'''\n\n    ### Cutout ###\n\n    img: \u56fe\u50cf\n\n    gt_boxes: format &#91;&#91;obj x1 y1 x2 y2],...]\n\n    amount: \u8499\u7248\u6570\u91cf\/\u5bf9\u8c61\u6570\u91cf\n    '''\n\n    out = img.copy()\n\n    ran_select = random.sample(gt_boxes, round(amount*len(gt_boxes)))\n\n\n    for box in ran_select:\n\n        x1 = int(box&#91;1])\n\n        y1 = int(box&#91;2])\n\n        x2 = int(box&#91;3])\n\n        y2 = int(box&#91;4])\n\n        mask_w = int((x2 - x1)*0.5)\n\n        mask_h = int((y2 - y1)*0.5)\n\n        mask_x1 = random.randint(x1, x2 - mask_w)\n\n        mask_y1 = random.randint(y1, y2 - mask_h)\n\n        mask_x2 = mask_x1 + mask_w\n\n        mask_y2 = mask_y1 + mask_h\n\n        cv2.rectangle(out, (mask_x1, mask_y1), (mask_x2, mask_y2), (0, 0, 0), thickness=-1)\n\n    return out<\/code><\/pre>\n\n\n\n<h3><strong>\u989c\u8272\u6296\u52a8<\/strong><\/h3>\n\n\n\n<p>ColorJitter\u662f\u53e6\u4e00\u79cd\u7b80\u5355\u7684\u56fe\u50cf\u6570\u636e\u589e\u5f3a\uff0c\u6211\u4eec\u53ef\u4ee5\u968f\u673a\u6539\u53d8\u56fe\u50cf\u7684\u4eae\u5ea6\u3001\u5bf9\u6bd4\u5ea6\u548c\u9971\u548c\u5ea6\u3002\u6211\u76f8\u4fe1\u8fd9\u4e2a\u6280\u672f\u5f88\u5bb9\u6613\u88ab\u5927\u591a\u6570\u8bfb\u8005\u7406\u89e3\u3002\n\n\n\n\n<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-style-default\"><img src=\"https:\/\/pic3.zhimg.com\/v2-95e53a0a14d74c3fa3ee5b6cf472988a_r.jpg\" alt=\"\"\/><\/figure>\n\n\n\n<pre class=\"wp-block-code\"><code>def colorjitter(img, cj_type=\"b\"):\n\n    \n'''\n\n    ### \u4e0d\u540c\u7684\u989c\u8272\u6296\u52a8 ###\n\n    img: \u56fe\u50cf\n\n    cj_type: {b: brightness, s: saturation, c: constast}\n    '''\n\n    if cj_type == \"b\":\n\n        # value = random.randint(-50, 50)\n\n        value = np.random.choice(np.array(&#91;-50, -40, -30, 30, 40, 50]))\n\n        hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)\n\n        h, s, v = cv2.split(hsv)\n\n        if value &gt;= 0:\n\n            lim = 255 - value\n\n            v&#91;v &gt; lim] = 255\n\n            v&#91;v &lt;= lim] += value\n\n        else:\n\n            lim = np.absolute(value)\n\n            v&#91;v &lt; lim] = 0\n\n            v&#91;v &gt;= lim] -= np.absolute(value)\n\n\n        final_hsv = cv2.merge((h, s, v))\n\n        img = cv2.cvtColor(final_hsv, cv2.COLOR_HSV2BGR)\n\n        return img\n\n\n    elif cj_type == \"s\":\n\n        # value = random.randint(-50, 50)\n\n        value = np.random.choice(np.array(&#91;-50, -40, -30, 30, 40, 50]))\n\n        hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)\n\n        h, s, v = cv2.split(hsv)\n\n        if value &gt;= 0:\n\n            lim = 255 - value\n\n            s&#91;s &gt; lim] = 255\n\n            s&#91;s &lt;= lim] += value\n\n        else:\n\n            lim = np.absolute(value)\n\n            s&#91;s &lt; lim] = 0\n\n            s&#91;s &gt;= lim] -= np.absolute(value)\n\n\n        final_hsv = cv2.merge((h, s, v))\n\n        img = cv2.cvtColor(final_hsv, cv2.COLOR_HSV2BGR)\n\n        return img\n\n\n    elif cj_type == \"c\":\n\n        brightness = 10\n\n        contrast = random.randint(40, 100)\n\n        dummy = np.int16(img)\n\n        dummy = dummy * (contrast\/127+1) - contrast + brightness\n\n        dummy = np.clip(dummy, 0, 255)\n\n        img = np.uint8(dummy)\n\n        return img<\/code><\/pre>\n\n\n\n<h3><strong>\u589e\u52a0\u566a\u58f0<\/strong><\/h3>\n\n\n\n<p>\u5728\u4e00\u822c\u610f\u4e49\u4e0a\uff0c\u566a\u58f0\u88ab\u8ba4\u4e3a\u662f\u56fe\u50cf\u4e2d\u7684\u4e00\u4e2a\u610f\u5916\u56e0\u7d20\uff0c\u7136\u800c\uff0c\u51e0\u79cd\u7c7b\u578b\u7684\u566a\u58f0\uff08\u4f8b\u5982\u9ad8\u65af\u566a\u58f0\u3001\u6912\u76d0\u566a\u58f0\uff09\u53ef\u7528\u4e8e\u6570\u636e\u589e\u5f3a\uff0c\u5728\u6df1\u5ea6\u5b66\u4e60\u4e2d\u6dfb\u52a0\u566a\u58f0\u662f\u4e00\u79cd\u975e\u5e38\u7b80\u5355\u548c\u6709\u76ca\u7684\u6570\u636e\u589e\u5f3a\u65b9\u6cd5\u3002\n\n\n\n\n<\/p>\n\n\n\n<p> \u5bf9\u4e8e\u90a3\u4e9b\u65e0\u6cd5\u8bc6\u522b\u9ad8\u65af\u566a\u58f0\u548c\u6912\u76d0\u566a\u58f0\u4e4b\u95f4\u5dee\u5f02\u7684\u4eba\uff0c\u9ad8\u65af\u566a\u58f0\u7684\u503c\u8303\u56f4\u4e3a0\u5230255\uff0c\u5177\u4f53\u53d6\u51b3\u4e8e\u914d\u7f6e\uff0c\u56e0\u6b64\uff0c\u5728RGB\u56fe\u50cf\u4e2d\uff0c\u9ad8\u65af\u566a\u58f0\u50cf\u7d20\u53ef\u4ee5\u662f\u4efb\u4f55\u989c\u8272\u3002\u76f8\u6bd4\u4e4b\u4e0b\uff0c\u6912\u76d0\u566a\u6ce2\u50cf\u7d20\u53ea\u80fd\u6709\u4e24\u4e2a\u503c0\u6216255\uff0c\u5206\u522b\u5bf9\u5e94\u4e8e\u9ed1\u8272\uff08PEPER\uff09\u6216\u767d\u8272\uff08salt\uff09\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-style-default\"><img src=\"https:\/\/pic1.zhimg.com\/v2-a17eb2087b3f01cfef7e0de410583ad4_r.jpg\" alt=\"\"\/><\/figure>\n\n\n\n<pre class=\"wp-block-code\"><code>def noisy(img, noise_type=\"gauss\"):\n\n    \n'''\n\n    ### \u6dfb\u52a0\u566a\u58f0 ###\n\n    img: \u56fe\u50cf\n\n    cj_type: {gauss: gaussian, sp: salt &amp; pepper}\n    '''\n\n    if noise_type == \"gauss\":\n\n        image=img.copy() \n\n        mean=0\n\n        st=0.7\n\n        gauss = np.random.normal(mean,st,image.shape)\n\n        gauss = gauss.astype('uint8')\n\n        image = cv2.add(image,gauss)\n\n        return image\n\n\n    elif noise_type == \"sp\":\n\n        image=img.copy() \n\n        prob = 0.05\n\n        if len(image.shape) == 2:\n\n            black = 0\n\n            white = 255            \n\n        else:\n\n            colorspace = image.shape&#91;2]\n\n            if colorspace == 3:  # RGB\n\n                black = np.array(&#91;0, 0, 0], dtype='uint8')\n\n                white = np.array(&#91;255, 255, 255], dtype='uint8')\n\n            else:  # RGBA\n\n                black = np.array(&#91;0, 0, 0, 255], dtype='uint8')\n\n                white = np.array(&#91;255, 255, 255, 255], dtype='uint8')\n\n        probs = np.random.random(image.shape&#91;:2])\n\n        image&#91;probs &lt; (prob \/ 2)] = black\n\n        image&#91;probs &gt; 1 - (prob \/ 2)] = white\n\n        return image<\/code><\/pre>\n\n\n\n<h3><strong>\u6ee4\u6ce2<\/strong><\/h3>\n\n\n\n<p>\u672c\u6587\u4ecb\u7ecd\u7684\u6700\u540e\u4e00\u4e2a\u6570\u636e\u6269\u5145\u8fc7\u7a0b\u662f\u6ee4\u6ce2\u3002\u4e0e\u6dfb\u52a0\u566a\u58f0\u7c7b\u4f3c\uff0c\u6ee4\u6ce2\u4e5f\u7b80\u5355\u4e14\u6613\u4e8e\u5b9e\u73b0\u3002\u5b9e\u73b0\u4e2d\u4f7f\u7528\u7684\u4e09\u79cd\u7c7b\u578b\u7684\u6ee4\u6ce2\u5305\u62ec\u6a21\u7cca\uff08\u5e73\u5747\uff09\u3001\u9ad8\u65af\u548c\u4e2d\u503c\u3002\n\n\n\n\n<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-style-default\"><img src=\"https:\/\/pic1.zhimg.com\/v2-6dd553ca0ee21bc454dec5194fa56a54_r.jpg\" alt=\"\"\/><\/figure>\n\n\n\n<pre class=\"wp-block-code\"><code>def filters(img, f_type = \"blur\"):\n\n    \n'''\n\n    ### \u6ee4\u6ce2 ###\n\n    img: \u56fe\u50cf\n\n    f_type: {blur: blur, gaussian: gaussian, median: median}\n    '''\n\n    if f_type == \"blur\":\n\n        image=img.copy()\n\n        fsize = 9\n\n        return cv2.blur(image,(fsize,fsize))\n\n\n    elif f_type == \"gaussian\":\n\n        image=img.copy()\n\n        fsize = 9\n\n        return cv2.GaussianBlur(image, (fsize, fsize), 0)\n\n\n    elif f_type == \"median\":\n\n        image=img.copy()\n\n        fsize = 9\n\n        return cv2.medianBlur(image, fsize)<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large is-style-default\"><img src=\"https:\/\/pic3.zhimg.com\/v2-96bbcb0bee366e516292b4453c3fe206_r.jpg\" alt=\"\"\/><\/figure>\n\n\n\n<h2>\u4e0a\u8ff0\u5185\u5bb9\u53ef\u4ee5\u5728\u8fd9\u91cc\u627e\u5230\u5b8c\u6574\u5b9e\u73b0 <\/h2>\n\n\n\n<p><a href=\"https:\/\/github.com\/tranleanh\/data-augmentation\">https:\/\/github.com\/tranleanh\/data-augmentation<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u6700\u8fd1\u5728\u5b66\u4e60 torch\uff0c\u5bf9\u4e8e\u56fe\u50cf\u6570\u636e\u7684\u9884\u5904\u7406\uff0c torchvision \u63d0\u4f9b\u4e86torchvision.tran &hellip; <a href=\"http:\/\/139.9.1.231\/index.php\/2021\/12\/13\/1\/\" class=\"more-link\">\u7ee7\u7eed\u9605\u8bfb<span class=\"screen-reader-text\">\u6570\u636e\u6269\u5145\u548c\u589e\u5e7f<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[4],"tags":[],"_links":{"self":[{"href":"http:\/\/139.9.1.231\/index.php\/wp-json\/wp\/v2\/posts\/158"}],"collection":[{"href":"http:\/\/139.9.1.231\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/139.9.1.231\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/139.9.1.231\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/139.9.1.231\/index.php\/wp-json\/wp\/v2\/comments?post=158"}],"version-history":[{"count":29,"href":"http:\/\/139.9.1.231\/index.php\/wp-json\/wp\/v2\/posts\/158\/revisions"}],"predecessor-version":[{"id":422,"href":"http:\/\/139.9.1.231\/index.php\/wp-json\/wp\/v2\/posts\/158\/revisions\/422"}],"wp:attachment":[{"href":"http:\/\/139.9.1.231\/index.php\/wp-json\/wp\/v2\/media?parent=158"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/139.9.1.231\/index.php\/wp-json\/wp\/v2\/categories?post=158"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/139.9.1.231\/index.php\/wp-json\/wp\/v2\/tags?post=158"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}