Search code examples
cmdcomputer-visionconv-neural-networkyolodarknet

Yolov4 error when trying to display image on custom model


I have trained my own model, using my own custom dataset, using Yolov4, and I have downloaded the .cfg, .weights and .data files.

When I try to run my model using:

darknet.exe detector test cfg/obj.data cfg/yolov4-og.cfg custom-yolov4-detector_best.weights 

I get the error:

Error: l.outputs == params.inputs filters= in the [convolutional]-layer doesn't correspond to classes= or mask= in [yolo]-layer 

I don't know if this is an error on my part, with the command I am running, or an error from the model I trained.

Any help would be appreciated.


Solution

  • I am assuming you are using the main darknet repo AlexeyAB. Please make sure you follow the following instructions:

    1. Make sure you assign the correct classes number in the config file.

    2. Change filters=255 to filters=(classes + 5)x3 in the 3 [convolutional] before each [yolo] layer, keep in mind that it only has to be the last [convolutional] before each of the [yolo] layers

      https://github.com/AlexeyAB/darknet/blob/0039fd26786ab5f71d5af725fc18b3f521e7acfd/cfg/yolov3.cfg#L603 https://github.com/AlexeyAB/darknet/blob/0039fd26786ab5f71d5af725fc18b3f521e7acfd/cfg/yolov3.cfg#L689 https://github.com/AlexeyAB/darknet/blob/0039fd26786ab5f71d5af725fc18b3f521e7acfd/cfg/yolov3.cfg#L776

      So if classes=1 then should be filters=18. If classes=2 then write filters=21

      (Generally filters depends on the classes, coords and number of masks, i.e. filters=(classes + coords + 1)*, where mask is indices of anchors. If mask is absent, then filters=(classes + coords + 1)*num)

    Reference: https://github.com/AlexeyAB/darknet#how-to-train-to-detect-your-custom-objects