Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
小毕学习代码
yolov7-obb
提交
9e2bf52f
Y
yolov7-obb
项目概览
小毕学习代码
/
yolov7-obb
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
Y
yolov7-obb
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
9e2bf52f
编写于
2月 03, 2023
作者:
_白鹭先生_
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
修改训练过程中的eval
上级
915b2ccf
变更
3
显示空白变更内容
内联
并排
Showing
3 changed file
with
32 addition
and
12 deletion
+32
-12
get_map.py
get_map.py
+1
-1
train.py
train.py
+1
-1
utils/callbacks.py
utils/callbacks.py
+30
-10
未找到文件。
get_map.py
浏览文件 @
9e2bf52f
...
...
@@ -25,7 +25,7 @@ if __name__ == "__main__":
# map_mode为3代表仅仅计算VOC_map。
# map_mode为4代表利用COCO工具箱计算当前数据集的0.50:0.95map。需要获得预测结果、获得真实框后并安装pycocotools才行
#-------------------------------------------------------------------------------------------------------------------#
map_mode
=
3
map_mode
=
0
#--------------------------------------------------------------------------------------#
# 此处的classes_path用于指定需要测量VOC_map的类别
# 一般情况下与训练和预测所用的classes_path一致即可
...
...
train.py
浏览文件 @
9e2bf52f
...
...
@@ -41,7 +41,7 @@ if __name__ == "__main__":
# Cuda 是否使用Cuda
# 没有GPU可以设置成False
#---------------------------------#
Cuda
=
Fals
e
Cuda
=
Tru
e
#---------------------------------------------------------------------#
# distributed 用于指定是否使用单机多卡分布式运行
# 终端指令仅支持Ubuntu。CUDA_VISIBLE_DEVICES用于在Ubuntu下指定显卡。
...
...
utils/callbacks.py
浏览文件 @
9e2bf52f
...
...
@@ -7,7 +7,7 @@ matplotlib.use('Agg')
import
scipy.signal
from
matplotlib
import
pyplot
as
plt
from
torch.utils.tensorboard
import
SummaryWriter
from
utils.utils_rbox
import
rbox2poly
,
poly2hbb
import
shutil
import
numpy
as
np
...
...
@@ -145,21 +145,31 @@ class EvalCallback():
if
results
[
0
]
is
None
:
return
top_label
=
np
.
array
(
results
[
0
][:,
6
],
dtype
=
'int32'
)
top_conf
=
results
[
0
][:,
4
]
*
results
[
0
][:,
5
]
top_boxes
=
results
[
0
][:,
:
4
]
top_label
=
np
.
array
(
results
[
0
][:,
7
],
dtype
=
'int32'
)
top_conf
=
results
[
0
][:,
5
]
*
results
[
0
][:,
6
]
top_rboxes
=
results
[
0
][:,
:
5
]
top_polys
=
rbox2poly
(
top_rboxes
)
#---------------------------------------------------------#
# 将归一化的预测结果变为真实的预测框
#---------------------------------------------------------#
top_polys
[...,
[
0
,
2
,
4
,
6
]]
*=
image_shape
[
1
]
top_polys
[...,
[
1
,
3
,
5
,
7
]]
*=
image_shape
[
0
]
top_hbbs
=
poly2hbb
(
top_polys
)
top_100
=
np
.
argsort
(
top_conf
)[::
-
1
][:
self
.
max_boxes
]
top_
boxes
=
top_boxe
s
[
top_100
]
top_
hbbs
=
top_hbb
s
[
top_100
]
top_conf
=
top_conf
[
top_100
]
top_label
=
top_label
[
top_100
]
for
i
,
c
in
list
(
enumerate
(
top_label
)):
predicted_class
=
self
.
class_names
[
int
(
c
)]
box
=
top_boxe
s
[
i
]
hbb
=
top_hbb
s
[
i
]
score
=
str
(
top_conf
[
i
])
top
,
left
,
bottom
,
right
=
box
xc
,
yc
,
w
,
h
=
hbb
left
=
xc
-
w
/
2
top
=
yc
-
h
/
2
right
=
xc
+
w
/
2
bottom
=
yc
+
h
/
2
if
predicted_class
not
in
class_names
:
continue
...
...
@@ -190,6 +200,12 @@ class EvalCallback():
#------------------------------#
gt_boxes
=
np
.
array
([
np
.
array
(
list
(
map
(
int
,
box
.
split
(
','
))))
for
box
in
line
[
1
:]])
#------------------------------#
# 将polygon转换为hbb
#------------------------------#
hbbs
=
np
.
zeros
((
gt_boxes
.
shape
[
0
],
6
))
hbbs
[:,
:
5
]
=
poly2hbb
(
gt_boxes
[:,
:
8
])
hbbs
[:,
5
]
=
gt_boxes
[:,
8
]
#------------------------------#
# 获得预测txt
#------------------------------#
self
.
get_map_txt
(
image_id
,
image
,
self
.
class_names
,
self
.
map_out_path
)
...
...
@@ -198,8 +214,12 @@ class EvalCallback():
# 获得真实框txt
#------------------------------#
with
open
(
os
.
path
.
join
(
self
.
map_out_path
,
"ground-truth/"
+
image_id
+
".txt"
),
"w"
)
as
new_f
:
for
box
in
gt_boxes
:
left
,
top
,
right
,
bottom
,
obj
=
box
for
hbb
in
hbbs
:
xc
,
yc
,
w
,
h
,
obj
=
hbb
left
=
xc
-
w
/
2
top
=
yc
-
h
/
2
right
=
xc
+
w
/
2
bottom
=
yc
+
h
/
2
obj_name
=
self
.
class_names
[
obj
]
new_f
.
write
(
"%s %s %s %s %s
\n
"
%
(
obj_name
,
left
,
top
,
right
,
bottom
))
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录