本文共 3358 字,大约阅读时间需要 11 分钟。
先记录一些语法:
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]# Testingbatch=1subdivisions=1# Training# batch=64# subdivisions=2width=416height=416channels=3momentum=0.9decay=0.0005angle=0saturation = 1.5exposure = 1.5hue=.1learning_rate=0.001burn_in=1000max_batches = 500200policy=stepssteps=400000,450000scales=.1,.1[convolutional]batch_normalize=1filters=16size=3stride=1pad=1activation=leaky[maxpool]size=2stride=2 [convolutional]batch_normalize=1filters=32size=3stride=1pad=1activation=leaky[maxpool]size=2stride=2[convolutional]batch_normalize=1filters=64size=3stride=1pad=1activation=leaky[maxpool]size=2stride=2[convolutional]batch_normalize=1filters=128size=3stride=1pad=1activation=leaky[maxpool]size=2stride=2[convolutional]batch_normalize=1filters=256size=3stride=1pad=1activation=leaky[maxpool]size=2stride=2[convolutional]batch_normalize=1filters=512size=3stride=1pad=1activation=leaky[maxpool]size=2stride=1[convolutional]batch_normalize=1filters=1024size=3stride=1pad=1activation=leaky[convolutional]batch_normalize=1filters=256size=1stride=1pad=1activation=leaky[convolutional]batch_normalize=1filters=512size=3stride=1pad=1activation=leaky[convolutional] #这里要修改filterssize=1stride=1pad=1filters=21activation=linear[yolo] #注意这里mask = 3,4,5anchors = 10,14, 23,27, 37,58, 81,82, 135,169, 344,319classes=2num=6jitter=.3ignore_thresh = .7truth_thresh = 1random=1[route]layers = -4[convolutional]batch_normalize=1filters=128size=1stride=1pad=1activation=leaky[upsample]stride=2[route]layers = -1, 8[convolutional]batch_normalize=1filters=256size=3stride=1pad=1activation=leaky[convolutional] #修改filtersize=1stride=1pad=1filters=21activation=linear[yolo] #这里要修改classesmask = 0,1,2anchors = 10,14, 23,27, 37,58, 81,82, 135,169, 344,319classes=2num=6jitter=.3ignore_thresh = .7truth_thresh = 1random=1
再次运行输入python3 train.py --model_def config/yolov3-custom.cfg --data_config config/custom.data
成功了: 另外发现刚开始的epoch的mAP都非常低,到后来逐渐增高。 在第二十多epoch的时候已经达到百分之七十。 然后总结就是修改数据集后一定要注意cfg文件是否要修改。转载地址:http://xvten.baihongyu.com/