构建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
- 修改网络配置文件
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: .
Jupyter Notebook实践
-
专为小型部署而设计的最新版本,是一种在单个虚拟机上安装JupyterHub的轻量级方法。适用于单个服务器上的(0-100)个少量用户。
基于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
- 运行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
在 Linux 上安装输入法
- CentOS
yum remove ibus
yum install ibus ibus-table
yum install ibus ibus-table-wubi
- Ubuntu
apt purge ibus
apt install ibus ibus-table
apt install ibus ibus-table-wubi
Linux系统网络配置
或者
sudo netplan generate
搭建 Private Docker Registry
- 浏览器访问
http://HOSTNAME:8080
- 浏览器访问
http://HOSTNAME:8080
MAC 远程连接 Ubuntu 桌面
开启SSH服务
- 安装、卸载SSH服务
sudo apt-get install openssh-server
sudo apt-get remove openssh-server
- 启动、停止、重启SSH服务
sudo service ssh start
sudo service ssh stop
sudo service ssh restart
- 查询SSH服务状态
service ssh status
- 配置文件(更改配置需要重启SSH服务)
sudo vi /etc/ssh/sshd_config
- 连接SSH服务
ssh username@ip -p 22
- 设置、移除SSH服务开机自启动
sudo update-rc.d ssh defaults
sudo update-rc.d ssh remove
- 查看SSH服务设置的自启动
ls /etc/rc*
......
......
ls -l /etc/rc2.d/S02ssh
lrwxrwxrwx 1 root root 13 12月 25 16:33 /etc/rc2.d/S02ssh -> ../init.d/ssh
macOS实践
- 拍摄屏幕快照
Command+Shift+5 随意截取或者录制窗口的图像和视频
Command+Shift+3 将屏幕捕捉到文件
Command+Shift+4 将所选屏幕内容捕捉到文件,或按空格键仅捕捉一个窗口
Command-Shift-Control-3 将屏幕内容捕捉到剪贴板
Command-Shift-Control-4 将所选屏幕内容捕捉到剪贴板,或按空格键仅捕捉一个窗口
- Safari
Command+T 新建标签页
Command+N 新建窗口
Command+W 关闭标签页
Command+L 定位地址栏
Command+Shift+L 显示|隐藏边栏
Command+Z 撤销关闭的标签页
Control+Tab 移到下一个标签页
Control+Shift+Tab 移到上一个标签页
- 查找指定目录下(包含子目录)所有的指定名字的文件,可以使用通配符(? *)
$ find . -name '.DS_Store'
$ find . -name '.DS_*'
$ find . -name '.DS_Stor?'
./.DS_Store
./test/.DS_Store
./images/.DS_Store
- 删除指定目录下(包含子目录)所有的指定名字的文件
$ find . -name '.DS_Store' -delete
没有找到匹配的文章