yolo物体检测算法如何进行迁移学习?
Posted
技术标签:
【中文标题】yolo物体检测算法如何进行迁移学习?【英文标题】:How to do transfer learning for yolo object detection algorithm? 【发布时间】:2018-09-23 17:14:21 【问题描述】:我已经成功训练 yolo 使用 this article 预测我自己的图像。在那里,我在我的 cfg 文件的第 224 行更改了 classes = 5(我训练了 5 个课程)和过滤器为 50。 我想要的是通过训练最后一个全连接层和 softmax 层来为 yolo 做迁移学习。 我的cfg文件如下。
[net]
batch=64
subdivisions=8
height=416
width=416
channels=3
momentum=0.9
decay=0.0005
angle=0
saturation = 1.5
exposure = 1.5
hue=.1
learning_rate=0.0001
max_batches = 45000
policy=steps
steps=100,25000,35000
scales=10,.1,.1
[convolutional]
batch_normalize=1
filters=32
size=3
stride=1
pad=1
activation=leaky
[maxpool]
size=2
stride=2
[convolutional]
batch_normalize=1
filters=64
size=3
stride=1
pad=1
activation=leaky
[maxpool]
size=2
stride=2
[convolutional]
batch_normalize=1
filters=128
size=3
stride=1
pad=1
activation=leaky
[convolutional]
batch_normalize=1
filters=64
size=1
stride=1
pad=1
activation=leaky
[convolutional]
batch_normalize=1
filters=128
size=3
stride=1
pad=1
activation=leaky
[maxpool]
size=2
stride=2
[convolutional]
batch_normalize=1
filters=256
size=3
stride=1
pad=1
activation=leaky
[convolutional]
batch_normalize=1
filters=128
size=1
stride=1
pad=1
activation=leaky
[convolutional]
batch_normalize=1
filters=256
size=3
stride=1
pad=1
activation=leaky
[maxpool]
size=2
stride=2
[convolutional]
batch_normalize=1
filters=512
size=3
stride=1
pad=1
activation=leaky
[convolutional]
batch_normalize=1
filters=256
size=1
stride=1
pad=1
activation=leaky
[convolutional]
batch_normalize=1
filters=512
size=3
stride=1
pad=1
activation=leaky
[convolutional]
batch_normalize=1
filters=256
size=1
stride=1
pad=1
activation=leaky
[convolutional]
batch_normalize=1
filters=512
size=3
stride=1
pad=1
activation=leaky
[maxpool]
size=2
stride=2
[convolutional]
batch_normalize=1
filters=1024
size=3
stride=1
pad=1
activation=leaky
[convolutional]
batch_normalize=1
filters=512
size=1
stride=1
pad=1
activation=leaky
[convolutional]
batch_normalize=1
filters=1024
size=3
stride=1
pad=1
activation=leaky
[convolutional]
batch_normalize=1
filters=512
size=1
stride=1
pad=1
activation=leaky
[convolutional]
batch_normalize=1
filters=1024
size=3
stride=1
pad=1
activation=leaky
#######
[convolutional]
batch_normalize=1
size=3
stride=1
pad=1
filters=1024
activation=leaky
[convolutional]
batch_normalize=1
size=3
stride=1
pad=1
filters=1024
activation=leaky
[route]
layers=-9
[reorg]
stride=2
[route]
layers=-1,-3
[convolutional]
batch_normalize=1
size=3
stride=1
pad=1
filters=1024
activation=leaky
[convolutional]
size=1
stride=1
pad=1
filters=50
activation=linear
[region]
anchors = 1.08,1.19, 3.42,4.41, 6.63,11.38, 9.42,5.11, 16.62,10.52
bias_match=1
classes=5
coords=4
num=5
softmax=1
jitter=.2
rescore=1
object_scale=5
noobject_scale=1
class_scale=1
coord_scale=1
absolute=1
thresh = .6
random=0
【问题讨论】:
【参考方案1】:其实是filters=(classes + 5)*5
参考:Here
【讨论】:
【参考方案2】:对于 5 个类,您需要将过滤器设置为 30 而不是 50。 过滤器=(类数+1)* 5
【讨论】:
【参考方案3】:我猜你正在使用 pjreddie/darknet 框架来实现 YOLO。
如果是这种情况,则在不需要更新的层上设置一个附加参数stopbackward=1
。
在parse.c
文件中,第 724 行:
l.stopbackward = option_find_int_quiet(options, "stopbackward", 0);
所以这意味着它在每一层都有一个参数,就像batch_normalize=1
你可以指定stopbackward=1
。因此,任何高于此的图层都不会更新。这也可以在第 272 行的文件 network.c
中看到:
if(l.stopbackward) break;
【讨论】:
以上是关于yolo物体检测算法如何进行迁移学习?的主要内容,如果未能解决你的问题,请参考以下文章
物体检测算法:R-CNN,SSD,YOLO 动手学深度学习v2 pytorch
检测算法简介及其原理——fast R-CNN,faster R-CNN,YOLO,SSD,YOLOv2,YOLOv3
目标检测算法(R-CNN,fast R-CNN,faster R-CNN,yolo,SSD,yoloV2,yoloV3)