содержание
Загрузите предварительно обученную модель с расширением .weights и преобразуйте файл веса в файл h5.
Набор данных, помеченный Labelme, преобразуется в набор данных, обученный yolov3.
Запустите файл Kmeans.py для расчета якорей.
Резюме
YOLOv3 — третья версия алгоритмов обнаружения целей серии YOLO (You Only Look Once).По сравнению с предыдущими алгоритмами, особенно для небольших целей, точность значительно улучшена. Обработка изображений 608x608 со скоростью 20 кадров в секунду на Pascal Titan X, на COCO test-devmAP@0.5Он достигает 57,9%, что аналогично результату RetinaNet (одноэтапная сеть, предложенная в документе FocalLoss), и в 4 раза быстрее.
По сравнению с YOLOV2, YOLOV3 имеет два основных улучшения:
- Многомасштабное прогнозирование (подобно FPN)
- Улучшенные базовые сети классификации (подобные ResNet) и классификаторы
Для понимания YOLOV3 вы можете обратиться к этим двум статьям:
1. Yolo v3 из серии Yolo [углубленный анализ]
blog.CSDN.net/Levi op cool/AR….
Общая структура YOLOV3
2. YOLOv3 сети обнаружения целей
Блог Woohoo.cn на.com/Makefile/afraid/…
тренироваться
Локальная среда: TensorFlow 1.15.3
Python 3.7
Keras 2.1.5
Алгоритм загрузки
Существует множество версий алгоритма yolo v3. Я предлагаю вам выбрать версию qqwweee для keras. Ее легче воспроизвести, а код относительно прост для понимания.
адрес гитхаба:GitHub.com/ 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000/Guest…
Загрузите предварительно обученную модель с расширением .weights и преобразуйте файл веса в файл h5.
ссылка для скачивания:Семья P Eddie.com/Media/files….
Создайте новую папку весов и поместите в нее загруженную модель. Затем измените файл convert.py
Удалите три параметра config_path, weightsPath и output_path. Как показано ниже:
Измените путь в основной функции.
def _main(args):
config_path = "yolov3.cfg"
weights_path = "weight/yolov3.weights"
assert config_path.endswith('.cfg'), '{} is not a .cfg file'.format(
config_path)
assert weights_path.endswith(
'.weights'), '{} is not a .weights file'.format(weights_path)
output_path = "weight/yolov3.h5"
После завершения модификации нажмите «Выполнить».
Изменить категорию.
Файл категории, используемый yolo по умолчанию, — это coco_classes.txt, поэтому нам нужно изменить категорию этого файла на категорию набора данных. Набор данных, используемый в этом примере, имеет две категории: самолеты и масляные баки.
Набор данных, помеченный Labelme, преобразуется в набор данных, обученный yolov3.
Добавьте файл labelme2txt.py
from os import getcwd
import os
import json
import glob
wd = getcwd()
"labelme标注的json 数据集转为keras 版yolov3的训练集"
classes = ["aircraft","oiltank"]
image_ids = glob.glob(r"LabelmeData/*jpg")
print(image_ids)
list_file = open('train.txt', 'w')
def convert_annotation(image_id, list_file):
jsonfile=open('%s.json' % (image_id))
in_file = json.load(jsonfile)
for i in range(0,len(in_file["shapes"])):
object=in_file["shapes"][i]
cls=object["label"]
points=object["points"]
xmin=int(points[0][0])
ymin=int(points[0][1])
xmax=int(points[1][0])
ymax=int(points[1][1])
if cls not in classes:
print("cls not in classes")
continue
cls_id = classes.index(cls)
b = (xmin, ymin, xmax, ymax)
list_file.write(" " + ",".join([str(a) for a in b]) + ',' + str(cls_id))
jsonfile.close()
for image_id in image_ids:
list_file.write('%s.jpg' % (image_id.split('.')[0]))
convert_annotation(image_id.split('.')[0], list_file)
list_file.write('\n')
list_file.close()
Сгенерированное содержимое train.txt выглядит следующим образом:
Каждое изображение представляет собой строку классов x1, y1, x2, y2.
Запустите файл Kmeans.py для расчета якорей.
打开Kmeans.py文件,修改self.filename = "train.txt",然后运行,计算的结果会直接覆盖到yolo_anchors.txt
Измените файл train.py.
annotation_path = 'train.txt'
classes_path = 'model_data/coco_classes.txt'
anchors_path = 'model_data/yolo_anchors.txt'
model = create_model(input_shape, anchors, num_classes,
freeze_body=2, weights_path='weight/yolov3.h5')
这几个文件的路径按照上面文件的存放位置和名称修改。
注意57行和76行的batch_size按照电脑的配置去修改。
После выполнения вышеуказанных действий вы можете начать тренировку.Нажмите запустить, чтобы начать тренировку.
контрольная работа
Изменить йоло.py
mode_path изменяется на путь окончательной модели:
"model_path": 'logs/000/trained_weights_final.h5',
Изменить yolo_video.py
Удалите следующие параметры
parser.add_argument(
'--model', type=str,
help='path to model weight file, default ' + YOLO.get_defaults("model_path")
)
parser.add_argument(
'--anchors', type=str,
help='path to anchor definitions, default ' + YOLO.get_defaults("anchors_path")
)
parser.add_argument(
'--classes', type=str,
help='path to class definitions, default ' + YOLO.get_defaults("classes_path")
)
parser.add_argument(
'--gpu_num', type=int,
help='Number of GPU to use, default ' + str(YOLO.get_defaults("gpu_num"))
)
Измените параметр изображения на true
parser.add_argument(
'--image', default=True, action="store_true",
help='Image detection mode, will ignore all positional arguments'
)
修改detect_img的img路径
def detect_img(yolo):
while True:
img ="D:\keras-yolo3-master\LabelmeData/aircraft_4.jpg"
Результаты теста
Примеры этой статьи:download.CSDN.net/download/Хе-хе…