DL之SSD:基于tensorflow利用SSD算法实现目标检测(21类)

简介: DL之SSD:基于tensorflow利用SSD算法实现目标检测(21类)

 

目录

输出结果

SSD代码


 

 

 

输出结果

1. VOC_LABELS = {
2. 'none': (0, 'Background'),
3. 'aeroplane': (1, 'Vehicle'),
4. 'bicycle': (2, 'Vehicle'),
5. 'bird': (3, 'Animal'),
6. 'boat': (4, 'Vehicle'),
7. 'bottle': (5, 'Indoor'),
8. 'bus': (6, 'Vehicle'),
9. 'car': (7, 'Vehicle'),
10. 'cat': (8, 'Animal'),
11. 'chair': (9, 'Indoor'),
12. 'cow': (10, 'Animal'),
13. 'diningtable': (11, 'Indoor'),
14. 'dog': (12, 'Animal'),
15. 'horse': (13, 'Animal'),
16. 'motorbike': (14, 'Vehicle'),
17. 'person': (15, 'Person'),
18. 'pottedplant': (16, 'Indoor'),
19. 'sheep': (17, 'Animal'),
20. 'sofa': (18, 'Indoor'),
21. 'train': (19, 'Vehicle'),
22. 'tvmonitor': (20, 'Indoor'),
23. }

 

 

 

SSD代码

