来源 | 极链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](https://img-blog.csdnimg.cn/img_convert/4f0a5b82f2b2b305809be530f9fac29c.png)
![33e8d5bd6b14f32004b381dbf63d1d7c.png](https://img-blog.csdnimg.cn/img_convert/33e8d5bd6b14f32004b381dbf63d1d7c.png)
5.class loss function
类别损失使用softmax来获得。
二、 yolov3的改进部分
loss的改进
![ed4f0c7642e167fc051ffab7e6192f09.png](https://img-blog.csdnimg.cn/img_convert/ed4f0c7642e167fc051ffab7e6192f09.png)
分别是位置损失,类别损失,置信度损失
![3085d0133fdd5e85de8590b90cb4f3fc.png](https://img-blog.csdnimg.cn/img_convert/3085d0133fdd5e85de8590b90cb4f3fc.png)
![c24bafd0b24e2b857612344991a84be4.png](https://img-blog.csdnimg.cn/img_convert/c24bafd0b24e2b857612344991a84be4.png)
yolov3具体的损失函数
![0ece562bc7dda2404fcd978b31b7605f.png](https://img-blog.csdnimg.cn/img_convert/0ece562bc7dda2404fcd978b31b7605f.png)
三、yolov3网络
1.yolov3先验框
![ba5954eb7846bacc4e1f82a85cc8f28b.png](https://img-blog.csdnimg.cn/img_convert/ba5954eb7846bacc4e1f82a85cc8f28b.png)
初始值k的选择:先随机在label boxes(ground truth)中选取k个框距离度量:d=1-iou(iou在0-1之间)
目标:通过不断更新中心值使得d的值最小
按照框的大小分为3组,每组三个框
![cf974ec8d0a1ee546fde1bedb878c112.png](https://img-blog.csdnimg.cn/img_convert/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](https://img-blog.csdnimg.cn/img_convert/d372c1a2a74f4c2bb6471eb3595260fd.png)
3.多尺度预测
原Darknet53中的尺寸是在图片分类训练集上训练的,所以输入的图像尺寸是256x256,下图是以YOLO v3 416模型进行绘制的,所以输入的尺寸是416x416,预测的三个特征层大小分别是52,26, 13。
![91bdb2c1f840b1e893499d697afd22ec.png](https://img-blog.csdnimg.cn/img_convert/91bdb2c1f840b1e893499d697afd22ec.png)
在上图中我们能够很清晰的看到三个预测层分别来自的什么地方,以及Concatenate层与哪个层进行拼接。
注意Convolutional是指Conv2d+BN+LeakyReLU,和Darknet53图中的一样,而生成预测结果的最后三层都只是Conv2d。
![8236ad442f6778af4eee2d661372d9ad.png](https://img-blog.csdnimg.cn/img_convert/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](https://img-blog.csdnimg.cn/img_convert/44dca302f35a1f99e6af6e85e9fe3fb0.png)
在实际工程中可使用两种方法:
1. 预训练分类网络,然后在训练检测网络
2. 直接训练检测网络(需要大量数据),效果一般是经过预训练的方法更好
五、yolov3代码分析
![a3ab18990e38f81af3f0feb133668693.png](https://img-blog.csdnimg.cn/img_convert/a3ab18990e38f81af3f0feb133668693.png)
第一步:下载作者使用的darknet训练的yolov3的权重
第二步:使用conver.py将权重转换为.h5格式
第三步:运行yolo_video.py测试程序
1. kmeans.py
主函数
![f4d272ba944cc44f0f2619552ba977a2.png](https://img-blog.csdnimg.cn/img_convert/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](https://img-blog.csdnimg.cn/img_convert/28d9d985a69bb0475a63b727225f8619.png)
![fcc05dfd4dd68100f873c93812183133.png](https://img-blog.csdnimg.cn/img_convert/fcc05dfd4dd68100f873c93812183133.png)
![1105ff2566ac195b5b460037ae6eac49.png](https://img-blog.csdnimg.cn/img_convert/1105ff2566ac195b5b460037ae6eac49.png)
iou(1,1)即第一个boxes与第一个聚类中心框的iou(交并比)
2. utils.py(数据处理的代码)
![bf1cf18f6b4e6c1f6f9a5fdf39b7f709.png](https://img-blog.csdnimg.cn/img_convert/bf1cf18f6b4e6c1f6f9a5fdf39b7f709.png)
![c45bd99ab15c9685a85c5d6a2b76e24b.png](https://img-blog.csdnimg.cn/img_convert/c45bd99ab15c9685a85c5d6a2b76e24b.png)
![65b6285d297edb07982913d533651b40.png](https://img-blog.csdnimg.cn/img_convert/65b6285d297edb07982913d533651b40.png)
![19ee4a2151fad7ab43fd0868fbb7fc80.png](https://img-blog.csdnimg.cn/img_convert/19ee4a2151fad7ab43fd0868fbb7fc80.png)
![67e8d0f2ad646d3a60292c1febd1b507.png](https://img-blog.csdnimg.cn/img_convert/67e8d0f2ad646d3a60292c1febd1b507.png)
3. model.py
![e67d12f1495022dad001f0daf80ee3f7.png](https://img-blog.csdnimg.cn/img_convert/e67d12f1495022dad001f0daf80ee3f7.png)
![42ef87a3df1b82896561efc23d4c480a.png](https://img-blog.csdnimg.cn/img_convert/42ef87a3df1b82896561efc23d4c480a.png)
![80c92bc64faf6f07d57fd2eda93b0741.png](https://img-blog.csdnimg.cn/img_convert/80c92bc64faf6f07d57fd2eda93b0741.png)
定义网络结构
![8f1c194b215a7cba0109938150b54643.png](https://img-blog.csdnimg.cn/img_convert/8f1c194b215a7cba0109938150b54643.png)
损失函数
![5c9d40a427bc3fa7a64aee8c185cdf1e.png](https://img-blog.csdnimg.cn/img_convert/5c9d40a427bc3fa7a64aee8c185cdf1e.png)
文末小结~
这篇真的是纯纯纯···干货了,是大佬自己学习整理出来的,拿出来给大家学习分享。在这里表示灰常感谢啦~