我必须回到这里来更好地解释为什么我在另一个答案上留下了我所做的评论。只是为了让人们可以直观地看到该解决方案不起作用的确切原因。
以下是在市中心街角拍摄的图像上的默认 MSCOCO 权重示例。全 YOLOv4 神经网络在这张图片中一共发现了 15 个物体,其中一个是不正确的(手提包 22%),其余的都是相当不错的预测:
-> prediction results: 15
-> 1/15: "handbag 22%" #26 prob=0.218514 x=1104 y=388 w=130 h=316 tile=0 entries=1
-> 2/15: "person 24%" #0 prob=0.241557 x=220 y=495 w=17 h=42 tile=0 entries=1
-> 3/15: "traffic light 29%" #9 prob=0.287092 x=1083 y=415 w=30 h=25 tile=0 entries=1
-> 4/15: "traffic light 41%" #9 prob=0.411164 x=832 y=422 w=28 h=20 tile=0 entries=1
-> 5/15: "traffic light 43%" #9 prob=0.428222 x=824 y=368 w=15 h=39 tile=0 entries=1
-> 6/15: "traffic light 48%" #9 prob=0.476035 x=26 y=376 w=17 h=40 tile=0 entries=1
-> 7/15: "person 75%" #0 prob=0.754457 x=842 y=476 w=34 h=82 tile=0 entries=1
-> 8/15: "traffic light 81%" #9 prob=0.80667 x=1077 y=360 w=25 h=44 tile=0 entries=1
-> 9/15: "handbag 96%" #26 prob=0.9597 x=1186 y=583 w=61 h=101 tile=0 entries=1
-> 10/15: "person 96%" #0 prob=0.963756 x=134 y=475 w=32 h=78 tile=0 entries=1
-> 11/15: "traffic light 96%" #9 prob=0.964594 x=527 y=242 w=26 h=53 tile=0 entries=1
-> 12/15: "truck 99%" #7 prob=0.988193 x=313 y=433 w=534 h=160 tile=0 entries=1
-> 13/15: "car 99%" #2 prob=0.989198 x=226 y=493 w=108 h=54 tile=0 entries=1
-> 14/15: "person 99%" #0 prob=0.990569 x=1094 y=394 w=151 h=326 tile=0 entries=1
-> 15/15: "person 99%" #0 prob=0.993613 x=980 y=469 w=38 h=97 tile=0 entries=1
假设我们只想要汽车(索引 #3)和卡车(索引 #8)。所以现在我的 .names 文件看起来像这样:
car
truck
所有其他 78 个名字都被删除了。注意此时,您假设 Darknet(或 YOLO?)有一种神奇的方式将索引 #0 和索引 #1 处的两个新类映射到索引 #3 和 #8 处的原始位置。但是,让我们暂时忽略这个问题,就好像有办法解决这个问题一样。
我修复了我的 .cfg 文件以表明我现在只有 2 个类而不是 80 个,并且我将 [yolo] 之前的过滤器从 255 修改为 21。
现在,当我对同一张图片进行检测时,我什么也得不到:
-> prediction results: 0
它运行的事实完全是运气!权重的内部不再与配置匹配。该配置决定了如何解释权重,并且您修改了一个而没有更改另一个。说实话,我真的很惊讶它没有段错误,因为我怀疑这会导致暗网遇到一些“未定义的行为”领域。
回到最初的问题,请注意,类的数量会增加 训练 神经网络所需的时间,但不会影响应用它所需的时间神经网络。
相反,如果您正在寻找性能,请参阅 Darknet/YOLO 常见问题解答。具体来说,这个FAQ条目:https://www.ccoderun.ca/programming/darknet_faq/#fps
如果网址更改或消失,让我在这里发布相关部分:
如何提高我的 FPS?这取决于几件事:
减少课程数量的唯一真正方法就是以这种方式训练它。因此,您要么训练自己的神经网络,要么下载 MSCOCO 数据集,修改 .names 文件,编辑所有注释以删除所需的类,重新编号所有类,使它们是连续的并从索引零开始,并且重新训练整个网络。
免责声明:我是 DarkHelp、DarkMark 和 Darknet/YOLO 常见问题的作者。