自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Object Relational Graph with Teacher-Recommended Learning for Video Captioning 阅读笔记

Object Relational Graph with Teacher-Recommended Learning for Video Captioning论文链接Motivation:1.忽略了视频中物体的交互,2.对内容相关的词的充分训练带来的long-tailed问题。解决:通过GCN对视频进行局部特征提取,通过引入外部语言模型解决长尾问题。具体:提出了ORG捕获视觉表示的交互特征涉及了一个老师推荐学习TRL来充分利用外部语言模型ELM,将语言知识整合到caption模型中,ELM生成了在语义

2021-04-01 12:25:18 809

原创 行人重识别DG_Net@ 学习笔记

DG_Net行人重识别是指对于给定的某个摄像头下的行人图片,在有监督的条件下去预测该行人的身份(标签),DG_net是一种端到端的联合学习对抗神经网络框架,联合学习是指数据生成和行人再识别模型框架上图为DG_Net模型框架,其中:判别器(同时也是re-id学习模型)和Ea是同一个模块,虚线表示Es的输入图片是灰度图,该模型包含两个目标:同id的自身份标签图片重构不同id的跨身份标签图片合成简要介绍:DG_Net中生成器将一张行人的图片分为两个编码部分,一个是外观编码,编码器为Ea,Ea生成的

2020-09-14 10:10:12 636

原创 RuntimeError: Input type (torch.FloatTensor) and weight type (torch.cuda.FloatTensor) should be the

如果在GPU上训练的模型,在CPU上推理测试的话,需要在加载模型时使用map_location。如model = torch.load(“model.pth”, map_location=torch.device(“cpu”))推理过程遇到的错误。

2023-04-04 12:18:21 261 1

原创 CCF 20220612 寻宝!大冒险!

CCF 20220612 寻宝!大冒险!

2022-06-12 18:00:52 1130 2

原创 LeetCode 454 python 优化历程

尝试解题1使用两个列表分表保存nums1与nums2的和、nums3与num4的和遍历这两个列表找到相加为和的个数,即为最后结果超时 21/132class Solution: def fourSumCount(self, nums1: List[int], nums2: List[int], nums3: List[int], nums4: List[int]) -> int: L_12 = [] L_34 = [] for nu.

2022-01-12 15:55:06 445

原创 LeetCode 452 python贪心

题解:贪心算法分别设置两个参数l, r(分别表示区间的左端点和右端点),初始化l=points[0][0],r=points[0][1], res=1(有一个气球就需要一个箭),从下标1开始,遍历points,用(s,e)表示,每一次只保留最小的重叠区间,具体做法是,首先判断上一步保存的最小重叠区间[l,r]是否与当前区间重叠,若r>=s,则有重叠,重叠部分为:最大左端点l = max(l, s)和最小右端点r = min(r, e),[l,r]更新为当前的重叠空间若r<s,则没有重.

2022-01-12 09:28:57 307

原创 LeetCode 436 python 哈希表

题解:因为测试实例的长度为2*10**4,因此,算法复杂度不能超过nlogn。注意:题意是比较大于等于endi的最小startj,且i,j有可能相等因为每个starti都不同,因此,为方便后续比较,可用哈希表记录每个区间的下标, 使用一个等长的返回数组将intervals按降序顺序排列顺序遍历intervals的s,e,只需将e与当前intervals区间以及之间区间的s进行比较,并且逆序遍历之前的区间,这样方便找比e大且最小的s。找到了下标就利用哈希表添加至相应的位置,没找到就在相应的位置添加.

2022-01-11 16:24:05 479

原创 LeetCode 435 python 贪心

解析:贪心算法首先对intervals排序,这一步使每个区间的左端点按顺序排列,每一个interval区间的左端点是小于等于下一个interval区间的左端点保证遍历过的每个区间都是不重叠的,也即,上一个interval区间的右端点必须小于等于下一个interval区间的左端点使用变量last_num 表示已遍历过的无重叠的最后一个区间的右端点,初始化last_num为第一个interval区间的右端点,从第二个interval区间开始遍历intervals,比较last_num与当前interv.

