深度学习之物体检测——YOLO(三)_PyTorch实现

过程

构建26层网络

作者采用GoogLeNet作为网络结构,但是并不使用inception模块,而是采用1x1和3x3大小的滤波器进行替代。具体的网络结构请参考博客:深度学习之物体检测——YOLO(一)_介绍。

计算损失

YOLO模型的损失函数比较复杂,包含三种损失:box损失、置信度损失、类别损失。具体的表达式也请查看上面指定的博客。

  • 首先应该根据标记信息计算grid_mask矩阵:即损失函数表达式中的 1obji ,size=(7*7*1)。计算图片中的物体中心位置,然后令中心所在的格子对应的grid_mask为1,其余的都为0。
    负责类别误差。

  • 然后计算box_mask矩阵:即损失函数表达式中的 1objij ,size=(7*7*2)。计算责任格子中的两个box与真实box之间的IOU,IOU大的box对应的box_mask为1。
    负责box坐标误差和部分置信度误差。

  • noobj:即损失函数表达式中的 1noobjij ,为 1boxmask
    负责剩下的置信度误差。

用训练好的模型检测物体

对一张图片的输出需要进行置信度阈值过滤和NMS操作,最终剩下的box作为预测结果。

实现时遇到的问题

实现过程中对于标记中的box表示和网络输出的box表示混乱,最终确定以下原则:

  • 所有box表示均用(x_center, y_center, width, height)。
  • 标记中的box表示和输出box表示一致,都是在448*448图片中的相对值

另外在还有两个特殊情况:确定责任box的时候会用到box在448*448图片中的绝对位值表示以计算IOU;在将检测结果绘制到原图像中时需要用到box在原图中的绝对位置。

代码

请见Github。

你可能感兴趣的:(深度学习)