yolov3代码理解【YunYang1994】

只描述代码每个函数的含义,具体含义参考代码解析。

一. core.common.py代码理解

构建darknet和yolov3的时候会用到这个py文件
yolov3具体的骨干网络模型参考

其中DBL由convolutional函数表示
res由residual_block表示
concat由route表示,但是代码中实际上没有使用route函数,而是直接使用concat
上采样由upsample表示。

1. convolutional函数:

函数表示darknet最基本的卷积过程:包括: 卷 积 + B N / 偏 置 + 非 线 性 卷积+BN/偏置+非线性 +BN/+线
返回:经过上面几个操作的输出。

def convolutional(input_data, filters_shape, trainable, name, downsample=False, activate=True, bn=True):
# input_data:输入数据 shape(?,416,416,3)等
# filters_shape:filter的大小和形状  shape(3,3,32输入通道数,64输出通道数)
# trainable:BN层是训练过程,还是测试过程
# name:每个卷积的权重参数的名字
# downsample:是否下采样,即:是否需要使得输出图片大小是输入图片的一半
# activate:是否使用激活函数
# bn:是否使用bn层,使用bn层,则不使用bias,不使用bn,就是用bias层
return conv

2. residual_block

def residual_block(input_data, input_channel, filter_num1, filter_num2, trainable, name):
...
return residual_output

使用resnet模块:input经过 1 ∗ 1 1*1 11 3 ∗ 3 3*3 33然后再和input进行相加。
返回得到经过一个res模块的输出。

3. route

def route(name, previous_output, current_output):
...
return output

感觉本来是要用于分支之间的拼接,但是代码后期并没有使用这个函数进行拼接,而是直接使用了tf.concat。所以这个函数好像没什么意义。

4. upsample上采样

 def upsample(input_data, name, method="deconv"):
 ...
 return output

通过resize和反卷积两种方式进行上采样。
返回得到上采样以后得到的输出。

二. core.backbone.py

构建yolov3的时候会用到darknet骨干特征提取网络

1. darknet53

就darknet一个函数,表示骨干特征提取的过程。

def darknet53(input_data, trainable)
# trainable表示bn层是训练还是测试过程
...
return route_1, route_2, input_data

模型图参考

返回的是三个分支:
route_1:第一个res8的输出分支
route_2:第二个res8的输出分支
input_data:res4的输出分支

三. core.yolov3.py

train和test的时候都会用到这个yolov3.py,这个文件中不仅有网络构建部分,还有损失函数的部分。
只有一个YOLOv3类:
class YOLOV3(object)构建整个yolov3网络,包括损失函数。

1. __init__初始化函数

def __init__(self, input_data, trainable): 

创建类的时候自动调用的函数。
需要传入参数:输入图片,以及是训练过程还是测试过程。
函数中还定义了构建yolov3网络必须用到的参数:比如classes;num_class;strides等等。具体看代码。
函数中调用了decode函数:得到对应resize之后的原图中的结果,得到:pred_sbbox;pred_mbbox;pred_lbbox
shape:(batch_size,13,13,3,类别数+类别分数) 坐标也是针对resize之后的原图。

2. __build_nework

def 
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值