YOLO V1 代码encoder部分

主要是对下面这一部分的整理:

 

一、

选取了两张图片做了一个简单的实验:

第一张是文件名为:000027.jpg ,x1,y1,x2,y2 坐标为:174,101,349,351,类别数为:14,即这一个类别;第二张是文件名为:000018.jpg,x1,y1,x2,y2坐标为:31,30,358,279,类别数为:11,即这一个类别。第一个图片宽度:486,高度:500;第二个图片宽度:380,高度:285

 

 二、debug代码

1、首先,一共20个类比

  2、两个图片的bbox的位置x1,y1,x2,y2

 

 3、将图片的bbox位置进行归一化,即每一个bbox坐标分别除以图片的高度和宽度

 4、下面是标签的tensor:

 5、定义grid cell大小为 7*7,最后输出的target为 7*7*30,cell_size = 1/7

 6、计算每一张图片的bbox的宽度和高度,这是归一化之后的高度和宽度,即归一化之后的bbox的坐标对应相减,x2-x1,y2-y1

 7、计算bbox的中心点坐标,用归一化后的bbox坐标去计算

 8、

# x.size()[0]这里的[0]就是表示维度,cxcy.size()[0] = 2,即有两个bbox
for i in range(cxcy.size()[0]):
    # cxcy_sample = tensor([0.5400, 0.4500])
    cxcy_sample = cxcy[i]  # 中心坐标  1*1
    # .ceil()函数返回一个大于或等于 x 的的最小整数
    # ij = tensor([3., 3.])
    ij = (cxcy_sample / cell_size).ceil() - 1  # 左上角坐标 (7*7)为整数
    # 第一个框的置信度
    # target.size() = [7, 7, 30]
    # target[3,3,4] = 1,即第一个bbox的置信度为 1
    target[int(ij[1]), int(ij[0]), 4] = 1

    # target[3,3,9] = 1,即第二个bbox的置信度为 1
    target[int(ij[1]), int(ij[0]), 9] = 1

    # target[3,3,24] = 1,即该网格单元对应的类别为1
    target[int(ij[1]), int(ij[0]), int(labels[i]) + 10] = 1  # 20个类别对应处的概率设置为1

    # xy = [3,3]*1/7 = tensor([0.4286, 0.4286])
    xy = ij * cell_size  # 归一化左上坐标  (1*1)

    # delta_xy = ([0.5400, 0.4500] - [0.4286, 0.4286] )/ (1/7) = tensor([0.7800, 0.1500])
    delta_xy = (cxcy_sample - xy) / cell_size  # 中心与左上坐标差值  (7*7)

    # 坐标w,h代表了预测的bounding box的width、height相对于整幅图像width,height的比例
    # 第一个bbox的宽度和高度,即wh[i] = tensor([0.3600, 0.5000])
    # 中心坐标其实是相对左上角顶点的偏移,
    # 因此在进行预测的时候还需要进行解码,delta_xy = tensor([0.7800, 0.1500])
    target[int(ij[1]), int(ij[0]), 2:4] = wh[i]  # w1,h1
    target[int(ij[1]), int(ij[0]), :2] = delta_xy  # x1,y1

    # 第二个bbox的宽度和高度,即wh[i] = tensor([0.3600, 0.5000])
    #                       -----》初始化时两个bbox的w,h是相等的
    target[int(ij[1]), int(ij[0]), 7:9] = wh[i]  # w2,h2
    # 由此可得其实返回的中心坐标其实是相对左上角顶点的偏移,因此在进行预测的时候还需要进行解码
    # delta_xy = tensor([0.7800, 0.1500])
    target[int(ij[1]), int(ij[0]), 5:7] = delta_xy  # 表示x2,y2
    # target.size() = [7, 7, 30]
    print(target)  # (xc,yc) = 7*7   (w,h) = 1*1

三、

1、

 2、

 3、

 4、

 5、

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值