8 篇文章带有标签 “目标检测”

OpenVINO 神经网络性能分析

FP16 模型

$ ll -h public/ssd300/FP16/
总用量 51M
-rw-rw-r-- 1 wjunjian wjunjian  51M 4月  27 09:10 ssd300.bin
-rw-rw-r-- 1 wjunjian wjunjian  14K 4月  27 09:10 ssd300.mapping
-rw-rw-r-- 1 wjunjian wjunjian 217K 4月  27 09:10 ssd300.xml

FP32 模型

$ ll -h public/ssd300/FP32/
总用量 101M
-rw-rw-r-- 1 wjunjian wjunjian 101M 4月  27 09:10 ssd300.bin
-rw-rw-r-- 1 wjunjian wjunjian  14K 4月  27 09:10 ssd300.mapping
-rw-rw-r-- 1 wjunjian wjunjian 179K 4月  27 09:10 ssd300.xml

FP16 CPU $ python object_detection.py public/ssd300/FP16/ssd300.xml catdog.jpg CPU [ INFO ] 1. Creating OpenVINO Runtime Core [ INFO ] 2.

使用YOLOv5训练自定义数据集

在 Ubuntu20.04 系统上使用4张GPU卡基于容器训练模型。

  • 运行容器
$ docker run --ipc=host --runtime=nvidia -it --name project_name-yolov5 \
    -v project_dir:/usr/src/app/project ultralytics/yolov5:latest
  • 替换所有模型网络的类别
$ sed -i 's/nc: 80/nc: 2/g' project/models/yolov5?.yaml

验证替换结果 $ head -n 2 project/models/yolov5?.yaml ==> project/models/yolov5l.yaml <== # parameters nc: 2 # number of classes ==> project/models/yolov5m.yaml <== # parameters nc: 2 # number of classes ==> project/models/yolov5s.yaml <== # parameters nc: 2 # number of classes ==> project/models/yolov5x.

使用RetinaNet算法训练自定义数据集

#标注后的目录结构
project
└── labelimg
    ├── 20190128155421222575013.jpg
    ├── 20190128155421222575013.xml
    ├── 20190128155703035712899.jpg
    ├── 20190128155703035712899.xml
    ├── 20190129091126392737624.jpg
    └── 20190129091126392737624.xml

手动构建 FROM gouchicao/tensorflow:2.2.0-gpu-jupyter-opencv4-pillow-wget-curl-git-nano LABEL maintainer="wang-junjian@qq.com" WORKDIR / RUN mkdir -p /root/.keras/models/ && \ wget -O /root/.keras/models/ResNet-50-model.keras.h5 https://github.com/fizyr/keras-models/releases/download/v0.0.1/ResNet-50-model.keras.

构建YOLOv4容器应用在自定义数据集上

FROM nvidia/cuda:10.0-cudnn7-devel-ubuntu18.04
LABEL maintainer="wang-junjian@qq.com"

#auto install tzdata(opencv depend)
ENV DEBIAN_FRONTEND=noninteractive

