0,修改cfg网络后,https://github.com/lutzroeder/Netron用这个或者网页版https://lutzroeder.github.io/netron/,打开可视化界面检查修改是否正确。然后训练。验证。
1,进行模型网络结构的调整,先要认证阅读这篇,对网络结构把握。
2,对网络的backbone,层,kernel,filter,concat等进行修改。
3,采用网络模型压缩方法,进行模型剪枝,量化,知识蒸馏等技术进行模型优化。
https://github.com/tanluren/yolov3-channel-and-layer-pruning
一、各列说明
1. layer
这一列顾名思义,是层名称。
数字是层编号,后面是层名称。
conv:卷积层。
res:shortcut层(跨层连接,借鉴 resnet 而来,所以用res表示)
yolo:YOLO层。
route:融合层,就是把层进行合并,然后输出到下一层。(后面再仔细讲)
upsample:上采样层。
2. filters
这是对于 conv 来说的,代表过滤器的通道数,和后面 output 的通道数是一致的。
(上述的过滤器和常说的卷积核是一样的东西,就是卷积运算的那个动函数)
这一列中对应非 conv 层的数字在后面讲解各层时再说明。
3. size
这一列和 filters 一样,也是只对于 conv 来说的,代表过滤器的大小和步长。
如:3 x 3 / 1,代表过滤器大小为 3*3,步长为 1。
4. input
这一层的输入,416 x 416 x 3,代表输入大小为 416 x 416,通道数为 3。
5. output
这一层的输出,416 x 416 x 32,代表输入大小为 416 x 416,通道数为 32。
6. 最后一列
这是表面该层的算力消耗 数据,,比如想要减少算力,提升网络运行速度,那可以考虑修改网络想法把这列里面数字大的减小。。
如果有大佬知道,非常感谢在评论区留言。
某次卷积运算需要多少个十亿次浮点运算,其全称是 billion float operations,将多次卷积运算所耗费的BLOPS加起来就可以表示某个算法模型的时间复杂度。
总之,就是衡量这层卷积的性能的指标,可以看到只有 conv 层后面才有这个参数。
参考1 、参考2
感谢评论区 AllenLIL 的提醒。
(2020.8.22)
二、各行说明
1. conv
卷积层, 用过滤器(卷积核)对输入做卷积。
2. res
shortcut 层,是卷积的跨层连接,本层的输入与输出一般保持一致,并且不进行其他操作,只是求差。
后面的数字代表把那一层的输出作为本层的输入,如下图。
3. yolo
yolo这个层是用来做目标检测的,一般可以有2~3个,或者根据实际场景,添加到3,或者4个。
4. route
融合层,就是把层进行合并,然后输出到下一层。
如11层,代表将第9层与第3层的输出相加,作为本层的输出,即下一层的输入。
相加规则为:如第3层的输出为208 x 208 x 64,第9层的输出为208 x 208 x 256,则本层输出为208 x 208 x (64+256) 即 208 x 208 x 320,所以route的两层的 weight 和 height 必须相等,若不相等,则本层输出为 0 x 0 x 0,下一层得不到有效输入,就会报 Layer before convolutional must output image. 然后停止。
5. upsample
上采样层,如第10层,后面的 2x,是2倍上采样的意思。
参考1:https://blog.csdn.net/maizousidemao/article/details/103639537
参考2:YOLO算法通道剪枝、层剪枝与知识蒸馏 - 知乎 (zhihu.com)