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

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

输出结果

image.png

image.png

image.png



VOC_LABELS = {

   'none': (0, 'Background'),

   'aeroplane': (1, 'Vehicle'),

   'bicycle': (2, 'Vehicle'),

   'bird': (3, 'Animal'),

   'boat': (4, 'Vehicle'),

   'bottle': (5, 'Indoor'),

   'bus': (6, 'Vehicle'),

   'car': (7, 'Vehicle'),

   'cat': (8, 'Animal'),

   'chair': (9, 'Indoor'),

   'cow': (10, 'Animal'),

   'diningtable': (11, 'Indoor'),

   'dog': (12, 'Animal'),

   'horse': (13, 'Animal'),

   'motorbike': (14, 'Vehicle'),

   'person': (15, 'Person'),

   'pottedplant': (16, 'Indoor'),

   'sheep': (17, 'Animal'),

   'sofa': (18, 'Indoor'),

   'train': (19, 'Vehicle'),

   'tvmonitor': (20, 'Indoor'),

}




SSD代码


class SSDNet(object):

   """Implementation of the SSD VGG-based 300 network.

   The default features layers with 300x300 image input are:

     conv4 ==> 38 x 38

     conv7 ==> 19 x 19

     conv8 ==> 10 x 10

     conv9 ==> 5 x 5

     conv10 ==> 3 x 3

     conv11 ==> 1 x 1

   The default image size used to train this network is 300x300.

   """

   default_params = SSDParams(

       img_shape=(300, 300),

       num_classes=21,

       no_annotation_label=21,

       feat_layers=['block4', 'block7', 'block8', 'block9', 'block10', 'block11'],

       feat_shapes=[(38, 38), (19, 19), (10, 10), (5, 5), (3, 3), (1, 1)],

       anchor_size_bounds=[0.15, 0.90],

       # anchor_size_bounds=[0.20, 0.90],

       anchor_sizes=[(21., 45.),

                     (45., 99.),

                     (99., 153.),

                     (153., 207.),

                     (207., 261.),

                     (261., 315.)],

       # anchor_sizes=[(30., 60.),

       #               (60., 111.),

       #               (111., 162.),

       #               (162., 213.),

       #               (213., 264.),

       #               (264., 315.)],

       anchor_ratios=[[2, .5],

                      [2, .5, 3, 1./3],

                      [2, .5, 3, 1./3],

                      [2, .5, 3, 1./3],

                      [2, .5],

                      [2, .5]],

       anchor_steps=[8, 16, 32, 64, 100, 300],

       anchor_offset=0.5,

       normalizations=[20, -1, -1, -1, -1, -1],

       prior_scaling=[0.1, 0.1, 0.2, 0.2]

       )

   def __init__(self, params=None):

       """Init the SSD net with some parameters. Use the default ones

       if none provided.

       """

       if isinstance(params, SSDParams):

           self.params = params

       else:

           self.params = SSDNet.default_params

   # ======================================================================= #

   def net(self, inputs,

           is_training=True,

           update_feat_shapes=True,

           dropout_keep_prob=0.5,

           prediction_fn=slim.softmax,

           reuse=None,

           scope='ssd_300_vgg'):

       """SSD network definition.

       """

       r = ssd_net(inputs,

                   num_classes=self.params.num_classes,

                   feat_layers=self.params.feat_layers,

                   anchor_sizes=self.params.anchor_sizes,

                   anchor_ratios=self.params.anchor_ratios,

                   normalizations=self.params.normalizations,

                   is_training=is_training,

                   dropout_keep_prob=dropout_keep_prob,

                   prediction_fn=prediction_fn,

                   reuse=reuse,

                   scope=scope)

       # Update feature shapes (try at least!)

       if update_feat_shapes:

           shapes = ssd_feat_shapes_from_net(r[0], self.params.feat_shapes)

           self.params = self.params._replace(feat_shapes=shapes)

       return r

   def arg_scope(self, weight_decay=0.0005, data_format='NHWC'):

       """Network arg_scope.

       """

       return ssd_arg_scope(weight_decay, data_format=data_format)

   def arg_scope_caffe(self, caffe_scope):

       """Caffe arg_scope used for weights importing.

       """

       return ssd_arg_scope_caffe(caffe_scope)

   # ======================================================================= #

   def update_feature_shapes(self, predictions):

       """Update feature shapes from predictions collection (Tensor or Numpy

       array).

       """

       shapes = ssd_feat_shapes_from_net(predictions, self.params.feat_shapes)

       self.params = self.params._replace(feat_shapes=shapes)

   def anchors(self, img_shape, dtype=np.float32):

       """Compute the default anchor boxes, given an image shape.

       """

       return ssd_anchors_all_layers(img_shape,

                                     self.params.feat_shapes,

                                     self.params.anchor_sizes,

                                     self.params.anchor_ratios,

                                     self.params.anchor_steps,

                                     self.params.anchor_offset,

                                     dtype)

   def bboxes_encode(self, labels, bboxes, anchors,

                     scope=None):

       """Encode labels and bounding boxes.

       """

       return ssd_common.tf_ssd_bboxes_encode(

           labels, bboxes, anchors,

           self.params.num_classes,

           self.params.no_annotation_label,

           ignore_threshold=0.5,

           prior_scaling=self.params.prior_scaling,

           scope=scope)

   def bboxes_decode(self, feat_localizations, anchors,

                     scope='ssd_bboxes_decode'):

       """Encode labels and bounding boxes.

       """

       return ssd_common.tf_ssd_bboxes_decode(

           feat_localizations, anchors,

           prior_scaling=self.params.prior_scaling,

           scope=scope)

   def detected_bboxes(self, predictions, localisations,

                       select_threshold=None, nms_threshold=0.5,

                       clipping_bbox=None, top_k=400, keep_top_k=200):

       """Get the detected bounding boxes from the SSD network output.

       """

       # Select top_k bboxes from predictions, and clip

       rscores, rbboxes = \

           ssd_common.tf_ssd_bboxes_select(predictions, localisations,

                                           select_threshold=select_threshold,

                                           num_classes=self.params.num_classes)

       rscores, rbboxes = \

           tfe.bboxes_sort(rscores, rbboxes, top_k=top_k)

       # Apply NMS algorithm.

       rscores, rbboxes = \

           tfe.bboxes_nms_batch(rscores, rbboxes,

                                nms_threshold=nms_threshold,

                                keep_top_k=keep_top_k)

       if clipping_bbox is not None:

           rbboxes = tfe.bboxes_clip(clipping_bbox, rbboxes)

       return rscores, rbboxes

   def losses(self, logits, localisations,

              gclasses, glocalisations, gscores,

              match_threshold=0.5,

              negative_ratio=3.,

              alpha=1.,

              label_smoothing=0.,

              scope='ssd_losses'):

       """Define the SSD network losses.

       """

       return ssd_losses(logits, localisations,

                         gclasses, glocalisations, gscores,

                         match_threshold=match_threshold,

                         negative_ratio=negative_ratio,

                         alpha=alpha,

                         label_smoothing=label_smoothing,

                         scope=scope)