1. 
2. class SSDNet(object):
3. """Implementation of the SSD VGG-based 300 network.
4. 
5.     The default features layers with 300x300 image input are:
6.       conv4 ==> 38 x 38
7.       conv7 ==> 19 x 19
8.       conv8 ==> 10 x 10
9.       conv9 ==> 5 x 5
10.       conv10 ==> 3 x 3
11.       conv11 ==> 1 x 1
12.     The default image size used to train this network is 300x300.
13.     """
14.     default_params = SSDParams(
15.         img_shape=(300, 300),
16.         num_classes=21,
17.         no_annotation_label=21,
18.         feat_layers=['block4', 'block7', 'block8', 'block9', 'block10', 'block11'],
19.         feat_shapes=[(38, 38), (19, 19), (10, 10), (5, 5), (3, 3), (1, 1)],
20.         anchor_size_bounds=[0.15, 0.90],
21. # anchor_size_bounds=[0.20, 0.90],
22.         anchor_sizes=[(21., 45.),
23.                       (45., 99.),
24.                       (99., 153.),
25.                       (153., 207.),
26.                       (207., 261.),
27.                       (261., 315.)],
28. # anchor_sizes=[(30., 60.),
29. #               (60., 111.),
30. #               (111., 162.),
31. #               (162., 213.),
32. #               (213., 264.),
33. #               (264., 315.)],
34.         anchor_ratios=[[2, .5],
35.                        [2, .5, 3, 1./3],
36.                        [2, .5, 3, 1./3],
37.                        [2, .5, 3, 1./3],
38.                        [2, .5],
39.                        [2, .5]],
40.         anchor_steps=[8, 16, 32, 64, 100, 300],
41.         anchor_offset=0.5,
42.         normalizations=[20, -1, -1, -1, -1, -1],
43.         prior_scaling=[0.1, 0.1, 0.2, 0.2]
44.         )
45. 
46. def __init__(self, params=None):
47. """Init the SSD net with some parameters. Use the default ones
48.         if none provided.
49.         """
50. if isinstance(params, SSDParams):
51.             self.params = params
52. else:
53.             self.params = SSDNet.default_params
54. 
55. # ======================================================================= #
56. def net(self, inputs,
57.             is_training=True,
58.             update_feat_shapes=True,
59.             dropout_keep_prob=0.5,
60.             prediction_fn=slim.softmax,
61.             reuse=None,
62.             scope='ssd_300_vgg'):
63. """SSD network definition.
64.         """
65.         r = ssd_net(inputs,
66.                     num_classes=self.params.num_classes,
67.                     feat_layers=self.params.feat_layers,
68.                     anchor_sizes=self.params.anchor_sizes,
69.                     anchor_ratios=self.params.anchor_ratios,
70.                     normalizations=self.params.normalizations,
71.                     is_training=is_training,
72.                     dropout_keep_prob=dropout_keep_prob,
73.                     prediction_fn=prediction_fn,
74.                     reuse=reuse,
75.                     scope=scope)
76. # Update feature shapes (try at least!)
77. if update_feat_shapes:
78.             shapes = ssd_feat_shapes_from_net(r[0], self.params.feat_shapes)
79.             self.params = self.params._replace(feat_shapes=shapes)
80. return r
81. 
82. def arg_scope(self, weight_decay=0.0005, data_format='NHWC'):
83. """Network arg_scope.
84.         """
85. return ssd_arg_scope(weight_decay, data_format=data_format)
86. 
87. def arg_scope_caffe(self, caffe_scope):
88. """Caffe arg_scope used for weights importing.
89.         """
90. return ssd_arg_scope_caffe(caffe_scope)
91. 
92. # ======================================================================= #
93. def update_feature_shapes(self, predictions):
94. """Update feature shapes from predictions collection (Tensor or Numpy
95.         array).
96.         """
97.         shapes = ssd_feat_shapes_from_net(predictions, self.params.feat_shapes)
98.         self.params = self.params._replace(feat_shapes=shapes)
99. 
100. def anchors(self, img_shape, dtype=np.float32):
101. """Compute the default anchor boxes, given an image shape.
102.         """
103. return ssd_anchors_all_layers(img_shape,
104.                                       self.params.feat_shapes,
105.                                       self.params.anchor_sizes,
106.                                       self.params.anchor_ratios,
107.                                       self.params.anchor_steps,
108.                                       self.params.anchor_offset,
109.                                       dtype)
110. 
111. def bboxes_encode(self, labels, bboxes, anchors,
112.                       scope=None):
113. """Encode labels and bounding boxes.
114.         """
115. return ssd_common.tf_ssd_bboxes_encode(
116.             labels, bboxes, anchors,
117.             self.params.num_classes,
118.             self.params.no_annotation_label,
119.             ignore_threshold=0.5,
120.             prior_scaling=self.params.prior_scaling,
121.             scope=scope)
122. 
123. def bboxes_decode(self, feat_localizations, anchors,
124.                       scope='ssd_bboxes_decode'):
125. """Encode labels and bounding boxes.
126.         """
127. return ssd_common.tf_ssd_bboxes_decode(
128.             feat_localizations, anchors,
129.             prior_scaling=self.params.prior_scaling,
130.             scope=scope)
131. 
132. def detected_bboxes(self, predictions, localisations,
133.                         select_threshold=None, nms_threshold=0.5,
134.                         clipping_bbox=None, top_k=400, keep_top_k=200):
135. """Get the detected bounding boxes from the SSD network output.
136.         """
137. # Select top_k bboxes from predictions, and clip
138.         rscores, rbboxes = \
139.             ssd_common.tf_ssd_bboxes_select(predictions, localisations,
140.                                             select_threshold=select_threshold,
141.                                             num_classes=self.params.num_classes)
142.         rscores, rbboxes = \
143.             tfe.bboxes_sort(rscores, rbboxes, top_k=top_k)
144. # Apply NMS algorithm.
145.         rscores, rbboxes = \
146.             tfe.bboxes_nms_batch(rscores, rbboxes,
147.                                  nms_threshold=nms_threshold,
148.                                  keep_top_k=keep_top_k)
149. if clipping_bbox is not None:
150.             rbboxes = tfe.bboxes_clip(clipping_bbox, rbboxes)
151. return rscores, rbboxes
152. 
153. def losses(self, logits, localisations,
154.                gclasses, glocalisations, gscores,
155.                match_threshold=0.5,
156.                negative_ratio=3.,
157.                alpha=1.,
158.                label_smoothing=0.,
159.                scope='ssd_losses'):
160. """Define the SSD network losses.
161.         """
162. return ssd_losses(logits, localisations,
163.                           gclasses, glocalisations, gscores,
164.                           match_threshold=match_threshold,
165.                           negative_ratio=negative_ratio,
166.                           alpha=alpha,
167.                           label_smoothing=label_smoothing,
168.                           scope=scope)
169.

 


