![](https://img-blog.csdnimg.cn/20190927151053287.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
实践
文章平均质量分 65
该专栏主要涉及的是工程上算法的部署
仙女修炼史
从入门到了解、到熟悉、到深入、到掌握,一步一个脚步,踏踏实实,不断进阶!
展开
-
第一次参加kaggle竞赛:Happywhale - Whale and Dolphin Identification(ID识别问题:top9.4% 150/1558)
本人菜鸟一枚,以前都是在kaggle游荡,浏览别人的帖子,如果不亲自下场打比赛的话,只看其实是没啥用的,所以一直在等合适的赛题开赛,一个赛题,两个月时间,本身有自己的事情干,所以在比赛上的时间还是不太够,争取有个好名次吧。另外开这个博客是为了帮助自己理清思路,尽量少走弯路一、赛题分析1、建立模型的目的:通过某些细微的特征对鲸鱼和海豚进行个体识别2、数据分析:统计学上的数据分布 (需要掌握 panda库)获取图像的 Embeddings特征,并且可视化( Embeddings特征是指分类网络全连原创 2022-05-04 16:21:06 · 1632 阅读 · 0 评论 -
增加batch_size的一种方法:梯度累加
一、为什么会有batch_size参数经常做训练的童鞋们都知道,batch_size是一个很重要的超参数,每次训练支取batch_size个数据集进行训练,那么,为啥不取全部呢,答案可想而知,应为内存不够呀,放不下呀,小数据集还好,内存勉强够,勉强放的下,但是花费大量的时间加载了数据后,训练了一个epoch之后,发现参数不对,需要重新调参,然后中断训练,花1s调了个参数,花费2h加载了数据,不累么?!所以需要batch_size这个参数。虽然全部的数据集可以更好的确定样本总体的方向,但是一次性处理整个数原创 2022-03-20 16:29:56 · 2722 阅读 · 0 评论 -
entroy_loss、focal_loss
一、entroy_lossentroy_loss已经讨论了很多了,具体可以看我的这篇博客二、focal_loss说到focal_loss,一定要看的是这张图:从上图可以看到,focal_loss只比entroy_loss多了一个权重α(1−pt)γ\alpha(1-p_t)^{\gamma}α(1−pt)γ 当ptp_tpt越大时,赋予的权重越小,focal_loss能够降低简单样本的loss,让网络更偏重与比较难的样本。下面是focal_loss的代码class FocalLoss(nn原创 2022-03-15 10:20:19 · 433 阅读 · 0 评论 -
pytorch 中 混合精度训练(真香)
一、什么是混合精度训练在pytorch的tensor中,默认的类型是float32,神经网络训练过程中,网络权重以及其他参数,默认都是float32,即单精度,为了节省内存,部分操作使用float16,即半精度,训练过程既有float32,又有float16,因此叫混合精度训练。二、如何进行混合精度训练pytorch中是自动混合精度训练,使用 torch.cuda.amp.autocast 和 torch.cuda.amp.GradScaler 这两个模块。torch.cuda.amp.autoca原创 2022-03-14 16:17:21 · 9974 阅读 · 2 评论 -
终于知道为什么要freeze BN层,以及如何freeze(这个trick真的可以加快收敛)
一、什么是Batch Normalization(BN)层BN层是数据归一化的方法,一般都是在深度神经网络中,激活函数之前,我们在训练神经网络之前,都会对数据进行预处理,即减去均值和方差的归一化操作。但是随着网络深度的加深,函数变的越来越复杂,每一层的输出的数据分布变化越来越大。BN的作用就是把数据强行拉回我们想要的比较好的正态分布下。这样可以在一定程度上避免梯度爆炸或者梯度消失的问题,加快收敛的速度。二、BN是如何操作的Input:B=x1...m;γ,β(parameterstobelearned原创 2022-03-14 15:08:19 · 10576 阅读 · 1 评论 -
kaggle入门之pd.DataFrame
看各种kaggle的代码时,发现pd.DataFrame是常用的数据结构,要想快速浏览、熟练修改各种kaggle代码,首先入门的应该是pd.DataFrame这个结构,下面记录pd.DataFrame常用的几种函数。1、创建DataFrameimport pandas as pd import numpy as np#数据,行名,列名df1 = pd.DataFrame(np.random.randn(3, 3), index=list('abc'), columns=list('ABC'))原创 2021-01-14 16:55:12 · 2882 阅读 · 0 评论 -
天池打比赛之《街景字符编码识别》进阶过程(目标检测,目前最高得分 5名/0.9405)
街景字符编码识别 比赛链接:https://tianchi.aliyun.com/competition/entrance/531795/information一、赛题数据训练集数据包括3W张照片,验证集数据包括1W张照片,每张照片包括颜色图像和对应的编码类别和具体位置,测试集A包括4W张照片。二、初步方案由于主要偏向目标检测方向,所以首先使用mmdetection中的faster_rcnn训练一个检测模型,先上传一个初级分数:版本方案分数v1faster_rcnn_r原创 2022-01-06 10:55:05 · 2340 阅读 · 0 评论 -
使用mmdetection训练自己voc格式的数据集
下面的例子是使用ssd300训练自己的数据集(voc格式)一、configs/base/datasets/voc0712.py修改data_root为自己数据集的root所有的img_prefix, 都修改为data_root,不需要加’2007’或者’2012’,这里不修改也可以,需要把自己的数据放到一个叫2007或者2012的文件夹中。修改之后,就可以随意的放置自己的数据集了。mmdet/datasets/xml_style.py 中,使用self.img_prefix来找到xml正确的路径原创 2021-12-06 21:53:34 · 4431 阅读 · 2 评论 -
分类器训练的小tricks(好用的tricks持续添加中。。。)
工业界里,用一个具体的算法,来解决一个具体的问题时,一个合格的算法工程师不仅要知道要用哪种算法,怎么调参,怎么做算法的优化,更重要的是,要如何做数据的处理,好的性能是由70%的数据+30%的算法决定的,数据预处理是很重要的一项技能。在工业界里收集的数据和各种比赛提供的数据不一样,工业界的数据集往往带有以下特点:1、类内冗余;2、数据类别之间严重不平衡,过多的类内冗余会加重数据类别之间的不平衡,因此去除类内冗余是数据预处理的第一步。如何去除类内冗余...原创 2021-09-25 11:45:35 · 237 阅读 · 0 评论 -
神经网络:鸢尾花分类
import numpy as np # linear algebraimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)import torchimport torch.nnimport torch.nn as nnfrom torch.utils.data import Dataset,DataLoaderfrom torchvision import transformsimport torch.o原创 2021-08-27 16:53:54 · 131 阅读 · 0 评论 -
逻辑回归:垃圾短信分类
一、垃圾短信ham Go until jurong point, crazy… Available only in bugis n great world la e buffet… Cine there got amore wat… ham Ok lar… Joking wif u oni…spam Free entry in 2 a wkly comp to win FA Cup final tkts 21st May 2005. Text FA to 87121 to receive entry原创 2021-08-27 14:22:32 · 796 阅读 · 0 评论 -
逻辑回归:你买车的概率有多大?
一、逻辑回归基础知识解决二元(0/1)分类问题P(y=1∣x;θ)=f(x;θ)=11+e−θTxP(y = 1|x;\theta) = f(x;\theta) = \frac{1}{1+e^{-\theta^Tx}}P(y=1∣x;θ)=f(x;θ)=1+e−θTx1−θTx=θ0+θ1x1+θ2x2+θ3x3+...-\theta^Tx = \theta_0 + \theta_1x_1 + \theta_2x_2 + \theta_3x_3 +...−θTx=θ0+θ1x1+θ2x2原创 2021-08-26 23:17:23 · 192 阅读 · 1 评论 -
实现了一个简单的以图搜图功能(带代码)
不用训练,直接用在ImageNet上训练的RestNet网络就可以做一个简单的以图搜图功能1、RestNet网络上面是resnet网络的结构图,ImageNet是一个有1000类的数据集,我们可以把在该数据集上训练过的Resnet网络当成特征提取器,用来提取图片的特征,然后比对特征的欧式距离,判定两种图片的相似性。average pool的输出是512x1x1,将其reshape为512x1当作该图片的特征。2、生成RestNet网络arch_name = “resnet18"pretrain原创 2021-08-05 19:09:20 · 2773 阅读 · 0 评论 -
mmdetection代码中类的关系图
原创 2020-02-09 16:31:10 · 298 阅读 · 0 评论 -
使用libtorch部署yolov3,并且加入跟踪算法
在Darkent中训练yolov3,使用libtorch对yolov3进行部署,libtorch-yolov3告诉我们训练和部署可以完全分开,把训练的重点放到方便和准备率上,把部署的重点放到效率上。在libtorch-yolov3的后续增加了一个简单的跟踪算法框架,只是框架,大家可以根据需要增加更为具体的功能。直接上代码:libtorch-yolov3-tracker欢迎大家点评,共同进步...原创 2019-12-17 15:52:07 · 1770 阅读 · 1 评论 -
mmdetection(ssd、Retinanet、FasterRcnn)部署在libtorch上
libtorch-yolov3-TrackerIntegrate libtorch-yolov3 with tracking algorithm making this project more engineering. Just a framework.Many features and details need to be added as required according to d...原创 2020-06-08 22:00:44 · 2295 阅读 · 7 评论 -
ssd在libtorch上的部署,nms、anchor、detection_layer的操作都在cuda上
SSD net Training on pytorch and Implementation on libtorchmy code is libtorch-ssd原创 2019-12-12 20:05:29 · 873 阅读 · 8 评论 -
c++ 部署libtorch 时对Tensor块的常用操作API (例如vector转换为torch、squeeze、select、select_indxe、max等)
1. torch::select函数接口: Tensor Tensor::select(int64_t dim, int64_t index) consttorch::Tensor a = torch::rand({2, 3});torch::Tensor b = a.select(1, 2);cout << b << endl;2.torch::maxt...原创 2019-12-12 20:13:30 · 24755 阅读 · 14 评论 -
使用libtorch部署的一些总结
从一个简单的二维卷积开始 torch::nn::Conv2dauto x = torch::randn({2, 3, 5, 5}, torch::requires_grad()); # N * C * H * Wtorch::nn::Conv2d model(Conv2dOptions(3, 2, {3,3}).stride(2).padding(1));auto y = mode...原创 2019-12-03 18:26:51 · 4142 阅读 · 5 评论 -
如何使用TensorRT Network API 重构网络
原始学习代码来自github.com/wang-xinyu/tensorrtxtensorRT是用来专门部署前向的框架,可以使用解析的方式将网络部署到该框架下(这个方法就不多说了,自己可以找资料学习),这里重点学习使用Network API 重构网络。一、创建一个空的network // 创建一个网络生成器 IBuilder* builder = createInferBuilder(gLogger); //生成一个空的网络 INetworkDefinition* ne原创 2020-07-30 16:20:25 · 1218 阅读 · 2 评论 -
tensorrt 6.0小白入门记(从安装到使用)
一、下载安装tensorrt1.1 检查linux环境cat /usr/local/cuda/version.txt 查看cuda版本号,我的是10.0.130cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2 查看cudnn的版本号 7.6.4原创 2020-07-12 15:36:29 · 1799 阅读 · 0 评论 -
如何将darknet作为一个静态库或是动态库链接到c++工程中(linux)
darknet作为一个纯c的轻便网络,在工程项目中深受欢迎,darknet编译完之后,自动生成了一个静态包libdarkent.a和动态包libdarknet.so,方便我们在c++工程中进行使用,那么如何将darknet网络链接到我们的工程项目中呢,下面将把我的血泪过程记录下来,全是坑呀!不要问为什么,本人菜鸟算法一枚,不是专业开发,只知道这样做可以!步骤一:编译darknet: 成功编译darknet,这个没啥问题吧,要是这个都不会,兄弟,真的要撞墙去了!步骤二:CMakeLists.t原创 2020-06-12 10:55:58 · 1173 阅读 · 2 评论