yolov3怎么修改网络结构_darknet_yolov3迁移学习(other models instead darknet53)

5db95fbf8aee258fd11d81cc814b9020.png

这个是我第2篇文章,如果宝宝跑起来了,给我个好评哦!!

重点:按照本宝宝的方法您一定能跑起来

part1:准备修改的xxx.cfg文件

首先,我们官网官网已经下载好且编译ok,执行以下3步骤

git clone https://github.com/pjreddie/darknet.git
cd darknet
make

9d5a37ec7bb9c49b842b1cf21ce45e2e.png
进入cfg 文件夹,你会看到这么多文件,其实它们都是网络结构

这个可以简单的分类(以yolo开头的cfg都是detection的,然后其他的.cfg大多是分类用的)

那么既然有检测用的yolo了,为什么还要修改呢.(是这样的因为好多应用场景要求速度,和精度,因此我们需要改不同的网络结构来满足)

废话不多说:我想得到更快的网络,所以用resnet34.cfg 来代替yolov3.cfg中的特征提取器部分

很简单(就是copy resnet34.cfg文件夹一部分代码 和 yolov3.cfg中的一部分代码 然后放到一起得到个niyaode.cfg就可以了)

准备步骤:1

291ac971a44985dca08eb31a843321f5.png
yolov3.cfg的文件内容

大家看到有一堆#的地方了把 ################

我这是549行,你们的也差不了几行,在这个###############线上面的是特征提起器 ,在这个线下面的是yolov3的网络结构.

所以这个文件就保留下面,把上面的都删除.搞定了--------------------ok

准备步骤:2

fefdd866ef76bcbc8bc14710aec99a54.png
这个是resnet34.cfg的网络结构,这个网络是分类用的最后有1000分类
ac2133d88775d9691fd688d4b79e6a33.png
最后有1000分类,因为我们只要特征部分,所以代码复制到"from=-3"这就可以了

所以这个文件就保留上面,把下面的都删除.搞定了--------------------ok

或者说把下面的这些删除就好了:

[avgpool]

[convolutional]
filters=1000
size=1
stride=1
pad=1
activation=linear

[softmax]
groups=1

准备步骤:3

现在我们整体已经解决了,但是还有些细节要调整:

45f0cf4df4bd2118d68200187cf3792b.png
小技巧,手动标记一下resnet34.cfg网络的层数和size大小(---------------0/2:代表第0层,这层输出是input_size/2)

因为yolov3文件要和这个匹配用:

98072224b4112687fb2aa880c96e385e.png

在yolov3.cfg中你会看到很多[route]层,如下图:

这只是一部分:
[convolutional]
batch_normalize=1
size=3
stride=1
pad=1
filters=1024
activation=leaky

#--------------------------------------这一层的输出,就是下面 layers = -4 要的输入
[convolutional]
batch_normalize=1
filters=512
size=1
stride=1
pad=1
activation=leaky

[convolutional]
batch_normalize=1
size=3
stride=1
pad=1
filters=1024
activation=leaky

[convolutional]
size=1
stride=1
pad=1
#255---------------18
filters=18
activation=linear

[yolo]
mask = 6,7,8
anchors = 10,13,  16,30,  33,23,  30,61,  62,45,  59,119,  116,90,  156,198,  373,326
#class 80-1
classes=1
num=9
jitter=.3
ignore_thresh = .7
truth_thresh = 1
random=1


#---------------这里很重要,-4代表网上数4层
[route]
layers = -4


[convolutional]
batch_normalize=1
filters=256
size=1
stride=1
pad=1
activation=leaky

[upsample]
stride=2
...
#---------------这里很重要,-1代表网上数1层,40就是重头开始数40层(别忘记了,刚刚我有个小技巧都标注好了)

[route]
layers = -1, 40
....
...
..
#----------------------------------------------------5 -----------------------1=feature(52)
..
[route]
layers = -4

[convolutional]
batch_normalize=1
filters=128
size=1
stride=1
pad=1
activation=leaky

[upsample]
stride=2

[route]
layers = -1, 22
#----------------------------------------------------5 -----------------------1=feature(52)

为什么要选40,22这层数呢,因为他们的size和yolo的size能链接一起.

[route]层作用:把(x*y*c1)的特征和(x*y*c3)的特征拼接一起得到(x*y*(c1+c2))

此处----------------敲黑板------------敲黑板-----------1

网络输入:height,width都要该成416

[net]
#Training
batch=128
subdivisions=2

# Testing
#batch=1
#subdivisions=1

height=416
width=416
channels=3
min_crop=128
max_crop=448

burn_in=1000
learning_rate=0.1
policy=poly
power=4
max_batches=800000
momentum=0.9
decay=0.0005

angle=7
hue=.1
saturation=.75
exposure=.75
aspect=.75

此处----------------敲黑板------------敲黑板-----------2

网络输入:yolo层都要该成random=0 因为源码的问题


[yolo]
mask = 0,1,2
anchors = 10,13,  16,30,  33,23,  30,61,  62,45,  59,119,  116,90,  156,198,  373,326
#80--------------------1
classes=1
num=9
jitter=.3
ignore_thresh = .7
truth_thresh = 1
#random=1
random=0

此处----------------敲黑板------------敲黑板-----------3

网络输入:yolo层上面的最后一个卷积层(有3个卷积层要改)filters=3*(类数+5)

[convolutional]
batch_normalize=1
filters=128
size=1
stride=1
pad=1
activation=leaky

[convolutional]
batch_normalize=1
size=3
stride=1
pad=1
filters=256
activation=leaky

[convolutional]
size=1
stride=1
pad=1
#255------------------18(默认是3个比例*(80类+5个)=255),我这里就一类(3*(1类+5)=18)
filters=18
activation=linear

到这里cfg终于结束了!

party:准备修改的weight文件

官网地址:

ImageNet Classification

7c933fa74e00673c0f56804d05c9340b.png

看这里有狠多你需要的预先训练好的权重.这里的权重和cfg文件夹都与对应
下载之后:您得到的是整个网络

因为我们只需要一部分:执行以下命令

./darknet partial cfg/resnet34.cfg resnet34.weights resnet34.conv.49 49

解释:resnet34.cfg自带的网络结构

解释:resnet34.weights刚刚下载的

解释:resnet34.conv.49这个名字自己定义,输出的权重名字

解释:49 这个很重要,49这个数据代表你要保存resnet34.cfg这个网络结构的多少层权重,49代表(0-49层)

e7f533b54e4182a9043d8e6dbc102959.png

本文可能有欠缺!欢迎其他宝宝喷!

wx:17610622878

版权声明:本文为CSDN博主「weixin_39719476」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_39719476/article/details/113326292

weixin_39719476

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

单目3D目标检测调研

单目3D目标检测调研
一、 简介 现有的单目3D目标检测方案主要方案主要分为两类,分别为基于图片的方法和基于伪雷达点云的方法。   基于图片的方法一般通过2D-3D之间的几何约束来学习,包括目标形状信息&#xff0