相关文章
|
2月前
|
机器学习/深度学习 算法 TensorFlow
动物识别系统Python+卷积神经网络算法+TensorFlow+人工智能+图像识别+计算机毕业设计项目
动物识别系统。本项目以Python作为主要编程语言,并基于TensorFlow搭建ResNet50卷积神经网络算法模型,通过收集4种常见的动物图像数据集(猫、狗、鸡、马)然后进行模型训练,得到一个识别精度较高的模型文件,然后保存为本地格式的H5格式文件。再基于Django开发Web网页端操作界面,实现用户上传一张动物图片,识别其名称。
91 1
动物识别系统Python+卷积神经网络算法+TensorFlow+人工智能+图像识别+计算机毕业设计项目
|
3天前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的【垃圾识别系统】实现~TensorFlow+人工智能+算法网络
垃圾识别分类系统。本系统采用Python作为主要编程语言,通过收集了5种常见的垃圾数据集('塑料', '玻璃', '纸张', '纸板', '金属'),然后基于TensorFlow搭建卷积神经网络算法模型,通过对图像数据集进行多轮迭代训练,最后得到一个识别精度较高的模型文件。然后使用Django搭建Web网页端可视化操作界面,实现用户在网页端上传一张垃圾图片识别其名称。
20 0
基于Python深度学习的【垃圾识别系统】实现~TensorFlow+人工智能+算法网络
|
3天前
|
机器学习/深度学习 人工智能 算法
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
手写数字识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Flask框架,开发网页端操作平台,实现用户上传一张图片识别其名称。
16 0
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
|
3天前
|
机器学习/深度学习 人工智能 算法
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
蔬菜识别系统,本系统使用Python作为主要编程语言,通过收集了8种常见的蔬菜图像数据集('土豆', '大白菜', '大葱', '莲藕', '菠菜', '西红柿', '韭菜', '黄瓜'),然后基于TensorFlow搭建卷积神经网络算法模型,通过多轮迭代训练最后得到一个识别精度较高的模型文件。在使用Django开发web网页端操作界面,实现用户上传一张蔬菜图片识别其名称。
16 0
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
|
20天前
|
机器学习/深度学习 人工智能 算法
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
车辆车型识别,使用Python作为主要编程语言,通过收集多种车辆车型图像数据集,然后基于TensorFlow搭建卷积网络算法模型,并对数据集进行训练,最后得到一个识别精度较高的模型文件。再基于Django搭建web网页端操作界面,实现用户上传一张车辆图片识别其类型。
65 0
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
|
29天前
|
存储 算法 Java
Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定数据结构和算法确保元素唯一性
Java Set因其“无重复”特性在集合框架中独树一帜。本文解析了Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定数据结构和算法确保元素唯一性,并提供了最佳实践建议,包括选择合适的Set实现类和正确实现自定义对象的hashCode()与equals()方法。
32 4
|
29天前
|
监控 算法 数据安全/隐私保护
基于三帧差算法的运动目标检测系统FPGA实现,包含testbench和MATLAB辅助验证程序
本项目展示了基于FPGA与MATLAB实现的三帧差算法运动目标检测。使用Vivado 2019.2和MATLAB 2022a开发环境,通过对比连续三帧图像的像素值变化,有效识别运动区域。项目包括完整无水印的运行效果预览、详细中文注释的代码及操作步骤视频,适合学习和研究。
|
2月前
|
机器学习/深度学习 人工智能 算法
鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别
鸟类识别系统。本系统采用Python作为主要开发语言,通过使用加利福利亚大学开源的200种鸟类图像作为数据集。使用TensorFlow搭建ResNet50卷积神经网络算法模型,然后进行模型的迭代训练,得到一个识别精度较高的模型,然后在保存为本地的H5格式文件。在使用Django开发Web网页端操作界面,实现用户上传一张鸟类图像,识别其名称。
108 12
鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别
|
1月前
|
机器学习/深度学习 人工智能 算法
【玉米病害识别】Python+卷积神经网络算法+人工智能+深度学习+计算机课设项目+TensorFlow+模型训练
玉米病害识别系统,本系统使用Python作为主要开发语言,通过收集了8种常见的玉米叶部病害图片数据集('矮花叶病', '健康', '灰斑病一般', '灰斑病严重', '锈病一般', '锈病严重', '叶斑病一般', '叶斑病严重'),然后基于TensorFlow搭建卷积神经网络算法模型,通过对数据集进行多轮迭代训练,最后得到一个识别精度较高的模型文件。再使用Django搭建Web网页操作平台,实现用户上传一张玉米病害图片识别其名称。
53 0
【玉米病害识别】Python+卷积神经网络算法+人工智能+深度学习+计算机课设项目+TensorFlow+模型训练
|
1月前
|
JSON 算法 数据可视化
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
这篇文章是关于如何通过算法接口返回的目标检测结果来计算性能指标的笔记。它涵盖了任务描述、指标分析(包括TP、FP、FN、TN、精准率和召回率),接口处理,数据集处理,以及如何使用实用工具进行文件操作和数据可视化。文章还提供了一些Python代码示例,用于处理图像文件、转换数据格式以及计算目标检测的性能指标。
57 0
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)