2022-01-11 14:57:29 139

原创 yolov5m.pt triton部署

1.创建triton docker镜像docker pull nvcr.io/nvidia/tritonserver:21.10-py32.将yolov5m转为onnxA.下载yolov5官方代码B.在运行export.py文件之前,因为onnx必须转成动态的,需要修改dynamic参数,并且根据自己需求修改精度(一般为FP16)。python path/to/export.py --weights yolov5m.pt --img 640 --include onnx --dynamic --

2022-01-10 15:30:53 2117 10

原创 LeetCode 417 python dfs

解析:深度优先搜索,从左到右,从上到下,若board[i][j] 为‘X’,战舰数目加一。则继续向下或向右(不继续向上或向左是因为左边的和上边的位置已经遍历过了,若是有战舰相邻,则该位置必不为‘X’),记录一个索引,board[i][j]为始,保持该位置符号不变,继续向下或向右搜索,若有相邻战舰,则相邻战舰位置符号变为‘.’,这样做救恩那个保证最后甲板上只有不相邻的战舰位置符号为’X’,其余位置为’.’,在遍历的过程中同时计数。class Solution: def countBattlesh.

2022-01-07 17:32:14 637

原创 LeetCode 416 python 一维数组动态规划

一维数组动态规划题目要求将数组分为两个相等子集的和,那么如果为真,那么这个数组的总和必定是偶数(条件一),且该数组的最大值必不大于该数组和的一半(条件二)。那么该问题即可转化为求解和为是否有和为total = sum(nums) // 2的子数组问题。使用一维数组dp = [False] * (total+1),边界条件:当和为0时,必为真,则dp[0] = True例:求解和为i (i = (1,2,…total)),首先遍历每个num in nums,且,为防止重复,i必须逆序遍历。状态转.

2022-01-07 15:14:43 876 1

原创 LeetCode 414 python O(n)

因为时间复杂度未O(n),因此不能使用排序设3个负无穷的变量a,b,c,依次为当前遍历过的序列中最大、第二大、第三大的数当前元素nums[i]依次与a,b,c比较,若nums[i]大于a,则更新a,b,c,因为最大的值变为了nums[i],那么之前的最大变成了第二大,之前的第二大变成了第三大。同理,若nums[i]大于b,则更新b,c,因为第二大的值变为了nums[i],之前的第二大变成了第三大。若nums[i]大于c,则更新c,第三大的值变成了nums[i]。若有重复元素,则跳过。class S.

2022-01-06 17:07:18 435

原创 LeeCode 413 python 详解

贪心算法变量l记录当前遍历位置之前最长的等差数列,每次中断则计算子等差序列中所有的子数组,计算方式为:res = l - k + 1 (k = 3,4,…l) res为子等差序列中所有大于等于3 小于等于l的子数组若中断,则l从零开始等差数列的遍历从下标1开始到下标n-2结束,若任意两个相邻元素之差相同,且l=0 则l+3,否则l+1,例如[1,2,3,4], 初始l=0,从2开始,2满足条件,则l+=3(表示当前子序列为1,2,3),3满足条件,则l+=1(把4的长度加到子序列中)。边界条件.

2022-01-06 16:28:38 272

原创 LeetCode 380

删除、插入均为二分查找import randomclass RandomizedSet: def __init__(self): self.nums = [] def insert(self, val: int) -> bool: l = 0 r = len(self.nums)-1 while l <= r: mid = (l + r) // 2 if s.

2022-01-04 16:56:36 284

原创 LeetCode 376

题解:使用贪心算法:记住当前摆动序列的最后一个元素b,明确下一次运算应该大于当前这个元素(conti=True)还是小于这个元素(conti=False)。分四种情况如果conti=True,nums[i] < b,那么b=nums[i],因为后面的元素更容易大于一个较小的元素,所以conti=True接着比较找更大的数字;如果conti=False,nums[i] > b,那么b=nums[i],因为后面的元素更容易小于一个较大的元素,所以conti=False接着比较找更大的数字;如.

2022-01-04 10:46:18 207

原创 Leetcode 846

