yolov3损失函数_大佬笔记分享:yolov3论文及代码解析

来源 | 极链AI云(性价比最高的共享GPU算力平台,双十一活动新人注册可领取268元大礼包,价值150+小时的GPU免费使用时长,领取地址:https://cloud.videojj.com/

一、yolov2对比yolov1的主要改进点

1.Batch Normalization(批标准化)

(ps:归一化(normalization)将一批不太标准的数据统一到指定的格式。我们在数据处理时常用的是将一组范围差距较大或者单位不同的数据依据一定规则变化到指定的范围之内。)

设计新网络darknet-19,加入了bn(batch normalization)层,收敛更快,相当于加了新的正则,可以去掉之前网络里的dropout层,提高2%map。

2.High Resolution Classifier

原来yolo网络在预训练输入尺寸为224 * 224,detection的时分辨率变为448 * 448的输入,分类模型切换到检测模型的时候,模型还要适应图像分辨率的改变。

yolov2则将预训练分为两步:224 * 224的输入从头开始训练网络,然后在将输入调整到448 * 448.最后再在检测的数据集上fine-tuning。最终提高大约4%map。

3. Convolutional with anchor boxes

借鉴Faster R-CNN的思想使用聚类算法产生anchors。map有所下降但是recall(召回率)提高了。

4. direct location prediction

坐标回归方式改变

4f0a5b82f2b2b305809be530f9fac29c.png

33e8d5bd6b14f32004b381dbf63d1d7c.png

5.class loss function

类别损失使用softmax来获得。

二、 yolov3的改进部分

loss的改进

ed4f0c7642e167fc051ffab7e6192f09.png

分别是位置损失,类别损失,置信度损失

3085d0133fdd5e85de8590b90cb4f3fc.png

c24bafd0b24e2b857612344991a84be4.png

yolov3具体的损失函数

0ece562bc7dda2404fcd978b31b7605f.png

三、yolov3网络

1.yolov3先验框

ba5954eb7846bacc4e1f82a85cc8f28b.png

初始值k的选择:先随机在label boxes(ground truth)中选取k个框距离度量:d=1-iou(iou在0-1之间)

目标:通过不断更新中心值使得d的值最小

按照框的大小分为3组,每组三个框

cf974ec8d0a1ee546fde1bedb878c112.png

52 * 52的框能预测小物体除了对应原图区域小以外,还融合了浅层的特征(浅层特征包含小物体特征比较丰富)

2.darknet-53的模型结构

这个网络主要是由一系列的1x1和3x3的卷积层组成(每个卷积层后都会跟一个BN层和一个LeakyReLU) 层,作者说因为网络中有53个convolutional layers,所以叫做Darknet-53(2 + 1*2 + 1 + 2*2 + 1 + 8*2 +1 + 8*2 + 1 + 4*2 + 1 = 53 按照顺序数,不包括Residual中的卷积层,最后的Connected是全连接层也算卷积层,一共53个)。下图就是Darknet-53的结构图,在右侧标注了一些信息方便理解。(卷积的strides默认为(1,1),padding默认为same,当strides为(2,2)时padding为valid)

d372c1a2a74f4c2bb6471eb3595260fd.png

3.多尺度预测

原Darknet53中的尺寸是在图片分类训练集上训练的,所以输入的图像尺寸是256x256,下图是以YOLO v3 416模型进行绘制的,所以输入的尺寸是416x416,预测的三个特征层大小分别是52,26, 13。

91bdb2c1f840b1e893499d697afd22ec.png

在上图中我们能够很清晰的看到三个预测层分别来自的什么地方,以及Concatenate层与哪个层进行拼接。

注意Convolutional是指Conv2d+BN+LeakyReLU,和Darknet53图中的一样,而生成预测结果的最后三层都只是Conv2d。

8236ad442f6778af4eee2d661372d9ad.png

在darknet-53后面使用了7个卷积层做预测。最后一层的是自己设定的适用自己的数据集合对于voc数据集共20类(batchsize忽略)

13 * 13尺度预测输出:13 * 13 * 75

26 * 26尺度预测输出:26 * 26 * 75

52 * 52尺度预测输出:52 * 52 * 75

四、yolov3网络训练

44dca302f35a1f99e6af6e85e9fe3fb0.png

在实际工程中可使用两种方法:

1. 预训练分类网络,然后在训练检测网络

2. 直接训练检测网络(需要大量数据),效果一般是经过预训练的方法更好

五、yolov3代码分析

a3ab18990e38f81af3f0feb133668693.png

第一步:下载作者使用的darknet训练的yolov3的权重

第二步:使用conver.py将权重转换为.h5格式

第三步:运行yolo_video.py测试程序

1. kmeans.py

主函数

f4d272ba944cc44f0f2619552ba977a2.png

cluster_number = 9 聚类中心的个数为9

filename = "2012_train.txt" 训练数据存放的txt文件

kmeans = YOLO_Kmeans(cluster_number,

filename) 使用YOLO_Kmeans(cluster_number, filename)类实例化一个kmeans对象

kmeans.txt2clusters() 最后调用kmeans里包含kmeans.txt2clusters()这个对象的方法(不太确定) 最核心部分为 def iou()这个函数

28d9d985a69bb0475a63b727225f8619.png

fcc05dfd4dd68100f873c93812183133.png

1105ff2566ac195b5b460037ae6eac49.png

iou(1,1)即第一个boxes与第一个聚类中心框的iou(交并比)

2. utils.py(数据处理的代码)

bf1cf18f6b4e6c1f6f9a5fdf39b7f709.png

c45bd99ab15c9685a85c5d6a2b76e24b.png

65b6285d297edb07982913d533651b40.png

19ee4a2151fad7ab43fd0868fbb7fc80.png

67e8d0f2ad646d3a60292c1febd1b507.png

3. model.py

e67d12f1495022dad001f0daf80ee3f7.png

42ef87a3df1b82896561efc23d4c480a.png

80c92bc64faf6f07d57fd2eda93b0741.png

定义网络结构

8f1c194b215a7cba0109938150b54643.png

损失函数

5c9d40a427bc3fa7a64aee8c185cdf1e.png

文末小结~

这篇真的是纯纯纯···干货了,是大佬自己学习整理出来的,拿出来给大家学习分享。在这里表示灰常感谢啦~

来源 | 极链AI云(性价比最高的共享GPU算力平台,双十一活动新人注册可领取268元大礼包,价值150+小时的GPU免费使用时长,领取地址:https://cloud.videojj.com/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值