添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

Using this repo : GitHub - ultralytics/yolov5: YOLOv5 🚀 in PyTorch > ONNX > CoreML > TFLite i am trying to train yolov5 on a custom dataset containing 3 classes.once the training is done,during validation i get this error :

Validating runs/train/Result4/weights/best.pt... Fusing layers... Model Summary: 476 layers, 87212152 parameters, 0 gradients, 217.1 GFLOPs Class Images Labels P R [email protected] [email protected]:.95: 100% 1/1 [00:04<00:00, 4.19s/it] Traceback (most recent call last): File "train.py", line 625, in <module> main(opt) File "train.py", line 522, in main train(opt.hyp, opt, device, callbacks) File "train.py", line 429, in train compute_loss=compute_loss) # val best model with plots File "/usr/local/lib/python3.7/dist-packages/torch/autograd/grad_mode.py", line 28, in decorate_context return func(*args, **kwargs) File "/content/val.py", line 240, in run p, r, ap, f1, ap_class = ap_per_class(*stats, plot=plots, save_dir=save_dir, names=names) File "/content/utils/metrics.py", line 78, in ap_per_class plot_mc_curve(px, f1, Path(save_dir) / 'F1_curve.png', names, ylabel='F1') File "/content/utils/metrics.py", line 323, in plot_mc_curve ax.plot(px, y, linewidth=1, label=f'{names[i]}') # plot(confidence, metric) KeyError: 1

even though i wrote custom yaml file like this :

%%writetemplate /content/DataFile/data.yaml
train: /content/convertor/fold0/images/train 
val: /content/convertor/fold0/images/val 
test: /content/convertor/fold0/images/val 
nc: 3 
names: ["name","age","mobile"] 

i still get the error above and while inferring, all the bounding boxes are given “name” as label ,instead of predicting these 3 classes names: [“name”,“age”,“mobile”]
my model always predicts “name” for all 3 fields(please check the last image attached in the colab code):
here is the code with outputs and errors : Google Colab

how can i solve this issue? thanks in advance

I don’t see the error in the linked notebook, but would guess that names[i] is failing for i=1.
Print names right before calling the plot function and make sure it’s containing the expected values.

Your second issue sounds as if the model is overfitting to a specific class. I’m not familiar with your use case but in case you are working with an imbalanced dataset, try to use a WeightedRandomSampler if possible or a weighted loss. It’s also a good idea to try to overfit a small dataset first (e.g. just 10 samples) by playing around with the hyperparameters to see if any obvious bugs are still in the code.

output of 17th cell of my linked notebook here : Google Colab giving this error after all epoch training is finish.

if you check the visualized image attached in the last code cell of that notebook then you will see that my model is able to detect all those 3 classes perfectly and with good performance but it’s saying all those 3 classes are “name”

i printed names in train.py file right before calling it and this dictionary was printed [“name”,“age”,“mobile”]