【问题标题】:How to select image sets for object detection and object tracking?如何为对象检测和对象跟踪选择图像集?
【发布时间】:2026-01-17 02:40:01
【问题描述】:

我必须在传送带上数鸡蛋。 可以通过多种方式看到鸡蛋。

Small, large, odd-shaped, dirty, cracked, broken, broken empty inside, broken with liquid inside, next to chicken feather, many eggs touching to each others, even some eggs might be sitting on top of some group of other eggs.

我的挑战是最准确地数鸡蛋。 此外,如果可能的话,按照我上面提到的对异常鸡蛋进行分类/计数。

我已经在 J​​etson Nano 上运行了一些解决方案。它很重要 通过在相对较暗的背景(背景 减法)。尽管速度很慢,但它在某种程度上做得相当不错。

我的问题;

现在,我想通过 deep-learning models 在单个算法中一起使用 object detectionobject tracking 来做更多的事情。这种努力对我来说仍然可以被视为实验。

首先,我需要一些图像集,所以我需要一些建议。

鸡蛋总是在传送带上,与非常 它们的相似类型(在颜色、形状和大小方面)。

我不确定在哪里/如何拍摄。 我必须用物体的自然来拍摄吗 环境/背景?如何?我应该拍摄每个可能的鸡蛋外观吗 我在上面列出的方法是将它们一个一个放在传送带上,并且每次都改变它们的方向?

或者我应该用白色背景一次又一次地拍摄每张照片,并且每次都改变它们的方向吗?

传送带的外观示例:

【问题讨论】:

  • 测试镜头在我看来还可以。自上而下的视图通常很棒。对比度还行。清晰度很好,除了图像看起来有点模糊的左边缘。整体分辨率看起来也不错。如果您有更高的密度,那么从两个不同的角度(立体)看可能是有利的。
  • 谢谢@Trilarion。这张图片在源头上更好,这是一个正在运行的视频的屏幕截图。是的,有时鸡蛋在单个图像中更加密集,几乎完全覆盖传送带表面。我将考虑stereoscopic 选项,好主意。但是,我很困惑如何为训练有素的模型拍照。也许,我必须为每个鸡蛋的变化一一拍摄?!

标签: image-processing object-detection


【解决方案1】:
  1. 首先创建一个带有边界框的鸡蛋数据集(大约 1k,然后使用扩充来增加数千个)。您可以使用以下工具进行注释:

https://github.com/developer0hye/Yolo_Label(效果很好,但仅适用于 Windows)

https://github.com/AlexeyAB/Yolo_mark

https://github.com/heartexlabs/label-studio(这是用于许多其他任务的更复杂的注释工具)

  1. 由于这是一个嵌入式解决方案,而且鸡蛋会移动,您需要具有良好 FPS 和合理 mAP 的东西。从我对许多对象检测模型的实验中,我发现 yolov3(暗网)是最稳定的。

我建议使用darknet YOLO,它是用C++编写的,你不需要编写任何主要代码,它会快速准确。

https://pjreddie.com/darknet/yolo/

如果你在 Linux 上使用这个 repo https://github.com/pjreddie/darknet

如果你在 Windows 上使用这个https://github.com/AlexeyAB/darknet

  1. 在训练之前,您需要为您的数据集找到最佳锚点大小。我编写了一个简单的 k-means 来查找任何与 yolo 兼容的数据集中的锚点大小。

https://github.com/zabir-nabil/yolov3-anchor-clustering

  1. 我做了一些小的定制(例如将 OpenCV/numpy 数组直接发送到模型)以在服务器(具有 REST 和 gRPC 的 tensorflow 模型服务器)上更快地运行暗网 python API。我还为它写了一个烧瓶服务器。你可以在这里找到它-

https://github.com/zabir-nabil/tf-model-server4-yolov3

关于图像分辨率:yolov3 的默认尺寸为 (416, 416),对于您的情况应该足够了。因此,您应该使用将在实际开发环境中使用的相同/相似相机拍摄图像。一个 PI 相机就足够了,你也可以使用更好的相机,但最后你必须将它们全部调整到 (416,416) 尺寸。

这是一个二分类问题,因此对于正分类,您需要更多的图像。以下是如何生成样本的粗略估计。假设您的鸡蛋计数模型的范围是 0 - 25。

20% 的图片包含 0 个鸡蛋 剩下的 80% 将形成一个稍微均匀或平坦的高斯分布,也就是说,如果 80% == 1000 张图像,则包含 1 个鸡蛋的图像数量将是 1000/(范围)= 1000/(25-1+1)= 1000 /25 = 40,其他 (2-25) 相同。

对于亮度、对比度、照明,您应该只使用与实际部署场景非常接近的那个,其余的由增强来处理。 Yolov3 非常健壮,因此您无需过多担心背景噪音。

如果您使用不同的图像格式,则没有太大的区别,通常.jpg会为您提供较小的文件大小,以便于存储。

【讨论】:

  • 感谢您的回答。您能否详细说明我关于如何拍摄图像的问题(就环境、背景、白色背景、正片、负片、测试图像而言)?还有图像分辨率是多少?任何特定的文件类型都比其他文件类型有优势?
  • 检查更新后的答案,如果您认为还可以,请接受/支持 :)
  • 再次感谢您。很高兴知道图像分辨率应该是 416,至少对于 Yolov3 来说是 416。你也知道我应该怎么拍吗?我有一些不同的鸡蛋外观(见我的问题)。我把相机放在传送带旁边,现在怎么办?
  • 这应该不是什么大问题,因为你只有 2 个类。所以,只用随机的鸡蛋拍照,模型应该自己概括。通常,在极少数情况下几乎不会出现误报/误报,对于这些情况,您只需要记录它们并用少量更难的样本重新训练模型。唯一的问题是遮挡。如果某些鸡蛋被太多遮挡,它们可能会被检测器丢弃,因为它使用 NMS 移除非常接近的物体 (towardsdatascience.com/non-maximum-suppression-nms-93ce178e177c)
  • 你应该选择接近实际开发的背景,在你的情况下是传送带。