
python编程
文章平均质量分 79
胖胖大海
这个作者很懒,什么都没留下…
展开
-
(五)、从零开始搭建人脸识别服务之人脸图像快速筛选标注
在前面几篇文章中分别简单介绍了人脸检测、人脸特征提取、大规模人脸识别、提升人脸识别结果稳定性。其中,大规模人脸识别和提升人脸识别结果稳定性都需要依赖大量的标准人脸特征,如何才能快速的完成大规模标准人脸图像的选择、入库,决定了人脸识别能力的部署响应速度以及识别范围的快速扩充。原创 2021-01-03 19:37:29 · 906 阅读 · 0 评论 -
时序动作检测《BSN++: Complementary Boundary Regressor with Scale-Balanced Relation Modeling for ……》
温馨提示:本文仅供自己参考(勿捧杀),如有理解错误,有时间再改!BSN++论文涉及的相关算法:1、BSN:时序动作检测《BSN: Boundary Sensitive Network for Temporal Action Proposal Generation》2、BMN:时序动作检测《BMN: Boundary-Matching Network for Temporal Action Proposal Generation》3、Non-Local:《Non-local Neural Ne原创 2021-09-03 09:04:06 · 1829 阅读 · 21 评论 -
目标检测AP、mAP计算方法
关于AP和mAP的定义可以参考以下链接:参考:https://blog.csdn.net/qq_35916487/article/details/89076570参考:https://zhuanlan.zhihu.com/p/56961620代码来源:https://github.com/rbgirshick/py-faster-rcnn/blob/master/lib/datasets/voc_eval.pyAP(Average Precison)是计算具体某个类别的AP...原创 2021-09-03 19:44:18 · 8400 阅读 · 0 评论 -
《Non-local Neural Networks》个人总结理解
问题分析:神经网络中的long-range依赖问题,对于序列数据(如语音、文字),可以使用RNN循环神经网络来提取长距离依赖,对于图像数据,由于卷积操作具有的局部连接的特性,使得卷积的结果仅和周围的局部区域相关。为了使的卷积操作能够捕捉到更大的依赖关系,目前的做法是增大卷积的感受野,这也就是常见的卷积+下采样(池化)的网络结构。这种网络结构存在以下限制:计算效率不高 优化困难 跨级的依赖关系比较困难核心观点:论文提出的Non-Local操作,每个位置的特征都...原创 2021-09-03 08:54:13 · 5100 阅读 · 1 评论 -
分类模型confusion matrix混淆矩阵可视化
之前写过一篇关于在scikit-learn工具包中,可视化estimator分类模型分类结果的confusion matrix混淆矩阵可视化的方法,具体可以参考看这里,看这里。今天这篇介绍一下如何使用scikit-learn工具中提供的相关方法,可视化其他任意框架(比如深度学习框架)的分类模型预测结果的混淆矩阵。下面先说一下几个关键步骤:1、确定类别列表,类别列表和one-hot的编码顺序一致,这里使用cifar-10的类别列表作为演示的例子。classes =...原创 2021-08-28 10:41:38 · 17395 阅读 · 4 评论 -
使用TensorBoard可视化pytorch模型、数据以及模型训练过程
tensorboard常用函数列表如下: torch.utils.tensorboard.writer.SummaryWriter tensorboard的入口,创建event files add_scalar(tag,scalar_value,global_step=None,walltime=None) 添加标量到event file add_scalars(main_tag,tag_scalar_dic...原创 2021-04-23 20:32:27 · 7575 阅读 · 0 评论 -
Pytorch框架TorchScript模型转换方法
为什么要使用TorchScript对模型进行转换?a)、TorchScript代码可以在它自己的解释器中调用,它本质上是一个受限的Python解释器。这个解释器不获取全局解释器锁,因此可以在同一个实例上同时处理多个请求。b)、这种格式允许我们将整个模型保存到磁盘上,并将其加载到另一个环境中,比如用Python以外的语言编写的服务器中c)、TorchScript提供了一种表示方式,我们可以在其中对代码进行编译器优化,以提供更有效的执行d)、TorchScript允许我们与许多后端/设备运行时进原创 2021-04-20 19:40:08 · 8272 阅读 · 12 评论 -
Flask+Gunicorn部署深度学习Rest接口
使用Flask框架部署pytorch模型Rest接口是最简答快捷的方式,但如果服务要求服务具有更高的处理性能,比如高并发、低时延等,使用Flask部署可能就不太合适了。比如直接使用Flask框架提供的web服务启动Rest接口时,会有如下提示:提示说这个web服务可以用来开发测试,不要用来进行生产部署,生产部署可以使用WSGI服务进行替代。实际压测中也会发现,如果用Flask自带的web服务,性能极不稳定。对于上述问题,可以使用TorchScript对模型进行转换,然后使用C++进行调用,可原创 2021-04-20 09:02:34 · 664 阅读 · 0 评论 -
解决python导入自定义模块报错ImportError: No module named XXX
在进行python代码开发,尤其是进行代码部署时,明明在IDE(如Pycharm)中运行正常的代码,到了生产环境使用python xxx.py方式运行时,就报各种各样的ImportError: No module named XXX,找不到各种自定义的代码文件,产生这个问题的原因是python的搜索路径导致的,具体原因请自行搜索。下面说一种解决方法:示例代码结构如下:utils.tools目录下有tools.py代码文件,demo.py文件在utils目录下,也就是在tools.py的上级目录.原创 2021-02-28 18:06:45 · 12074 阅读 · 3 评论 -
matplotllib、opencv、Pillow保存图像方法对比
import numpy as npfrom matplotlib import pyplot as pltimport cv2from PIL import Imageprint("########################################## 图像数值范围0-255 #########################################")img = cv2.imread("./images/dog.jpg")# 保存数值范围在0-255的常规图片# .原创 2021-01-19 19:21:08 · 581 阅读 · 3 评论 -
python的logging模块输出error日志的堆栈信息
1、logging error日志常规用法import sysimport threadingimport timeimport loggingfrom logging.handlers import TimedRotatingFileHandlerimport osimport shutilif os.path.exists("./logs"): shutil.rmtree("./logs")os.makedirs("./logs")def init_log():原创 2020-11-26 10:19:25 · 9477 阅读 · 0 评论 -
python线程池ThreadPoolExecutor和进程池ProcessPoolExecutor使用
1、线程池ThreadPoolExecutor""" 线程池,使用单核CPU"""from concurrent.futures import ThreadPoolExecutorimport randomimport timeimport threadingfrom datetime import datetimeimport multiprocessingimport numpy as npdef print_func(x): sleep_time = ran原创 2020-11-17 19:54:47 · 1475 阅读 · 0 评论 -
pytorch中MobileNetV2分类模型的源码注解
上一篇《pytorch卷积操作nn.Conv中的groups参数用法解释》中简单介绍了MobileNet中使用的深度可分离卷积,以及pytorch中在实现深度可分离卷积时使用的nn.Conv模块的groups参数。本篇通过代码注释的方式解释一下pytorch中MobileNetV2网络的具体实现过程。from torch import nnfrom .utils import load_state_dict_from_url__all__ = ['MobileNetV2', 'mobilene原创 2020-11-17 08:55:21 · 3991 阅读 · 2 评论 -
pytorch卷积操作nn.Conv中的groups参数用法解释
最近在项目中使用到了MobileNet分类网络,MobileNet网络中使用到了深度可分离卷积操作,深度可分离卷积将传统卷积操作分成两步来处理。假设输入的特征图feature_map大小为[H, W, C],深度可分离卷积第一步使用C组NxNx1的卷积核对每个输入通道in_channel进行卷积,卷积输出结果特征图feature_map大小为[H, W, C],然后使用M和1x1xC的卷积核进行卷积操作,输出的特征图大小为[H, W, M]。深度可分离卷积的目的是减少卷积操作的参数量和计算量,从而提升运算速原创 2020-11-13 20:03:07 · 12343 阅读 · 8 评论 -
使用scikit-learn中的metrics.plot_confusion_matrix混淆矩阵函数分析分类器的误差来源
在前面的文章中介绍了使用scikit-learn绘制ROC曲线和使用scikit-learn绘制误差学习曲线,通过绘制ROC曲线和误差学习曲线可以让我们知道我们的模型现在整体上做的有多好,可以判断模型的状态是过拟合还是欠拟合,从而确定后续的优化方向。但是绘制学习曲线的方法只能让我们从整体上了解模型的性能,并不能具体展示具体的误差来源。在吴恩达老师的视频中,多次强调误差分析的重要性,就是针对模型处理出错的样本进行重点研究分析,然后选择可能的优化方向。今天这篇短文就来讲一下针对分类问题,如何使用scikit-l原创 2020-07-12 11:09:09 · 16376 阅读 · 0 评论 -
kaggle波士顿房价预测,score=0.12986
作为一个机器学习小白,之前拿titanic数据集练过手,遇到波士顿房价数据集(81个特征)刚开始是有点懵,主要就懵在不知道如何下手处理数据,参考一些资料后,勉强跑通了流程,在此记录一下。大神请自动绕过。1、加载数据集数据集可以到kaggle官网下载%matplotlib inlineimport numpy as npimport pandas as pdfrom matplotlib import pyplot as pltdf_train = pd.read_csv("./dat原创 2020-07-04 12:53:16 · 2244 阅读 · 3 评论 -
文字检测算法CTPN网络模型及tensorflow版本代码介绍
网络结构:1、基础网络时VGG16,在conv5_3卷积之后的特征图上进行后续处理2、在conv5_3的特征图之上,使用3x3的卷积核进行滑窗处理,这就是Faster R-CNN中使用的RPN网络3、然后以特征图的行为单位,将每行内容分别输入到双向LSTM循环网络中,将双向循环网络的输出结果进行concat连接,每个LSTM输出的结果是128维向量,所以每个位置的输出结果是256维的向量,得到的特征图大小就是 H x W x 2564、在特征图上的每个(h, w)的位置上,后面连接一个全..原创 2020-06-25 14:02:17 · 1517 阅读 · 1 评论 -
pandas数据分析之绘图方法详解
之前介绍过matplotlib plot方法的详细用法,今天来介绍一下pandas中绘图方法,pandas中封装的绘图方法本质上还是调用了matplotlib的绘图方法。基础绘图方法plot,pandas中Series和DataFrame的plot方法是包装自matplotlib的plot方法# Series绘图ts = pd.Series( np.random.randn(1000), index=pd.date_range('1/1/2000', periods=1000))原创 2020-06-25 12:39:21 · 7259 阅读 · 0 评论 -
使用scikit-learn计算分类器的ROC曲线及AUC值
在前面的博客中介绍了使用scikit-learn绘制分类器的学习曲线,今天介绍一下使用scikit-learn绘制分类器的ROC曲线,以及计算AUC的值。ROC曲线主要用于衡量二分类器的性能,当正负样本不均衡时,准确率和召回率不能合理度量分类器的性能。关于ROC曲线和AUC的计算scikit-learn工具包中主要提供了以下几个函数:1、roc_curve函数(只能用于二分类):根据模型预测结果(概率,置信度等)和样本真实标签,按照模型预测结果降序排序依次选择阈值,基于阈值计算fpr、tpr,基于f原创 2020-06-13 20:40:38 · 14877 阅读 · 1 评论 -
scikit-learn工具包中分类模型predict_proba、predict、decision_function用法详解
在使用sklearn训练完分类模型后,下一步就是要验证一下模型的预测结果,对于分类模型,sklearn中通常提供了predict_proba、predict、decision_function三种方法来展示模型对于输入样本的评判结果。说明一下,在sklearn中,对于训练好的分类模型,模型都有一个classes_属性,classes_属性中按顺序保存着训练样本的类别标记。下面是使用Logistic Regression分类器在为例,展示一下分类器的classes_属性。1、先看一下样本标签从0...原创 2020-06-13 12:33:29 · 51491 阅读 · 31 评论 -
scikit-learn工具包中常用的特征选择方法介绍
对于特征选择的作用在这里照搬《西瓜书》中的描述:常用的特征选择方法有以下三种(备注:以下代码采用Jupyter notebook编写,格式与传统稍有不同):1、过滤式特征选择简单理解就是过滤式特征选择通过选择与响应变量(目标变量)相关性度量(可能是相关系数,互信息,卡方检验等)高于设定阈值的特征。在scikit-learn工具包中,主要有以下几种过滤式特征选择方法:1)、移除方差小于指定阈值的特征特征的分布方差低,表示特征的分布集中度高,多样性较低,包含的信息量少...原创 2020-06-06 10:41:39 · 3244 阅读 · 0 评论 -
scikit-learn数值缩放、归一化、标准化常用方法
在训练机器学习模型时,为了均衡各类数值特征对于模型的影响程度,加快模型的收敛速度,通常要对数值特征进行缩放、归一化、标准化等操作,下面介绍一下scikit-learn工具包中常用的几种数值特征处理方法。1、normalize归一化normalize归一化可以沿着矩阵任意轴进行,如果选择l2归一化,axis=0,就是将每个元素除以元素所在列的l2范数。normalize函数的参数列表如下:参数 参数描述 X 需要归一化的矩阵 norm 使用哪种归一化方式,L1、L2、原创 2020-06-06 09:44:20 · 5184 阅读 · 0 评论 -
pandas透视表(pivot_table)和交叉表(crosstab)使用介绍
透视表pivot_table参数列表:透视表pivot_table实例:1.创建DataFramedf = pd.DataFrame({ "A": ["foo", "foo", "foo", "foo", "foo", "bar", "bar", "bar", "bar"], "B": ["one", "one", "one", "two", "two", "one", "one", "two", "two"], "C": ["small", "large", "l原创 2020-06-02 19:05:59 · 1871 阅读 · 0 评论 -
matplotlib plot函数使用详解
以上图片中的内容来自于plot函数的帮助文档。原创 2020-05-26 19:34:59 · 3479 阅读 · 0 评论 -
numpy随机数函数randn和rand使用方法
np.random.randn()使用方法:使用help(np.random.randn)查看randn方法的帮助文档如下:要点:1)、如果传入的参数为空,则randn返回一个浮点数2)、如果传入的参数不为空,则依据传入的参数,返回对应shape形状的随机浮点数矩阵,且矩阵元素服从标准正态分布(均值为0,方差为1)3)、当传入参数调用randn方法时,也可以调用与之等价的方法np.random.standard_normal((d0, d1, ...))示例一(randn只接受一原创 2020-05-25 19:34:57 · 4092 阅读 · 0 评论 -
AdaBoost算法实例详解
AdaBoost算法其实很精炼,算法流程也好理解,但是看了算法的解释版本之后,什么前向分布算法,什么指数损失函数之后有点迷糊了。抛开这些理论性的推导不谈(其实是因为能力有限),通过例子直观的了解AdaBoost算法的计算过程。简要叙述一下AdaBoost算法的主要过程:AdaBoost为每个数据样本分配权重,权重符合概率分布,初始权重符合均匀分布,串行训练M个模型,依据每轮训练的模型的错误率(被误分类样本的权重之和)确定当前模型在最终模型中的权重,以及更新训练样本的权重,误分类样本权重升高,分类正确原创 2020-05-23 14:15:10 · 25055 阅读 · 16 评论 -
vnc和anaconda冲突解决方法:could not make bus activated clients aware of XDG_CURRENT_DESKTOP=GNOME envi
1、注释掉~/.bashrc中anaconda相关的环境变量设置2、执行source ~/.bashrc3、重启一个xshell连接,启动vnc4、还原~/.bashrc中注释掉的anaconda相关的环境变量5、执行source ~/.bashrc原创 2020-05-19 17:18:15 · 9379 阅读 · 0 评论 -
注意!注意!注意!python字典dict执行pop弹出元素后不会释放占用的内存
1、创建python字典dict对象,并查看内存占用大小2、执行pop操作,弹出部分元素,并查看内存占用大小3、执行clear方法清除字典对象使用提示:如果在代码中使用dict字典进行数据存储,并涉及大量的键值增删操作,需要关注字典对象的内存占用问题,在适当的时候可以执行clear方法进行清除。...原创 2020-05-08 21:08:04 · 2277 阅读 · 0 评论 -
matplotlib中cla/clf/close用法及相关清除效果
在使用matplotlib画图时,画完图之后需要进行一定的清理工作,否则后续画图的结果中可能混入前一幅图的数据,或者造成频繁创建绘图对象。下面解释一下matplotlib中的相关清理操作和效果。主要包括以下方法:1、gca获取当前的axes,cla清理当前的axes2、gcf获取当前的figure,clf清理当前的figure3、close,关闭figure1、使用matplotl...原创 2020-04-26 10:21:57 · 18544 阅读 · 0 评论 -
常用向量空间距离计算的几种方法
常用向量空间距离包括:1、欧式距离2、余弦距离和余弦相似度3、曼哈顿距离……下面介绍一下常用的计算方法:1、计算向量的余弦距离2、使用scipy计算常用向量空间距离3、使用sklearn计算常用向量距离...原创 2020-04-26 10:06:07 · 7506 阅读 · 0 评论 -
Numpy扩充矩阵维度(np.expand_dims, np.newaxis)和删除维度(np.squeeze)的方法
在操作矩阵的时候,不同的接口对于矩阵的输入维度要求不同,输入可能为1-D,2-D,3-D等等。下面介绍一下使用Numpy进行矩阵维度变更的相关方法。主要包括以下几种:1、np.newaxis扩充矩阵维度2、np.expand_dims扩充矩阵维度3、np.squeeze删除矩阵中维度大小为1的维度np.newaxis,np.expand_dims扩充矩阵维度:import n...原创 2020-04-26 09:52:06 · 41393 阅读 · 3 评论 -
Numpy实现矩阵转置的几种方法
在矩阵操作中,经常需要对矩阵进行转置,或者需要交换矩阵的轴,下面介绍一下使用Numpy完成矩阵轴数据交换的几种方法。主要包括以下几种方法:1、.T转置,适用于1-D,2-D矩阵2、np.transpose,适用于一次同时交换多个(大于两个)轴数据3、np.swapaxes,一次只能交换两个轴的数据下面通过一个具体例子感受以下具体的转换过程和转换结果。import numpy ...原创 2020-04-26 09:37:54 · 27382 阅读 · 0 评论 -
使用pandas和sklearn对分类特征进行OneHot编码的几种方法
进行OneHot编码常用的几种方法:首先介绍一下将分类属性数字化的方法。构造带有分类特征的数据集。方法一:使用sklearn中的LabelEncoder将分类特征数字化方法二:使用pandas的factorize()函数将分类特征数字化下面介绍一下将分类特征进行OneHot编码的几种方法。方法一:先LabelEncoder,再OneHotEncoder...原创 2020-04-17 19:44:49 · 6828 阅读 · 0 评论 -
nmslib完成大规模高维向量查找(如大规模人脸识别)
待续原创 2020-03-28 14:54:12 · 4345 阅读 · 5 评论 -
sklearn模型过拟合、欠拟合分析,learning_curve绘制学习曲线
以iris数据集合SVM分类器为例,使用sklearn的learning_curve函数绘制分类器的学习曲线,并根据学习曲线判断模型的状态,是欠拟合还是过拟合。1、加载iris数据集2、划分训练集和测试集3、设置超参数C=0.05, gamme=0.1训练SVM模型交叉验证结果准确率0.86,结果好像还不错!!!4、使用learning_curve绘制分类器学习曲线...原创 2020-03-17 15:51:22 · 6519 阅读 · 6 评论 -
sklearn决策树完成卫星数据集分类
1、加载卫星数据集2、分层采样划分训练集和测试集使用交叉验证,所以不单独划分验证集3、使用默认参数,交叉验证决策树的分类效果4、网格搜索决策树最佳超参数5、基于选择的最佳超参数,训练决策树模型,并在测试集上验证分类效果分类准确率由默认参数的0.79提升到0.85...原创 2020-03-16 16:38:14 · 715 阅读 · 2 评论 -
sklearn中cross_val_score、cross_val_predict的用法比较
cross_val_score:得到K折验证中每一折的得分,K个得分取平均值就是模型的平均性能cross_val_predict:得到经过K折交叉验证计算得到的每个训练验证的输出预测方法:cross_val_score:分别在K-1折上训练模型,在余下的1折上验证模型,并保存余下1折中的预测得分cross_val_predict:分别在K-1上训练模型,在余下的1折上验证模型,并将...原创 2020-03-12 11:02:36 · 29254 阅读 · 8 评论 -
python高效kmeans算法实现
本篇基础代码转载自天元浪子的技术博客。1、kmeans聚类,使用numpy计算向量之间欧氏距离def fast_kmeans_numpy(ds, k): """k-means聚类算法 k - 指定分簇数量 ds - ndarray(m, n),m个样本的数据集,每个样本n个属性值 """ m, n = ds.shap...转载 2020-02-18 14:10:17 · 1472 阅读 · 4 评论 -
numpy和scipy计算向量欧氏距离性能对比
# coding:utf-8from scipy import spatialfrom functools import wrapsimport datetimeimport numpy as npdef print_execution_time(func, iter=100): @wraps(func) def warpper(*args, **kwargs):...原创 2020-02-17 17:28:22 · 1719 阅读 · 0 评论 -
numpy where使用方法以及多条件组合使用
# coding:utf-8import numpy as npx = np.array([[1, -1], [-1, 1]])print(x)"""[[ 1 -1] [-1 1]]"""# 将第一列中的-1替换程100x[:, 0] = np.where(x[:, 0] == -1, 100, x[:, 0])print(x)"""[[ 1 -1] [10...原创 2020-02-11 10:54:20 · 9061 阅读 · 0 评论