自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

RUN

尽管路途坎坷,也要披荆前行

  • 博客(353)
  • 收藏
  • 关注

原创 尾缀前的数字排序

排序

2022-06-09 22:03:41 194 2

原创 MMCV命令及mmseg实验记录

pip3 install -v -e . --user

2022-05-04 10:34:58 1288

原创 学习率线性缩放

文章:Accurate, Large Minibatch SGD:Training ImageNet in 1 HourMMAction2 所提供的配置文件对应使用 8 块 GPU 进行训练的情况。 依据 线性缩放规则,当用户使用不同数量的 GPU 或者每块 GPU 处理不同视频个数时,需要根据批大小等比例地调节学习率。 如,lr=0.005 对应 8 GPUs x 8 video/gpu,以及 lr=0.004375 对应 8 GPUs x 7 video/gpu。88 / 87 = 0.005 /

2022-04-26 20:15:37 618

原创 linux 中文乱码

export LC_ALL=en_US.UTF-8export LANG=en_US.UTF-8

2022-03-17 22:11:16 633

原创 os.walk

for root, dirs, files in os.walk("deepFashion", topdown=False): for name in files: if name.split(".")[1] == "jpg": print(os.path.join(root, name)) #for name in dirs: # print(os.path.join(root, name))

2022-01-13 22:28:30 118

转载 ImportError: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21‘ not found

在另一个博文看到的,亲测有效,记录一下~python train.py报错ImportError: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21’ not found问题排查报错信息显示动态库路径是/lib64,我的anaconda路径为/data/XXX/anaconda3,输入strings /data/XXX/anaconda3/bin/…/lib/./libstdc++.so.6 | grep GLIBCXX_3.4.21显示GLIBCX

2021-12-24 08:44:55 494

原创 可变形卷积

使用另外一个卷积预测偏移量,这里的p是相对位置,p0是绝对的,w是卷积核的weight。新的卷积的输出的channel是原来的2倍,代表着x和y的方向上的位移。

2021-12-05 20:56:32 146

原创 python3 类super()

看例子很清晰,不写super,如果不定义子类的__init__属性,那么其实可以直接继承父类的属性和函数,见case1;不写super,如果定义子类的属性,那么无法继承父类的属性;如果写了super,就可以集成也可以自己写一class A: def __init__(self): self.a = 5 def fun_A(self): print("执行func_A")class B(A): # def __init__(self):

2021-11-27 11:20:44 653

原创 pytorch unfold记录