相关文章
|
2月前
|
机器学习/深度学习 算法 TensorFlow
动物识别系统Python+卷积神经网络算法+TensorFlow+人工智能+图像识别+计算机毕业设计项目
动物识别系统。本项目以Python作为主要编程语言,并基于TensorFlow搭建ResNet50卷积神经网络算法模型,通过收集4种常见的动物图像数据集(猫、狗、鸡、马)然后进行模型训练,得到一个识别精度较高的模型文件,然后保存为本地格式的H5格式文件。再基于Django开发Web网页端操作界面,实现用户上传一张动物图片,识别其名称。
85 1
动物识别系统Python+卷积神经网络算法+TensorFlow+人工智能+图像识别+计算机毕业设计项目
|
9天前
|
机器学习/深度学习 人工智能 算法
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
车辆车型识别,使用Python作为主要编程语言,通过收集多种车辆车型图像数据集,然后基于TensorFlow搭建卷积网络算法模型,并对数据集进行训练,最后得到一个识别精度较高的模型文件。再基于Django搭建web网页端操作界面,实现用户上传一张车辆图片识别其类型。
28 0
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
|
18天前
|
存储 算法 Java
Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定数据结构和算法确保元素唯一性
Java Set因其“无重复”特性在集合框架中独树一帜。本文解析了Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定数据结构和算法确保元素唯一性,并提供了最佳实践建议,包括选择合适的Set实现类和正确实现自定义对象的hashCode()与equals()方法。
30 4
|
18天前
|
监控 算法 数据安全/隐私保护
基于三帧差算法的运动目标检测系统FPGA实现,包含testbench和MATLAB辅助验证程序
本项目展示了基于FPGA与MATLAB实现的三帧差算法运动目标检测。使用Vivado 2019.2和MATLAB 2022a开发环境,通过对比连续三帧图像的像素值变化,有效识别运动区域。项目包括完整无水印的运行效果预览、详细中文注释的代码及操作步骤视频,适合学习和研究。
|
2月前
|
机器学习/深度学习 人工智能 算法
鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别
鸟类识别系统。本系统采用Python作为主要开发语言,通过使用加利福利亚大学开源的200种鸟类图像作为数据集。使用TensorFlow搭建ResNet50卷积神经网络算法模型,然后进行模型的迭代训练,得到一个识别精度较高的模型,然后在保存为本地的H5格式文件。在使用Django开发Web网页端操作界面,实现用户上传一张鸟类图像,识别其名称。
101 12
鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别
|
22天前
|
机器学习/深度学习 人工智能 算法
【玉米病害识别】Python+卷积神经网络算法+人工智能+深度学习+计算机课设项目+TensorFlow+模型训练
玉米病害识别系统,本系统使用Python作为主要开发语言,通过收集了8种常见的玉米叶部病害图片数据集('矮花叶病', '健康', '灰斑病一般', '灰斑病严重', '锈病一般', '锈病严重', '叶斑病一般', '叶斑病严重'),然后基于TensorFlow搭建卷积神经网络算法模型,通过对数据集进行多轮迭代训练,最后得到一个识别精度较高的模型文件。再使用Django搭建Web网页操作平台,实现用户上传一张玉米病害图片识别其名称。
46 0
【玉米病害识别】Python+卷积神经网络算法+人工智能+深度学习+计算机课设项目+TensorFlow+模型训练
|
23天前
|
JSON 算法 数据可视化
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
这篇文章是关于如何通过算法接口返回的目标检测结果来计算性能指标的笔记。它涵盖了任务描述、指标分析(包括TP、FP、FN、TN、精准率和召回率),接口处理,数据集处理,以及如何使用实用工具进行文件操作和数据可视化。文章还提供了一些Python代码示例,用于处理图像文件、转换数据格式以及计算目标检测的性能指标。
40 0
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
|
2月前
|
机器学习/深度学习 算法 TensorFlow
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
交通标志识别系统。本系统使用Python作为主要编程语言,在交通标志图像识别功能实现中,基于TensorFlow搭建卷积神经网络算法模型,通过对收集到的58种常见的交通标志图像作为数据集,进行迭代训练最后得到一个识别精度较高的模型文件,然后保存为本地的h5格式文件。再使用Django开发Web网页端操作界面,实现用户上传一张交通标志图片,识别其名称。
93 6
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
|
3月前
|
搜索推荐 算法 Java
现有一个接口DataOperation定义了排序方法sort(int[])和查找方法search(int[],int),已知类QuickSort的quickSort(int[])方法实现了快速排序算法
该博客文章通过UML类图和Java源码示例,展示了如何使用适配器模式将QuickSort类和BinarySearch类的排序和查找功能适配到DataOperation接口中,实现算法的解耦和复用。
31 1
现有一个接口DataOperation定义了排序方法sort(int[])和查找方法search(int[],int),已知类QuickSort的quickSort(int[])方法实现了快速排序算法
|
3月前
|
机器学习/深度学习 人工智能 算法
【眼疾病识别】图像识别+深度学习技术+人工智能+卷积神经网络算法+计算机课设+Python+TensorFlow
眼疾识别系统,使用Python作为主要编程语言进行开发,基于深度学习等技术使用TensorFlow搭建ResNet50卷积神经网络算法,通过对眼疾图片4种数据集进行训练('白内障', '糖尿病性视网膜病变', '青光眼', '正常'),最终得到一个识别精确度较高的模型。然后使用Django框架开发Web网页端可视化操作界面,实现用户上传一张眼疾图片识别其名称。
81 9
【眼疾病识别】图像识别+深度学习技术+人工智能+卷积神经网络算法+计算机课设+Python+TensorFlow