什么是正则化_lo正则化求解方式

什么是正则化_lo正则化求解方式COUTCutout[1]是一种新的正则化方法。原理是在训练时随机把图片的一部分减掉,这样能提高模型的鲁棒性。它的来源是计算机视觉任务中经常遇到的物体遮挡问题。通过cutout生成一些类似被遮挡的物体,不仅可以让模型在遇到遮挡问题时表现更好,还能让模型在做决定时更多地考虑环境(context)。Theimplementationofcout1.自己码importtorchimpo…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

Cutout

Cutout[1]是一种新的正则化方法。原理是在训练时随机把图片的一部分减掉,这样能提高模型的鲁棒性。它的来源是计算机视觉任务中经常遇到的物体遮挡问题。通过cutout生成一些类似被遮挡的物体,不仅可以让模型在遇到遮挡问题时表现更好,还能让模型在做决定时更多地考虑环境(context)。

The implementation of Cutout

1.自己码

import torch
import numpy as np

class Cutout(object):
 """Randomly mask out one or more patches from an image. Args: n_holes (int): Number of patches to cut out of each image. length (int): The length (in pixels) of each square patch. """
 def __init__(self, n_holes, length):
        self.n_holes = n_holes
        self.length = length

 def __call__(self, img):
 """ Args: img (Tensor): Tensor image of size (C, H, W). Returns: Tensor: Image with n_holes of dimension length x length cut out of it. """
        h = img.size(1)
        w = img.size(2)

        mask = np.ones((h, w), np.float32)

 		for n in range(self.n_holes):
            y = np.random.randint(h)
            x = np.random.randint(w)

            y1 = np.clip(y - self.length // 2, 0, h)
            y2 = np.clip(y + self.length // 2, 0, h)
            x1 = np.clip(x - self.length // 2, 0, w)
            x2 = np.clip(x + self.length // 2, 0, w)

            mask[y1: y2, x1: x2] = 0.

        mask = torch.from_numpy(mask)
        mask = mask.expand_as(img)
        img = img * mask

 return img

2.借助第三方库

from albumentations import Cutout
import matplotlib.pyplot as plt
import cv2

transform = Compose([
		             Cutout(num_holes=30, max_h_size=7, max_w_size=7, fill_value=128, p=1)
				    ])
images = cv2.imread("./data/input/images/00000060_000.png")
images2 = transform(image=images)["image"]
plt.subplot(121)
plt.imshow(images)
plt.subplot(122)
plt.imshow(images2)
plt.show()

效果展示:
在这里插入图片描述

升级版——CoarseDropout

孔洞数量、长和宽可以任意调节
在这里插入图片描述

def cutout(img, holes, fill_value=0):
# Make a copy of the input image since we don't want to modify it directly
img = img.copy()
for x1, y1, x2, y2 in holes:
img[y1: y2, x1: x2] = fill_value
return img
class CoarseDropout:
""" CoarseDropout of the rectangular regions in the image. """
def __init__(self, max_holes=8, max_height=20, max_width=20,
min_holes=4, min_height=8, min_width=8,
fill_value=0, p=1):
self.max_holes = max_holes
self.max_height = max_height
self.max_width = max_width
self.min_holes = min_holes if min_holes is not None else max_holes
self.min_height = min_height if min_height is not None else max_height
self.min_width = min_width if min_width is not None else max_width
self.fill_value = fill_value
self.prob = p
assert 0 < self.min_holes <= self.max_holes
assert 0 < self.min_height <= self.max_height
assert 0 < self.min_width <= self.max_width
def get_params_dependent_on_targets(self, img):
height, width = img.shape[:2]
holes = []
for n in range(random.randint(self.min_holes, self.max_holes + 1)):
hole_height = random.randint(self.min_height, self.max_height + 1)
hole_width = random.randint(self.min_width, self.max_width + 1)
y1 = random.randint(0, height - hole_height)
x1 = random.randint(0, width - hole_width)
y2 = y1 + hole_height
x2 = x1 + hole_width
holes.append((x1, y1, x2, y2))
return holes
def __call__(self, image):
if random.random() < self.prob:
holes = self.get_params_dependent_on_targets(image)
image = cutout(image, holes, self.fill_value)
return image

Reference

[1] https://arxiv.org/pdf/1708.04552.pdf
[2] https://zhuanlan.zhihu.com/p/66080948

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/192811.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • javac命令无法使用解决办法

    javac命令无法使用解决办法javac命令无法使用,java环境变量配置。

  • 剑指Offer面试题:13.合并两个排序的链表

    一题目:合并两个排序的链表二代码实现将链表换成数组做简单的循环和递归测试(1)循环实现(2)递归实现

    2021年12月19日
  • 免费国内php空间_全球vps交流网站超级vps管理器

    免费国内php空间_全球vps交流网站超级vps管理器网站名称:000webhost.com250MB硬盘空间,100GB数据流量有足够的空间存放你的网站,emails 和数据库. 服务器为百兆独享接入Internet, 所以可以提供100G的数据流量.PHP 和MySQL 数据库支持不想其他免费空间,对php和mysql的功能进行限制.在这里你可以使用最新版本的php和mysql. 所有以下php特性都支持:

  • MySQL数据库:读写分离

    MySQL数据库:读写分离

  • linux下ls -l命令(即ll命令)查看文件的显示结果分析

    linux下ls -l命令(即ll命令)查看文件的显示结果分析在linux下使用“ls-l”或者“ls-al”或者“ll”命令查看文件及目录详情时,shell中会显示出好几列的信息。平时也没怎么注意过,今天忽然心血来潮想了解一下,于是整理了这篇博客,以供参考:首先给出一张典型的显示结果:下面对其中的每一列进行详细的分析:一、文件类型表示该文件的类型:“-”表示普通文件;“d”表示目录;“l”表示链接文件;“p”表示…

  • oracle11g创建数据库实例_oracle手工建库

    oracle11g创建数据库实例_oracle手工建库在经过前面八篇文章(abp(netcore)+easyui+efcore实现仓储管理系统——入库管理之一(三十七)至abp(netcore)+easyui+efcore实现仓储管理系统——入库管理之八(四十四))的学习之后,我们知道了已经基本完成了入库管理功能。在这篇文章中我们来增加更新与删除功能的脚本。十三、修改更新与删除脚本1.在VisualStudio2017的“解决方案资源管理器”中,找到领域层“ABP.TPLMS.Web.Mvc”项目中的wwwroot目录下的vi…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号