最近项目需要用到实例分割,起初以为飞浆将模型放在PaddleSeg里,其实归类到目标检测的工具包**PaddleDetection
**。
本文主要流程:
【主要参考】:https://gitee.com/monkeycc/labelme/tree/master/examples/instance_segmentation
在安装后,在cmd或者shell输入
labelme ./imgs --autosave --labels labels.txt --config '{shift_auto_shape_color: -2}'
/imgs
改为你需要数据集的路径--autosave
标记后会自动保存--labels
是预先建立的标签'{shift_auto_shape_color: -2}'
彩色显示不同的类别ignore
background
people
cow
需要安装百度的深度学习框架PaddlePaddle:https://www.paddlepaddle.org.cn/
或者直接在其在线平台: https://aistudio.baidu.com/aistudio/index
git clone https://gitee.com/paddlepaddle/PaddleDetection
cd PaddleDetection
pip install -r requirements.txt
python ppdet/modeling/tests/test_architectures.py
use_gpu参数设置是否使用GPU
python tools/infer.py \
-c configs/ppyolo/ppyolo.yml \
-o use_gpu=true\
weights=https://paddlemodels.bj.bcebos.com/object_detection/ppyol
请将文件名改为自己的数据集
cd PaddleDetection
python tools/x2coco.py \
--dataset_type labelme \
--json_input_dir your_path/toupi_labelme_countHair_choose/jsons \
--image_input_dir your_path/toupi_labelme_countHair_choose/imgs \
--output_dir ./dataset/toupi_plus_hair_coco0317 \
--train_proportion 0.85 \
--val_proportion 0.10 \
--test_proportion 0.05
骨架网络 网络类型 每张GPU图片个数 学习率策略 推理时间(fps) Box AP Mask AP 下载 配置文件
ResNet50-vd-FPN Mask 1 2x 15.825 39.8 35.4
mask_rcnn_r50_vd_fpn_2x.yml
以及mask_fpn_reader.yml
cp ./configs/mask_rcnn_r50_vd_fpn_2x.yml ./configs/mask_rcnn_r50_vd_fpn_2x_toupi.yml
cp ./configs/mask_fpn_reader.yml ./configs/toupi_mask_fpn_reader.yml
在 mask_rcnn_r50_vd_fpn_2x.yml中修改
max_iters
: 36000(本人数据量为100,所以迭代次数少)
weights
=output/toupi_mask_rcnn_r50_vd_fpn_2x/model_final
num_classes
: your_num
milestones
调低学习率的转折点 ,一般为coco数据集是在总迭代次数2/3 或者8/9 处
,若总迭代次数为36000,可设置为[24000,26777], 也可根据训练曲线自行设置
snapshot_iter
: 5000模型保存间隔,如果训练时eval设置为True,会在保存后进行验证
base_lr
: 0.00125 # 0.01/8 0.01 是8卡的学习率
_READER_
:最后一行,数据读取文件名改为最新的 ‘toupi_mask_fpn_reader.yml’
batch_size: 1
trian
dataset:
!COCODataSet
dataset_dir: dataset/toupi_plus_hair_coco0317
anno_path: annotations/instance_train.json
image_dir: train
EvalReader:
inputs_def:
fields: ['image', 'im_info', 'im_id']
dataset:
!COCODataSet
image_dir: val
anno_path: annotations/instance_val.json
dataset_dir: dataset/toupi_plus_hair_coco0317
TestReader:
anno_path: dataset/toupi_plus_hair_coco0317/annotations/instance_test.json
python -u tools/train.py -c configs/toupi_mask_rcnn_r50_vd_fpn_2x.yml \
--use_vdl=true \
--vdl_log_dir=vdl_dir/scalar \
--eval \
-o use_gpu=true
visualdl --logdir ./vdl_dir/scalar --host 127.0.0.1 --port 7890
weights在寻址文件中设置
CUDA_VISIBLE_DEVICES=0 python tools/eval.py -c configs/toui_mask_rcnn_r50_vd_fpn_2x_infer.yml -o use_gpu=true weights=output/toupi_mask_rcnn_r50_vd_fpn_2x/model_final
python tools/infer.py -c configs/toui_mask_rcnn_r50_vd_fpn_2x_infer.yml \
--infer_dir dataset/toupi_plus_hair_coco0317/test/ \
--output_dir ./output/solo0318_train \
--draw_threshold 0.5
import os
import shutil
input_dir = '/home/ai004/datasets/toupi_datasets/toupi_labelme_plus_hair'
out_dir = '/home/ai004/datasets/toupi_datasets/toupi_labelme_plus_hair_choose'
out_dir_jsons = out_dir + '/jsons'
out_dir_imgs = out_dir + '/imgs'
# input_dir='./all'
# os.path.walk
if not os.path.exists(out_dir_jsons):
os.makedirs(out_dir_jsons)
if not os.path.exists(out_dir_imgs):
os.makedirs(out_dir_imgs)
paths = os.listdir(input_dir)
suffix_names = [] # 看看有哪些后缀名
for i, file in enumerate(paths):
# a=paths[0]
# name,suffix=os.path.splitext(file)
# if suffix not in suffix_names:
# suffix_names.append(suffix)
if i % 500 == 0:
print(i)
if file.endswith('.json'):
# 找到json
name, suffix = os.path.splitext(file)
# print(name,suffix)
source_file = os.path.join(input_dir, file)
target_path = os.path.join(out_dir_jsons, file)
# print ("copy json",target_path)
# save_jpg
name = name + '.jpg'
img_source_file = os.path.join(input_dir, name)
img_target_path = os.path.join(out_dir_imgs, name)
if not os.path.exists(img_source_file):
continue
shutil.copyfile(source_file, target_path)
shutil.copyfile(img_source_file, img_target_path)
# print ("copy img",target_path)
# break
# print(ret)
# for name in paths: