- 博客(97)
- 资源 (5)
- 收藏
- 关注
原创 在mnist上尝试triplet loss (mxnet)
triplet lossTriplet Loss损失函数在mnist上做相似度计算triplet loss的核心包括三个部分anchor/positive/negative代表三个输入图,尺寸相同,训练的目标是令anchor和positive距离最小化,同时anchor和negative距离最大化。以FaceRec为例,anchor和positive一般来自同一个人,而negative属...
2019-03-17 20:00:40 3572
原创 github上如何修改submodule url
github上fork工程A,而A中有一个submodule B, 如果修改了B,是没法直接提交到github上的,因为B指向别人的工程,那么如何让B指向自己的工程,进而保存自己的修改呢?首先要从B的原始工程fork一份属于自己的代码,然后修改自己的A工程中.gitmodules文件里B对应的url,比如[submodule "ext/google-maps"] path = goog...
2019-03-07 01:40:25 3569
原创 cv::parallel_for_ 的一个例子
cv::parallel_for_是opencv封装的一个多线程接口,利用这个接口可以方便实现多线程,不用考虑底层细节,以下是一个具体的例子继承ParallelLoopBody,重载运算符()class LoopBody : public cv::ParallelLoopBody{public: LoopBody (const std::vector<std::stri...
2019-01-20 22:12:51 2909
原创 cuda编程 MergeSort
gpu codes#include "windows.h"#include "cuda_sort.h"#include <iostream>__global__ void mergesortK(int *a, int *temp, int sortedsize,int N) { // int id = block
2019-01-13 11:49:55 1140
转载 cmake中prebuild/postbuild命令
add_custom_command(TARGET target PRE_BUILD | PRE_LINK| POST_BUILD COMMAND command1[ARGS] [args1...] [COMMAND command2[ARGS] [args2...] .....
2019-01-11 01:09:08 9364
原创 深度学习中的优化策略
SGDw=w−lr∗∂ww = w - lr*\partial ww=w−lr∗∂w 其中lrlrlr是学习速率∂w=∂loss∂w\partial w = \frac{\partial loss}{\partial w}∂w=∂w∂losssgd_momentumv=mu∗v−lr∗∂wv=mu*v-lr*\partial wv=mu∗v−lr∗∂ww=w+vw = w + vw=...
2019-01-05 19:50:53 720
原创 batch norm反向公式推导
输入Xi=(xi0,xi1,...,xi(n−1))X_i=(x_{i0},x_{i1},...,x_{i(n-1)})Xi=(xi0,xi1,...,xi(n−1)) i∈[0,m−1]i \in [0,m-1]i∈[0,m−1] batch-size等于m,特征维度n输出Yi=(yi0,yi1,...,yi(n−1))Y_i=(y_{i0},y_{i1},...,y_{i(n-1...
2019-01-05 16:35:28 920
原创 pvanet 训练自定义数据
源码编译方法到lib目录下执行makecaffe-fast-rcnn目录下执行cp Makefile.config.example Makefile.config#编辑Makefile.config内容,启动WITH_PYTHON_LAYER := 1make -j8 && make pycaffe训练脚本假设处理的目标是pascal_voc_obj...
2018-12-04 23:30:59 393
原创 validation accuracy vs train accuracy
训练时validation accuracy和train accuracy之间没有差距,本义为这是一个还不错的曲线,但是今天讨论时有人评论说这种情况说明网络参数不足,因为在参数充足的情况下多多少少会有过拟和,所以正常情况下train accuracy会高于validiation accuracy,似乎很有道理!...
2018-11-18 23:00:08 6163
原创 softmax_loss梯度推导
softmax_loss的真正名字应该是softmax cross entropy loss。因为softmax的定义是f(zi)=softmax(zi)=ezi∑jezjf(z_i)=softmax(z_i)=\frac{e^{z_i}}{\sum_je^{z_j}}f(zi)=softmax(zi)=∑jezjezi, softmax loss的定义是L=−1N∑i=0NLi=...
2018-11-18 02:54:50 1186
原创 faster R-CNN 生成anchor box
以下代码来自faster R-CNN的generate_anchors.py,目的是基于预定的base_box(正方形),生成若干长宽比和尺度的新的anchor box。其中_whctrs()是把一个矩形用(中心点,宽高)的形式表达_mkanchors()是给定一个中心点,和若干不同的宽高,生成新的anchor,以(左上点,右下点)的形式_ratio_enum() 输入一个初始anchor...
2018-11-16 00:25:37 646
原创 yolov3 中box坐标的处理
yolov2吸收faster rcnn的anchor box机制时遇到训练不稳定的问题,分析认为是bbox坐标回归时没有限制,导致anchor box可能会去预测一个距离很远的object,效率不高,因此yolov2对bbox的坐标进行一系列的处理,令anchor box只会对邻近的object负责。阅读论文和代码时难以理解这个机制,以下是个人的一些分析,不保证正确,欢迎讨论指正。公式中(tx...
2018-11-15 00:46:26 12484
原创 shuffleNetV2
ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture DesignWhyResNet,DenseNet等网络已经把分类问题的精度推到一个很高的水平,而很多轻量级网络MobleNet, XceptionNet和ShuffleNet则在不牺牲太多精度的前提下,降低网络计算量,令深度学习网络可以运行在一些资源受限的平台上...
2018-11-11 20:48:24 1399
原创 darknet yolov3 训练自定义数据集
VOC数据集上的训练步骤修改类别yolo层的classes修改成新的类别书yolo层前一个convolution层的filters修改成(classes+4+1)*3
2018-11-10 22:03:50 1169
原创 强化学习的一点理解
从可用作输入的信息多少的角度,可以把机器学习划分成三个类别:无监督学习:包括降维和聚类任务,几乎任何东西都可以当作输入,但输出往往很模糊。有监督学习:包括分类和回归任务,因为需要人工标注,可以当作输入的信息要少很多强化学习:和前面两类不同,强化学习适合做的是行为控制。其能够接触到的信息最少,甚至算法要通过和环境交互才能获得更多信息。有监督学习是目前实用性最强的方法,但是无监督学习和强化学...
2018-11-08 00:49:04 529
原创 经典网络结构之InceptionNet
InceptionNet又称googleNet,最初的设计思路是增加网络宽度:InceptionNet核心结构包括多个分支,分别对应不同的感受野。大的感受野适用大的目标,小的感受野适用小目标,如此网络具备了scale不变性。不同感受野最终通过concat合并在一起,为了避免通道数爆炸,在每个分支上引入1x1卷积降低通道数目。Inception V2吸收了VGG的优点,利用多个小尺度卷积代替一...
2018-11-07 00:06:42 2816
原创 解决样本不均衡问题-SMOTE
原文链接SMOTE: Synthetic Minority Over-sampling Technique解决的问题很多算法都有一个默认的假设:样本中各个类别的样本数目是均衡的,比如深度学习中几个经典网络结构直接用于不均衡数据效果会很差。本文提出的SMOTE是一种通过线性插值过采样的方法解决不均衡问题的方法。如果通过简单复制样本没有获得期望结果时,不妨试试这个方法。伪码输入:同一类别的所...
2018-11-05 21:57:52 3270
原创 训练一次得到多个模型做集成的方法
参考论文SNAPSHOT ENSEMBLES: TRAIN 1, GET M FOR FREE解决的问题多个分类器集成可以获得超过单个分类器的效果,但集成分类器就要求有多个分类器,在训练速度和测试速度方面不占优势。本文提出的方法可以提高集成学习的训练速度,通过一次训练,获得多个分类器,解决了集成学习训练速度慢的问题。解决方法深度学习训练过程中,只有经历足够长的epoch后,test l...
2018-11-04 20:42:57 4517
原创 深度学习和传统机器学习的差别
特征构造是否需要人工构造特征,这应该是深度学习和传统机器学习的最明显的差异。feature engining是传统机器学习中的一个重要组成部分,sift,hog,wavelet等都是解决如何描述数据的问题。深度学习兴起后,feature engining的研究几乎停滞,而end-to-end成为一个新兴的研究方向。传统机器学习中有一个分支:representation learning,研究目...
2018-11-04 01:50:35 19497 1
原创 卷积层的dropout - dropblock
DropBlock: A regularization method for convolutional networksdropout的不足dropout是深度学习中避免过拟合的手段之一,经典网路结构中,dropout都被放到全连接层之后,鲜有放到卷积层之后。这是因为实验证明卷积层后的dropout层对网络泛化能力的改进微乎其微,本文分析了其中的原因:卷积层输出特征图各个元素之间存在很强的相...
2018-11-02 22:41:13 8248
原创 机器学习中的求导
基础知识机器学习中常见函数求导幂次(xu)′=uxu−1(x^u)^\prime=ux^{u-1}(xu)′=uxu−1指数(ex)′=ex(e^x)^\prime=e^{x}(ex)′=ex对数(logax)′=1xlna(\log _ax)^\prime=\frac{1}{x\ln a}(logax)′=xlna1(lnx)′=1x(ln x)^\prime...
2018-10-30 01:44:26 1106
翻译 在VOC上训练 darknet yolov3
数据集需要voc2007和voc2012, 目录结构如下 VOCdevkit/VOC2007 VOCdevkit/VOC2012darknet/sctripts/voc_label.py 在VOCdevkit目录下执行该脚本,生成若干txt,里面都是绝对路径其中train.all.txt是所有图片的列表, train.txt是除了voc2007 test以外的图片列表,训练时可以...
2018-10-28 22:49:29 702
原创 关于线性分类器的一些总结
线性分类器的分类函数是f(X)=WX+Bf(X) = WX+Bf(X)=WX+B其中XXX是特征,WWW是权重矩阵,其行数等于类别数,B是偏置,如果定义X′=(X,1)X'=(X,1)X′=(X,1),分类函数可以写成f(X′)=WX′f(X')= WX'f(X′)=WX′所以以下讨论忽略偏置B。线性分类器输出是一个向量,维度等于类别数...
2018-10-25 00:10:42 1017
翻译 实时语义分割ICNET
ICNet for Real-Time Semantic Segmentation on High-Resolution Images作者开源代码特点上图可以很好的说明ICNET的特点,它是第一个出现在上图右上角的方法,同时兼顾分割效果和处理速度。准确率超过60%,对于1024x2048的高分辨率输入,速度达到30FPS,虽然硬件条件也不低。框架论文分析了语义分割各个模块的对速度影响,...
2018-10-21 00:48:20 2715
翻译 VOC
记录VOC上的一些stat-of-artresnetDeep Residual Learning for Image Recognitionresnet接入Faster-RCNN,VOC07+12集合上检测率最高在75%左右
2018-10-18 23:21:06 277
翻译 CIFAR
记录CIFAR上的一些stat-of-artresnetDeep Residual Learning for Image Recognitionresnet最好记录是classification error 6.43%
2018-10-18 23:15:02 401
翻译 ImageNet
记录ImageNet上的一些stat-of-artresnetDeep Residual Learning for Image Recognitionresnet最好记录是top-5 error 3.57%
2018-10-18 23:10:20 894
原创 numpy.transpose()进阶理解
numpy.transpose()函数对二维数组就是矩阵的转置操作,对于高维数组则可以任意交换数组。本以为自己已经理解了它的用法,直到看到如下的代码。import numpy as npimport cv2size = 128mat = np.zeros((2,2,size,size))mat[0,0,:,:] = np.ones((size,size))mat[0,1,:,:]...
2018-10-18 22:48:49 665
翻译 dither
参考dither是为了降低颜色量化时引入的信息损失,利用有限的颜色数目,生成一个视觉上和支持更多颜色数目的图相似的近似图。loyd–Steinberg dithering是比较早期的dither算法,但也是应用最为广泛的算法,以下是其伪码。背后的思想是把量化误差按照固定比例扩散到相邻的后续几个像素上for each y from top to bottom for each x fro...
2018-10-17 23:12:02 3582
转载 PIL Image.Convert() 转换成黑白图
参考Image.Convert()的模式"1"可以把彩色图转换成黑白图,很好奇其转换的依据,搜索到其文档,分为三个步骤彩色图转灰度图依据ITU-R 601-2 luma transform L = R * 299/1000 + G * 587/1000 + B * 114/1000灰度图转二值图默认阈值127,通过point函数可以修改这个阈值dither默认开...
2018-10-17 23:06:00 5575
转载 numpy中的copy和view
出处python中没有传值和传引用的概念,但copy和view有类似的作用。Viewview相当于传引用,view和原始数据共享一份数据,修改一个会影响另一个。slice,array.view(dtype)可以产生view,但array.astype(dtype)产生的不是view x = np.arange(5) print('x = :\n', x) view = x[1...
2018-10-17 20:00:03 3555
原创 训练集,验证集和测试集
要明确train/validation/test三个集合需要先了解什么是hyperparameter。机器学习中模型的参数有的可以通过训练获得最优的值,而有些无法通过训练获得,只能通过人工设置,这部分需要人工设置的参数就是hyperparameters,比如KNN中的K值,神经网络中的网络层数,结构,SVM中的C值等。三个集合在训练中的使用途径如下给定hyperparameters,trai...
2018-10-17 18:11:24 653
原创 数据可视化: PCA降低到2维显示
import os,cv2import numpy as npfrom sklearn.decomposition import IncrementalPCAfrom matplotlib import pyplot as pltinput_folders = [ (‘classA/’,‘red’),(‘classB/’,‘blue’) ]H,W = 64,64transformer...
2018-10-16 11:52:52 3559
原创 数据可视化: PCA显示特征向量
import os,cv2import numpy as npfrom sklearn.decomposition import IncrementalPCAinput_folder = 'images/'H,W = 72,72comp_num = 5X = []for name in os.listdir(input_folder): path = os.path.jo...
2018-10-16 10:53:18 2195
原创 让DL玩斗地主
A SOLUTION TO CHINA COMPETITIVE POKER USING DEEP LEARNING概要当AI遇到游戏才是最有趣的,本文里利用CNN玩斗地主(China Competitive Poker),在一定条件下可以击败人类选手了,也算SOA吧。文中斗地主规则如下三个玩家,一个地主,两个农民每个玩家17张牌,地主可以获得额外的3张牌,但开局前要向农民展示三张可以带...
2018-10-16 01:20:15 1044
原创 gluoncv-FCN
参考gluoncv按照gluoncv的文档中pip install gluoncv方法安装,但是发现这个版本似乎依然有不少问题准备数据pascal_voc.py 这个脚本可以下载需要的四个文集,但是用迅雷下载的发现最后一个benchmark.tgz下载后的的hash码不对,另外三个是对的。但是用wget下载速度有很慢,最后通过修改脚本,绕开了hash校验,这个脚本其实只做三间事情V...
2018-10-15 01:27:19 1194 8
原创 ubuntu 18.04 + opencv 3.4.3 + python 2.7
windows下似乎直接可以从源码编译出cv2.pyd,但这个组合下却总是没有编译出cv2.so,最后发现是要预先安装python-devapt install python-numpyapt install python-devcmake -DCMAKE_BUILD_TYPE=Release ..make -jmake install...
2018-10-13 21:53:06 1038
转载 让普通用户使用docker命令
增加docker组 sudo groupadd docker把当前用户加入docker组 sudo gpasswd -a ${USER} docker重启dockersudo service docker restart增加组权限sudo chmod a+rw /var/run/docker.sock...
2018-10-13 17:28:19 1811
cuda编程 merge sort
2019-01-13
opencv dnn模块调用caffe模型
2018-07-15
用命令提示符调用winrar
2018-07-01
演示c++调用mxnet模型
2018-06-22
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人