unfold就是只是输出窗口移动的内容,并不积。相当于把原图进行切分,沿着不同的维度。et = x.unfold(dim, size, step)dim:int,表示需要展开的维度(可以理解为窗口的方向)size:int,表示滑动窗口大小step:int,表示滑动窗口的步长 import torch x = torch.Tensor([[ 1, 2, 3, 4, 5], [ 6, 7, 8, 9, 10],

2021-11-21 10:55:41 1309

原创 torch permute和view

permute针对的是转换维度,view等价于reshape。permute作用为调换Tensor的维度,参数为调换的维度。例如对于一个二维Tensor来说,调用tensor.permute(1,0)意为将1轴(列轴)与0轴(行轴)调换,相当于进行转置。In [20]: a Out[20]: tensor([[0, 1, 2], [3, 4, 5]]) In [21]: a.permute(1,0) Out[21]: tensor([[0, 3],

2021-11-10 15:28:38 1756

原创 GIOU记录

GIoU对于任意的两个A、B框,首先找到一个能够包住它们的最小方框C。然后计算C \ (A ∪ B) 的面积与C的面积的比值,注:C \ (A ∪ B) 的面积为C的面积减去A∪B的面积。再用A、B的IoU值减去这个比值得到GIoU。C的面积越接近A∪B的面积表示结果越好,所以减去的部分越小。...

2021-11-03 14:59:22 95

原创 cv2.merge坑

File “class_inference.py”, line 233, in main()File “class_inference.py”, line 230, in maintest(model, args, args.image_dir, args.save_dir)File “class_inference.py”, line 118, in testmerge_image_alpha(orig_img, ret_alpha, name, results_save_dir, fg_thr

2021-10-26 15:28:48 612

原创 opencv图像拼接, 通道合并和分开

拼接import cv2img =cv2.imread(file_path[i])img=cv2.hconcat([img,img,img])#水平拼接img=cv2.vconcat([img,img,img])#垂直拼接合并# 生成一个值为0的单通道数组zeros = np.zeros(image.shape[:2], dtype = "uint8")# 分别扩展B、G、R成为三通道。另外两个通道用上面的值为0的数组填充cv2.imshow("Blue", cv2.merge([B,

2021-10-11 14:39:13 1960

原创 课程表~~~

DFS深度优先,先用字典记录所有的信息,但是可以用第二种方法,直接使用列表记录即可~~class Solution: def canFinish(self, numCourses: int, prerequisites: List[List[int]]) -> bool: ## 也就是不是一个环 record = {} sign = {} for i in range(len(prerequisites)): .

2021-09-25 15:00:51 141

原创 python-zip函数- list - set操作

a = [1,2,3,5,8] ## 如果两个的长度不同,那么结果就是较短的长度b = [2,3,4,8]print(dict(zip(a, b))) #{1: 2, 2: 3, 3: 4, 5: 8}print(list(zip(a, b))) #[(1, 2), (2, 3), (3, 4), (5, 8)]print(tuple(zip(a, b))) #((1, 2), (2, 3), (3, 4), (5, 8))...

2021-09-09 21:33:54 266

原创 百搜相关----

数组中只包含012,将数组升序排列,on时间复杂度o1空间复杂度三个指针,和partition一样的思想~class Solution: def sort(self, nums): res1 = 0 res2 = 0 res3 = 0 for i in range(len(nums)): if nums[i] == 0: nums[res2], nums[res3] = num

2021-07-24 12:22:25 100

原创 链表汇总专题~~

只要first出马,一般都没问题。两两交换节点# Definition for singly-linked list.# class ListNode:# def __init__(self, val=0, next=None):# self.val = val# self.next = nextclass Solution: def swapPairs(self, head: ListNode) -> ListNode:

2021-07-18 18:20:17 100

原创 交点-hard

#### 斜截式:y=kx+b【适用于不垂直于x轴的直线】#### 参数方程式,它可以表示任意的直线,并且它非常适合用于表示线段。假设我们给定两个点 (x_1, y_1)(x1,y1) 以及 (x_2, y_2)(x2,y2),我们只需要令:# x = x_1 + t(x_2 - x_1) and y = y_1 + t(y_2 - y_1)#### 所以这道题的点就在于要用参数方程来求解。必须可以表示任意的直线~~#### 当然我还是用斜截式,比较熟悉。所以要分是否与x轴垂直。 k = (.

2021-07-18 10:56:26 79

原创 盛水问题总结

直方图水量1、两边收缩~ 好!!!从两边收缩,因为本来就是通过两边来的,所以两边的最值是可以肯定的。如果左边的最值比右边的最值小,那么左边的水量是可以肯定的,肯定是短板~class Solution: def trap(self, height: List[int]) -> int: result = 0 left = 0 right = len(height) - 1 left_max = 0 right

2021-07-17 11:11:10 239

原创 几道规律题的总结

规律题还是少碰,感觉提高不大。1、数字序列中某一位的数字思路是每次去除对应位数的总和,比如1位的总数是9,二位的总和是180… 分别减去1位数的总和,二位数的总和等等,最后剩余部分就是最上层的位数 对应的数了。class Solution: def findNthDigit(self, n): if n <= 0: return 0 res = 1 num = 1 tmp = 9

2021-06-29 12:07:59 112

原创 heapq的使用总结

heapq实现的就是最小堆,如果需要实现最大堆,可以通过加上负号。heapq.heappop(res)heapq.heappush(res, num)heapq.heapify() 转化成堆1、#### 可以直接使用self.heap1[0]来代表堆顶,用nsamllest太麻烦了,时间复杂度太大2、注意最小堆,堆顶绝对是最小的。3、永远都是heapq开头,原本的堆放在函数里面。注意,堆在这里只是一个抽象的数据结构,还是基于list实现的。4、其实从头开始直接 heapq.heappush和h

2021-06-27 12:12:31 1239

原创 axis用法总结--很清晰

axis其实很简单啦,就是在这个维度内的元素做对应的运算,然后去除掉这个维度:举例:axis = 0表示对最外层[]里的最大单位块做块与块之间的运算,同时移除最外层[]: [4 5 6 7]axis= 1表示对第二外层[]里的最大单位块做块与块之间的运算,同时移除第二外层[]res = np.array([[[2],[3],[4],[-2]], [[2],[3],[4],[-2]]])# print(res[range(2), np.array([2, 2])])res = np.array([

2021-06-20 10:33:10 1297

原创 移掉k位数字

莽撞了~一直在试结果。。。做题不可如此。下面解法的关键思想是高位的元素如果越小越好,所以如果比之前位上的值更小,那么就把 之前位上的值 去掉~~ 所以比栈顶大的元素直接入栈, 如果比栈顶小,就把栈顶弹出来~~class Solution: def removeKdigits(self, num: str, k: int) -> str: if len(num) == k: return "0" res = [] .

2021-06-15 08:59:55 45

原创 编辑距离~

删除: dp[i][j] = min(dp[i-1][j]+1, dp[i][j]插入: dp[i][j] = min(dp[i][j-1]+1, dp[i][j])替换: dp[i][j] = dp[i-1][j-1]+1归结: dp[i][j] = min(dp[i-1][j], dp[i][j-1], dp[i-1][j-1]) + 1还是通过表格,最直观可以了解到, 删除的话,那么其实就是相当于i-1已经做到的,此时i可以不用的情况;插入就是相当于原本i满足j-1了,此时插入就是满足.

2021-06-15 07:57:10 115 1

原创 正则表达式匹配

两种方法,一种是动态规划,一种是递归,这题属于hard题了。其实递归稍微简单一些,但是一些特殊情况比较难以考虑,比如p的开头就是“*”,要提前排除。 递归要提前考虑p[1]是否为 星号。动态规划:if p[j-1] == “*”:if s[i-1] == p[j-2]: dp[i][j] |= dp[i-1][j-1]dp[i][j] |= dp[i][j-2]class Solution: def isMatch(self, s: str, p: str) -> bool: .

2021-06-12 16:58:29 70

原创 旋转字符串

第一种做法是O(n*n)的复杂度,第二种做法是O(N)。class Solution: def solve(self , A , B ): # write code here if not A and not B: return True if len(A) != len(B): return False done = 0 for i in range(len(B)):.

2021-06-10 21:26:56 58

原创 ~~~旋转数组

美团二面面到了~归根结底还是范围的缩小!1、旋转数组的难点是在是否有重复的数字,下面这题是有的,所以直接与最后的一位/第一位比较来判断是否属于左边的数组还是右边的数组是不可行的。但是因为只是找最小的,所以还可~注意缩小范围的方法: 如果mid值大于right,必然在左边的数组,故left=mid+加一个判断条件,如果left=mid,直接跳出; 如果mid小于right,其实错: 可能是左边也可能是右边的数组,只可能是右边的数组,所以 right = mid ; 如果mid等于right, right

2021-06-09 22:35:55 66

原创 排序全总结

面试无非:快排、归并、堆、冒泡、插入,以及复杂度、稳定性快排 == 不稳定相当于先序遍历 时间复杂度O(nlogn),最差O(n*n), 空间复杂度O(logn)===不稳定def partition(nums, left, right): tar = nums[right] res1 = left res2 = left - 1 for i in range(left, right): if nums[i] <= tar:

2021-06-07 09:33:53 87

原创 剑指 Offer 03. 数组中重复的数字

其他排序nlogn; O(N)空间复杂度的记录; 就不阐述了。 最优的还是时间复杂度O(N), 空间复杂度O(1)。这里有个坑,还是不要随便 a, b = b, a交换了。 在带数组的这里,不是同时交换的。下面的方法就是从左开始,因为本题如果是nums[i] != i, 那么就一直交换,如果相等就继续往下,如果实在没有i这个值,那么其实就是原地不动了,直到交换到 该点本身就是 该点的值。 就return重复的数了~~nums = [1,2,3,4,5]nums[1], nums[nums[1].

2021-06-05 16:53:28 65

原创 单源最短路

这道题本不难,难点是在重边。 正常逻辑应该都可以想到 存储顶点与顶点之间的长度的关系,然后dfs从1到n,相当于回溯~存储的话 第一种解法是字典,稍许麻烦,因为重边的原因,先排序,然后后续进来一致的都否掉;第二种解法是dp二维列表存储,dp[i] [j]代表的是顶点i到顶点j的距离,下次来就是求min。然后就是常规的dfs。第一种解法遇到的障碍是忽略了可能不在record里面,相当于在利用字典的时候,还是应该提前判断是否在字典中,否则很难检查,遗留大患!!!!class Solution: .

2021-06-05 14:14:40 121

原创 string转int/float

list1 = ['11','22']list1 = list(map(int, list1))print(type(list1[0]))

2021-06-04 18:14:14 81

原创 字符串提取中文神器

import re# # # 过滤掉除了中文以外的字符# str = "hello,world!!%[545]你好234世界。。。"# str = re.sub("[A-Za-z0-9\!\%\[\]\,\。]", "", str)# print(str)# # # 提取字符串里的中文,返回数组# pattern = "[\u4e00-\u9fa5]+"# regex = re.compile(pattern)# results = regex.findall("adf中文adf发京东方

2021-06-03 17:19:47 259

原创 ‘ascii‘ codec can‘t encode characters in position 132-142

环境问题export LC_ALL=en_US.UTF-8export LANG=en_US.UTF-8

2021-06-03 14:51:13 82

原创 动态规划--牛牛的数列

这道题目遇到的问题:没有考虑到数可以增大,其实也可以减小~所以,必须从两个方向入手。从左边入手可以查看递增的,从右边入手查看递减的。下面第一种方法是 从左开始,只考虑让某个数增大形成递增数列; 从右边开始只考虑让某个数减少形成递减数列。== 因为只有两种情况,不是增大就是减小。记录两种状态:使用两个列表,一个列表记录的是当前没有改变过数的最长数列; 一个记录的是改变了当前位置的数最长数列。class Solution: def maxSubArrayLength(self , nums ):.

2021-06-03 07:33:29 702 1

原创 WeightedRandomSampler

from torch.utils.data.sampler import WeightedRandomSamplerprint(list(WeightedRandomSampler([0.4, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1], 60, replacement=True)))# [3, 2, 0, 6, 6, 4, 0, 3, 2, 0, 0, 0, 0, 3, 0, 2, 7, 7, 6, 0, 6, 1, 4, 0, 0, 0, 6, 5, 4, 5, 0, 3

2021-06-02 12:20:30 423 1

原创 tab和空格替换

已存在的文件 空格|tab 长度替换TAB替换为空格:set ts=4:set expandtab:%retab!空格替换为TAB:set ts=4:set noexpandtab:%retab!加!是用于处理非空白字符之后的TAB,即所有的TAB,若不加!,则只处理行首的TAB。...

2021-06-01 17:47:54 862

原创 完全二叉树的节点个数

O(N)难度极低,面试肯定是小于O(N)# O(N)的时间复杂度class Solution: def countNodes(self, root: TreeNode) -> int: if not root: return 0 return self.countNodes(root.left) + 1 + self.countNodes(root.right)下面是O(NLOGN) 利用满二叉树的概念。其实就是划分左右子树,如.

2021-06-01 09:44:17 185

原创 批量kill子进程

ps -ef|grep java|grep -v grep|cut -c 9-15|xargs kill -9修改jawa即可

2021-05-31 23:17:48 226

原创 单调栈~~下一个更大的元素

O(N)时间复杂度解决~~左边就从左边开始,如果比上一个小,那么上一个弹出…右边就从右边开始,如果比上一个大,放入,小也弹出之前的.# 反正记住优先队列就是有进有出~~这么思考class Solution: def foundMonotoneStack(self , nums ): # write code here # 左边就从左边开始,如果比上一个小,那么上一个弹出... # 右边就从右边开始,如果比上一个大,放入,小也弹出之前的. .

2021-05-31 20:16:59 135

原创 最小生成数

生成树的概念就是满足有n个顶点的生成树,有且仅有n-1条边,但是有n-1条边的图不一定都是生成树。准则:1、必须只使用该图的边来构造最小生成树2、必须使用且仅使用n-1条边来连接图中的n个顶点3、不能使用产生回路的边。保证任意两个节点都可以互相链接就可以。很简单。直接用并查集完事。先排序,然后并查集查询是否是同个根节点,如果是,那么肯定不可以连接,否则回路生成。所以 并查集一个关键作用就是可以查询是否存在联系。class Solution: def miniSpanningTree

2021-05-30 18:15:44 148

空空如也

空空如也

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

TA关注的人

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