ln = net.getLayerNames()ln = [ln[i[0] - 1] for i in net.getUnconnectedOutLayers()]报错

今天在翻几年前的一些YOLO Object Detection with OpenCV的模型,发现很多模型都用到了这两句

# 获取输出层的名称: ['yolo_82', 'yolo_94', 'yolo_106']
ln = net.getLayerNames()
ln = [ln[i[0] - 1] for i in net.getUnconnectedOutLayers()]
上面这两句的目的是为了获取输出层的名字

什么意思呢?

先来看net.getLayerNames()与net.getUnconnectedOutLayers()的用法了:

net.getLayerName()

用法如其名:获取每一层的名称,返回一个列表,如:[conv_0, bn_0, relu_0, conv_1,..., permut_106, yolo_106]

net.getUnconnectedOutLayers()

也可以猜到部分含义:这里Unconnected就是后面没有连接的层了;

那么它的作用是以列表的形式返回输出层在整个网络中的索引位置;

上面两行代码含义也就明显了:得到输出是:['yolo_82', 'yolo_94', 'yolo_106']

但是在运行的时候,发现这个是报错的

Traceback (most recent call last):
  File "D:\project\social-distance-detector\social_distance_detector.py", line 56, in <module>
    ln = [ln[i[0] - 1] for i in net.getUnconnectedOutLayers()]
  File "D:\project\social-distance-detector\social_distance_detector.py", line 56, in <listcomp>
    ln = [ln[i[0] - 1] for i in net.getUnconnectedOutLayers()]
IndexError: invalid index to scalar variable.

将这句中[0]去掉即可运行

ln = [ln[i[0] - 1] for i in net.getUnconnectedOutLayers()]

改为

ln = [ln[i - 1] for i in net.getUnconnectedOutLayers()]

版权声明:本文为CSDN博主「Harry Xu」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/pypyquixue/article/details/123141653

Harry Xu

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

如何使用Albumentations 对目标检测任务做增强

目录 1、导入所需的库 2、定义可视化函数显示图像上的边界框和类标签 3、获取图像和标注 4、使用RandomSizedBBoxSafeCrop保留原始图像中的所有边界框 5、定义增强管道 6、输入用于增强的图像和边框 7、其他不

Python实现一个简单的目标检测

相关介绍 选择性搜索(Select Search)算法属于候选区域算法,用分割不同区域的办法来识别潜在的物体。在分割的时候,我们要合并那些在某些方面(如颜色、纹理&#xff0