自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(61)
  • 收藏
  • 关注

原创 一文搞懂BN的原理及其实现过程(Batch Normalization)

1. 在讲BN之前我要向大家提出几个问题,就是为什么要引入BN呢?在神经网络训练的时候输入图片不是引入了image normalization吗?所以BN到底是什么呢?Batch Normalization是由google提出的一种训练优化方法。原论文地址:https://arxiv.org/abs/1502.031672.引入BN的原因?我们在图像预处理过程中通常会对图像进行标准化处理,也就是image normalization,使得每张输入图片的数据分布能够统均值为u,方差为h的分布。这样

2021-04-16 10:47:27 22033 3

原创 1.Yolov5学习率调整策略

1.Yolov5学习率调整策略:lr_scheduler.LambdaLR本代码模拟yolov5的学习率调整,深度解析其中torch.optim.lr_scheduler在yolov5的使用方法,有助于提高我们对该代码的理解。​ 为了简单实现模拟yolov5的学习率调整策略,在此代码中我使用resnet18网络,yolov5则使用的是darknet网络骨架,其中不同的层使用不同的学习率调整方法,分别分为权重层weight,偏执层bais,和BN层,单独调整不同层的学习率可以使得模型训练的

2021-01-29 14:11:46 22825 9

原创 一文搞懂pytorch中的学习率优化策略,torch.optim.lr_scheduler

