今天在翻几年前的一些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()]