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)


相关文章
|
10天前
|
机器学习/深度学习 人工智能 算法
猫狗宠物识别系统Python+TensorFlow+人工智能+深度学习+卷积网络算法
宠物识别系统使用Python和TensorFlow搭建卷积神经网络,基于37种常见猫狗数据集训练高精度模型,并保存为h5格式。通过Django框架搭建Web平台,用户上传宠物图片即可识别其名称,提供便捷的宠物识别服务。
142 55
|
3月前
|
机器学习/深度学习 算法 TensorFlow
动物识别系统Python+卷积神经网络算法+TensorFlow+人工智能+图像识别+计算机毕业设计项目
动物识别系统。本项目以Python作为主要编程语言,并基于TensorFlow搭建ResNet50卷积神经网络算法模型,通过收集4种常见的动物图像数据集(猫、狗、鸡、马)然后进行模型训练,得到一个识别精度较高的模型文件,然后保存为本地格式的H5格式文件。再基于Django开发Web网页端操作界面,实现用户上传一张动物图片,识别其名称。
114 1
动物识别系统Python+卷积神经网络算法+TensorFlow+人工智能+图像识别+计算机毕业设计项目
|
20天前
|
机器学习/深度学习 人工智能 算法
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
宠物识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了37种常见的猫狗宠物种类数据集【'阿比西尼亚猫(Abyssinian)', '孟加拉猫(Bengal)', '暹罗猫(Birman)', '孟买猫(Bombay)', '英国短毛猫(British Shorthair)', '埃及猫(Egyptian Mau)', '缅因猫(Maine Coon)', '波斯猫(Persian)', '布偶猫(Ragdoll)', '俄罗斯蓝猫(Russian Blue)', '暹罗猫(Siamese)', '斯芬克斯猫(Sphynx)', '美国斗牛犬
110 29
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
|
1月前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的【垃圾识别系统】实现~TensorFlow+人工智能+算法网络
垃圾识别分类系统。本系统采用Python作为主要编程语言,通过收集了5种常见的垃圾数据集('塑料', '玻璃', '纸张', '纸板', '金属'),然后基于TensorFlow搭建卷积神经网络算法模型,通过对图像数据集进行多轮迭代训练,最后得到一个识别精度较高的模型文件。然后使用Django搭建Web网页端可视化操作界面,实现用户在网页端上传一张垃圾图片识别其名称。
84 0
基于Python深度学习的【垃圾识别系统】实现~TensorFlow+人工智能+算法网络
|
1月前
|
机器学习/深度学习 人工智能 算法
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
手写数字识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Flask框架,开发网页端操作平台,实现用户上传一张图片识别其名称。
90 0
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
|
1月前
|
机器学习/深度学习 人工智能 算法
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
蔬菜识别系统,本系统使用Python作为主要编程语言,通过收集了8种常见的蔬菜图像数据集('土豆', '大白菜', '大葱', '莲藕', '菠菜', '西红柿', '韭菜', '黄瓜'),然后基于TensorFlow搭建卷积神经网络算法模型,通过多轮迭代训练最后得到一个识别精度较高的模型文件。在使用Django开发web网页端操作界面,实现用户上传一张蔬菜图片识别其名称。
94 0
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
|
1月前
|
机器学习/深度学习 人工智能 算法
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
车辆车型识别,使用Python作为主要编程语言,通过收集多种车辆车型图像数据集,然后基于TensorFlow搭建卷积网络算法模型,并对数据集进行训练,最后得到一个识别精度较高的模型文件。再基于Django搭建web网页端操作界面,实现用户上传一张车辆图片识别其类型。
86 0
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
|
2月前
|
监控 算法 数据安全/隐私保护
基于三帧差算法的运动目标检测系统FPGA实现,包含testbench和MATLAB辅助验证程序
本项目展示了基于FPGA与MATLAB实现的三帧差算法运动目标检测。使用Vivado 2019.2和MATLAB 2022a开发环境,通过对比连续三帧图像的像素值变化,有效识别运动区域。项目包括完整无水印的运行效果预览、详细中文注释的代码及操作步骤视频,适合学习和研究。
|
3月前
|
机器学习/深度学习 人工智能 算法
鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别
鸟类识别系统。本系统采用Python作为主要开发语言,通过使用加利福利亚大学开源的200种鸟类图像作为数据集。使用TensorFlow搭建ResNet50卷积神经网络算法模型,然后进行模型的迭代训练,得到一个识别精度较高的模型,然后在保存为本地的H5格式文件。在使用Django开发Web网页端操作界面,实现用户上传一张鸟类图像,识别其名称。
122 12
鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别
|
3月前
|
机器学习/深度学习 算法 TensorFlow
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
交通标志识别系统。本系统使用Python作为主要编程语言,在交通标志图像识别功能实现中,基于TensorFlow搭建卷积神经网络算法模型,通过对收集到的58种常见的交通标志图像作为数据集,进行迭代训练最后得到一个识别精度较高的模型文件,然后保存为本地的h5格式文件。再使用Django开发Web网页端操作界面,实现用户上传一张交通标志图片,识别其名称。
128 6
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面