Комплект обнаружения объектов PaddleDetection

глубокое обучение

Это 9-й день моего участия в августовском испытании обновлений.Подробности о мероприятии:Испытание августовского обновления

Программно-аппаратная среда

  • ubuntu 18.04 64bit
  • nvidia 1070Ti
  • anaconda with python 3.7
  • cuda 10.1
  • cudnn 7.6
  • paddlepaddle 1.8.4
  • paddledetection 0.5

Введение

Цитирование официального введения проекта

Комплект разработки обнаружения целей PaddleDetection предназначен для того, чтобы помочь разработчикам завершить весь процесс разработки, формирования, обучения, оптимизации и развертывания модели обнаружения быстрее и лучше. PaddleDetection модульно реализует множество основных алгоритмов обнаружения целей, предоставляет богатые стратегии улучшения данных, компоненты сетевого модуля (например, магистральную сеть), функции потерь и т. д., а также интегрирует возможности сжатия моделей и кросс-платформенного высокопроизводительного развертывания. После длительного периода промышленной практики и полировки, PaddleDetection имеет плавный и превосходный пользовательский интерфейс и широко используется разработчиками в более чем десяти отраслях, таких как промышленный контроль качества, обнаружение изображений с помощью дистанционного зондирования, беспилотный контроль, новая розничная торговля, Интернет и научное исследование.

Подводя итог в одном предложении, это очень здорово!

Давайте взглянем на обзор структуры пакета

Architectures Backbones Components Data Augmentation
  • Two-Stage Detection
    • Faster RCNN
    • FPN
    • Cascade-RCNN
    • Libra RCNN
    • Hybrid Task RCNN
    • PSS-Det RCNN
  • One-Stage Detection
    • RetinaNet
    • YOLOv3
    • YOLOv4
    • PP-YOLO
    • SSD
  • Anchor Free
    • CornerNet-Squeeze
    • FCOS
    • TTFNet
  • Instance Segmentation
    • Mask RCNN
    • SOLOv2
  • Face-Detction
    • FaceBoxes
    • BlazeFace
    • BlazeFace-NAS
  • ResNet(&vd)
  • ResNeXt(&vd)
  • SENet
  • Res2Net
  • HRNet
  • Hourglass
  • CBNet
  • GCNet
  • DarkNet
  • CSPDarkNet
  • VGG
  • MobileNetv1/v3
  • GhostNet
  • Efficientnet
  • Common
    • Sync-BN
    • Group Norm
    • DCNv2
    • Non-local
  • FPN
    • BiFPN
    • BFP
    • HRFPN
    • ACFPN
  • Loss
    • Smooth-L1
    • GIoU/DIoU/CIoU
    • IoUAware
  • Post-processing
    • SoftNMS
    • MatrixNMS
  • Speed
    • FP16 training
    • Multi-machine training
  • Resize
  • Flipping
  • Expand
  • Crop
  • Color Distort
  • Random Erasing
  • Mixup
  • Cutmix
  • Grid Mask
  • Auto Augment

Глаза полны цветов, а поддержка слишком всесторонняя. Помимо функции, давайте посмотрим на производительность

Репрезентативные модели каждой модельной структуры и магистральной сети находятся вCOCOТочность в наборе данныхmAPи одна картаTesla V100верхняя прогнозируемая скорость (FPS) сравнительная таблица

paddledetection

Модель на рисунке можно получить в библиотеке моделей по адресуGitHub.com/paddle pad DL…

Установить весло

весло (PaddlePaddle) — это первая в Китае открытая, технологически продвинутая и полнофункциональная платформа глубокого обучения промышленного уровня, разработанная Baidu, объединяющая базовую среду обучения и логического вывода для глубокого обучения, библиотеку базовых моделей и сквозную разработку. набор и множество компонентов инструмента.

Сначала создайтеpythonвиртуальную среду, затем установитеpaddlepaddle-gpu

conda create -n ppdetection python=3.7
conda activate ppdetection
pip install paddlepaddle-gpu==1.8.4.post107 -i https://mirror.baidu.com/pypi/simple

Используйте столько, сколько вам нужноgpuЕсли да, то также установитеnvidiaизNCCLFramework, он используется для связи с несколькими картами, адрес загрузкиdeveloper.NVIDIA.com/rural-out/rural-out-of…, выберите совпадениеCUDAзагрузка версии

Проверьте с помощью следующей команды

(ppdetection) xugaoxiang@1070Ti:~/Works/github/PaddleDetection-release-0.5$ ipython
Python 3.7.9 (default, Aug 31 2020, 12:42:55)
Type 'copyright', 'credits' or 'license' for more information
IPython 7.19.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: import paddle.fluid as fluid

In [2]: fluid.install_check.run_check()
Running Verify Fluid Program ...
W1208 13:28:59.964426 13251 device_context.cc:252] Please NOTE: device: 0, CUDA Capability: 61, Driver API Version: 11.0, Runtime API Version: 10.0
W1208 13:29:00.090900 13251 device_context.cc:260] device: 0, cuDNN Version: 7.6.
Your Paddle Fluid works well on SINGLE GPU or CPU.
Your Paddle Fluid works well on MUTIPLE GPU or CPU.
Your Paddle Fluid is installed successfully! Let's start deep Learning with Paddle Fluid now

In [3]: import paddle

In [4]: paddle.__version__
Out[4]: '1.8.4'

In [5]:

Установите другие зависимости

pip install pycocotools

Установить обнаружение весла

