栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

u版yolov3详解

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

u版yolov3详解

t t[j] # filter # t[3,72,7] j[3,72] --- [95,7] #这里j相当于一个mask 只取t位置为True的。即保留与anchor长宽相差不大的位置上面的gt #最后的t是[95,7] #注意这里一开始是3份的gt 每份与一个anchor对应 但是现在变成2维的 丢失了前面的0,1,2代表哪个anchor的信息 #但是巧妙的是这里一开始加了一列 之前是6列的 现在是7列 第7列就是保留的哪个anchor 0,1,2 #所以 如果同一个目标与3个anc长宽比都小于4的话 那么都会保留 # Offsets gxy t[:, 2:4] # grid xy gxy [95,2] #######useless########################################################### gxi gain[[2, 3]] - gxy # inverse [95,2] aa 4.5456 % 1. tmp_7 gxy % 1. ##[95,2] tmp_8 (gxy % 1. g) #[95,2] tmp_9 (gxy 1.) #[95,2] tmp_10 ((gxy % 1. g) (gxy 1.)) #[95,2] tmp_11 ((gxy % 1. g) (gxy 1.)).T #[2,95] # test_1 torch.rand(2,4) # a1,a2 test_1 j, k ((gxy % 1. g) (gxy 1.)).T #j[95] k[95] l, m ((gxi % 1. g) (gxi 1.)).T #l[95] m[95] j torch.stack((torch.ones_like(j),)) #j[1,95] t t.repeat((off.shape[0], 1, 1))[j] ##off [1,2] t [95,7] #gxy [95,2] tmp_12 torch.zeros_like(gxy)[None] #[1,95,2] tmp_13 off[:, None] #[1,1,2] tmp_14 (torch.zeros_like(gxy)[None] off[:, None]) #[1,95,2] offsets (torch.zeros_like(gxy)[None] off[:, None])[j] #[95,2] ################################################################## # print( max offsets ,torch.max(offsets)) else: t targets[0] offsets 0 # Define b, c t[:, :2].long().T # image, class #b[90] c[90] gxy t[:, 2:4] # grid xy [90,2] 这里的gxy是带小数的float gwh t[:, 4:6] # grid wh [90,2] 这里wh 是相对于featuremap的实际值 80 40 20 gij (gxy - offsets).long() #[90,2] 这里offset是0 然后取整是整形int gi, gj gij.T # grid xy indices gi[90] g[j]90 #这里的gi gj就是网格坐标 是整数 # Append a t[:, 6].long() # anchor indices [90] tmp_15 (b, a, gj.clamp_(0, gain[3] - 1), gi.clamp_(0, gain[2] - 1)) indices.append((b, a, gj.clamp_(0, gain[3] - 1), gi.clamp_(0, gain[2] - 1))) # image, anchor, grid indices tbox.append(torch.cat((gxy - gij, gwh), 1)) # box #注意这里gxy - gij 就是小数了 代表着以gi gj网格为坐标点 然后小数部分就是相对于当前网格的偏移 anch.append(anchors[a]) # anchors tcls.append(c) # class #注意这里存放的变量tcls, tbox, indices, anch 它们的行数都是一样的 90 return tcls, tbox, indices, anch 看完这里总结一下 这段代码就是gt与anchor绑定 在3个层次上大小的feature map 把gt也放到这3个大小的feature map上面 gt的长宽与anchor长宽比小于4的 就认为gt与anchor匹配 这是重要的一步。 然后gt在当前feature map上面取小数 就是整数部分代表一个单元格 目标的中心在这个单元格 那么就该单元格负责 这里比如有90个目标gt 那么传出去的变量行数都为90 列的话有b c x y w h a 这里很巧妙的是a代表着是哪个anchor 一个单元格有3个anchor 只要长宽比小于4 那么都保留 这样设计的话就是一行里面 代表一个gt 一行有gt所有信息 b c x y w h a anch是具体的anchor的值 比如(35,24) tcls, tbox, indices, anch tcls是list 有3个列表 每个shape是[95] [84],[90] tbox是list 有3个列表 每个shape是[95,4],[84,4],[90,4] indices是list 有3个列表 每个列表是元组 每个元组存放了4个shape是[95],[84],[90]的tensor anch是list 有3个列表 [95,2],[84,2],[90,2]
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/266936.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号