Se puede ver el conjunto de datos de entrenamiento de Coco: Se puede ver el conjunto de datos de entrenamiento de YOLOX COCO
ap=0 debido a la ausencia de parámetros difíciles en el archivo xml: Acerca de ap es 0 causado por la ausencia de parámetros difíciles en el archivo xml
Hace algún tiempo, YOLOX lo robó y varias cuentas oficiales lo están presionando, afirmando: el rendimiento supera a Yolov5 y supera a todos los YOLO.
Entonces, lleno de expectativas, descargué el código fuente y me preparé para intentarlo. ..
1. Descripción del problema
Bueno, así es, encontré un montón de errores, pero afortunadamente se solucionaron todos. En el último entrenamiento,
buen chico, el AP siempre fue 0. Busqué en los Issues de YOLOX en Github. Parece que no soy el Solo uno encontró el mismo problema,
además lo revisé de acuerdo con algunas respuestas, descubrí que estaba mal y finalmente me puse a pensar profundamente. ..
Hasta ayer en el grupo, alguien dijo accidentalmente que había usado YOLOX con éxito y lo había desplegado, así que me quedé y le dije que mi AP era 0 durante el entrenamiento y le pregunté cómo usarlo. Por supuesto, la respuesta que obtuve fue " Realmente no resuelve el problema, mi pregunta. ..
Segundo, encuentra el problema.
Así que esta mañana comencé a depurar y verificar nuevamente, y de repente pensé que había algún problema con la carga de datos.
Resultó que éste era realmente el problema.
3. Resuelve el problema
-
Primero, asegúrese de que los datos del formato VOC personalizado sean correctos
├─datasets │ └─VOCdevkit │ └─VOC2007 │ ├─Annotations │ ├─ImageSets │ │ └─Main │ └─JPEGImages
Debe
Main
haber correspondenciatrain.txt
yval.txt
-
Luego,
yolox/data/datasets/voc_classes.py
modifícalo a la categoría de tus datos de entrenamiento (保险起见,最好每一个类别后都加上 ,
):VOC_CLASSES = ( "panda", "tiger", )
-
Luego modificar
yolox/exp/yolox_base.py
(这里应该也可以不用修改,因为后面的exps/example/yolox_voc/yolox_voc_s.py会对self.num_classes进行重载) 将self.num_classes修改为自己的类别数 self.num_classes = 2 (我的数据集是 2) 你还可以修改 self.inputsize, self.random_size 改变训练尺寸大小 你还可以修改 self.test_size 改变测试的尺寸大小
Los dos siguientes son los puntos clave:
-
Modifique el
yolox/data/datasets/voc.py
método en_do_python_eval
annopath = os.path.join(rootpath, "Annotations", "{:s}.xml") 修改为 annopath = os.path.join(rootpath, "Annotations", "{}.xml")
-
Mi problema se refleja principalmente en el hecho
exps/example/yolox_voc/yolox_voc_s.py
de que creo que la mayoría de los compañeros tienen AP=0 durante el entrenamiento por esta razón.修改 self.num_classes = 2 修改 get_data_loder 下的 VOCDetection 下的 image_sets=[('2007', 'trainval'), ('2012', 'trainval')], 修改为 image_sets=[('2007', 'train')] 修改 get_eval_loader 下的 VOCDetection 下的 image_sets=[('2007', 'test')], 修改为 image_sets=[('2007', 'val')]
cosa importante otra vez
get_data_loder
abajoVOCDetection
abajoimage_sets=[('2007', 'trainval'), ('2012', 'trainval')]
,cambie a
image_sets=[('2007', 'train')]
Más importante aún: el
get_eval_loader
próximoVOCDetection
image_sets=[('2007', 'test')]
,Asegúrese de modificarlo a
image_sets=[('2007', 'val')]
, porque los datos que verificamos están enval.txt
, notest.txt
, lo que debería ser la razón por la cual AP siempre es 0 -
Finalmente modifique
tools/train.py
la configuración de parámetros en设置 default="Animals", 训练后结果就会保存在 tools/YOLOX_outputs/Animals下 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/yolox_voc/yolox_voc_s.py" parser.add_argument( "-f", "--exp_file", default="../exps/example/yolox_voc/yolox_voc_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 completar todas las configuraciones de la apelación, puedes comenzar a entrenar.
4. Entrenar y probar el efecto.
Puede ver que hay un AP, lo que significa que fue exitoso,
finalmente mire los resultados de la prueba.
El efecto general sigue siendo muy bueno, la precisión supera el 90%
Al realizar la prueba, preste atención a:
-
Dado que
demo.py
se llama de forma predeterminadaCOCO_CLASSES
, si desea mostrar los resultados correctamente, debe cambiaryolox/data/datasets/coco_classes.py
el valor inferiorCOCO_CLASSES
a su categoría de datos. -
o cambiarlo
yolox/data/datasets/__init__.py
afrom .voc import VOCDetection
from .voc import VOCDetection, VOC_CLASSES
-
Luego modifique
tools/demo.py
en ,from yolox.data.datasets import COCO_CLASSES
from yolox.data.datasets import COCO_CLASSES, VOC_CLASSES
-
Luego cambia
tools/demo.py
todosCOCO_CLASSES
los lugares donde solíasVOC_CLASSES
cambiarlo a