深度学习(七十)darknet 实现编写mobilenet源码
来源:互联网 发布:大唐绍兴江滨热电知乎 编辑:程序博客网 时间:2024/05/24 05:25
一、添加一个新的网络层
(1)parse.c文件中函数string_to_layer_type,添加网络层类型解析:
if (strcmp(type, "[depthwise_convolutional]") == 0) return DEPTHWISE_CONVOLUTIONAL;
(2)darknet.h文件中枚举类型LAYER_TYPE,添加网络层枚举类型:
DEPTHWISE_CONVOLUTIONAL;
(3)parse.c文件中函数parse_network_cfg添加网络层解析后进行构建:
LAYER_TYPE lt = string_to_layer_type(s->type);if (lt == DEPTHWISE_CONVOLUTIONAL) {l = parse_depthwise_convolutional(options, params);//自己编写的函数,主要调用了make layer} else if(lt == CONVOLUTIONAL){ l = parse_convolutional(options, params);
(4)parse.c 添加参数读取网络层加载文件
A、添加网络层读取参数函数
void load_weights_upto(network *net, char *filename, int start, int cutoff)load depthwise weights;
B、把参数读取到内存上:
void load_depthwise_convolutional_weights(layer l, FILE *fp);
C、以及修改depthwise_convolutional_kenel.cu把读取后的cpu参数拷贝到显存上:
void push_depthwise_convolutional_layer(depthwise_convolutional_layer layer);
(5)parse.c添加参数保存功能:
void save_weights_upto(network net, char *filename, int cutoff):void save_depthwise_convolutional_weights(layer l, FILE *fp);void pull_depthwise_convolutional_layer(depthwise_convolutional_layer layer);
(6)添加network.c中网络层:
int resize_network(network *net, int w, int h)的resize:if (l.type==DEPTHWISE_CONVOLUTIONAL){resize_depthwise_convolutional_layer(&l, w, h);}
(7)另外在多卡异步训练的时候,network_kernels.cu的好几个函数也要添加depth_convolutional参数相关的更新设置。
总结为一句话:直接搜索项目中调用:CONVOLUTIONAL的关键子
有调用到卷积层枚举类型的地方,可分离卷积层也要添加相对应的功能。
(8)darknet使用须知:darknet的网络配置文件中的学习率、batch并不是我们平时所说的学习率、batch_size。网络更新所用的学习率为:learning_rate/batch_size,所以学习率不能太小,比如如果学习率设置为0.01,batch=128,那么实际计算的学习率就是0.000078,非常小的一个数值,基本上就是更新不了
二、编写网络层代码:depthwise_convolutional_kernels.cu、depthwise_convolutional_layer.c、depthwise_convolutional_layer.h
三、编写mobilenet网络结构文件:
[net]batch=32subdivisions=1height=224width=224channels=3momentum=0.9decay=0.000max_crop=320learning_rate=0.1policy=polypower=3max_batches=1600000#conv1 [convolutional]batch_normalize=1filters=32size=3stride=2pad=1activation=relu#conv2_1/dw[depthwise_convolutional]batch_normalize=1size=3stride=1pad=1activation=relu#conv2_1/sep[convolutional]batch_normalize=1filters=64size=1stride=1pad=0activation=relu#conv2_2/dw[depthwise_convolutional]batch_normalize=1size=3stride=2pad=1activation=relu#conv2_2/sep[convolutional]batch_normalize=1filters=128size=1stride=1pad=0activation=relu#conv3_1/dw[depthwise_convolutional]batch_normalize=1size=3stride=1pad=1activation=relu#conv3_1/sep[convolutional]batch_normalize=1filters=128size=1stride=1pad=0activation=relu#conv3_2/dw[depthwise_convolutional]batch_normalize=1size=3stride=2pad=1activation=relu#conv3_2/sep[convolutional]batch_normalize=1filters=256size=1stride=1pad=0activation=relu#conv4_1/dw[depthwise_convolutional]batch_normalize=1size=3stride=1pad=1activation=relu#conv4_1/sep[convolutional]batch_normalize=1filters=256size=1stride=1pad=0activation=relu#conv4_2/dw[depthwise_convolutional]batch_normalize=1size=3stride=2pad=1activation=relu#conv4_2/sep[convolutional]batch_normalize=1filters=512size=1stride=1pad=0activation=relu#conv5_1/dw[depthwise_convolutional]batch_normalize=1size=3stride=1pad=1activation=relu#conv5_1/sep[convolutional]batch_normalize=1filters=512size=1stride=1pad=0activation=relu#conv5_2/dw[depthwise_convolutional]batch_normalize=1size=3stride=1pad=1activation=relu#conv5_2/sep[convolutional]batch_normalize=1filters=512size=1stride=1pad=0activation=relu#conv5_3/dw[depthwise_convolutional]batch_normalize=1size=3stride=1pad=1activation=relu#conv5_3/sep[convolutional]batch_normalize=1filters=512size=1stride=1pad=0activation=relu#conv5_4/dw[depthwise_convolutional]batch_normalize=1size=3stride=1pad=1activation=relu#conv5_4/sep[convolutional]batch_normalize=1filters=512size=1stride=1pad=0activation=relu#conv5_5/dw[depthwise_convolutional]batch_normalize=1size=3stride=1pad=1activation=relu#conv5_5/sep[convolutional]batch_normalize=1filters=512size=1stride=1pad=0activation=relu#conv5_6/dw[depthwise_convolutional]batch_normalize=1size=3stride=2pad=1activation=relu#conv5_6/sep[convolutional]batch_normalize=1filters=1024size=1stride=1pad=0activation=relu#conv6/dw[depthwise_convolutional]batch_normalize=1size=3stride=1pad=1activation=relu#conv6/sep[convolutional]batch_normalize=1filters=1024size=1stride=1pad=0activation=relu#pool6[avgpool]#fc7[convolutional]filters=1000size=1stride=1pad=0activation=leaky[softmax]groups=1[cost]四、imagenet训练实验
1、训练一天后,经过两轮多的epoch后,精度:
2、训练两天后,迭代第二天结果:
3\又训练了一天多:
- 深度学习(七十)darknet 实现编写mobilenet源码
- 深度学习(七十一)darknet 源码阅读
- 深度学习(六十八)darknet使用
- 基于darknet框架的mobilenet
- 深度学习之基础模型-mobileNet
- 深度学习(六十九)darknet 实现实验 Compressing Deep Neural Networks with Pruning, Trained Quantization and Huffma
- 【神经网络与深度学习】YOLO windows 配置《Darknet配置》
- 深度解读谷歌MobileNet
- CoreML实现的MobileNet
- darknet yolo源码解读
- darknet源码阅读-1
- three.js 源码注释(七十)extras/geometries/CubeGeometry.js
- mobilenet
- mobilenet
- mobilenet
- mobilenet
- YOLO: Real-Time Object Detection深度网络: 在Darknet上的实现方式
- 深度学习方法(十四):轻量级CNN网络设计——MobileNet,ShuffleNet,文末有思考
- 链接
- 最强 Android Studio 使用小技巧和快捷键
- HDU 3642 Get The Treasury(体积并,离散化)
- 在全国断网的情况下我们如何上网?
- 1008. 数组元素循环右移问题 (20)
- 深度学习(七十)darknet 实现编写mobilenet源码
- 判断二叉树平衡/求二叉树的镜像 附属: 一个m*n的矩阵,从左到右从上到下都是递增的,给一个数x,判断x是否在矩阵中
- nyoj 216,A promble is easy
- 二次封装selenium,简易框架Jzps
- Spring协调作用域不同步的bean
- 50个最经典的 Photoshop 实例教程【网页设计篇】
- SpringMVC 组件类大全
- Hibernate关系映射---单向一对多curd(增删查改)操作实例
- 杭电acm 1073Online Judge