class Solution: def isNStraightHand(self, hand: List[int], groupSize: int) -> bool: n = len(hand) if n % groupSize != 0: # 须得满足牌的个数是分组的倍数 return False d = {} hand.sort() # 排序 L = [] .

2021-12-30 16:24:11 237

原创 Yolov5m.pt转tensorRT

yolov5m.pt 转TensorRT

2021-12-22 17:05:21 783

原创 Leetcode 120

自顶向下的动态规划class Solution: def minimumTotal(self, triangle: List[List[int]]) -> int: n = len(triangle) f = [[0]*len(triangle[-1]) for i in range(n)] f[0][0] = triangle[0][0] for i in range(1, n): f[i][0] =.

2021-12-14 16:12:24 197

原创 Leecode 221

原本以为这又是一道需要dfs的题,没想到行不通,最后找到一种思路——使用动态规划。将所有的str转为int如图所示:蓝圈所指位置是正方形的右下角位置,若能组成正方形,则该位置的左上方所有位置都得是1.由上图可得公式:matrix[i][j] = min(matrix[i-1][j-1], matrix[i-1][j], matrix[i][j-1]) + 1只计算边长,最后返回边长的平方即为面积。class Solution: def maximalSquare(self, ma.

2021-12-11 21:37:23 118

原创 将fastreid权重文件轻量化,并将其嵌入deepsort模型中,踩坑集锦

1.准备, 已经训练好的fast_reid配置文件和权重文件这是配置文件这是权重文件此时的权重文件共有282.10MB2.将配置文件转为onnx文件pip install onnxfast_reid代码(https://github.com/JDAI-CV/fast-reid/tree/master/tools/deploy)照着步骤走,先下载fastreid代码,cd 到tools/deploy文件夹下,然后终端运行命令:python onnx_export.py --conf

2021-11-10 19:12:03 2486 4

原创 Leecode 71

class Solution(object): def simplifyPath(self, path): """ :type path: str :rtype: str """ # 依照规则写条件代码 path_list = path.split('/') # 将路径以‘/’为分隔符分为列表格式,作为一个一个的操作符 res = [] res.append('/') .

2021-10-26 16:03:09 90

原创 Leecode 64

题目解析:每一个位置的路径和 = min(左边经过的路径, 上边经过的路径),加上当前走过的路径。class Solution(object): def minPathSum(self, grid): """ :type grid: List[List[int]] :rtype: int """ m, n = len(grid), len(grid[0]) for i in range(1, n):.

2021-10-19 13:56:45 84

原创 Leecode 63

题目解析:与Leecode 62一样的思路,只是有了障碍物之后,这个位置及其之前的路径都为0,也即此路不通。路径矩阵(obstacleGrid)第一行第一列在没有障碍物的时候同一初始化为1,有障碍物时障碍物位置及其之后的位置为0边界条件:如果起始位置有障碍物,则起始位置为0其他位置判断是否存在障碍物,如果存在那该位置的路径为0,否则就是左边位置路径与上边位置路径的和class Solution(object): def uniquePathsWithObstacles(self, obs.

2021-10-18 15:52:42 83

原创 Leecode 62

题目解析:题目中机器人只能向下或向右移动,画个简单的图示意,由上图可见,绿色的点可由两条路径到达,一个是从上面那条蓝色的点路径,一个是从左边那条紫色的点路径,同样地,蓝色的点也可由上面一条白色的点路径和左边一条红色的点路径到。。。依次,可以发现一个位置可以由左边路径到达也可由上边路径到达,那能够达到这个位置的路径就是左边路径与上面路径的和!接下来写代码实现就行了。class Solution(object): def uniquePaths(self, m, n): """.

2021-10-17 15:05:19 76

原创 Leecode 59

题目解析:与leecode 54一样的思路,只不过后者是输出,前者是填入。与后者相比,螺旋矩阵II需要提前初始化一个全为0的n*n的二维数组,并且设置一个标量初始值为1,每走一步就加1,并将其填入每一步的位置。class Solution(object): def generateMatrix(self, n): """ :type n: int :rtype: List[List[int]] """ L = [[.

2021-10-14 10:37:25 66

原创 Leecode 57

参考上一题 leecode

2021-10-13 21:01:47 68

原创 Leecode 56

题目解析:先对若干个区间排序,那么所有区间的起始值必然是从小到大的,而只要保证当前每一步的结束值是最大的就行了。这时候就要用到贪心算法,依次遍历每一个区间,当前一时刻的结束值大于等于当前区间的起始值时,则比较前一时刻的结束值与当前区间的结束值,保存最大的结束值,并标记从这一区间开始已经重叠了,而当前一时刻的结束值小于当前区间的起始值时,则根据是否重叠区间,将前一时刻的起始值和结束值保存下来。class Solution(object): def merge(self, intervals):.

2021-10-12 15:39:36 62

原创 Leecode 55

使用贪心算法,设置每一步能够跳跃的起始位置和结束位置,计算每一步最远可以达到的位置,如果当前这一步能够走完数组就返回True,如果走完了所有的数组,都没有达到最远的位置,则返回False,在跳跃的过程中,如果当前跳跃的起始位置与结束位置相等,则表示当前位置是能达到的最远位置,比如[0, 1],从第一个位置,只能跳到第一个位置。class Solution(object): def canJump(self, nums): """ :type nums: List[.

2021-10-11 17:48:21 64

原创 Leecode 54

题目解析:确定四个边界(上、下、左、右),确定螺旋轨迹是先右后下再左然后往上,所以按照轨迹,只要没有达到边界就一直走,达到边界之后就换个方向,class Solution(object): def spiralOrder(self, matrix): """ :type matrix: List[List[int]] :rtype: List[int] """ i = 0 j = 0 ..

2021-10-11 17:37:51 86

原创 关于在python环境中导入调用的包

当调用与该py文件同一文件夹但不在同一路径下的包时,如何正确调用只需添加几行代码:import osimport sysenv_path = os.path.join(os.path.dirname(__file__), '..')if env_path not in sys.path: sys.path.append(env_path)...

2021-09-10 16:25:11 127

原创 alphapose输出2d骨架数据转化为每一个id在每一帧的2d骨架数据及检测框位置

import jsonimport osimport argparsefrom shutil import copydef is_300(data, points): # 判断当前id的总帧数是否为300帧 if len(data) > 300: for i in range(300, len(data)): del data[str(i)] if len(data) < 300: for i in range(

2021-07-18 16:41:18 761 8

原创 ubuntu16.04+cuda9.0+cudnn7.1+opencv3(无需编译caffe)+openpose

1. 安装Cmake-guiSudo apt-get install cmake-qt-gui2. 安装CUDA9.0、Cudnn7.3.1参考:https://blog.csdn.net/weixin_41977337/article/details/1052500163. Opencv安装参考:https://blog.csdn.net/cocoaqin/article/details/78163171亲测3.4.0好用,中间有一些warning不用担心4. Openpose and Ca

2021-06-30 11:18:50 141

原创 ubuntu18.安装mmskeleton recognition 环境(实践)

预备环境:Anaconda+cuda+cudnn接下来:下载代码到本地git clone https://github.com/open-mmlab/mmskeleton.gitcd mmskeleton创建虚拟环境conda create -n stgcn python=3.X()conda activate stgcn正式安装环境安装torch、torchvisionpip install torch>=1.1pip install torchvision安装m

2021-06-08 17:05:18 785 9

原创 人体姿态估计综述

任务介绍人体姿态估计的目标是从给定的图像或视频中确定人的身体关键点(部位/关节)的位置或空间位置,如图一所示,因此,姿态估计使用基于图像的观察获得关节人体的姿态,关节人体由关节和刚性部分组成。在估计给定图像中的人体姿势时,最常见的两种方法:1)Top-down的方法,处理从低分辨率到高分辨率进行,首先使用边界框对象检测器检测图像中的各个实例,然后重点确定它们的姿态。如图5:然而这些方法总是受到早期检测的影响,这意味着如果最开始对个人的检测失败,就没有恢复的可能性。此外,当多个个体有重叠,模型很容易

2021-05-31 11:30:52 11350 1

原创 Transformer理解

Transformer是一个用于翻译的模型。由N个结构完全相同的encoder(训练时N个encoder参数独立训练)和N个结构完全相同的decoder(训练时N个decoder参数独立训练)组成。其中“N”是可以自己设定的,论文中给定的一个参考值为6.Transformer模型框架:将Transformer进一步细化为Encoder部分和Decoder部分。**Encoder**而Encoder部分又可分为3个部分:输入部分、注意力机制、前馈神经网络。输入部分包括两个:1.embedd

2021-05-23 21:19:46 584

原创 残差网络理解(简略)

x是初始的输入(也可能是上一层的输入),红框里面是两层神经网络,假设这两层网络的输出为F(x),将F(x)与x相加作为下一层网络的输入。这就是残差网络。为什么残差结构有用呢?比如这张图,A对应着上一张图的x,B和C是两层神经网络,D是下一层网络。注意到最后的梯度中红框中的公式为:1+…,即使后面的梯度为0,整个梯度也不会消失,因此很好地解决了梯度消失的问题,利用残差网络可以构建深层的网络而不担心因为梯度累乘带来的梯度消失问题。...

2021-05-23 21:06:43 564 1

原创 BN和LN理解

BN针对一个batch_size中同一维度的样本在做处理。比如上图,有x1,x2,…,xR个样本,这些样本的第一个维度描述的是体重,第二个维度描述的身高,BN在所有样本的的每一个特征(比如体重维度、身高维度)上进行归一化,BN的优点:第一个优点可以解决内部协变量偏移,第二个优点就是缓解了梯度饱和问题(如果使用sigmoid函数的话),加快收敛。BN的缺点:第一个缺点batch_size较小的时候,效果很差,因为BN就是用batch_size中样本的均值和方差去模拟全部样本的均值和方差,这个假设在样本

2021-05-23 20:40:09 2039

原创 Understanding Objects in Video:Object-Oriented Video Captioning via Structure and Adversarial Learn

这篇文章与其他video captioning不同的是:这是面向对象的video captioning,它旨在对视频中的每一个对象都生成描述。首先,使用MackTrackRCNN去生成每个对象按时间顺序出现的视频帧,以及这个对象在这些帧中出现的空间位置,并将其与整个视频通过backbone提取特征全局特征和局部特征。C是外观信息,B是空间位置。因为面向对象的video captioning与一般的video captioning相比,它更需要将关于对象的描述更细致,于是这篇文章加了关于属性探测的模型来生.

2021-05-23 11:19:11 112

原创 Learning to Discretely Compose Reasoning Module Networks for Video Captioning阅读笔记

这篇论文提出使用组成推理模块完成Video captioning任务。一般的encoder-decoder框架是将视频特征编码,然后使用RNN变体解码,这解码的过程必须存在推理过程,然而,在每一时刻生成描述的时候是注意到了视频的哪一部分特征,这对我们来说是黑盒,所以这篇论文提出了一个显式的推理模块。首先对视频提取特征,分别是Va(外观特征),Vo(目标特征),Vm(动作特征),ht en是前t-1时刻的描述的LSTM的编码,推理部分由三个模块组成,当模型要生成一句这样的描述时:一个人在打篮球,首先这个模.

2021-05-23 11:17:31 377

原创 Multi-Task Video Captioning with Video and Entailment Generation阅读笔记

这篇文章提出多任务学习去优化Video Captioning框架,模型框架图如上所示,共3个任务。其中,UNSUPERVISED VIDEO PREDICTION(无监督视频预测):一个视频由n帧组成,首先对这些帧提取特征,然后将其分为1…k,k…,n帧,这个任务就是由前k个帧的视频特征,去预测后n-k个帧的视频特征。第二个任务是ENTAILMENT GENERATION,这个任务是输入一个句子,生成一个与输入句子相似的句子(许多video captioning数据集中关于一个视频有多个描述,这些描述.

2021-05-23 11:15:26 260

空空如也

空空如也

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

TA关注的人

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