
人工智能
nihate
这个作者很懒,什么都没留下…
展开
-
opencv的Mat结构里需要注意的细节
在使用opencv的dnn模块做深度学习时,经常会遇到一个疑惑。疑惑是这样的:当执行完outs = net.forward()之后,如果outs里有Mat的维数大于2,那么设断点调试的时候,可以看到rows和cols都等于-1,以目标检测为例,输出outs里包含box和score,断点调试查看out_score的信息如下:但是最后看程序运行的可视化结果,是没问题的。这个疑惑,在opencv源码里可以找到解释,在mat.hpp文件,第2559行至2561行,中间的注释里说:当矩阵的维数大于2时,row原创 2021-02-18 17:31:44 · 966 阅读 · 0 评论 -
opencv中的resize插值方式比较
在做深度学习yolov3目标检测训练时,通常需要对原始图片做resize,把图片的尺寸缩放416x416。然而,opencv提供的resize函数里有多种插值方式,最常见使用的是INTER_LINEAR(双线性插值)和INTER_NEAREST(最近邻插值)。在github上pytorch版本的yolov3的star数量最多的的是https://github.com/ultralytics/yol...原创 2020-02-27 11:25:42 · 2422 阅读 · 0 评论 -
Python中的字符串究竟是什么样的数据结构?
首先定义字符串 s = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'然后把字符串转换成列表,有两种方法,list(s)和[s],可是打印出转换后列表的结果并不一样,如下代码:s = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'print(s, type(s))a = list(s)print(a, type(a))a = [s]print(a, type...原创 2019-10-24 10:22:20 · 469 阅读 · 0 评论 -
python中使用enumerate遍历列表时需要注意的一个细节
在Python中,使用enumerate遍历列表是非常好的一种方式,它既能获得列表中的每个元素的索引,又能获得元素值,可谓一举两得,然而,在使用enumerate遍历列表,有时候会出现一些想不到的错误,举个例子,代码如下:f = [[i,i+1,i+2,i+3]for i in range(0,16,4)]print('初始化的:',f)for i,data in enumerate(f...原创 2019-06-20 10:46:38 · 1894 阅读 · 0 评论 -
在Python里的字符串、列表、元组、集合之间转换的一个不为人知的细节和bug
首先看如下代码:a = ['0234','abcd']seta = set(a)b = ['0234']setb = set(b)c = ('0234','abcd')setc = set(c)d = ('0234')setd = set(d)e= tuple(b)sete = set(e)print(type(a), ' , ', a,' , ',seta)...原创 2019-06-19 18:16:04 · 596 阅读 · 1 评论 -
pytorch中的nn.Bilinear的计算原理详解
我们都知道在pytorch中的nn.Linear表示线性变换,官方文档给出的数学计算公式是 y = xA^T + b,其中x是输入,A是权值,b是偏置,y是输出,卷积神经网络中的全连接层需要调用nn.Linear就可以实现。而在看pytorch的源码linear.py文件时可以看到里面有Bilinear的定义,起初看到这个名字,大家会以为它是实现对图像做放大的上采样插值,可是在pytorch中有n...原创 2019-05-23 15:27:39 · 19200 阅读 · 4 评论 -
python在列表中插入元素
给定列表a,要在第k个位置插入元素b,通常有两种方法:a.inset(k,b)和a[k:k]=b,然而这两种方法是有区别的,并不是在所有情况下得到的结果都相同。下面的程序就是一个例子运行结果可以看出,当插入的元素b是一个字符串时,a.inset(k,b)方法就会在列表a的第k个位置插入这个字符串,而a[k:k]=b方法则在列表a的第k个位置插入时把字符串拆分成若干个字符。当插入...原创 2018-12-18 18:44:43 · 16196 阅读 · 0 评论 -
pycharm中同时运行多个.py文件
pycharm是一个非常好用的python集成开发环境(简称IDE),在pycharm上调用pytorch做深度学习,有时候需要同时运行多个脚本程序,或者是在执行一个深度学习训练任务时,在一个训练的脚本.py文件运行之后,修改训练脚本文件里的某些参数再运行这个脚本,而之前的运行的程序又不会被覆盖,这时需要设置pycahrm里的一个选项就可以满足这个需求在Allow running in p...原创 2018-12-21 16:41:17 · 49738 阅读 · 4 评论 -
C语言中for循环遍历给数组元素赋值需注意的问题
在C语言中,我们通常是用malloc函数分配内存得到一个数组a,然后使用for循环遍历给数组赋值,赋值的方式有很多种,比如a[i]=i,*(a++)=i,建议使用第一种方法,第二种方法一不小心就容易出错,看下面的一个编程例子我们使用*(data_col++) = output_rows;的方式给数组赋值,编译运行结果是如果用*(p++) = output_rows;,代码如下...原创 2018-09-21 11:43:39 · 13364 阅读 · 2 评论 -
pytorch中tensor数据和numpy数据转换中注意的一个问题
在pytorch中,把numpy.array数据转换到张量tensor数据的常用函数是torch.from_numpy(array)或者torch.Tensor(array),第一种函数更常用,然而在pytorch0.4中已经舍弃了这种函数,下面一个简单的编程实验说明这两种方法的区别,实验在pytorch0.4框架下进行运行程序之后,结果是可以看出修改数组a的元素值,张量b的元素值...原创 2018-09-20 18:02:30 · 14458 阅读 · 2 评论