首页 > 编程知识 正文

patran二次开发,lsdyna二次开发python

时间:2023-05-04 14:59:32 阅读:26652 作者:4421

1 .前言本节从代码库中的demo.ipynb笔记本电脑开始,全面了解Mask RCNN的网络体系结构。

2 .掩码rcnn总览下的Figure1显示了这个项目中掩码rcnn的网络结构的图像。 博客叠加态的猫

这个结构图包含很多细节,先大致整理一下吧。 稍后我会详细说明源代码。

首先是巴克bone。 输入原始图像后,可以首先通过基于ResNet101的FPN特征金字塔网络进行特征提取。 然后,你会发现这里的实现与原来的FPN完全不同。 它对上向下的特征再次进行了3 3 3times 3 33卷积,并进一步进行了特征的提取。 其次各FPN层的特征单独进入RPN处理层,即根据Anchor的数据信息决定候选区域的分类(前景和背景)和粗略定位结果。 此部分的结果用rpn_class和rpn_bbox表示。 rpn_class:[batch,num_rois,2]rpn_bbox:[batch,num_rois,(dy,dx,候选框)首先根据前景得分排序,然后是专业技术要利用RPN回归结果修改Anchors,需要注意这里的Anchors都是规范化的。 也就是说,修正后需要进行边界限制以防止越境。 最后制作NMS,如果削得太多,直接添加[ 0,0,0,0 ] [ 0,0,0,0 ] [ 0,0,0,0 ]达到配置文件要求的候选框架数即可。 最终,该部分的输出是rpn _ rois:rpn _ rois:[ images _ per _ GPU,num_rois,(y1,x1,y2, x2],然后基于候选框的实际尺寸(需要将归一化候选框映射到原始图像尺寸)对这些候选子图进行独立的分类和回归,所获得的结果是mrcnn_class和mrcnn_bbox (例如num_rois,num_classes (classifierprobabilitiesmrcnn _ bbox ) Deltas ) : [batch,num_rois,num _ classes,]

# num_anchors,为每个图像生成的锚定框的数量# num_rois,由锚定框为每个图像筛选的推荐区域的数量, 由POST_NMS_ROIS_TRAINING或post _ NMS _ rois _ in ferer detection _ max _ instances定义的# detections,[batch,] score ) ] num_classes (classifier probabilities # Mr CNN _ bbox,[batch,num_rois,num _ classes,(dy,dx,log ) MASK_POOL_SIZE,MASK_POOL_SIZE,NUM_CLASSES]# rpn_rois,[batch,num_rois,(y1,x1,y2,x2,cc2 )

3.1 基础设置

首先导入需要用到的包,然后设置COCO数据集相关文件所在的根目录,加载模型的路径以及执行检测的图片路径,代码如下:

import osimport sysimport randomimport mathimport numpy as npimport skimage.ioimport matplotlibimport matplotlib.pyplot as plt# Root directory of the projectROOT_DIR = os.path.abspath("../")# Import Mask RCNNsys.path.append(ROOT_DIR) # To find local version of the libraryfrom mrcnn import utilsimport mrcnn.model as modellibfrom mrcnn import visualize# 导入COCO数据集的配置# 当我们导入一个模块时:import xxx,默认情况下python解析器会搜索当前目录、已安# 装的内置模块和第三方模块,搜索路径存放在sys模块的path中.sys.path.append(os.path.join(ROOT_DIR, "samples/coco/")) # To find local versionimport coco# 使用%matplotlib命令可以将matplotlib的图表直接嵌入到Notebook之中,或者使用指定# 的界面库显示图表,它有一个参数指定matplotlib图表的显示方式%matplotlib inline # Directory to save logs and trained modelMODEL_DIR = os.path.join(ROOT_DIR, "logs")# Local path to trained weights fileCOCO_MODEL_PATH = os.path.join(ROOT_DIR, "mask_rcnn_coco.h5")# Download COCO trained weights from Releases if neededif not os.path.exists(COCO_MODEL_PATH): utils.download_trained_weights(COCO_MODEL_PATH)# Directory of images to run detection onIMAGE_DIR = os.path.join(ROOT_DIR, "images") 3.2 网络配置

接下来需要进行配置设定,新定义了一个Class名为InferenceConfig继承了coco.CocoConfig类,在demo.ipynb中我们直接使用COCO的预训练模型所以使用它的设置就可以了。又因为我们这里需要检测的是单张图片,所以需要重写几个配置参数,具体如下:

# 父类继承了Config类,目的就是记录配置,并在其基础上添加了几个新的属性class InferenceConfig(coco.CocoConfig): # Set batch size to 1 since we'll be running inference on # one image at a time. Batch size = GPU_COUNT * IMAGES_PER_GPU GPU_COUNT = 1 IMAGES_PER_GPU = 1config = InferenceConfig()config.display()

再打印出配置看一下:

Configurations:BACKBONE_SHAPES [[256 256] [128 128] [ 64 64] [ 32 32] [ 16 16]]BACKBONE_STRIDES [4, 8, 16, 32, 64]BATCH_SIZE 1BBOX_STD_DEV [ 0.1 0.1 0.2 0.2]DETECTION_MAX_INSTANCES 100DETECTION_MIN_CONFIDENCE 0.5DETECTION_NMS_THRESHOLD 0.3GPU_COUNT 1IMAGES_PER_GPU 1IMAGE_MAX_DIM 1024IMAGE_MIN_DIM 800IMAGE_PADDING TrueIMAGE_SHAPE [1024 1024 3]LEARNING_MOMENTUM 0.9LEARNING_RATE 0.002MASK_POOL_SIZE 14MASK_SHAPE [28, 28]MAX_GT_INSTANCES 100MEAN_PIXEL [ 123.7 116.8 103.9]MINI_MASK_SHAPE (56, 56)NAME cocoNUM_CLASSES 81POOL_SIZE 7POST_NMS_ROIS_INFERENCE 1000POST_NMS_ROIS_TRAINING 2000ROI_POSITIVE_RATIO 0.33RPN_ANCHOR_RATIOS [0.5, 1, 2]RPN_ANCHOR_SCALES (32, 64, 128, 256, 512)RPN_ANCHOR_STRIDE 2RPN_BBOX_STD_DEV [ 0.1 0.1 0.2 0.2]RPN_TRAIN_ANCHORS_PER_IMAGE 256STEPS_PER_EPOCH 1000TRAIN_ROIS_PER_IMAGE 128USE_MINI_MASK TrueUSE_RPN_ROIS TrueVALIDATION_STEPS 50WEIGHT_DECAY 0.0001 3.3 模型初始化

接下来初始化模型,然后载入预训练参数文件,代码如下:

# 创建前向推理的模型对象model = modellib.MaskRCNN(mode="inference", model_dir=MODEL_DIR, config=config)# 加载在MS-COCO数据集上训练的模型权重model.load_weights(COCO_MODEL_PATH, by_name=True)

注意,这里模型设置为了inference 模式。然后下面定义了以下COCO的每个类别的目标的名字,太长了这里就不贴了,可以自己查看代码。

3.4 检测单张图片

接下来就是加载单张图片,调用模型的detect方法,即可输出结果,最后使用辅助方法可视化结果,代码如下:

# Load a random image from the images folderfile_names = next(os.walk(IMAGE_DIR))[2]image = skimage.io.imread(os.path.join(IMAGE_DIR, random.choice(file_names)))# Run detectionresults = model.detect([image], verbose=1)# Visualize resultsr = results[0]visualize.display_instances(image, r['rois'], r['masks'], r['class_ids'], class_names, r['scores'])

获得的结果图展示:

4. 小结

这一节讲了一些这个项目中Mask RCNN的整体架构,再通过demo.ipynb展示了如何加载一个COCO数据集上预训练的模型预测一张示意图片并将结果可视化出来。下一节,我们将从网络结构看起,逐渐深入到项目的细节中。

5. 参考 https://www.cnblogs.com/hellcat/p/9789879.html

欢迎关注GiantPandaCV, 在这里你将看到独家的深度学习分享,坚持原创,每天分享我们学习到的新鲜知识。( • ̀ω•́ )✧

有对文章相关的问题,或者想要加入交流群,欢迎添加BBuf微信:


为了方便读者获取资料以及我们公众号的作者发布一些Github工程的更新,我们成立了一个QQ群,二维码如下,感兴趣可以加入。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。