Время прочтения: 5 мин.

Правильное серверное помещение обеспечивает надёжную защиту серверов, коммутаторов и другого оборудования от негативного воздействия окружающей среды, технологических сбоев и несанкционированного доступа. За такими параметрами как температура, влажность, отсутствие пыли, исправность техники следят системы климат-контроля и работоспособности.

Серверное помещение значительно упрощает обслуживание вычислительной техники, поэтому не менее важной характеристикой является аккуратность при ведении кабельного хозяйства, да и чистоты помещения в целом. Все это влияет на скорость устранения неполадок, модернизации, масштабирования. Особенно если таких помещений 5, 10, 50. При наличии камер видеонаблюдения проблему контроля за состоянием серверных можно решить с помощью технологии computer vision.

Рассмотрим подробнее задачу поиска перегруженных посторонними предметами (захламленных) серверных помещений.

В первую очередь серверные комнаты необходимо отделить других помещений.

Классификация помещений

Итак, требуется разработать модель, отличающую серверные помещения организации от остальных. В качестве инструмента выбрана предобученная модель YOLOv5 из-за ее легковесности и качества предсказаний.

YOLOv5 — это модель из семейства YOLO, написанная на PyTorch, что обеспечивает прирост производительности и расширяет возможности конфигурации моделей. Реализация модели на PyTorch позволяет использовать преимущества фреймворка: поддержка и развертывание модели.

Рассмотрим процесс обучения:

  1. Подготовка датасета.

Собираем изображения для тренировки и валидации. Для увеличения датасета используем аугментацию (размер, яркость, поворот, мозаика и т.д.):

1.	add_argument('--hyp', type=str, default='data/hyp.scratch.yaml', help='hyperparameters path')

Содержание hyp.scratch.yaml:

1.	lr0: 0.01  # initial learning rate (SGD=1E-2, Adam=1E-3)
2.	lrf: 0.2  # final OneCycleLR learning rate (lr0 * lrf)
3.	momentum: 0.937  # SGD momentum/Adam beta1
4.	weight_decay: 0.0005  # optimizer weight decay 5e-4
5.	warmup_epochs: 3.0  # warmup epochs (fractions ok)
6.	warmup_momentum: 0.8  # warmup initial momentum
7.	warmup_bias_lr: 0.1  # warmup initial bias lr
8.	box: 0.05  # box loss gain
9.	cls: 0.5  # cls loss gain
10.	cls_pw: 1.0  # cls BCELoss positive_weight
11.	obj: 1.0  # obj loss gain (scale with pixels)
12.	obj_pw: 1.0  # obj BCELoss positive_weight
13.	iou_t: 0.20  # IoU training threshold
14.	anchor_t: 4.0  # anchor-multiple threshold
15.	# anchors: 3  # anchors per output layer (0 to ignore)
16.	fl_gamma: 0.0  # focal loss gamma (efficientDet default gamma=1.5)
17.	hsv_h: 0.015  # image HSV-Hue augmentation (fraction)
18.	hsv_s: 0.7  # image HSV-Saturation augmentation (fraction)
19.	hsv_v: 0.4  # image HSV-Value augmentation (fraction)
20.	degrees: 45.0  # image rotation (+/- deg)
21.	translate: 0.0  # image translation (+/- fraction)
22.	scale: 0.0  # image scale (+/- gain)
23.	shear: 0.0  # image shear (+/- deg)
24.	perspective: 0.0001  # image perspective (+/- fraction), range 0-0.001
25.	flipud: 0.5  # image flip up-down (probability)
26.	fliplr: 0.5  # image flip left-right (probability)
27.	mosaic: 1.0  # image mosaic (probability)
28.	mixup: 0.0  # image mixup (probability)
  1. Устанавливаем параметры запуска.

Исходя из особенностей модели и вычислительных мощностей устанавливаем следующие параметры:

python train.py --img 640 --batch 8 --epochs 1000 --data dataset.yaml --weights yolov5l.pt

где:

Img – размер изображения;

Batch – количество кадров, которое модель обрабатывает одновременно;

Epochs – количество эпох – итераций обучения;

Dataset – датасет;

Weights – обученные коэффициенты.

  1. Получаем модель, способную находить серверные помещения.

Определение посторонних предметов (хлама)

Следующим шагом было определение понятия «хлам». Первоначальная идея заключалась в поиске абсолютно всех посторонних предметов в серверных помещениях. Однако в процессе реализации столкнулись с трудностями: в рамках одной модели проблематично набрать датасет, который смог бы верифицировать абсолютно весь хлам. В результате модель с поставленной задачей не справляется.

Принято решение ограничить понятие «хлам». Для этого выделили 13 классов:

1.	{
2.	"region": {
3.	    "class": {
4.	        "type": "radio",
5.	        "description": "",
6.	            "options": {
7.	                "server_rack": "",
8.	                "fire_extinguisher": "",
9.	                "person": "",
10.	                "box": "",
11.	                "chairs": "",
12.	                "packaging materials": "",
13.	                "paper": "",
14.	                "ladder": "",
15.	                "devices": "",
16.	                "stand": "",
17.	                "phone": "",
18.	                "tool box": "",
19.	                "clothers": ""
20.	            },
21.	            "default_options": {
22.	                "server_rack": true
23.	            }
24.	        }
25.	    },
26.	    "file": {}
27.	}

Самые многочисленные из них это: ПК, огнетушитель, стойка. После разметки и подготовки датасета запускаем обучение как описано выше.

В результате модель стала выдавать корректные результаты:

Таким образом задача была решена успешно. Получаем инструмент для поиска не только плохо организованного хозяйства проводов, но и заставленных серверных помещений, которые часто используются как склад.

Пример работы модели:

Использование данной модели позволяет оперативно находить захламлённые серверные помещения и проводить мероприятия по устранению отклонений в кратчайшие сроки. Порядок и организованность в серверных обеспечить безаварийность оборудования и освобождает до 50% пространства.