在tensorflow&keras中实现包括流行数据集的各种语义分割模型
tf-semantic-segmentation的Python项目详细描述
TF语义分割
特点
- 在
数据集
- 阿德20K
- 卡姆维德
- 城市景观
- 制图挑战
- 莫沙伦奇
- 可可
- 帕斯卡沃克2012
- 玉米卷
- 形状(随机创建三角形、矩形和圆形)
- 玩具(用MNIST覆盖TinyImageNet)
- ISIC218标准
- CVC临床数据库
- 在
多个gpu上的分布式训练
在 - 在
基于WandB的超参数优化
在 - 在
万达集成
在 - 在
从目录轻松创建TFRecord
在 - 在
张量板可视化
在 - 在
集成推理
在 - 在
型号:
- Unet公司
- Erfnet公司
- 多源网
- 卫星网
- MobilenetUnet(带在imagenet上预先培训过的mobilenet编码器的unet)
- unet_inception_resnet_v2(unet with inception resnet v2编码器在imagenet上预先培训)
- ResnetUnet(使用在imagenet上预先训练的resnet50编码器的unet)
- 在
损失:
- 分类交叉熵
- 二元交叉熵
- 交叉熵+SSIM
- 掷骰子
- 交叉熵+骰子
- 特沃斯基
- 焦点
- 焦点+特沃斯基
- 在
激活:
- 米什
- 斯威什
- relu6型
- 在
优化器:
- 护林员
- 雷达
- 在
规范化
- 实例规范
- 批量定额
- 在
动态增强
- 向左/向右翻转
- 向上/向下翻转
- 旋转180度
- 颜色
要求
sudo apt-get install libsm6 libxext6 libxrender-dev libyaml-dev libpython3-dev
Tensorflow(2.x)和Tensorflow插件(可选)
^{pr2}$或者
pip install tensorflow-gpu==2.0.0 --upgrade pip install tensorflow-addons==0.6.0 --upgrade
培训
提示:要查看列车/测试/val图像,您必须像这样启动tensorboard
tensorboard --logdir=logs/ --reload_multifile=true
内置数据集(生成器)
python -m tf_semantic_segmentation.bin.train -ds 'tacobinary' -bs 8 -e 100\ -logdir 'logs/taco-binary-test' -o 'adam' -lr 5e-3 --size 256,256 \ -l 'binary_crossentropy' -fa 'sigmoid'\ --train_on_generator --gpus='0'\ --tensorboard_train_images --tensorboard_val_images
使用固定记录路径
python -m tf_semantic_segmentation.bin.train --record_dir=records/cityscapes-512x256-rgb/ \ -bs 4 -e 100 -logdir 'logs/cityscapes-bs8-e100-512x256' -o 'adam' -lr 1e-4 -l 'categorical_crossentropy'\ -fa 'softmax' -bufsize 50 --metrics='iou_score,f1_score' -m 'erfnet' --gpus='0' -a 'mish'\ --tensorboard_train_images --tensorboard_val_images
多GPU培训
python -m tf_semantic_segmentation.bin.train --record_dir=records/cityscapes-512x256-rgb/ \ -bs 4 -e 100 -logdir 'logs/cityscapes-bs8-e100-512x256' -o 'adam' -lr 1e-4 -l 'categorical_crossentropy'\ -fa 'softmax' -bufsize 50 --metrics='iou_score,f1_score' -m 'erfnet' --gpus='0,1,2,3' -a 'mish'
使用代码
fromtf_semantic_segmentation.bin.trainimporttrain_test_model,get_args# get the default argsargs=get_args({})# change some parameters# !rm -r logs/args.model='erfnet'# args['color_mode'] = 0args.batch_size=8args.size=[128,128]# resize input dataset to this sizeargs.epochs=10args.learning_rate=1e-4args.optimizer='adam'# ['adam', 'radam', 'ranger']args.loss='dice'args.logdir='logs'args.record_dir="datasets/shapes/records"args.final_activation='softmax'# train and testresults,model=train_test_model(args)
模型
- Erfnet公司
- Unet公司
fromtf_semantic_segmentationimportmodels# print all available modelsprint(list(modes.models_by_name.keys()))# returns a model (without the final activation function) and the base model without the top layer# because the activation function depends on the loss functionmodel,base_model=models.get_model_by_name('erfnet',{"input_shape":(128,128,3),"num_classes":5})# call models directlymodel,base_model=models.erfnet(input_shape=(128,128),num_classes=5)
使用您自己的数据集
- 可接受的文件类型有:jpg(jpeg)和png
如果已经进行了列车/测试/val拆分,则使用以下数据结构:
dataset/ labels.txt test/ images/ masks/ train/ images/ masks/ val/ images/ masks/
或使用
dataset/ labels.txt images/ masks/
在标签.txt应该包含一个用newline[/n]分隔的标签列表。例如,它看起来像这样:
background car pedestrian
- 要使用原始图像大小和颜色创建tfrecord,请使用如下脚本:
INPUT_DIR= ... tf-semantic-segmentation-tfrecord-writer -dir $INPUT_DIR -r $INPUT_DIR/records
有以下附加参数:
- -s[--size]'$width,$height'(f.e.“512512”)
- -rm[--resize_method]('resize','resize_with_pad',resize_with_crop_or_pad)
- cm[--颜色模式](0=RGB,1=灰色,2=无(默认))
数据集
fromtf_semantic_sementation.datasetsimportget_datasetbyname,datasets_by_name,DataType,get_cache_dir# print availiable dataset namesprint(list(datasets_by_name.keys()))# get the binary (waste or not) datasetdata_dir='/hdd/data/'name='tacobinary'cache_dir=get_cache_dir(data_dir,name.lower())ds=get_dataset_by_name(name,cache_dir)# print labels and classesprint(ds.labels)print(ds.num_classes)# print number of training examplesprint(ds.num_examples(DataType.TRAIN))# or simply print the summaryds.summary()
调试数据集
python -m tf_semantic_segmentation.debug.dataset_vis -d ade20k
TF记录
这个库简化了创建tfrecord数据集的过程,以便更快地进行培训。
写入TF记录:
fromtf_semantic_segmentation.datasetsimportTFWriterds=...writer=TFWriter(record_dir)writer.write(ds)writer.validate(ds)
或将simple与此脚本一起使用(将以128 x 128(宽x高)的大小保存):
tf-semantic-segmentation-tfrecord-writer -d 'toy' -c /hdd/datasets/ -s '128,128'
分析已写入的tfrecord(带平均值)
python -m tf_semantic_segmentation.bin.tfrecord_analyser -r records/ --mean
码头工人
docker build -t tf_semantic_segmentation -f docker/Dockerfile ./
或者拉最新版本
docker pull baudcode/tf_semantic_segmentation:latest
预测
^{pr21}$使用代码
fromtensorflow.keras.modelsimportload_modelimportnumpyasnpfromtf_semantic_segmentation.processingimportdatasetfromtf_semantic_segmentation.visualizationsimportshow,masksmodel=load_model('logs/model-best.h5',compile=False)# model parameterssize=tuple(model.input.shape[1:3])depth=model.input.shape[-1]color_mode=dataset.ColorMode.GRAYifdepth==1elsedataset.ColorMode.RGB# define an imageimage=np.zeros((256,256,3),np.uint8)# preprocessingimage=image.astype(np.float32)/255.image,_=dataset.resize_and_change_color(image,None,size,color_mode,resize_method='resize')image_batch=np.expand_dims(image,axis=0)# predict (returns probabilities)p=model.predict(image_batch)# draw segmentation mapnum_classes=p.shape[-1]ifp.shape[-1]>1else2predictions_rgb=masks.get_colored_segmentation_mask(p,num_classes,images=image_batch,binary_threshold=0.5)# show images using matplotlibshow.show_images([predictions_rgb[0],image_batch[0]])
使用脚本
- 论形象
python -m tf_semantic_segmentation.evaluation.predict -m model-best.h5 -i image.png
- tfval是“数据”类型的默认值
python -m tf_semantic_segmentation.evaluation.predict -m model-best.h5 -r records/camvid/
- 在TFRecord上(带导出到目录)
python -m tf_semantic_segmentation.evaluation.predict -m model-best.h5 -r records/cubbinary/ -o out/ -rm 'resize_with_pad'
- 视频
python -m tf_semantic_segmentation.evaluation.predict -m model-best.h5 -v video.mp4
- 视频(带导出到输出/p-视频.mp4)在
python -m tf_semantic_segmentation.evaluation.predict -m model-best.h5 -v video.mp4 -o out/
使用Tensorflow模型服务器进行预测
- 安装
# installecho"deb [arch=amd64] http://storage.googleapis.com/tensorflow-serving-apt stable tensorflow-model-server tensorflow-model-server-universal"| sudo tee /etc/apt/sources.list.d/tensorflow-serving.list &&\ curl https://storage.googleapis.com/tensorflow-serving-apt/tensorflow-serving.release.pub.gpg | sudo apt-key add - sudo apt-get update && apt-get install tensorflow-model-server
- 启动模型服务器
### using a single model tensorflow_model_server --rest_api_port=8501 --model_base_path=/home/user/models/mymodel/saved_model ### or using an ensamble of multiple models# helper to write the ensamble config yaml file (models/ contains multiple logdirs/, logdir must contain the name 'unet') python -m tf_semantic_segmentation.bin.model_server_config_writer -d models/ -c 'unet'# start model server with written models.yaml tensorflow_model_server --model_config_file=models.yaml --rest_api_port=8501
比较模型和ensemnble
python -m tf_semantic_segmentation.evaluation.compare_models -i logs/ -c 'taco' -data /hdd/datasets/ -d 'tacobinary'
参数:
- -i(包含模型的目录)
- -c(模型名(目录名)必须包含此值)
- -data(数据目录)
- ^{emm>(数据集名称)
使用--help获取更多帮助
使用代码
^{pr31}$TFLite支持
转换模型
python -m tf_semantic_segmentation.bin.convert_tflite -i logs/mymodel/saved_model/0/ -o model.tflite
对模型的检验推理
python -m tf_semantic_segmentation.debug.tflite_test -m model.tflite -i Harris_Sparrow_0001_116398.jpg
- 项目
标签: