Yolo from scratch 数据集和输出
Yolo from scratch dataset and output
嗨,我从头开始编写了一个 YOLO 模型,然后才意识到我的数据集不适合模型输出。这就是我的意思:
该模型输出一个 S x S x (B * 5 + C)
矩阵。
y[0](第一幅图像的答案)的形状是 (7,5)
。
我将如何让模型使用我的标签。
根据我的了解和阅读,yolo 算法的标签采用这种格式 x,y,w,h,objectiveness_score, class_scores
那么为什么模型会输出 3D 矩阵而标签是 2d 矩阵。
如何使用numpy和keras解决我的问题?
根据paper (section 2),S x S x (B * 5 + C)
形输出表示YoloV1将图像分割成的S x S
个网格单元。最后一层可以实现为输出长度为 S x S x (B * 5 + C)
的全连接层,然后您可以简单地将输出重塑为 3D 形状。
论文指出:
"我们的系统将输入图像划分为S×S的网格。
如果一个对象的中心落入一个网格单元,则该网格单元
负责检测那个对象。"
这意味着您必须将每个标签分配给其相应的网格单元才能进行反向传播。作为参考,可以找到 keras/tensorflow 损失计算的实现 here(来自 github 用户 FMsunyh)。
嗨,我从头开始编写了一个 YOLO 模型,然后才意识到我的数据集不适合模型输出。这就是我的意思:
该模型输出一个 S x S x (B * 5 + C)
矩阵。
y[0](第一幅图像的答案)的形状是 (7,5)
。
我将如何让模型使用我的标签。
根据我的了解和阅读,yolo 算法的标签采用这种格式 x,y,w,h,objectiveness_score, class_scores
那么为什么模型会输出 3D 矩阵而标签是 2d 矩阵。
如何使用numpy和keras解决我的问题?
根据paper (section 2),S x S x (B * 5 + C)
形输出表示YoloV1将图像分割成的S x S
个网格单元。最后一层可以实现为输出长度为 S x S x (B * 5 + C)
的全连接层,然后您可以简单地将输出重塑为 3D 形状。
论文指出:
"我们的系统将输入图像划分为S×S的网格。 如果一个对象的中心落入一个网格单元,则该网格单元 负责检测那个对象。"
这意味着您必须将每个标签分配给其相应的网格单元才能进行反向传播。作为参考,可以找到 keras/tensorflow 损失计算的实现 here(来自 github 用户 FMsunyh)。