RUN apt-get update && apt-get install -y \
    git wget nano \
    libopencv-dev python3-opencv \
    && rm -rf /var/lib/apt/lists/*

#set your localtime
RUN ln -fs /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

WORKDIR /
// ...
  • 构建容器
docker build -t darknet:latest-gpu-yolov4 .
  • 训练的样本:train.txt
images/IMG_9255.JPG
images/IMG_9266.JPG
images/IMG_9280.JPG
  • 验证的样本:valid.txt
images/IMG_9263.JPG
  • 标注类型:voc.names
close
open

使用Detectron在自定义数据集上训练MaskRCNN

  1. 修改网络配置文件
nano /detectron/project/12_2017_baselines/e2e_mask_rcnn_R-101-FPN_2x.yaml
MODEL:
  TYPE: generalized_rcnn
  CONV_BODY: FPN.add_fpn_ResNet101_conv5_body
  NUM_CLASSES: 2
  FASTER_RCNN: True
  MASK_ON: True
NUM_GPUS: 1
SOLVER:
  WEIGHT_DECAY: 0.0001
  LR_POLICY: steps_with_decay
  BASE_LR: 0.002
  GAMMA: 0.1
  MAX_ITER: 4000
  STEPS: [0, 3000, 4000]
FPN:
  FPN_ON: True
  MULTILEVEL_ROIS: True
  MULTILEVEL_RPN: True
FAST_RCNN:
  ROI_BOX_HEAD: fast_rcnn_heads.add_roi_2mlp_head
  ROI_XFORM_METHOD: RoIAlign
  ROI_XFORM_RESOLUTION: 7
  ROI_XFORM_SAMPLING_RATIO: 2
MRCNN:
  ROI_MASK_HEAD: mask_rcnn_heads.mask_rcnn_fcn_head_v1up4convs
  RESOLUTION: 28  # (output mask resolution) default 14
  ROI_XFORM_METHOD: RoIAlign
  ROI_XFORM_RESOLUTION: 14  # default 7
  ROI_XFORM_SAMPLING_RATIO: 2  # default 0
  DILATION: 1  # default 2
  CONV_INIT: MSRAFill  # default GaussianFill
TRAIN:
  WEIGHTS: https://dl.fbaipublicfiles.com/detectron/ImageNetPretrained/MSRA/R-101.pkl
  DATASETS: ('coco_helmet_train', 'coco_helmet_val')
  SCALES: (800,)
  MAX_SIZE: 1333
  BATCH_SIZE_PER_IM: 512
  RPN_PRE_NMS_TOP_N: 2000  # Per FPN level
TEST:
  DATASETS: ('coco_2014_minival',)
  SCALE: 800
  MAX_SIZE: 1333
  NMS: 0.5
  RPN_PRE_NMS_TOP_N: 1000  # Per FPN level
  RPN_POST_NMS_TOP_N: 1000
OUTPUT_DIR: .

基于Darknet框架的YOLOv3算法开发的模型训练和部署的容器化产品

  • 举例:这里以platen-switch为例
    platen-switch/
    ├── cfg
    │   └── voc.names
    ├── images
    │   ├── IMG_9255.JPG
    │   ├── IMG_9263.JPG
    │   ├── IMG_9266.JPG
    │   └── IMG_9280.JPG
    ├── labels
    │   ├── IMG_9255.txt
    │   ├── IMG_9263.txt
    │   ├── IMG_9266.txt
    │   └── IMG_9280.txt
    └── test
    ├── IMG_9256.JPG
    └── IMG_9271.JPG
    
  1. 运行darknet容器
    • 将工程目录作为挂载点绑定到容器
    # 使用您的工程绝对路径设置变量 project_dir
    $ project_dir='/home/wjunjian/github/gouchicao/darknet/model-zoo/platen-switch'
    $ sudo docker run --runtime=nvidia -it --name=darknet \
        --volume=$project_dir:/darknet/project \
        gouchicao/darknet:latest-gpu
    

创建工程,用于模型训练 创建工程,自动生成训练前需要的数据 $ python3 create_project

使用Darknet在自定义数据集上训练YOLOv3

  • 训练的样本:train.txt
yolos/IMG_9255.JPG
yolos/IMG_9266.JPG
yolos/IMG_9280.JPG
  • 验证的样本:valid.txt
yolos/IMG_9263.JPG
  • 标注类型:voc.names
close
open
  • 配置文件:voc.data
classes= 2
train  = cfg/train.txt
valid  = cfg/valid.txt
names = cfg/voc.names
backup = backup
  • 修改YOLO神经网络文件:yolov3.cfg
603行:filters=21    # (classes + 5)*3
610行:classes=2
689行:filters=21
696行:classes=2
776行:filters=21
783行:classes=2
  • 使用LabelImg标注图像样本集
# python3 labelImg.py [图像目录] [标注名字文件] [标注目录]
python3 labelImg.py open-close/yolos/ open-close/cfg/yolo.names
  • 下载基于imagenet的预训练模型 darknet53.conv.74
wget https://pjreddie.com/media/files/darknet53.conv.74