raise IndexError(‘index {} is out of range‘.format(idx)) index 0 is out of range

先记录一些语法:
X[:, m:n]即取矩阵X的所有行中的的第m到n-1列数据,含左不含右。
X[0,:]就是取矩阵X的第0行的所有元素,X[1,:]取矩阵X的第一行的所有元素。

今天训练模型输入python3 train.py --model_def config/yolov3-custom.cfg --data_config config/custom.data
第一次出现这个错误,记录解决方案:
查了看到有人说什么加上except:continue;大概跟我出的错不一样,总之我没法按照这样解决问题,先截图一下我出问题的界面:
File “train.py”, line 62, in
model = Darknet(opt.model_def).to(device)
File “/hexinyi/PyTorch-YOLOv3/models.py”, line 240, in init
self.yolo_layers = [layer[0] for layer in self.module_list if isinstance(layer[0], YOLOLayer)]
File “/hexinyi/PyTorch-YOLOv3/models.py”, line 240, in
self.yolo_layers = [layer[0] for layer in self.module_list if isinstance(layer[0], YOLOLayer)]
File “/usr/local/lib/python3.6/dist-packages/torch/nn/modules/container.py”, line 68, in getitem
return self._get_item_by_idx(self._modules.values(), idx)
File “/usr/local/lib/python3.6/dist-packages/torch/nn/modules/container.py”, line 60, in _get_item_by_idx
raise IndexError(‘index {} is out of range’.format(idx))
IndexError: index 0 is out of range
在这里插入图片描述
首先出现这个问题是在我新增了数据集的图片并且增加了种类数目之后(classes numbers)
然后我检查我的train.txt和label等txt文件是否写错了或者下标溢出了,但是都没有发现错误,
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

然后我检查自己的config文件,怀疑可能是配置的问题,因为class的数目发生修改之后yolo层的config也需要修改:
在这里插入图片描述

然后发现我确实有写错,之前以为只有一层yolo,然后仔细看才发现有两层yolo:

在这里插入图片描述
然后每一个yolo之前的[convolutional]都需要修改其中的filters=21(因为是两类,3*7)
[yolo]的classes 修改为 2(原来是1) 改完之后 bash create_custom_model.sh,生成一个新的yolov3-custom.cfg,
其中cfg中有的要改的地方还没发生改变就手动修改过来,然后会弹出一个窗口说file changed,选择overwrite。

[net]
# Testing
batch=1
subdivisions=1
# Training
# batch=64
# subdivisions=2
width=416
height=416
channels=3
momentum=0.9
decay=0.0005
angle=0
saturation = 1.5
exposure = 1.5
hue=.1
learning_rate=0.001
burn_in=1000
max_batches = 500200
policy=steps
steps=400000,450000
scales=.1,.1
[convolutional]
batch_normalize=1
filters=16
size=3
stride=1
pad=1
activation=leaky
[maxpool]
size=2
stride=2 
[convolutional]
batch_normalize=1
filters=32
size=3
stride=1
pad=1
activation=leaky
[maxpool]
size=2
stride=2
[convolutional]
batch_normalize=1
filters=64
size=3
stride=1
pad=1
activation=leaky
[maxpool]
size=2
stride=2
[convolutional]
batch_normalize=1
filters=128
size=3
stride=1
pad=1
activation=leaky
[maxpool]
size=2
stride=2
[convolutional]
batch_normalize=1
filters=256
size=3
stride=1
pad=1
activation=leaky
[maxpool]
size=2
stride=2
[convolutional]
batch_normalize=1
filters=512
size=3
stride=1
pad=1
activation=leaky
[maxpool]
size=2
stride=1
[convolutional]
batch_normalize=1
filters=1024
size=3
stride=1
pad=1
activation=leaky
[convolutional]
batch_normalize=1
filters=256
size=1
stride=1
pad=1
activation=leaky
[convolutional]
batch_normalize=1
filters=512
size=3
stride=1
pad=1
activation=leaky
[convolutional]  #这里要修改filters
size=1
stride=1
pad=1
filters=21
activation=linear
[yolo]   #注意这里
mask = 3,4,5
anchors = 10,14,  23,27,  37,58,  81,82,  135,169,  344,319
classes=2
num=6
jitter=.3
ignore_thresh = .7
truth_thresh = 1
random=1
[route]
layers = -4
[convolutional]
batch_normalize=1
filters=128
size=1
stride=1
pad=1
activation=leaky
[upsample]
stride=2
[route]
layers = -1, 8
[convolutional]
batch_normalize=1
filters=256
size=3
stride=1
pad=1
activation=leaky
[convolutional] #修改filter
size=1
stride=1
pad=1
filters=21
activation=linear
[yolo]  #这里要修改classes
mask = 0,1,2
anchors = 10,14,  23,27,  37,58,  81,82,  135,169,  344,319
classes=2
num=6
jitter=.3
ignore_thresh = .7
truth_thresh = 1
random=1


再次运行输入python3 train.py --model_def config/yolov3-custom.cfg --data_config config/custom.data
成功了:
在这里插入图片描述
另外发现刚开始的epoch的mAP都非常低,到后来逐渐增高。

在这里插入图片描述
在第二十多epoch的时候已经达到百分之七十。
然后总结就是修改数据集后一定要注意cfg文件是否要修改。

猜你喜欢

转载自blog.csdn.net/qq_41358574/article/details/115066919