0. Algunas cosas se mencionan en el entrenamiento anterior de yolov3 y se anotarán en el texto:
1. Descarga el código;
https://github.com/ultralytics/yolov5
2. Prepare el conjunto de datos:
El formato de datos es exactamente el mismo que yolov3. Si ha hecho el conjunto de datos de yolov3, puede usarlo directamente. Para obtener más detalles, consulte https://blog.csdn.net/gbz3300255/article/details/106276897 , Sección 3 ------------- Pasos para entrenar su propio conjunto de datos.
Los archivos de texto a preparar son: train.txt test.txt val.txt archivo de texto lables
train.txt, registre el nombre de la imagen en el conjunto de datos, similar a esto, la imagen del conjunto de datos se almacena en el directorio / data / images /.
BloodImage_00091.jpg
BloodImage_00156.jpg
BloodImage_00389.jpg
BloodImage_00030.jpg
BloodImage_00124.jpg
BloodImage_00278.jpg
BloodImage_00261.jpg
test.txt, al igual que el formato de superficie, el contenido es el nombre de archivo del gráfico que se va a probar
BloodImage_00258.jpg
BloodImage_00320.jpg
BloodImage_00120.jpg
val.txt, al igual que el formato facial, el contenido es el nombre de archivo de la imagen en el conjunto de verificación
BloodImage_00777.jpg
BloodImage_00951.jpg
Lables tipo texto, cada imagen en imágenes corresponde a un texto sobre etiquetas, en la forma siguiente, y el nombre es similar a BloodImage_00091.txt.
0 0.669 0.5785714285714286 0.032 0.08285714285714285
El texto de lables está unificado en / data / lables / del código anterior
3. Modifique el archivo de configuración:
3.1 Cree un nuevo archivo yml en la carpeta de datos y llámelo trafficsigns.yaml. El contenido es el siguiente. La ruta del tren es la ruta donde se escribe el texto de train.txt en el paso 2, y los dos últimos son similares. nc es el número de categorías, solo pruebo 4 categorías y escribo 4. Simplemente cambie los nombres a su categoría, pero los perezosos no lo cambiaron.
# COCO 2017 dataset http://cocodataset.org
# Train command: python train.py --data coco.yaml
# Default dataset location is next to /yolov5:
# /parent_folder
# /coco
# /yolov5
# download command/URL (optional)
download: bash data/scripts/get_coco.sh
# train and val data as 1) directory: path/images/, 2) file: path/images.txt, or 3) list: [path1/images/, path2/images/]
train: ../ImageSets/train.txt
val: ../ImageSets/val.txt
test: ../ImageSets/test.txt
# number of classes
nc: 4
# class names
names: ['0', '1', '2', '3']
# Print classes
# with open('data/coco.yaml') as f:
# d = yaml.load(f, Loader=yaml.FullLoader) # dict
# for i, x in enumerate(d['names']):
# print(i, x)
3.2 Modificar el archivo de configuración de red en modelos. Por ejemplo, si planeo usar el modelo yolov5I, modificaré yolov5l.yaml a lo que necesite. Hay varios lugares a los que prestar atención:
a.nc debe cambiarse a su número de categoría
b) El tamaño de los anclajes debe cambiarse al tamaño de su propio conjunto de datos. Para obtener más detalles, consulte https://blog.csdn.net/gbz3300255/article/details/106276897 para modificar el método específico de los anclajes. El código está listo, que está agrupado.
# parameters
nc: 4 # number of classes
depth_multiple: 1.0 # model depth multiple
width_multiple: 1.0 # layer channel multiple
# anchors
anchors:
- [12,15, 14,20, 18,25] # P3/8
- [24,32, 24,18, 33,44] # P4/16
- [39,28, 59,49, 115,72] # P5/32
# YOLOv5 backbone
backbone:
# [from, number, module, args]
[[-1, 1, Focus, [64, 3]], # 0-P1/2
[-1, 1, Conv, [128, 3, 2]], # 1-P2/4
[-1, 3, BottleneckCSP, [128]],
[-1, 1, Conv, [256, 3, 2]], # 3-P3/8
[-1, 9, BottleneckCSP, [256]],
[-1, 1, Conv, [512, 3, 2]], # 5-P4/16
[-1, 9, BottleneckCSP, [512]],
[-1, 1, Conv, [1024, 3, 2]], # 7-P5/32
[-1, 1, SPP, [1024, [5, 9, 13]]],
[-1, 3, BottleneckCSP, [1024, False]], # 9
]
# YOLOv5 head
head:
[[-1, 1, Conv, [512, 1, 1]],
[-1, 1, nn.Upsample, [None, 2, 'nearest']],
[[-1, 6], 1, Concat, [1]], # cat backbone P4
[-1, 3, BottleneckCSP, [512, False]], # 13
[-1, 1, Conv, [256, 1, 1]],
[-1, 1, nn.Upsample, [None, 2, 'nearest']],
[[-1, 4], 1, Concat, [1]], # cat backbone P3
[-1, 3, BottleneckCSP, [256, False]], # 17 (P3/8-small)
[-1, 1, Conv, [256, 3, 2]],
[[-1, 14], 1, Concat, [1]], # cat head P4
[-1, 3, BottleneckCSP, [512, False]], # 20 (P4/16-medium)
[-1, 1, Conv, [512, 3, 2]],
[[-1, 10], 1, Concat, [1]], # cat head P5
[-1, 3, BottleneckCSP, [1024, False]], # 23 (P5/32-large)
[[17, 20, 23], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5)
]
4. Entrenamiento:
python train.py --data data/trafficsigns.yaml --cfg models/yolov5I.yaml --weights '' --batch-size 16 --epochs 100
5. Prueba:
python detect.py --weights best.pt --img 320 --conf 0.4
No me he entrenado todavía, porque la versión de la antorcha es demasiado baja para usar el módulo de amplificador de cuda. Hagámoslo de nuevo cuando tenga tiempo, pero eso es todo por el camino.