今天来分析 Joseph Redmon 所设计的 YOLOV3 的设定档,里面会看到他是如何设计整个卷积网路结构,下图是 github 中 cfg 文件夹的 YOLO 结构的档案,看 yolov1.cfg, yolov2.cfg, yolov3.cfg 等档名後面带着-xxx,例如: yolov2-voc.cfg, yolov3-voc.cfg。 这是指针对不同的数据集 (datasets) 训练时的网路结构组态档案,没有带 -xxx 的组态档,基本上的数据集就是微软的 COCO 数据集,总类别数是 80 类。带有 -voc 则是跑 VOC 数据集,类别数是 20 类。
图 1、YOLO 组态档文件夹的结构
下图是根据 Joseph Redmon 所发表的 YOLOv3 结构用来萃取特徵图的 darknet53 网路结构。
图 2、YOLOv3 的 darknet53
打开 yolov3.cfg,下图是档案内前三层的卷积层的设定,比对两图的过滤器(filter),卷积核心大小(size) 以及步进 (stride),可以发现一模一样,分别是 (32 * 32, 3, 1), (64 * 64,3,2), (32 * 32, 1, 1)。这样不难理解 yolov3.cfg 的目的就是在描述 yolov3 的网路结构,所以我们只要使用不同的组态档,就可以实作 yolov1,yolov2 或是 yolov3。
图 3、yolov3.cfg 的前三项设定
因此,全局的设定都是在 [net] 这个选项中进行设定,通常我们针对不同的环境都是修改这里的设定。
batch=64
subdivisions=16
width=608
height=608
channels=3
batch指的就是一批要多少训练样本(batchsize),以我们的例子来说就是图片,这主要是取决於训练时的 GPU 记忆体,而 yolo 还有一个参数是 subdivisions,是用来细分,一次放多少样本到记忆体中,以上述的设定,通常是记忆体足够大,可以一次放入 4 张图片 (64/16),如果自己评估记忆体够用的话, subdivisions 可以设的更小一点,原则上是 8 的倍数。下面这个方程序说明批次 (batchsize) 跟迭代 (iteration) 与期数 (epoch) 的关系。
epoch = (全部训练样本 / batchsize) / iteration
举个例子,训练集有 1000 个样本,batchsize = 10,那麽训练完整个样本集(1次epoch)需要:100 次iteration。
1 = (1000 / 10) / 100
width, height, channels 这三个参数用来指定训练图片大小,必须是 32 的倍数,资料集中的图片大小务必要跟这个设定相同。
底下是整个模型找寻最佳解的超参数,可以参考机器/深度学习-基础数学(三):梯度最佳解相关算法(gradient descent optimization algorithms)
momentum=0.9
decay=0.0005
learning_rate=0.0005
max_batches = 60000
policy=steps
steps=400000,450000
scales=.1,.1
图 4、找寻最佳解的过程
资料扩增相关参数,用来随机产生新的资料用来训练模型。
angle(角度): 图片角度变化,单位是度, angle=10,就是随机生成 -10 ~ 10 度旋转的图片。
saturation(饱和度)和exposure(曝光度): 代表饱和度和曝光度设定 1.5 代表用饱和度和曝光度进行 0 ~ 1.5 倍随机生成图片。以下为 DarmMark 所做的示例,它建议可以在 0 - 10 之间调整,但是 darknet 可以容许更大的值。
hue(色调): 色调设定为 0.1 代表在色调随机变化 0 ~ 0.1 生成图片。DarmMark 建议可以在 0.0 到 1.0 之间调整。
angle=0
saturation = 1.5
exposure = 1.5
hue=.1
图 5、DarkMark的图型效果
最後辨识判断的结果在 YOLOv3 为[yolo]这个选项中。
[yolo]
mask = 6,7,8
anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326
classes=80
num=9
jitter=.3
ignore_thresh = .7
truth_thresh = 1
random=1
要记得在三个 [yolo] 层的前一个卷积层,都要将 fliters 根据辨识的种类数量来进行修改,公式如下,位置可以参考下图。
filters=(classes + 5) * 3
图 6、修改判断层前的卷积层的过滤器
>>: Day 3 : 案例分享(1.1) -B2C经典流程 电子商务、POS + 进销存 + 会计(应收付) +制造(产品组合、产品转换)
玩各种CMS当然要从选模板作为起始,选一个样式最符合主要规划的,无论企业网站、个人部落格网站、资讯站...
在昨日的文章中,简单地向各位展示直接藉由Function抓取API 所能得到的架构会是何者 而今天...
什麽是 Latch ? 前几篇在 if-else 以及 case 语句时有提到 latch,那什麽是...
前言 被Netflix fixation了,差点忘记发文 正文 概念 CWE-384 Authent...
今天发烧用手机打字 後面明天一定补完QQ 明天是不是该想想要做什麽mysql小projectㄌ.....