
AI
文章平均质量分 76
不佛
向来心是看客心
展开
-
YOLOv5训练报错:result type Float can‘t be cast to the desired output type __int64
【代码】YOLOv5训练报错:result type Float can‘t be cast to the desired output type __int64。原创 2023-04-24 10:23:55 · 1313 阅读 · 2 评论 -
王树森 强化学习RL
策略学习算法步骤:这里还有一个问题我们一直没有考虑,就是这个QπQ_\piQπ的值怎么算?第一种方法是REINFORCE。因为QπQ_\piQπ的定义是回报UtU_tUt的期望,所以我们可以玩完一局游戏后,把真实观测到的utu_tut作为qtq_tqt的近似。第二种方法是再用一个神经网络来近似QπQ_\piQπ,这就有了两个网络,一个负责动作,一个负责评价,这就是Actor-Critic算法。原创 2023-03-15 16:58:01 · 1250 阅读 · 0 评论 -
YOLOv5 Jetson部署 TensorRT
用TensorRT部署YOLOv5,用的最多的方式就是通过:https://github.com/wang-xinyu/tensorrtx/tree/master/yolov5步骤和教程都已经很详细了,我只是记录一下遇到的问题。原创 2022-06-20 11:20:28 · 2708 阅读 · 9 评论 -
报错 Illegal instruction
记录一个bug在我的Jetson Xavier NX上,使用命令:如果在Python脚本中有:则报错:大部分回答的解决方式是:但我看了一下,已经有这个环境变量了,不是这个问题。查了一圈,在Pytorch论坛找到一个解释:是numpy 1.19.5版本的bug。因为numpy 1.20以上版本不支持python 3.6,我只能重装numpy为1.19.4版本:...原创 2022-06-20 10:46:07 · 1244 阅读 · 1 评论 -
交叉熵损失 理解
刚开始学习神经网络解决分类问题时,对交叉熵损失总是理解起来很模糊,不清楚从何而来,为什么用。网上的讲解总是只侧重一个角度,看了还是云里雾里。我以至今学习和实践经验,梳理一下我的理解。1.实际实现数学是对普遍问题的抽象,很多时候我们一开始就看公式会不容易理解。因此我选择先把公式放一放,先直观看一下在深度学习中交叉熵实际上是怎么算的,其实非常简单。二分类:yyyy^\hat yy^0.61yyy表示网络输出,一般是经sigmoid函数后,值域在0到1之间,表示分类概率,0原创 2021-09-29 15:35:08 · 2325 阅读 · 0 评论 -
图像梯度 CAM 热力图 Pytorch代码
由于深度学习的可解释性弱,有时候我们想知道网络模型做出判断的依据是什么。以最简单的图像分类模型为例,一个最简单的办法就是看一下网络输出对网络输入每个像素的梯度,这个梯度表示了当这个像素发生变化的时候,网络输出(分类概率)会随之发生多大的变化,显然,这个梯度越大,说明这个像素对分类结果越重要,将这个梯度图可视化,就可以表示网络更“关注”哪些像素。贴一下Pytorch实现的核心代码,非常简单。data.requires_grad = Trueoutput = net(data)[0]net.zero_原创 2021-09-27 09:29:01 · 1809 阅读 · 1 评论 -
Adam优化器总结
根据李宏毅老师的课程,将梯度下降的学习策略和优化器部分做一个梳理。梯度下降的基本方法是:朝着参数θ\thetaθ的当前梯度ggg的反方向,以η\etaη为步长迈出一步。一个常见的问题就是如何保证不会落入局部最小值,因此有了Momentum(动量) 的概念。仿照现实世界中物体的惯性,在运动时不仅要看当前这一步往哪里迈,还要考虑之前的运动状态,如果之前的步伐很快,就不应该在一步内急停或者急转弯。这样做的好处是可以跳出一些小坑(局部最小值)。动量的实现方法也不复杂,就是将前一步的步伐mmm乘上一个参数λ原创 2021-08-30 16:04:14 · 21506 阅读 · 1 评论 -
车牌识别 远距离监控视角 自创简化模型 Pytorch
甲方一拍脑门 让我去实现车牌识别 还是远距离监控视角的 真开心数据?呵~ 不会有人期待甲方提供数据吧??先逛逛某宝,一万张车辆图片,0.4元/张。甲方:阿巴阿巴…嗯,那没事了。再逛逛同性交友网站(GitHub),感谢CCPD数据集~ 数量挺多的,标注也很详细,除了车牌矩形框坐标,居然还有车牌4个角点坐标。我看了一下,矩形框标的有点随意了,于是我把角点坐标的最小包络矩形作为新的标注框,随手一个YOLOv5,这车牌检测的任务不就完成了嘛~ 四舍五入,车牌识别项目收工!由于数据搜集的地域原因,其中原创 2021-07-23 16:13:56 · 1287 阅读 · 6 评论 -
YOLOv5 人脸口罩识别 免费提供数据集
本文分享快速使用YOLOv5训练自己的人脸口罩数据集。第一步是搞数据,并把标注文件处理成YOLOv5格式,这其实是最麻烦的,此处省略1W字,我给同学们整了一个6000张的:人脸口罩数据集。拿走不蟹~下载YOLOv5-3.1版本和模型权重,考虑到模型权重可能下载缓慢,我还上传了一份:模型权重。真是太贴心辣!我习惯把权重文件放在./weight下:懒得每次在命令行里写参数,就直接在文件中改,文件中运行了。/data下创建mask文件目录结构:按自己的需求往里放训练和验证数据,图片和标签的文件名要原创 2020-12-10 17:02:05 · 14871 阅读 · 65 评论 -
强化学习DQN 入门小游戏 最简单的Pytorch代码
本文目的是用最简单的代码,展示DQN玩游戏的效果,不涉及深度学习原理讲解。毕竟,入门如此艰难,唯一的动力不过是看个效果,装个biu……安装OpenAI的游戏库gympip install gym看一下运行效果import gymenv = gym.make('CartPole-v1')print('State shape:', env.observation_space.shape)print('Number of actions:', env.action_space.n)for _原创 2020-12-08 16:11:58 · 6218 阅读 · 13 评论 -
YOLOv5 完整网络模型可视化 pytorch netron
本文分享使用pytorch可视化工具netron查看YOLOv5网络模型结构。正常在控制台pip命令安装pip install netron执行netronC:\Users>netronServing at http://localhost:8080网页打开在YOLOv5中,打开网络模型主文件yolo.py。将模型保存为一个pt文件# Create modelmodel = Model(opt.cfg).to(device)torch.save(model, "m.pt"原创 2020-12-02 10:45:34 · 11119 阅读 · 8 评论 -
GIoU DIoU CIoU loss 损失函数
目标检测任务中,Bounding Box的评估指标是IoU,IoU范围在(0,1)(0,1)(0,1)之间,具有尺度不变性,而且可以衡量各种形状的匹配程度。我们自然会考虑能否将IoU设计为一个损失函数。IoU loss最简单的,直接将1-IoU定义为损失,我自己在简单的目标检测项目中尝试过,基本没有办法学习,主要原因是:当预测框和目标框不相交时,IoU始终为0,损失函数不可导,无法优化。另外这种损失定义方式无法区分IoU的各种情况,同样的IoU值,重叠形状可以有许多种,它们在效果上是有差异的,因此原创 2020-12-01 15:57:50 · 10824 阅读 · 2 评论 -
SmoothL1损失 总结
SmoothL1SmoothL_1SmoothL1损失函数是L1L_1L1损失(平均绝对误差MAE)和L2L_2L2损失(均方误差MSE)的结合。图形就是二次函数和绝对值函数的拼凑,比较简单,主要解释一下为什么这么改。L1L_1L1损失的特点是:梯度稳定,几乎处处相等,不易梯度爆炸。收敛慢,在0附近会震荡。L2L_2L2损失的特点是:误差越大,梯度越大,收敛较快,在0附近收敛稳定。对离群点比较敏感,离群点会显著增加损失,并且梯度过大,容易爆炸。综合两者特点,我们希望在0原创 2020-12-01 11:29:20 · 1862 阅读 · 0 评论 -
Swish Mish 激活函数 理解
Swish是谷歌在17年提出的一个激活函数,形式非常简单,具备无上界有下界、平滑、非单调的特性,性能在总体上优于Relu。y=x∗sigmoid(βx)y=x*sigmoid(\beta x)y=x∗sigmoid(βx)原创 2020-12-01 10:40:22 · 6264 阅读 · 7 评论 -
LSTM 手动实现车牌识别 Pytorch代码
循环神经网络RNN和长短期记忆网络LSTM的原理,许多文章都讲的很清晰,我就不到处抄了……听说实现车牌识别还挺简单的,来尝试一下叭~首先找车牌图片,虽然有一些生成车牌的软件,但是一般不能批量生成,而且我们还要拿到标签进行训练,好叭,自己先写一个看看。软件生成的车牌:我用最简单的代码生成的车牌:emmm,怎么说呢,假得很有层次感。不管了,先把效果跑出来再说,真实数据集反正咱也没办法,让老板花钱去买好了??[裂开]import osimport torchimport numpy as n原创 2020-11-24 15:25:47 · 2102 阅读 · 6 评论 -
Normalization 标准化方法 总结 Batch Layer Instance Group
深度学习卷积神经网络中常见Normalization方法有如下四种:Batch Normalization (BN)Layer Normalization (LN)Instance Normalization (IN)Group Normalization (GN)标准化的公式如下:数据减去均值,除以标准差,再施以线性映射。上述四种标准化的算法主要区别在于求均值μμμ和标准差σσσ的方式不同。将xxx类比为一摞书,这摞书总共有 N 本,每本有 C 页,每页有 H 行,每行 W 个字符。原创 2020-11-19 18:03:13 · 444 阅读 · 1 评论 -
GAN 生成动漫头像 手动实现Pytorch全代码
本文分享手动实现DCGAN生成动漫头像的Pytorch代码。简单来说,DCGAN(Deep Convolutional GAN)就是用全卷积代替了原始GAN的全连接结构,提升了GAN的训练稳定性和生成结果质量。我使用的数据集,5W张96×96的动漫头像。import torchimport torch.nn as nnfrom torch.utils.data.dataloader import DataLoaderfrom torchvision import transforms, dat原创 2020-11-19 17:03:22 · 2863 阅读 · 6 评论 -
Pytorch 转置卷积nn.ConvTranspose2d 参数设置总结
本文总结Pytorch中用转置卷积还原卷积过程的参数设置。直接上栗子,卷积过程:5×5输入特征图,步长s=2s=2s=2,卷积核k=3k=3k=3,填充p=1p=1p=1。输出特征图为5−k+2ps+1=3\displaystyle \frac{5-k+2p}{s}+1=3s5−k+2p+1=3。转置卷积过程如上图:扩张3×3特征图:相邻2行/列间插入s−1s-1s−1行/列0值,padding同ppp。卷积核同kkk,步长始终为1。看一下Pytorch中转置卷积nn.ConvTran原创 2020-11-17 15:17:32 · 9872 阅读 · 3 评论 -
【目标检测】YOLOv3手动实现Pytorch代码全流程详解 RCNN、YOLO系列
目标检测概述之前的MTCNN实现了单类多目标的高效检测,而现实中更普遍的任务是多类多目标检测。目标检测可划分为3个发展阶段:传统的目标检测区域选择:滑动窗口特征提取:Harr、SIFT、HOG等特征提取算法分类器:如常用的SVM模型基于滑动窗口的区域选择策略没有针对性,时间复杂度高,窗口冗余;手工设计特征费时费力,且对于多样性的变化没有很好的鲁棒性。基于Region Proposal的深度学习目标检测算法使用 region proposal+CNN 代替传统目标检测使用的 滑动窗口+手原创 2020-11-09 17:25:00 · 7059 阅读 · 2 评论 -
【人脸识别】MTCNN + Arcface全流程详解 Pytorch代码 损失函数发展
人脸识别介绍MTCNN 实现人脸检测,回答了“是不是人脸”和“人脸在哪”的问题,接下来人脸识别要解决的就是“人脸是谁”。人脸识别是目标识别中的一种,本质上也是分类问题,只不过是同类(人脸)中的细分,因为人脸之间相似度很大,这对损失函数的分类能力提出了更高的要求。损失函数发展下面介绍分类损失函数的主要类型和发展历程,及部分pytorch代码。效果图来自 MNIST 数据集,将网络模型倒数第二层输出通道数设为2,将二维分类特征可视化即可。Softmax loss经典的分类损失 Softmax l原创 2020-10-21 16:35:28 · 12714 阅读 · 16 评论 -
【人脸检测】MTCNN 全流程详解 Pytorch代码
概述MTCNN,Multi-task convolutional neural network(多任务卷积神经网络)。该模型利用级联思想,化繁为简,通过三个级联的网络:P-Net(Proposal Network)、R-Net(Refine Network)和O-Net(Output Network),逐层筛选。在每个网络都非常简单,易于训练的同时,实现了高精度的人脸检测。思路人脸检测属于单类多目标检测,相对于单类单目标,实现中有以下问题:人脸数目因为不知道1张图中需要检测多少人脸,也就不能通过原创 2020-10-21 16:11:39 · 5071 阅读 · 3 评论 -
手动实现ResNet残差网络 Pytorch代码
残差原理网络退化(degradation):因为梯度弥散等原因,在不断加神经网络的深度时,模型准确率会先上升然后达到饱和,再持续增加深度时则会导致准确率下降。残差网络ResNet的出现就是为了解决网络深度变深以后的性能退化问题。ResNet的灵感来源:假设现有一个比较浅的网络(Shallow Net)已达到了饱和的准确率,这时在它后面再加上几个恒等映射层(Identity mapping 即y=x 输出等于输入),这样就增加了网络的深度,并且起码误差不会增加,即更深的网络不应该带来训练集上误差的上升原创 2020-10-21 16:01:37 · 2525 阅读 · 0 评论 -
深度可分离卷积 深度卷积 逐点卷积
深度可分离卷积 = 深度卷积(Depthwise Convolution) + 逐点卷积(Pointwise Convolution)。深度卷积分组卷积(Group Convolution):输入通道数cinc_{in}cin,输出通道数coutc_{out}cout, 将输入feature map分为GGG组,每组分别卷积,最后进行拼接。分组卷积作用:参数量减少为原来的1/G1/G1/G分组前:cincoutk2c_{in}c_{out}k^2cincoutk2分组后:cinGc原创 2020-10-21 15:56:01 · 9987 阅读 · 1 评论