python>=3.6
numpy>=1.16.0
torch>=1.0 # effdet需要torch>=1.5,如果不使用effdet,在network/__init__.py下将其注释掉
tensorboardX>=1.6
utils-misc>=0.0.5
mscv>=0.0.3
matplotlib>=3.1.1
opencv-python==4.2.0.34 # opencv>=4.4版本需要编译,耗时较长,建议安装4.2版本
opencv-python-headless==4.2.0.34
albumentations>=0.5.1 # 需要opencv>=4.2
scikit-image>=0.17.2
easydict>=1.9
timm==0.1.30 # timm >= 0.2.0 不兼容
typing_extensions==3.7.2
tqdm>=4.49.0
PyYAML>=5.3.1
Cython>=0.29.16
pycocotools>=2.0 # 需要Cython
omegaconf>=2.0.0 # effdet依赖
ipdb>=0.13.9 # 调试工具
使用pip install
逐行安装即可。也可以安装好pytorch后使用bash ./install.sh
一键安装依赖项。
git clone https://github.com/misads/easy_detection.git
cd easy_detection
-
下载voc数据集,这里提供一个VOC0712的网盘下载链接:https://pan.baidu.com/s/1AYao-vYtHbTRN-gQajfHCw,密码7yyp。
-
在项目目录下新建
datasets
目录:mkdir datasets
-
将voc数据集的
VOC2007
或者VOC2017
目录移动datasets/voc
目录。(推荐使用软链接)ln -s <VOC的下载路径>/VOCdevkit/VOC2017 datasets/voc
-
数据准备好后,数据的目录结构看起来应该是这样的:
easy_detection └── datasets ├── voc │ ├── Annotations │ ├── JPEGImages │ └── ImageSets/Main │ ├── train.txt │ └── test.txt └── <其他数据集>
-
预览数据集标注
运行下面的指令来预览数据集标注:
python3 preview.py --config configs/faster_rcnn/faster_rcnn_voc.yml
tensorboard --logdir logs/preview
效果如下:
python3 train.py --config configs/faster_rcnn/faster_rcnn_voc.yml
【训练日志】
python3 train.py --config configs/yolo2/yolo2_voc.yml
【训练日志】
darknet19_448.conv.23
是Yolo2在ImageNet
上的预训练模型,可以在yolo官网下载。[下载地址]。
python3 train.py --config configs/yolo3/yolo3_voc.yml
darknet53.conv.74
可以在yolo官网下载。[下载地址]。
作用 | 参数 | 示例 | 说明 |
---|---|---|---|
指定训练标签 | --tag |
--tag yolo2_voc |
日志会保存在logs/标签 目录下,模型会保存在checkpoints/标签 目录下。 |
选择配置文件 | --config |
--config configs/faster_rcnn_voc.yml |
必须明确给定。 |
加载之前的模型/恢复训练 | --load |
--load pretrained/yolo2.pt |
--resume 配合--load 使用,会恢复上次训练的epoch 和优化器。 |
调试模式 | --debug |
--debug |
调试模式下只会训练几个batch就会开始验证。 |
# 8卡
CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 ./dist_train.sh 8 --config configs/faster_rcnn/faster_rcnn_voc_dist.yml
-
新建
pretrained
文件夹:mkdir pretrained
-
以Faster-RCNN为例,下载[预训练模型],并将其放在
pretrained
目录下:easy_detection └── pretrained └── 0_voc_FasterRCNN.pt
-
运行以下命令来验证模型的
mAP
指标:
Faster RCNN
python3 eval.py --config configs/faster_rcnn/faster_rcnn_voc.yml --load pretrained/0_voc_FasterRCNN.pt
YOLOv2
python3 eval.py --config configs/yolo2/yolo2_voc.yml --load pretrained/0_voc_Yolo2.pt
- 如果需要使用
Tensorboard
可视化预测结果,可以在上面的命令最后加上--vis
参数。然后运行tensorboard --logdir results/cache
查看检测的可视化结果。如下图所示:
- 使用其他的模型只需要修改
--config
参数使用不同配置文件即可。
-
将自己的数据集制作成
VOC
格式,并放在datasets
目录下(可以使用软链接)。目录结构如下:easy_detection └── datasets └── mydata_dir ├── Annotations ├── JPEGImages └── ImageSets/Main ├── train.txt └── val.txt
-
在
configs/data_roots
目录下新建一个mydata.py
,内容如下:class Data(object): data_format = 'VOC' voc_root = 'datasets/mydata_dir' train_split = 'train.txt' val_split = 'val.txt' class_names = ["car", "person", "bus"] # 所有的类别名 img_format = 'jpg' # 根据图片文件是jpg还是png设为'jpg'或者'png'
-
在
configs
目录下复制faster_rcnn_voc.yml,改为faster_rcnn_mydata.yml,修改内容如下:
MODEL:
NAME: Faster_RCNN
BACKBONE: resnet50
DATA:
DATASET: mydata # 这个注意要改一下
TRANSFORM: fasterr_cnn
SCALE: [600, 1000]
OPTIMIZE:
OPTIMIZER: sgd
BASE_LR: 0.001
SCHEDULER: 1x
BATCH_SIZE: 1
- 完成定义数据集后,训练和验证时就可以使用
--config configs/faster_rcnn_mydata.yml
参数来使用自己的数据集。
-
运行
preview.py
:python3 preview.py --config configs/faster_rcnn_mydata.yml
-
运行
tensorboard
:tensorboard --logdir logs/preview
-
打开浏览器,查看标注是否正确。
python3 train.py --config configs/faster_rcnn_mydata.yml
学习率和batch_size
可以在config文件中视情况调整。
- 复制
network
目录下的Faster_RCNN
文件夹,改成另外一个名字(比如MyNet
)。 - 仿照
Faster_RCNN
的model.py,修改自己的网络结构、损失函数和优化过程。 - 在
network/__init__.py
中import
你模型的Model
类并且在models = {}
中添加它。
from .Faster_RCNN.Model import Model as Faster_RCNN
from .MyNet.Model import Model as MyNet
models = {
'Faster_RCNN': Faster_RCNN,
'MyNet': MyNet,
}
- 在config文件中将MODEL.NAME设置为自己的检测模型名称。
- 安装Flask
pip install Flask
- 打开web服务
python serve.py -p8000 # 打开在8000端口
- 用浏览器输入
localhost:8000
访问,效果如下: