Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
PaddleX
提交
312eeca0
P
PaddleX
项目概览
PaddlePaddle
/
PaddleX
通知
138
Star
4
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
43
列表
看板
标记
里程碑
合并请求
5
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
PaddleX
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
43
Issue
43
列表
看板
标记
里程碑
合并请求
5
合并请求
5
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
312eeca0
编写于
5月 28, 2020
作者:
S
sunyanfang01
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add yolo with iou aware loss
上级
fe8e8362
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
102 addition
and
0 deletion
+102
-0
paddlex/cv/transforms/det_transforms.py
paddlex/cv/transforms/det_transforms.py
+102
-0
未找到文件。
paddlex/cv/transforms/det_transforms.py
浏览文件 @
312eeca0
...
...
@@ -1422,3 +1422,105 @@ class GenerateYoloTarget(DetTransform):
batch_data
[
data_id
]
=
tuple
(
data_list
)
return
batch_data
class
ComposedRCNNTransforms
(
Compose
):
""" RCNN模型(faster-rcnn/mask-rcnn)图像处理流程,具体如下,
训练阶段:
1. 随机以0.5的概率将图像水平翻转
2. 图像归一化
3. 图像按比例Resize,scale计算方式如下
scale = min_max_size[0] / short_size_of_image
if max_size_of_image * scale > min_max_size[1]:
scale = min_max_size[1] / max_size_of_image
4. 将3步骤的长宽进行padding,使得长宽为32的倍数
验证阶段:
1. 图像归一化
2. 图像按比例Resize,scale计算方式同上训练阶段
3. 将2步骤的长宽进行padding,使得长宽为32的倍数
Args:
mode(str): 图像处理流程所处阶段,训练/验证/预测,分别对应'train', 'eval', 'test'
min_max_size(list): 图像在缩放时,最小边和最大边的约束条件
mean(list): 图像均值
std(list): 图像方差
"""
def
__init__
(
self
,
mode
,
min_max_size
=
[
800
,
1333
],
mean
=
[
0.485
,
0.456
,
0.406
],
std
=
[
0.229
,
0.224
,
0.225
]):
if
mode
==
'train'
:
# 训练时的transforms,包含数据增强
transforms
=
[
RandomHorizontalFlip
(
prob
=
0.5
),
Normalize
(
mean
=
mean
,
std
=
std
),
ResizeByShort
(
short_size
=
min_max_size
[
0
],
max_size
=
min_max_size
[
1
]),
Padding
(
coarsest_stride
=
32
)
]
else
:
# 验证/预测时的transforms
transforms
=
[
Normalize
(
mean
=
mean
,
std
=
std
),
ResizeByShort
(
short_size
=
min_max_size
[
0
],
max_size
=
min_max_size
[
1
]),
Padding
(
coarsest_stride
=
32
)
]
super
(
ComposedRCNNTransforms
,
self
).
__init__
(
transforms
)
class
ComposedYOLOTransforms
(
Compose
):
"""YOLOv3模型的图像预处理流程,具体如下,
训练阶段:
1. 在前mixup_epoch轮迭代中,使用MixupImage策略,见https://paddlex.readthedocs.io/zh_CN/latest/apis/transforms/det_transforms.html#mixupimage
2. 对图像进行随机扰动,包括亮度,对比度,饱和度和色调
3. 随机扩充图像,见https://paddlex.readthedocs.io/zh_CN/latest/apis/transforms/det_transforms.html#randomexpand
4. 随机裁剪图像
5. 将4步骤的输出图像Resize成shape参数的大小
6. 随机0.5的概率水平翻转图像
7. 图像归一化
验证/预测阶段:
1. 将图像Resize成shape参数大小
2. 图像归一化
Args:
mode(str): 图像处理流程所处阶段,训练/验证/预测,分别对应'train', 'eval', 'test'
shape(list): 输入模型中图像的大小,输入模型的图像会被Resize成此大小
mixup_epoch(int): 模型训练过程中,前mixup_epoch会使用mixup策略
mean(list): 图像均值
std(list): 图像方差
"""
def
__init__
(
self
,
mode
,
shape
=
[
608
,
608
],
mixup_epoch
=
250
,
mean
=
[
0.485
,
0.456
,
0.406
],
std
=
[
0.229
,
0.224
,
0.225
]):
width
=
shape
if
isinstance
(
shape
,
list
):
if
shape
[
0
]
!=
shape
[
1
]:
raise
Exception
(
"In YOLOv3 model, width and height should be equal"
)
width
=
shape
[
0
]
if
width
%
32
!=
0
:
raise
Exception
(
"In YOLOv3 model, width and height should be multiple of 32, e.g 224、256、320...."
)
if
mode
==
'train'
:
# 训练时的transforms,包含数据增强
transforms
=
[
MixupImage
(
mixup_epoch
=
mixup_epoch
),
RandomDistort
(),
RandomExpand
(),
RandomCrop
(),
Resize
(
target_size
=
width
,
interp
=
'RANDOM'
),
RandomHorizontalFlip
(),
Normalize
(
mean
=
mean
,
std
=
std
)
]
else
:
# 验证/预测时的transforms
transforms
=
[
Resize
(
target_size
=
width
,
interp
=
'CUBIC'
),
Normalize
(
mean
=
mean
,
std
=
std
)
]
super
(
ComposedYOLOTransforms
,
self
).
__init__
(
transforms
)
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录