Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
陈小光丶
yolov4-keras
提交
13e54c80
Y
yolov4-keras
项目概览
陈小光丶
/
yolov4-keras
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
Y
yolov4-keras
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
未验证
提交
13e54c80
编写于
2月 07, 2021
作者:
B
Bubbliiiing
提交者:
GitHub
2月 07, 2021
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Delete CSPdarknet53_tiny.py
上级
b765a5c0
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
0 addition
and
119 deletion
+0
-119
nets/CSPdarknet53_tiny.py
nets/CSPdarknet53_tiny.py
+0
-119
未找到文件。
nets/CSPdarknet53_tiny.py
已删除
100644 → 0
浏览文件 @
b765a5c0
from
functools
import
wraps
import
tensorflow
as
tf
from
keras
import
backend
as
K
from
keras.layers
import
(
Add
,
Concatenate
,
Conv2D
,
Lambda
,
Layer
,
MaxPooling2D
,
UpSampling2D
,
ZeroPadding2D
)
from
keras.layers.advanced_activations
import
LeakyReLU
from
keras.layers.normalization
import
BatchNormalization
from
keras.regularizers
import
l2
from
utils.utils
import
compose
def
route_group
(
input_layer
,
groups
,
group_id
):
convs
=
tf
.
split
(
input_layer
,
num_or_size_splits
=
groups
,
axis
=-
1
)
return
convs
[
group_id
]
#--------------------------------------------------#
# 单次卷积DarknetConv2D
# 如果步长为2则自己设定padding方式。
# 测试中发现没有l2正则化效果更好,所以去掉了l2正则化
#--------------------------------------------------#
@
wraps
(
Conv2D
)
def
DarknetConv2D
(
*
args
,
**
kwargs
):
# darknet_conv_kwargs = {'kernel_regularizer': l2(5e-4)}
darknet_conv_kwargs
=
{}
darknet_conv_kwargs
[
'padding'
]
=
'valid'
if
kwargs
.
get
(
'strides'
)
==
(
2
,
2
)
else
'same'
darknet_conv_kwargs
.
update
(
kwargs
)
return
Conv2D
(
*
args
,
**
darknet_conv_kwargs
)
#---------------------------------------------------#
# 卷积块
# DarknetConv2D + BatchNormalization + LeakyReLU
#---------------------------------------------------#
def
DarknetConv2D_BN_Leaky
(
*
args
,
**
kwargs
):
no_bias_kwargs
=
{
'use_bias'
:
False
}
no_bias_kwargs
.
update
(
kwargs
)
return
compose
(
DarknetConv2D
(
*
args
,
**
no_bias_kwargs
),
BatchNormalization
(),
LeakyReLU
(
alpha
=
0.1
))
'''
input
|
DarknetConv2D_BN_Leaky
-----------------------
| |
route_group route
| |
DarknetConv2D_BN_Leaky |
| |
------------------- |
| | |
route_1 DarknetConv2D_BN_Leaky |
| | |
-------------Concatenate |
| |
----DarknetConv2D_BN_Leaky |
| | |
feat Concatenate-----------------
|
MaxPooling2D
'''
#---------------------------------------------------#
# CSPdarknet_tiny的结构块
# 存在一个大残差边
# 这个大残差边绕过了很多的残差结构
#---------------------------------------------------#
def
resblock_body
(
x
,
num_filters
):
# 利用一个3x3卷积进行特征整合
x
=
DarknetConv2D_BN_Leaky
(
num_filters
,
(
3
,
3
))(
x
)
# 引出一个大的残差边route
route
=
x
# 对特征层的通道进行分割,取第二部分作为主干部分。
x
=
Lambda
(
route_group
,
arguments
=
{
'groups'
:
2
,
'group_id'
:
1
})(
x
)
# 对主干部分进行3x3卷积
x
=
DarknetConv2D_BN_Leaky
(
int
(
num_filters
/
2
),
(
3
,
3
))(
x
)
# 引出一个小的残差边route_1
route_1
=
x
# 对第主干部分进行3x3卷积
x
=
DarknetConv2D_BN_Leaky
(
int
(
num_filters
/
2
),
(
3
,
3
))(
x
)
# 主干部分与残差部分进行相接
x
=
Concatenate
()([
x
,
route_1
])
# 对相接后的结果进行1x1卷积
x
=
DarknetConv2D_BN_Leaky
(
num_filters
,
(
1
,
1
))(
x
)
feat
=
x
x
=
Concatenate
()([
route
,
x
])
# 利用最大池化进行高和宽的压缩
x
=
MaxPooling2D
(
pool_size
=
[
2
,
2
],)(
x
)
return
x
,
feat
#---------------------------------------------------#
# CSPdarknet_tiny的主体部分
#---------------------------------------------------#
def
darknet_body
(
x
):
# 首先利用两次步长为2x2的3x3卷积进行高和宽的压缩
# 416,416,3 -> 208,208,32 -> 104,104,64
x
=
ZeroPadding2D
(((
1
,
0
),(
1
,
0
)))(
x
)
x
=
DarknetConv2D_BN_Leaky
(
32
,
(
3
,
3
),
strides
=
(
2
,
2
))(
x
)
x
=
ZeroPadding2D
(((
1
,
0
),(
1
,
0
)))(
x
)
x
=
DarknetConv2D_BN_Leaky
(
64
,
(
3
,
3
),
strides
=
(
2
,
2
))(
x
)
# 104,104,64 -> 52,52,128
x
,
_
=
resblock_body
(
x
,
num_filters
=
64
)
# 52,52,128 -> 26,26,256
x
,
_
=
resblock_body
(
x
,
num_filters
=
128
)
# 26,26,256 -> x为13,13,512
# -> feat1为26,26,256
x
,
feat1
=
resblock_body
(
x
,
num_filters
=
256
)
# 13,13,512 -> 13,13,512
x
=
DarknetConv2D_BN_Leaky
(
512
,
(
3
,
3
))(
x
)
feat2
=
x
return
feat1
,
feat2
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录