Последняя версия 0.5.После скачивания войдите в каталог для установки необходимых зависимостей

wget https://github.com/PaddlePaddle/PaddleDetection/archive/release/0.5.zip
unzip PaddleDetection-release-0.5.zip
cd PaddleDetection-release-0.5
pip install -r requirements.txt

Убедитесь, что следующие тесты пройдены

(ppdetection) xugaoxiang@1070Ti:~/Works/github/PaddleDetection-release-0.5$ python ppdet/modeling/tests/test_architectures.py
ss/home/xugaoxiang/Works/github/PaddleDetection-release-0.5/ppdet/core/workspace.py:118: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated since Python 3.3,and in 3.9 it will stop working 
 isinstance(merge_dct[k], collections.Mapping)):
..........
----------------------------------------------------------------------
Ran 12 tests in 2.866s

OK (skipped=2)

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

# 通过use_gpu参数设置是否使用GPU
python tools/infer.py -c configs/ppyolo/ppyolo.yml -o use_gpu=true weights=https://paddlemodels.bj.bcebos.com/object_detection/ppyolo.pdparams --infer_img=demo/000000014439.jpg

После того, как программа закончит работу, онаoutputСгенерировать одноименное изображение с результатом предсказания в папке

paddledetection

paddledetection

paddledetection

обучение модели

здесь сpaddledetectionВозьмем в качестве примера включенные наборы данных apple, банана и апельсина, скрипты загрузки и файлы конфигурации предоставлены в официальном коде.

cd dataset/fruit

# 下载数据集,vod格式
python download_fruit.py

Этот набор данных о фруктах взят изVOCПосле завершения формата после загрузки структура каталогов такая.

paddledetection

Затем вы можете начать обучение, здесь используйтеYOLOv3В качестве обучающей моделиbackboneдаmobilenet_v1

python tools/train.py -c configs/yolov3_mobilenet_v1_fruit.yml --eval

в-cуказать профиль обучения,--evalУказывает на тестирование во время обучения, объяснение параметра в файле конфигурации может относиться кGitHub.com/paddle pad DL…Очень подробно

paddledetection

пройти черезvisualdlкоманда для просмотра кривой изменения в реальном времени

# 设置visualdl参数
python tools/train.py -c configs/yolov3_mobilenet_v1_roadsign.yml --eval -o use_gpu=true --use_vdl=True --vdl_log_dir=vdl_dir/scalar

# 打开visualdl
visualdl --logdir vdl_dir/scalar/ --host <host_IP> --port <port_num>

paddledetection

Обученная модель хранится вoutput/yolov3_mobilenet_v1_fruitВниз

paddledetection

Используйте обученную модель, чтобы делать прогнозы

# 使用参数--infer_dir来预测图片文件夹
python tools/infer.py -c configs/yolov3_mobilenet_v1_fruit.yml -o weights=output/yolov3_mobilenet_v1_fruit/best_model.pdmodel --infer_img=demo/orange_71.jpg --output_dir=output

paddledetection

paddledetection

развертывать

использоватьPaddleServingМетод развертывания: сначала установите пакет зависимостейpaddle-serving-clientиpaddle-serving-server-gpu

pip install paddle-serving-client -i https://mirror.baidu.com/pypi/simple
pip install paddle-serving-server-gpu -i https://mirror.baidu.com/pypi/simple

модуль экспорта

python tools/export_serving_model.py -c configs/yolov3_mobilenet_v1_fruit.yml -o use_gpu=true weights=output/yolov3_mobilenet_v1_fruit/best_model.pdmodel --output_dir=./inference_model

Вышеупомянутая команда будет в./inference_modelсоздать папкуyolov3_mobilenet_v1_fruitпапка, структура каталогов такая

inference_model
│   ├── yolov3_mobilenet_v1_fruit
│   │   ├── infer_cfg.yml
│   │   ├── serving_client
│   │   │   ├── serving_client_conf.prototxt
│   │   │   ├── serving_client_conf.stream.prototxt
│   │   ├── serving_server
│   │   │   ├── conv1_bn_mean
│   │   │   ├── conv1_bn_offset
│   │   │   ├── conv1_bn_scale
│   │   │   ├── ...

serving_clientв папкеserving_client_conf.prototxtПодробное описание входной и выходной информации модели,serving_client_conf.prototxtСодержимое файла:

feed_var {
  name: "image"
  alias_name: "image"
  is_lod_tensor: false
  feed_type: 1
  shape: 3
  shape: 608
  shape: 608
}
feed_var {
  name: "im_size"
  alias_name: "im_size"
  is_lod_tensor: false
  feed_type: 2
  shape: 2
}
fetch_var {
  name: "multiclass_nms_0.tmp_0"
  alias_name: "multiclass_nms_0.tmp_0"
  is_lod_tensor: true
  fetch_type: 1
  shape: -1
}

Следующий стартPaddleServingсервис, должен быть включен все время

cd inference_model/yolov3_mobilenet_v1_fruit
python -m paddle_serving_server_gpu.serve --model serving_server --port 9393 --gpu_ids 0

Подготовитьlabel_list.txtдокумент

cd inference_model/yolov3_mobilenet_v1_fruit

# 将水果数据集对应的label_list.txt文件拷贝到当前文件夹下
cp ../../dataset/fruit/label_list.txt .

начать тестирование

# 进入目录
cd inference_model/yolov3_mobilenet_v1_fruit/

# 测试代码 test_client.py
python ../../deploy/serving/test_client.py ../../demo/orange_71.png

использованная литература