一文搞懂pytorch中的学习率优化策略,torch.optim.lr_schedulertorch.optim.lr_scheduler提供了三种根据epoch训练数来调整学习率(learning rate)的方法。具体方法如下:一、有序调整:1.等间隔调整(Step):torch.optim.lr_scheduler.StepLRnew−lr=initial−lr∗γepochstep−sizenew_-lr=initial_-lr*\gamma^{\frac{epoch}{step_-size

2021-01-08 18:41:02 931 4

原创 pytorch加载不同设备的模型

将由GPU保存的模型加载到CPU上。将torch.load()函数中的map_location参数设置为torch.device('cpu')device = torch.device('cpu')#实例化定义好的模型model = TheModelClass(*args, **kwargs)#将gpu保存的模型加载到cpu上model.load_state_dict(torch.load(PATH, map_location=device))将GPU保存的模型加载到GPU上device

2020-12-31 10:47:34 244

原创 Pytorch模型加载保存

Pytorch提供了两种模型的保存和加载方法。一、首先定义一个名为Example的模型import torch.nn as nnimport torch.nn.functional as Fimport torch.optim as optimclass Example(nn.Module): def __init__(self): super(Example, self).__init__() self.conv1 = nn.Conv2d(3, 6, 5

2020-12-31 10:34:24 143

原创 Cuda和cuDNN安装教程(超级详细)

接下来我为大家带来超级详细的Windows10环境下cuda和cuDNN下载和安装方法:

2020-12-19 13:21:46 229428 28

原创 Windows10检查Cuda和cuDNN是否安装成功?

简介:根据上篇博客已经完成了CUDA和cuDNN的安装步骤,完成对其的安装。下面将来检查它们是否安装成功。1 .首先win+R进入CMD,在命令行输入nvcc -V,如下图所示,则表示cuda已经安装成功。2 .进入到cuda的安装路径,C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\extras\demo_suite,找到如下两个.exe文件:首先执行:deviceQuery.exe,查看是否出现如下界面:然后执行bandwid

2020-12-18 23:52:15 93599 72

原创 EasyDict的使用方法python

1.EasyDict简介EasyDict允许访问dict值作为属性(递归工作)。也就是可以方便地应用 . 来访问dict的值。2.EasyDict的安装方法pip install easydict3.EasyDict使用方法如下:#在python中创建一个字典,然后来访问字典中的某个属性a = {'score':3, 'bar':{'x':1, 'y':2}}print(a['score'])3#如果使用a.score来访问,则会出现报错。print(a.score)--------

2020-12-07 11:20:43 1591

原创 OCR常用公开数据集整理

OCR常用的数据集在这个代码仓库里,提供了常用的OCR检测和识别中的通用公开数据集的下载链接。并且提供了json标签转成.txt标签的代码和转换好的.txt标签。该项目的详细github地址如下:https://github.com/zcswdt/OCR_ICDAR_label_revise数据集介绍数据集数据介绍标注格式下载地址ICDAR_2013语言: 英文 train:229 test:233x1 y1 x2 y2 text下载链接1.ICDAR_201

2020-08-11 10:55:18 22206 3

原创 OCR文本图像合成方法(支持水平文字和竖直文字)

文字图片合成在训练文字识别模型时,需要大批量的训练数据,然而当人工进行文字标注时,会花费大量的成本,所以为了解决训练集不足的问题,本文提出了一种文字合成的方法。语料准备选择好字典文件,然后可以去网上下载几本小说进行语料集,使用如下代码进行对小说中没有出现在字典文件的文字进行过滤。切换不同模式,当mode = 'filter’时,对语料集进行过滤,当model= 'split’时,对语料集进行切分。"coding = utf-8"# 删除语料中的生僻字import codecsimport pr

2020-07-06 18:31:51 1468 2

原创 剑指 Offer 57 - II. 和为s的连续正数序列(python)

剑指 Offer 57 - II. 和为s的连续正数序列输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。示例 1:输入:target = 9输出:[[2,3,4],[4,5]]示例 2:输入:target = 15输出:[[1,2,3,4,5],[4,5,6],[7,8]]题解;class Solution: def findContinuousSequence(self,

2021-08-18 23:38:40 342

原创 二分查找法剖析

一、你真的了解二分法吗?​ 二分搜索是一种在有序数组中查找某一特定元素的搜索算法。搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半。举个栗子给定一个排好序(升序)的列表与待查找的关键字,成功则返回其索引,失败则返回-1def search(list, key): l

2021-06-08 17:43:49 390

原创 pytorch中的nn.CrossEntropyLoss()损失

在使用pytorch深度学习框架,计算分类损失时经常会遇到这么一个函数nn.CrossEntropyLoss(),该损失函数结合了nn.LogSoftmax()和nn.NLLLoss()两个函数。它在做分类(具体几类)训练的时候是非常有用的,如下我将对该函数的原理使用代码和实例进行分析。    首先输入是size是(minibatch,C)。这里的C是类别数。损失函数的计算如下:损失函数中也有权重weight参数设置,若设置权重,则公式为:注意这里的标签值class,并不参与直接计算,而是作为一

2021-06-02 17:25:04 1682 2

原创 Faster-rcnn篇三-RNP网络anchors生成

生成一个batch图像的所有anchors信息,shape为[b,21420,4]anchor_sizes = ((32,), (64,), (128,), (256,), (512,))aspect_ratios = ((0.5, 1.0, 2.0),) * len(anchor_sizes)rpn_anchor_generator = AnchorsGenerator(anchor_sizes, aspect_ratios)anchors = self.anchor_generator(imag

2021-05-26 18:58:51 390

原创 Faster-rcnn之RNP网络代码详解B

1. 首先将一个batch内的图片经过resnet50-fpn网络输出得到featrues,经过FPN层以后会输出5个特征图,在每个特征图上的每个点上进行预测3个坐标框 # RPN uses all feature maps that are available # features是所有预测特征层组成的OrderedDict features = list(features.values()) # 计算每个预测特征层上的预测目标概率和bbo

2021-05-26 18:20:48 404

原创 Faster-rcnn中的数据预处理

该代码中讲的是faster-rcnn中在进行训练过程中,对图片进行预处理操作。对图像进行预处理在faster-rcnn训练过程中,需要对传入网络中的图片进行预处理,其中包括减均值,除方差,对图像进行缩放等。使用如下函数进行调用。注意其中images,targets代表的是在pytorch框进中打包好的一个batch_size的图片和其对应的标签from transform import GeneralizedRCNNTransformimages, targets = self.transfor

2021-05-26 16:13:49 1468

原创 python类的继承

python继承父类的属性和方法让子类直接拥有父类的属性和方法的过程就是继承父类 - 被继承者(又叫超类)子类 - 继承者在子类中添加类属性和方法类属性和方法的添加不会因为继承而收到任何影响添加对象属性对象属性是怎么被继承:继承的时候因为init方法被继承,间接继承了对象属性类中的方法的调用过程(重要)通过类或者对象在调用方法的时候,会先看当前类中有没有这个方法,如果有就直接调用自己类中的方法;没有就看父类中有没有定义这个方法,如果父类定义了就调用父类的;父类没有定义,就看父类的父类中有没

2021-05-25 18:01:52 78

原创 pycharm中debug代码参数的设置

1.当使用pycharm调式代码时候,会经常加一些参数,但是在pycharm中只有run和debug,其中并没有带参数的调试。如下我们可以选择加入需要的参数重点:由于在windows下,脚本的工作路径会和linux下不同,所以使用相对路径的时候特别注意,参数的相对路径的设置。当然具体如何设置呢?如下所示1.首先找到该脚本代码predict_cls.py的工作路径,找法如下:然后看看加入的参数的路径相对于这个工作路径的目录,添加到参数中即可。...

2021-04-29 15:09:46 2589

原创 ResNet论文解读

ResNet论文解读一、提出背景随着深度学习的大热,使用卷积神经网络来作为图像的特征提取,从开始的浅层神经网络逐渐向深层神经网络发展(ALexNet–VGG–GoogLeNet,网络结构在不断的加深,这是因为更深的网络可以进行更加复杂的特征模式的提取,从而理论上更深的网络可以得到更好的结果。但是通过简单的叠加层的方式来增加网络深度,可能会带来更多的训练错误率,如下图所示,56层的训练错误率要高于22层网络的错误率,这个问题的出现是由于网络加深,可能引来梯度消失/梯度爆炸的问题:...

2021-04-18 22:04:42 267

原创 os.path.dirname(__file__),os.path.basename(_file_),os.path.abspath(_file_)在python中的用法

我在windows磁盘F:\debug\1文件下创建了一个test.py的python文件,下面在这个python代码中解释os.path.dirname(__file__),os.path.basename(_file_),os.path.abspath(_file_)等用法1.os.path.abspath(file)os.path.dirname(file) 返回脚本的绝对路径# -*- coding: utf-8 -*-import os #os.path.abspath(__fil

2021-03-29 14:50:27 586

原创 opencv保存单通道图片

由于opencv读取完图片在保存图片时候,图片的通道需要时三通道,否则在保存的时候会报错。如下代码可以完成单通道图片的保存。注:opencv读取图片的通道数默认为b,g,r。故在使用cv2.cvtColor函数转成rgb的时候,仍然需要对图片进行通道转换,故需要使用img= img[:, :, ::-1]才能使用cv2.imwrite()函数保存图片。import cv2img = cv2.imread('1.png')if len(img.shape) == 2 or img.sha..

2021-03-26 10:36:15 8053 1

原创 力扣-160. 相交链表(python)

160. 相交链表编写一个程序,找到两个单链表相交的起始节点。如下面的两个链表:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Reference of the node with value = 8输入解释:相交节点的值为 8 (注意,如果两个链表相交则不能为 0)。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,0,1,8,4,5]。

2021-03-26 09:12:39 366

原创 力扣142.环形链表 II(python求解)

142. 环形链表 II给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意,pos 仅仅是用于标识环的情况,并不会作为参数传递到函数中。说明:不允许修改给定的链表。进阶:你是否可以使用 O(1) 空间解决此题?示例 1:输入:head = [3,2,0,-4], pos = 1输出:返回索引为 1 的链表节点解释:

2021-03-25 16:29:59 241 2

原创 剑指 Offer 40. 最小的k个数(python求解)

剑指 Offer 40. 最小的k个数输入整数数组 arr ,找出其中最小的 k 个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。题解;比较直观的想法是使用堆数据结构来辅助得到最小的 k 个数。堆的性质是每次可以找出最大或最小的元素。我们可以使用一个大小为 k 的最大堆(大顶堆),将数组中的元素依次入堆,当堆的大小超过 k 时,便将多出的元素从堆顶弹出。。class Solution: def getLeastNumbers(self, arr

2021-03-25 08:02:00 231

原创 python如何判断图像是几通道图片

1.在图像处理的过程中,图像的种类各异,有单通道8bit的,有3通道,24bit的,还有4通道32bit的,当然如果不加判断的读取图片有时候可能会导致代码的bug,所以在读取图片的过程中要先判断图像是什么类型,针对不同的类型图片采取不同的处理方式,如下代码采用PIL来判断图像是几通道图片。"coding = utf-8"import shutilimport os,sysimport cv2from PIL import Imageimport numpy as npinput_path

2021-03-23 17:38:24 6908

原创 VGG16_BN网络结构

VGG16_BNSequential((0): Conv2d(3, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))(1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(2): ReLU(inplace=True)(3): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), p

2021-03-18 14:51:43 2288 1

原创 pycharm专业版连接远程docker容器

pycharm专业版连接远程docker容器一.windows环境下pycharm专业版的安装如果想使用pycharm远程连接docker容器,需要在windows环境下安装专业版的pycharm,专业版下载链接https://www.jetbrains.com/pycharm/二.配置远程docker容器1.启动带有端口的docker容器。6006端口是用来运行tensorboard的,这里重要的是22端口。如果希望通过ssh远程连接docker,需要对容器的22端口做端口映射。docker

2021-03-08 18:35:49 6887 9

原创 短视频去除logo(抖音)

Video-removal -logo​ 本代码仓库使用opencv中的图像修复技术来对视频中的每一帧进行修复,从而得到干净去除掉水印的视频,同时保留了视频的音频部分。Dependent environmentpip install opencv-pythonpip install moviepypip install pydubHow to remove1.找到水印的位置,对于视频中logo会出现在相对固定位置的去除方法。比如抖音,快手,logo会出现在视频的左上角或者视频的

2021-03-02 18:09:13 3235

原创 剑指 Offer 32 - III. 从上到下打印二叉树 III

请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。例如:给定二叉树: [3,9,20,null,null,15,7],# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None#

2021-02-22 18:46:25 85

原创 674. 最长连续递增序列(python)

本题是LCSI问题,可以使用两种方法来解决该问题。如下是python版本的解决方法:法一:#使用两个变量来记录最大值,res记录最终连续递增序列长度的最大值,count记录当前连续递增序列长度的最大值。class Solution: def findLengthOfLCIS(self, nums: List[int]) -> int: if not nums: return 0 if len(nums)==1: .

2020-12-01 16:43:17 518

原创 零钱兑换2(力扣)

题解令dp[i][j]dp[i][j]dp[i][j]:使用coins[0...i]coins[0...i]coins[0...i]这么多的情况下,组成目标金额为j时的最少数量。coins[i]coins[i]coins[i]为第i个硬币当不使用第i个硬币能取得目标金额获得的最少硬币数量为:dp[i][j]=dp[i−1][j−0coins[i]]+0dp[i][j] = dp[i-1][j-0coins[i]]+0dp[i][j]=dp[i−1][j−0coins[i]]+0当使用第i个硬币能取.

2020-11-12 18:42:27 263

原创 零钱兑换(力扣)

解题思路   此题的思想应用了完全背包问题和求解背包方案数量问题,故需要将其转化为背包方案问题来求解。如下为推导公式:   创建二维dp数组,dp[i][j]dp[i][j]dp[i][j],表示使用零钱类数i和组成的总金额jjj。对于第iii枚硬币金额为c[i]c[i]c[i]。对于dp[i][j]dp[i][j]dp[i][j]来说,可以不拿第i个硬币,就已经组成了总金额jjj。则此时dp[i][j]=dp[i−1][j]dp[i][j]=dp[i-1][j]dp[i][j]=dp[i−1][j].

2020-11-12 17:35:52 226 1

原创 python字符串的基本操作

字符串的基本操作1.string.strip([obj]) 在 string 上执行 lstrip()和 rstrip()2.string.lstrip() 截掉 string 左边的空格3.string.count(str, beg=0, end=len(string)) 返回 str 在 string 里面出现的次数,如果 beg 或者 end 指定则返回指定范围内 str 出现的次数4.string.islower() 如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小

2020-11-05 22:40:21 105

原创 最小路径和python

解题思路,该题和在棋盘上移动的题目具有相似的解法,只不过本题在路径的基础上加入判断,判断能到达当前网格路径的最小值。class Solution: def minPathSum(self, grid: List[List[int]]) -> int: if not grid: return 0 m= len(grid) #m列 n =len(grid[0]) #n行 #创建一个二维数组 .

2020-11-04 17:20:50 459

原创 237. 删除链表中的节(python)力扣

1.请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点。传入函数的唯一参数为 要被删除的节点 。解题:我们要删掉的就是node:A,怎么删掉该节点呢,无法直接删除节点A,可以用后面的B把这个node覆盖掉,然后用它的下下个地址node C来作为node A的下一个地址,其实是要删掉的节点被覆盖了B的值苟且偷生,真正删掉的却是节点Bclass Solution: def deleteNode(self, node): """ :type node: Li

2020-10-29 22:30:25 189

原创 203. 移除链表元素(python)力扣

解题:初始化哨兵节点为 ListNode(0) 且设置 sentinel.next = head初始化两个指针 cur 和 pre指向当前节点和前继节点。当 curr != null:比较当前节点和要删除的节点:若当前节点就是要删除的节点:则 prev.next = curr.next。否则设 prve = curr。遍历下一个元素:curr = curr.next。返回 dumpy.next。# Definition for singly-linked list.# class Li.

2020-10-29 22:11:04 357

原创 144. 二叉树的前序遍历(python)

解法一:class Solution: def preorderTraversal(self, root: TreeNode) -> List[int]: if not root: return [] return [root.val] + self.preorderTraversal(root.left) + self.preorderTraversal(root.right)解法二:print方法是一个很原始的模板,现在题目要

2020-10-21 15:26:08 417

原创 力扣之相同的树(python解法)

题目描述:给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。解题思路:使用递归依次判断每个相同级别的节点的值是否相同,递归判断下去,得到结果1.先判断是否均为 null,避免获取空节点 val 报错2. 再判断是否存在 null,存在 null,说明两者不一样,因为都不会 null3. 通过前面两个判断,肯定都不为空,此时判断值是否相等class Solution: def isSameTree(self, p:

2020-10-15 18:01:54 205

原创 102. 二叉树的层序遍历(python)

给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: def levelOrder(self, root

2020-09-18 17:48:36 2103

转载 二叉树的中序遍历

题解:使用颜色标记节点的状态,新节点为白色,已访问的节点为灰色。如果遇到的节点为白色,则将其标记为灰色,然后将其右子节点、自身、左子节点依次入栈。如果遇到的节点为灰色,则将节点的值输出。使用这种方法实现的中序遍历如下:class Solution: def inorderTraversal(self, root: TreeNode) -> List[int]: WHITE, GRAY = 0, 1 res = [] stack = [(

2020-09-14 18:13:27 71

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除