[YOLO] Conjunto de datos COCO de entrenamiento YOLOX

Otro artículo de Yolox, resolver el AP es 0 bajo el conjunto de datos Voc: Resolver el AP es 0 al entrenar YOLOX

Cuando un amigo está entrenando el conjunto de datos de coco, el AP es 0. De hecho, no he encontrado este problema. Lo probé aquí y puede ejecutarse normalmente, pero algunos amigos preguntaron, así que resumiré cómo hacerlo aquí. Entrenemos el conjunto de datos de Coco.


Proceder de la siguiente

  • En primer lugar, asegúrese de que el conjunto de datos de Coco tenga el formato correcto.
    Animals_Coco
       ├─annotations
       ├─train2017
       └─val2017
    
    Contiene dosannotations archivos importantes en la carpeta y contiene datos de imágenes para entrenamiento y verificacióninstances_train2017.json .instances_val2017.json
    train2017val2017
  • Luego modifique yolox/data/datasets/coco_classes.py, modifique a la categoría de su propio conjunto de datos
    COCO_CLASSES = (
    "tiger",
    "panda",
    )
    
  • Luego modifique según sus propias necesidades yolox/exp/yolox_base.py(o no modifique)
    (这里应该也可以不用修改,因为后面的exps/example/yolox_voc/yolox_s.py会对self.num_classes进行重载)
    将self.num_classes修改为自己的类别数
    self.num_classes = 2 (我的数据集是 2)
    
    你还可以修改 self.inputsize, self.random_size 改变训练尺寸大小
    
    你还可以修改 self.test_size 改变测试的尺寸大小
    
  • Revisarexps/example/custom/yolox_s.py
    修改数据集地址 self.data_dir
    self.data_dir = "D:/Z_Data/Animals_Coco"
    
    修改类别 self.num_classes
    self.num_classes = 2
    
    剩下的 self.max_epoch,self.data_num_workers,self.eval_interval 可自行选择修改
    
  • Finalmente modifique tools/train.pyla configuración de parámetros en
    设置 default="Animals_Coco", 训练后结果就会保存在 tools/YOLOX_outputs/Animals_Coco下
    parser.add_argument("-expn", "--experiment-name", type=str, default=None)
    
    设置 model_name,我也不太清楚这是不是必须项 (我觉得不是)
    parser.add_argument("-n", "--name", type=str, default="yolox-s", help="model name")
    
    设置 batch_size
    parser.add_argument("-b", "--batch-size", type=int, default=64, help="batch size")
    
    设置gpu,因为我只有一张卡,所以设 default=0
    parser.add_argument(
        "-d", "--devices", default=0, type=int, help="device for training"
    )
    
    设置你的数据配置的路径,default="../exps/example/custom/yolox_s.py"
    parser.add_argument(
        "-f",
        "--exp_file",
        default="../exps/example/custom/yolox_s.py",
        type=str,
        help="plz input your expriment description file",
    )
    
    设置预训练权重路径, default="../weights/yolox_s.pth"
    parser.add_argument("-c", "--ckpt", default="../weights/yolox_s.pth", type=str, help="checkpoint file")
    

Después de las operaciones anteriores, se puede ver en la figura siguiente que se puede ejecutar normalmente. inserte la descripción de la imagen aquí
Si después de esta serie de operaciones, el AP sigue siendo 0, mi suposición personal es que hay jsonun problema con el contenido del archivo.

Veamos los resultados de la prueba.inserte la descripción de la imagen aquí
Por favor agregue una descripción de la imagen.

Por favor agregue una descripción de la imagen.
En términos generales, la velocidad y la precisión siguen siendo buenas.


Finalmente, si encuentra o encuentra en el proceso de formación , modifique la líneaTypeError: 'numpy.float64' object cannot be interpreted as an integer
Anaconda3\Lib\site-packages\pycocotools\cocoeval.py pycahrmExternal Librariessite-packages\pycocotools\cocoeval.py507、508

self.iouThrs = np.linspace(.5, 0.95, np.round((0.95 - .5) / .05) + 1, endpoint=True)
self.recThrs = np.linspace(.0, 1.00, np.round((1.00 - .0) / .01) + 1, endpoint=True)

修改为

self.iouThrs = np.linspace(.5, 0.95, 10, endpoint=True)
self.recThrs = np.linspace(.0, 1.00, 101, endpoint=True)

Supongo que te gusta

Origin blog.csdn.net/weixin_42166222/article/details/119739396
Recomendado
Clasificación