我的github代码 点击打开链接
参考代码 点击打开链接
yolo-v1 darknet主页 点击打开链接
上面的caffe版本较老。对新版的cudnn支持不好,可能编译出错,需要修改 cudnn.hpp头文件在次进行编译,
修改后的cudnn.hpp文件,可在我的github主页找到。
步骤:
0、voc数据集转换成 caffe下数据库格式文件,上述github也有记录;
1、可以根据yolov1-cfg网络配置文件写出caffe的网络配置文件prototex格式 ;
2、使用模型参数转换工具,将yolov1.weights 转换成 caffemodel格式 ;
3、可以使用 测试网络gnet_test.prototxt 训练配置成参数gnet_solver.prototxt 训练网络gnet_train.prototxt
基于上述换成的模型参数的基础上进行训练;
4、注意原作者给出的 yolov1.weights yolov1-cfg是 在voc数据集上训练的,目标种类20;
我的github代码 点击打开链接
参考代码 点击打开链接
yolo-v2 darknet主页 点击打开链接
步骤上述 yolo-v1-caffe的步骤类似。
需要注意的是,原作者给出的有好多种网络框架以及对应的网络参数权重文件
常用的是 基于voc数据集(20类) 和 coco数据集(80类)不过这些的网络主题没什么区别,主要是最后几层网络分类输出是类别数量不同,卷积核数量有所不同。
我的github代码 点击打开链接
原作caffe代码 点击打开链接
VGG16框架 以及SSD结构请参考上述github以及网络资源和论文等资料
步骤:
0、创建符合ssd的训练图片数据库文件
参考原作caffe代码
./data/VOC0712/create_list.sh
1、使用作者提供的 ssd_pascal.py 文件生成基于pascal VOC数据集的 VGG16-SSD目标检测的
一系列配置文件,包括训练、测试、检测网络框架prototex文件
ssd_33_train.prototxt
ssd_33_test.prototxt
ssd_33_deploy.prototxt
以及训练参数文件 ssd_33_solver.prototxt
还有 目标检测脚本 ssd_detect.py
2、预训练模型权重文件可下载VGG_ILSVRC_16_layers_fc_reduced.caffemodel 点击打开链接 casdn上也有
3、使用 VGG_VOC0712_SSD_300x300.sh 脚本进行训练
我的 github参考 点击打开链接
参考原作者 VGG16-SSD 的网络配置文件以及 squeezeNet的网路配置文件
写出自己的 squeezeNet-SSD配置文件。
注意 网络的前部分 squeezeNet的各层名字应该与 squeezeNet的网路配置文件相同,
这样可以基于 squeezeNet的权重文件进行训练。
我的 github参考 点击打开链接
caffe参考 点击打开链接
步骤:
参考原作者 VGG16-SSD 的网络配置文件以及 MobileNet 的网路配置文件
写出自己的 MobileNet-SSD配置文件。这也有V1和V2版本
注意点与上面的一样。
参考:
-
通道重排层的 三个文件 :
-
shuffle_channel_layer
.cpp
-
shuffle_channel_layer
.cu
-
shuffle_channel_layer
.hpp
-
message
LayerParameter {
-
...
-
optional
ShuffleChannelParameter shuffle_channel_param =
164;
-
...
-
}
-
...
-
message
ShuffleChannelParameter {
-
optional uint32 group =
1[
default =
1];
// The number of group
-
}
-
make clean
-
make all -j
-
make pycaffe
这里需要注意的是:
组通道卷积DW卷积起始就是分组卷积的特殊情况,当分组数量等于 输入数据的通道数量时。
有的 shufflenet 除了添加了
shuffle_channel层 ,还添加了
DW卷积层 其实这里可以不用,
就用普通的卷积层代替,添加一个group参数,且数值为 上一层的输出通道数量