自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(58)
  • 收藏
  • 关注

原创 darknet计算mAP的代码详解

float validate_detector_map(char *datacfg, char *cfgfile, char *weightfile, float thresh_calc_avg_iou, const float iou_thresh, const int map_points, int letter_box, network *existing_net){ //读取设置的参数和数据 int j; list *options = read_data_cfg(datacfg

2020-10-24 23:39:08 1332

原创 ubuntu16.04下编译openpose接口源码

1、资源获取(1)源码下载;从GitHub上下载openpose源码;(2) cuda和cudnn安装,这里不再赘述,我安装的版本分别为cuda10.1,cudnn7.6.3;(3)安装cmake-gui,ubuntu下安装东西十分方便,一句代码搞定# 安装cmake-guisudo apt-get install cmake-qt-gui (4) 下载cmake编译所需文件和模型,因为使用cmake编译openpose源码时会下载编译所需文件,但是下载速度很慢,而且在下载模型时会出现下载失败

2020-10-20 18:20:55 449

原创 Windows10 下caffe-Windows安装与配置

1、环境配置下载官方代码,选择Windows分支的版本查看其README.md文件,其中对环境的要求都已说明,且可以配置多个版本;Visual Studio 2015, CPU only, Python 3.5: Caffe Release, Caffe DebugVisual Studio 2015, CUDA 8.0, Python 3.5: Caffe ReleaseVisual Studio 2015, CPU only, Python 2.7: Caffe Release, Caff

2020-09-25 16:23:16 4449 5

翻译 OpenPose: Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields 翻译

OpenPose: Realtime Multi-Person 2D Pose Estimation using Part Affinity FieldsOpenPose:使用部件亲和场的实时多人二维姿态评估算法论文原文地址:https://arxiv.org/pdf/1812.08008.pdf本论文代码网址:https://github.com/CMU-Perceptual-Computing-Lab/openpose摘要: 实时多人2D姿态估计是使机器能够了解图像和视频中人物的关键组件。在这项

2020-08-17 17:47:57 858

原创 Windows下配置openpose

1、资源获取(1)源码下载;从GitHub上下载openpose源码;(2) cmake、cuda和VS安装,这里不再赘述,我安装的版本分别为cmake3.12.2,cuda10.0,VS2015;(3) 下载cmake编译所需文件和模型,因为使用cmake编译openpose源码时会下载编译所需文件,但是下载速度很慢,而且在下载模型时会出现下载失败,从而导致无法编译成功;所以我们需要提前下载好,然后解压到相应的文件夹内;1) 首先是下载openpose-master\3rdparty\window

2020-07-30 16:24:13 2388 9

转载 mAP计算过程详解

mAP计算过程

2020-07-21 11:22:36 740

原创 神经网络模型可视化工具netron

