Предварительное исследование YOLOv5 на основе задачи обнаружения мусорных целей
Автор: Ю Минджун
Предыстория исследования
В качестве научного плана эффективного удаления мусора классификация мусора имеет большое значение для улучшения использования ресурсов, снижения нагрузки на производство мусора и улучшения экологической среды.Это стратегия, которая должна быть принята в процессе социалистической модернизации и урбанизации. в моей стране срочным вниманием стран всего мира. С 2019 года, благодаря плавному развитию законодательства, правоприменения и надзора за классификацией бытовых отходов в ключевых городах, таких как Шанхай и Ханчжоу, внимание людей к темам, связанным с классификацией отходов, возрастает, а также повышается осведомленность о классификации личных отходов. значительно улучшилось. Но в то же время, из-за чрезвычайно богатого вида мусора, отдельные лица, как правило, имеют высокую степень неоднозначности в классификации мусора, поэтому реализация автоматизации классификации мусора особенно важна. Обнаружение целей для мусора является важной частью автоматизации классификации мусора, и в этой статье мы попытаемся реализовать этот процесс. Так называемое обнаружение цели - это просто проблема обнаружения того, что и где находится на изображении, то есть проблема "классификация цели + локализация". В качестве репрезентативного алгоритма для одноэтапных задач обнаружения целей исследователи предпочитают модели серии YOLO за их высокую скорость и хорошую производительность обобщения. Не так давно YOLOv5 также был официально выпущен на GitHub, что сразу же вызвало широкое бурное обсуждение в Интернете. В этой статье будет ссылка на предоставленный официальный учебник и попытка просто использовать сетевую модель YOLOv5 для решения задачи обнаружения целей мусора в наборе данных TACO.
обработка набора данных
TACOЭто набор данных объектов мусора с растущими данными. В качестве фона он использует леса, дороги и пляжи. В настоящее время он содержит 60 категорий объектов мусора, в общей сложности 1500 изображений и почти 5000 аннотаций. См. этот проект набора данных по адресу:GitHub.com/Педро про/та…С одной стороны, учитывая, что формат хранения файлов и формат меток набора данных должны соответствовать соответствующим требованиям модели YOLOv5, поэтому в этой статье сначала необходимо выполнить необходимые операции с набором данных. Код обработки набора данных см. в проекте Mo.[1], файл **_readme.ipynb** в проекте подробно описывает конкретные операции, используемые соответствующим кодом.
'Clear plastic bottle': 5
'Plastic bottle cap': 7
'Drink can': 12
'Other plastic': 29
'Plastic film': 36
'Other plastic wrapper': 39
'Unlabeled litter': 58
'Cigarette': 59
Для требований преобразования формата coco в формат yolo в основном необходимо выполнить следующие три задачи:
- Храните сгенерированные этикетки и изображения в двух файловых каталогах соответственно, а требования к именованию файлов для этикеток и изображений одинаковы.
- Сопоставьте исходный набор тегов целевого объекта с пространством {0-7} в порядке возрастания
- Поскольку информация о местоположении на оригинальной этикетке
{top_x, top_y, width, height}
, проект должен преобразовать его в{center_x, center_y, width, height}
отформатировать и нормализовать его значения
Его основная часть кода выглядит следующим образом (cocotoyolo.py):
# 将垃圾类型原编号映射至{0-7}空间
label_transfer = {5: 0, 7: 1, 12: 2, 29: 3,
36: 4, 39: 5, 58: 6, 59: 7}
class_num = {} # 记录各类型样本数量
img_ids = data_source.getImgIds()
# 遍历每张图片,对标签进行转换
for index, img_id in tqdm.tqdm(enumerate(img_ids), desc='change .json file to .txt file'):
img_info = data_source.loadImgs(img_id)[0]
# 将含文件夹的路径修改为文件名
save_name = img_info['file_name'].replace('/', '_')
# 移去文件扩展名
file_name = save_name.split('.')[0]
# 获取单张图像的宽和高
height = img_info['height']
width = img_info['width']
# 转换所得txt文件存储路径
save_path = save_base_path + file_name + '.txt'
is_exist = False # 记录图片是否包含目标垃圾类型对象
with open(save_path, mode='w') as fp:
# 根据图片编号找出垃圾对象的编号集合
annotation_id = data_source.getAnnIds(img_id)
boxes = np.zeros((0, 5))
if len(annotation_id) == 0: # 集合大小为0
fp.write('')
continue
# 获取coco格式的标签
annotations = data_source.loadAnns(annotation_id)
lines = '' # 记录转换后yolo格式的标签
# 遍历对象标签集
for annotation in annotations:
# 获取垃圾对象的标签
label = coco_labels_inverse[annotation['category_id']]
if label in label_transfer.keys():
# 垃圾类型属于目标垃圾类型则进行格式转换
is_exist = True
box = annotation['bbox']
if box[2] < 1 or box[3] < 1:
# 如果原标签中出现无长或宽数据的情况则跳过
continue
# top_x,top_y,width,height==>cen_x,cen_y,width,height
box[0] = round((box[0] + box[2] / 2) / width, 6)
box[1] = round((box[1] + box[3] / 2) / height, 6)
box[2] = round(box[2] / width, 6)
box[3] = round(box[3] / height, 6)
label = label_transfer[label] # 标签映射
if label not in class_num.keys():
class_num[label] = 0
class_num[label] += 1
lines = lines + str(label) # 先存储标签
for i in box: # 再存储位置信息
lines += ' ' + str(i)
lines += '\n' # 换行
fp.writelines(lines)
if is_exist:
# 存在目标类型对象,则拷贝图像至指定目录
shutil.copy('data/{}'.format(img_info['file_name']), os.path.join(save_image_path, save_name))
else:
# 不存在则删除所生成的标签文件
os.remove(save_path)
(2) После завершения создания набора меток проект должен выполнить на нем выборочное разделение. Прежде всего, в проекте необходимо использовать все выборки обучающей выборки, а выборки тестовой выборки составляют 0,1 от общего количества выборок (количество изображений выборок 1086 и 109 соответственно, а использование всех выборок в обучающей выборке). набор из-за плохого личного аппаратного оборудования. причины) разделены. Во-вторых, учитывая требования сетевой модели к каталогу хранилища примеров, проект должен хранить соответствующие сгенерированные изображения и метки в соответствующей папке Формат каталога файлов показан на рисунке 2. Код реализации см. в файле sample.py в проекте Mo.
Конфигурация модели и обучение
YOLOv5Адрес загрузки проекта:github.com/ultralyticsДля проектов, развернутых на платформе Mo, обратитесь к одноименному проекту.[2], весь следующий контент может относиться к официальному учебнику[2]. Конкретный рабочий процесс проекта Mo см. в файле **_readme.ipynb** в корневом каталоге.
Конфигурация модели
Эта часть в основном включает два аспекта связанных установок установки зависимостей и настроек файла конфигурации.Далее в этой статье будет кратко объяснено вышеуказанное содержание. (1) Зависимая установка YOLOv5 построен с использованием фреймворка глубокого обучения PyTorch. Поэтому сначала нам нужно установить фреймворк PyTorch на Python. Учебник по установке можно найти по адресуОфициальный сайтсвязанный контент. Команда установки последней версии PyTorch для ЦП приведена здесь.
pip install torch==1.5.1+cpu torchvision==0.6.1+cpu -f https://download.pytorch.org/whl/torch_stable.html
Кроме того, модель YOLOv5 требует установки дополнительных сторонних зависимостей. Официальный разместил все это в файле requirements.txt. Чтобы установить зависимости максимально без ошибок, я лично предлагаю следующие две ревизии файла:
- Когда я разветвляю официальный проект, для numpy требуется версия 1.17, но во время фактической установки могут возникнуть некоторые проблемы. Поэтому лично я рекомендую изменить его требования к версии на 1.17.3.
- Адрес загрузки Cocoapi.git, указанный в файле зависимостей, очень медленный в реальной работе и может быть ненормальным в системе Windows. Поэтому рекомендуется заменить соответствующее утверждение следующим утверждением:
git+https://github.com/philferriere/cocoapi.git#subdirectory=PythonAPI
(2) Настройки файла конфигурации Проект YOLOv5 в основном требует настройки следующих двух файлов конфигурации:
- Файл конфигурации taco.yaml в пути к данным (созданный вами). Этот файл в основном настраивает информацию о пути и типе объекта для хранения изображений в обучающем наборе и тестовом наборе. Для настройки пути к хранилищу этикеток проект автоматически определит путь к хранилищу изображений, поэтому наш каталог файлов набора данных должен соответствовать требованиям, показанным на рисунке 2. Содержимое файла конфигурации показано ниже.
# train and val datasets (image directory or *.txt file with image paths)
train: taco/images/train/
val: taco/images/test/
# number of classes
nc: 8
# class names
names: ['Clear plastic bottle', 'Plastic bottle cap',
'Drink can',
'Other plastic',
'Plastic film', 'Other plastic wrapper',
'Unlabeled litter', 'Cigarette']
- Запишите файлы конфигурации, связанные с конфигурацией модели, по пути к моделям. Согласно официальному руководству [2], исследователи могут напрямую изменять существующие файлы серии yolov5_.yaml в каталоге моделей для соответствующей конфигурации. Здесь я изменил файл yolov5s.yaml (поскольку в этом эксперименте в качестве предтренировочного веса модели используется yolov5s.pt). Индивидуальным пользователям нужно только изменить значение атрибута nc в файле, чтобы оно соответствовало значению атрибута nc в приведенном выше файле taco.yaml.
обучение модели
С одной стороны, поскольку память персонального компьютера относительно мала, прямое использование настроек параметров обучения, предоставленных официальным лицом, приведет к тому, что память взорвется и не будет работать. Поэтому в этом эксперименте пришлось заставить модель обучаться, уменьшив размер входного изображения и значение batch_size. С другой стороны, из-за низкой производительности графического процессора персонального компьютера в этом эксперименте выбрано непосредственное использование ЦП для обучения соответствующей модели, поэтому скорость обучения модели относительно низкая. Принимая во внимание ограничения двух вышеупомянутых аспектов, соответствующие конфигурации параметров, задействованные в обучении этой экспериментальной модели, показаны в таблице 1: Таблица 1 Конфигурация параметров, связанных с обучением модели
аргументы командной строки | Значение параметра | Настройки |
---|---|---|
--img | Унифицированный масштаб входного изображения | 320 |
--batch | Количество входных изображений на обучение сети | 4 |
--epochs | Сколько раз весь набор данных участвовал в обучении | 100 |
--data | Путь к файлу конфигурации набора данных | ./data/taco.yaml |
--cfg | Путь к файлу конфигурации модели | ./models/yolov5s.yaml |
--device | Тренажер (CPU или GPU) | cpu |
--weights | Файл весов для предварительно обученной модели | yolov5s.pt |
Команда вызова для обучения модели выглядит следующим образом:
python train.py --img 320 --batch 4 --epochs 100 --data ./data/taco.yaml --cfg ./models/yolov5s.yaml --device cpu --weights yolov5s.pt
Что касается загрузки весов перед тренировкой, я не буду подробно описывать их здесь, Baidu должен быть в состоянии найти множество отечественных ресурсов для загрузки. Здесь я поместил файл веса yolov5s (yolov5s.pt) в корневой каталог проекта, чтобы облегчить исследователям обучение модели. Конечно, мы можем обучить модель напрямую, не используя предварительно обученные веса, просто убрав--weights yolov5s.pt
часть.
Показать результаты
Согласно официальному руководству, различные результаты, полученные в результате обучения модели, будут автоматически помещены в папку run корневого каталога. Среди них в папке с весами будут храниться файлы весов с наилучшим эффектом и последним временем, сгенерированным обучением модели.Мы можем использовать эти файлы для выполнения задачи вызова модели.В файле results.txt хранятся выходные данные различных индикаторов во время процесс обучения модели. , проект YOLO также автоматически визуализировал выходные результаты и генерировал соответствующие изображения диаграмм. Выходные изображения визуализации различных показателей в этом эксперименте показаны на рисунке 3. Верхние пять изображений — это соответствующие результаты обучающей выборки, а нижние пять изображений — соответствующие результаты тестовой выборки.
python detect.py --weights best.pt --img 320 --conf 0.4
Эффект обнаружения целевого изображения показан на рисунке 4, а изображение, созданное в результате обнаружения, находится в папке вывода/вывода. Среди них объект Drink can был неправильно обнаружен в изображении batch_1_000048 (в основном это связано с размером значения параметра conf, и каждый может настроить его соответствующим образом).
Резюме эксперимента
Эта статья в основном опирается на задачу обнаружения объектов мусора и использует новую модель YOLOv5 для проведения экспериментов с набором данных объектов мусора TACO. Из-за отсутствия личного аппаратного оборудования и нехватки времени, ссылаясь на некоторые официальные визуализации выходных индикаторов и результаты обнаружения изображений, полученные в результате самостоятельных экспериментов, мы можем видеть, что производительность окончательной модели, полученной в этой статье, на самом деле относительно неудовлетворительна (YOLO Сама серийная модель запускается очень долго). Заинтересованные друзья могут попытаться увеличить размер единого изображения, увеличить размер партии и эпоху, чтобы улучшить производительность обнаружения целей модели.
использованная литература
адрес проекта
[1] ТАКО:Тихо потяните Can /workspace/5…[2]yolov5:Тихо потяните Can /workspace/5…
первичная литература
[1] Преобразуйте файл .json в COCO в файл .txt:woo woo Краткое описание.com/afraid/8 ding ding 8 волосы 3 возражения…[2] Обучение пользовательских данных:GitHub.com/ultra Еще одна ICS…