1、支持的框架support for:ONNX (.onnx, .pb, .pbtxt),Keras (.h5, .keras),CoreML (.mlmodel),Caffe2 (predict_net.pb, predict_net.pbtxt),MXNet (.model, -symbol.json)TensorFlow Lite (.tflite).experimental support for :Caffe (.caffemodel, .prototxt),PyTorch (

2020-07-07 17:31:37 754

原创 顶点数、区域数和边数之间的关系

1、平面上三者关系(1)众所周知三角形有3个顶点、3个边和1个区域面,四边形有4个顶点、4个边和1个区域面;那么继续推理五边形、六边形以及其他多边形呢?首先完成下表显然通过对于四边形、五边形和六边形的了解很容易得出来结果,结果如下所示:(2)从上表不难发现对于上面四种平面中三者的关系,即顶点数 + 区域数 - 边数 = 1那么如何推断出多边形中他们的关系呢?首先想想对三角形进行切割会对三者有什么影响从上图可以看出三角形割去一个角变成了四边形,其顶点增加了1个,边数增加了1条,区域面不变,则

2020-07-07 11:10:31 15934

转载 tensorflow: name_scope 和 variable_scope区别及理解

1、name_scope命名域(1)通过tf.name_scope()来实现,使用tf.Variable()创建变量时会自动加上词头;只要使用该函数,一律创建新的variable,如果出现重名,变量名后面会自动加上后缀1,2….;(2)tf.get_variable():如果变量存在,则使用以前创建的变量,如果不存在,则新创建一个变量。使用tf.get_variable()创建的变量没有词头;import tensorflow as tfwith tf.name_scope('cltdevelop

2020-06-22 18:21:46 193

原创 DeepLabv3+训练代码详解

代码地址训练代码train.pyfrom __future__ import absolute_importfrom __future__ import divisionfrom __future__ import print_functionimport siximport tensorflow as tf#import tensorflow.compat.v1 as tffrom tensorflow.contrib import quantize as contrib_quantize

2020-06-04 19:04:50 3307 12

原创 TensorFlow下使用DeploymentConfig部署多个机器和GPU训练

多个机器和GPU上部署Slim模型1.设置DeploymentConfigDeploymentConfig参数: * num_clones:每个机器中要部署的模型网络的数量。 * clone_on_cpu:如果将模型放置在CPU上,则为true。 * copy_id:整数。 为其部署模型的机器的索引。 主要机器通常为0。 * num_replicas:要使用的机器数。 * num_ps_tasks:“ ps”作业的任务数。 0不使用副本。 * worker_job_n

2020-06-01 16:46:34 546 2

原创 yolov3测试代码test_detector

void test_detector(char *datacfg, char *cfgfile, char *weightfile, char *filename, float thresh, float hier_thresh, char *outfile, int fullscreen){ //从datacfg文件中读取类别名称 list *options = read_data_cfg(datacfg); char *name_list = option_find_str(opti

2020-05-29 14:48:22 1634 2

原创 yolo中的parse_yolo函数

l = parse_yolo(options, params);layer parse_yolo(list *options, size_params params){ int classes = option_find_int(options, "classes", 20); int total = option_find_int(options, "num", 1); int num = total; char *a = option_find_str(option

2020-05-28 18:25:52 569

原创 l = parse_upsample(options, params, net)

l = parse_upsample(options, params, net);layer parse_upsample(list *options, size_params params, network *net){ int stride = option_find_int(options, "stride",2); layer l = make_upsample_layer(params.batch, params.w, params.h, params.c, stride);

2020-05-26 21:22:58 159

原创 l = parse_shortcut(options, params, net)

l = parse_shortcut(options, params, net)layer parse_shortcut(list *options, size_params params, network *net){ char *l = option_find(options, "from"); //获取需要shortcut层的索引 int index = atoi(l); if(index < 0) index = params.index + index;

2020-05-26 20:49:51 225

翻译 YOLOv3论文翻译讲解

YOLOv3: An Incremental Improvement论文地址;代码地址摘要作者对YOLO进行了进一步的更新,做了一些小设计更改让其表现更好。YOLOv3比YOLOv2相较大了一些,但是检测更加准确,而且检测速度依然很快。320×320 YOLOv3模型能在28.2mAP的精度下运行速度达到了22ms,和SSD的准确度相同但是速度快了3倍。在使用之前的0.5 IOU mAP 检测指标时,YOLOv3表现相当棒。 在Titan X上,它在51毫秒内可达到57.9 AP50,而RetinaN

2020-05-26 18:57:30 558

原创 parse_reorg(options, params)

l = parse_reorg(options, params);layer parse_reorg(list *options, size_params params){ //设置参数 int stride = option_find_int(options, "stride",1); int reverse = option_find_int_quiet(options, "reverse",0); int flatten = option_find_int_quiet(o

2020-05-26 13:45:07 156

原创 parse_route(options, params, net)

route_layer parse_route(list *options, size_params params, network *net){ char *l = option_find(options, "layers");//获取需要加载的层数,是相对于此层的层数例如 -1就是上一层 int len = strlen(l);//加载几层 if(!l) error("Route Layer must specify input layers"); int n =

2020-05-26 11:18:41 218

翻译 YOLOv2论文翻译详解

YOLO9000:Better, Faster, Stronger论文地址;代码地址摘要:

2020-05-25 17:15:38 1044

原创 YOLOv1源码讲解

1、首先就是从darknet.c中的主函数开始运行,darkne.c中含有多种功能函数,包括了目标检测、语义分割等函数,这里主要讲YOLOv1相关代码,也就是目标检测代码,如下所示://通过接收外界参数来选择使用哪种功能函数int main(int argc, char **argv){ //test_resize("data/bad.jpg"); //test_box();...

2020-05-22 17:19:21 1516

原创 更新权重update_network(net)

update_network(net)1、全连接层权重更新void update_connected_layer(layer l, update_args a){ float learning_rate = a.learning_rate*l.learning_rate_scale;//学习率 float momentum = a.momentum; float decay = a.decay; int batch = a.batch; //更新偏置 a

2020-05-22 17:06:53 654

原创 反向网络函数backward_network(net)

backward_network(net)函数void backward_network_gpu(network *netp){ int i; network net = *netp; network orig = net; cuda_set_device(net.gpu_index); for(i = net.n-1; i >= 0; --i){ layer l = net.layers[i]; if(l.stopbackw

2020-05-22 16:47:10 593

原创 神经网络的前向和反向传播

1、前向传播前向传播的作用就是为了获取误差损失;现在以示例来说明:上图是一个典型的神经网络结构,包括了输入层、隐含层和输出层,为了更好的讲解,现在对其进行赋值:目标:给出输入数据i1,i2(0.05和0.10),使输出尽可能与原始输出o1,o2(0.01和0.99)接近。(1).输入层---->隐含层:计算神经元h1的输入加权和:  神经元h1的输出:(此处用到激活函数为sigmoid函数):    同理,可计算出神经元h2的输出:    (2).隐含层---->输出层

2020-05-22 14:34:55 4936 2

原创 前向传播网络函数forward_network(net)

l.forward_gpu(l, net);函数1.前向卷积网络函数void forward_convolutional_layer_gpu(convolutional_layer l, network net){ fill_gpu(l.outputs*l.batch, 0, l.output_gpu, 1);//初始化GPU网络每一层输出的 l.output_gpu为0;l.output = calloc(l.batch*l.outputs, sizeof(float)); if(l

2020-05-21 15:05:35 2019

原创 卷积im2col函数

1、im2col函数一个图像 input_num=1;图像通道 input_channel=1;图像高 input_h=4;图像宽 input_w=4;kernel高 kernel_h=3;kernel宽 kernel_w=3;stride=1;pad=0;卷积后,输出图像的计算公式:output_h=(input_h-kernel_h)/stride+1;output_w=(input_w-kernel_w)/stride+1;如下图,(注:图像中数据不代表图像的颜色数值)原图(

2020-05-19 22:04:38 1186

原创 loss = train_network(net, train)backward_network(net)

train_network(net, train)函数主体float train_network(network *net, data d){ assert(d.X.rows % net->batch == 0);//判断data d.X中保存的训练图像数据能否被min_batch整除 int batch = net->batch;//将min_batch赋给batch,表示每次训练的数据 int n = d.X.rows / batch;//d.X中的训练数据分几次

2020-05-18 16:07:43 305

原创 darknet加载训练数据load_data函数

pthread_create(&thread, 0, load_threads, ptr)函数中最重要的是load_threads函数load_threads函数void *load_threads(void *ptr){ int i; load_args args = *(load_args *)ptr;//定义并初始化一个指向load_args结构体的指针并将指向一个指向load_args结构体指针的指针 if (args.threads == 0) args.th

2020-05-14 18:45:49 4819

原创 nets[i] = load_network(cfgfile, weightfile, clear);

nets[i] = load_network(cfgfile, weightfile, clear);其函数主体如下所示network *load_network(char *cfg, char *weights, int clear){ network *net = parse_network_cfg(cfg);//通过cfg文件构建网络 if(weights &amp...

2020-05-13 14:57:40 738

原创 l = parse_detection(options, params)

l = parse_detection(options, params);函数主体detection_layer parse_detection(list *options, size_params params){ int coords = option_find_int(options, "coords", 1);//设置位置损失项前缀因子参数 int classes = option_find_int(options, "classes", 1);//设置类别 int re

2020-05-12 17:54:28 138

原创 l = parse_connected(options, params);

l = parse_connected(options, params);函数主体layer parse_connected(list *options, size_params params){ //设置网络参数 int output = option_find_int(options, "output",1); char *activation_s = option_find_str(options, "activation", "logistic"); ACTIVATIO

2020-05-12 17:24:14 115

原创 l = parse_dropout(options, params);

l = parse_dropout(options, params);函数主体dropout_layer parse_dropout(list *options, size_params params){ float probability = option_find_float(options, "probability", .5);//保留多少参数 dropout_layer layer = make_dropout_layer(params.batch, params.inputs

2020-05-12 15:29:30 96

原创 l = parse_local(options, params);

l = parse_local(options, params);函数主体local_layer parse_local(list *options, size_params params){ //设置网络参数 int n = option_find_int(options, "filters",1); int size = option_find_int(options, "size",1); int stride = option_find_int(options, "st

2020-05-12 11:36:04 133

原创 l = parse_maxpool(options, params);

parse_maxpool(options, params);函数主体maxpool_layer parse_maxpool(list *options, size_params params){ int stride = option_find_int(options, "stride",1);//池化步长 int size = option_find_int(options, "size",stride);//滤波器尺寸 int padding = option_find_i

2020-05-11 19:07:55 96

原创 l = parse_convolutional(options, params);

l = parse_convolutional(options, params);函数主体如下所示//进行卷积层操作,最后返回layer类型的结构体convolutional_layer parse_convolutional(list *options, size_params params){ int n = option_find_int(options, "filters",1);//设置卷积核个数,同时也是输出特征图个数 int size = option_find_int(

2020-05-11 18:46:10 161

原创 make_convolutional_layer

convolutional_layer layer =make_convolutional_layer(batch,h,w,c,n,groups,size,stride,padding,activation, batch_normalize, binary, xnor, params.net->adam);函数主体convolutional_layer make_convolutional_layer(int batch, int h, int w, int c, int n, int group

2020-05-11 18:43:02 355

原创 普通卷积与深度可分离卷积的区别

1、普通卷积的卷积方式原始图像是二维的,大小是12x12。由于是RGB格式的,所以有三个通道,这相当于是一个3维的图片。其输入图片格式是:12x12x3。滤波器窗口大小是5x5x3。这样的话,得到的输出图像大小是8x8x1(padding模式是valid)。对于一张12×12像素、三通道(shape为12×12×3)的图像,经过5×5卷积核的卷积层,卷积核的通道应该和输入图像的通道数相同,其卷积核个数决定了最后的输出特征图个数,就是输出通道;假设输出通道数为1,则卷积核shape为3×5×5×1,最终

2020-05-11 15:35:17 9530 9

原创 parse_net_options(options, net);

parse_net_options(options, net);函数主体如下void parse_net_options(list *options, network *net){ net->batch = option_find_int(options, "batch",1);//初始化训练批,每batch个样本更新一次参数。 net->learning_rate = option_find_float(options, "learning_rate", .001);//初

2020-05-11 10:26:46 238

原创 network *net = make_network(sections->size - 1);

make_network函数主体//由函数头可知其参数为一个整型变量,返回一个指向network结构体的指针//此函数就是为了给网络层分配内存空间network *make_network(int n)//这里的n是去掉了net层的,因为它是用来保存训练参数的层{ network *net = calloc(1, sizeof(network));//创建一个指向network的指针,其指向分配域起始地址 /* <1>.malloc函数 函数原型为void *

2020-05-09 18:41:04 179

原创 list *sections = read_cfg(filename);

read_cfg函数主体list *read_cfg(char *filename){ FILE *file = fopen(filename, "r");//打开文件 if(file == 0) file_error(filename);//若文件不存在,则显示错误,并跳出函数; char *line; int nu = 0; list *options = make_list();//创建list链表结点,用来存储之后的文件数据; section *c

2020-05-09 14:37:10 303

原创 关于C语言中指针含义的详细解析

一、什么是指针C语言里,变量存放在内存中,而内存其实就是一组有序字节组成的数组,每个字节有唯一的内存地址。CPU 通过内存寻址对存储在内存中的某个指定数据对象的地址进行定位。这里,数据对象是指存储在内存中的一个指定数据类型的数值或字符串,它们都有一个自己的地址,而指针便是保存这个地址的变量。也就是说:指针是一种保存变量地址的变量;如果学习过汇编语言的小伙伴很容易理解。**所谓指针,也就是内存的地址;所谓指针变量,也就是保存了内存地址的变量。**指针说白了就是一块内存的地址,而指针变量就是用来保存这块地址,

2020-05-08 19:53:27 3471 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除