在使用神经网络检测图像中的特征时,如何在原始图像中定位该特定特征?

人工智能 神经网络 深度学习 卷积神经网络 计算机视觉
2021-11-08 02:17:42

我了解如何训练神经网络来识别图像中的某些特征(人脸、汽车……),其中输入是图像的像素,输出是一组布尔值,指示在图像中识别出哪些对象图像,哪些不是。

我真正没有得到的是,当使用这种方法检测特征并且我们检测到人脸时,我们如何回到原始图像并确定检测到的人脸的位置或边界。这是如何实现的?这可以基于识别算法来实现,还是使用单独的算法来定位人脸?这似乎不太可能,因为要再次找到人脸,需要在图像中识别它,这就是首先使用 NN 的原因。

3个回答

这个问题被称为对象检测

如果你有一组带有盒装对象的训练图像,你可以训练一个神经网络来直接预测盒子。即输出与输入具有相同的维度,NN 学习为每个像素分配属于某个对象的概率。

如果您没有如此方便的数据集,您可以通过将部分图像输入网络来递归缩小位置,直到找到仍然完全激活某个分类的最小部分。

在本文中,他们尝试混合使用这两种方法。

您在此处列出的方法并不是真正的方法,这是关于某人如何完成某些任务的非常模糊的想法。你基本上告诉我们有一个算法f(image) = result,可以有无数种真正的方法来解决这个问题。

在大多数 CNN 方法中,图像通过卷积/池化层,这减少了每个当前层的维度。最后你会得到一个小得多的层,它通过 softmax 并获得不同类别的概率。这种类型的网络不会告诉您在哪里找到了某些东西,它只是告诉您在原始图像的某个地方找到了某些东西。

为了补充@BlindKungFuMaster 的答案,NN 上下文中的对象检测问题不一定通过使用产生与输入大小相同的输出的网络来解决。实际上,这种方法 - 为每个像素分配对象概率 - 更适合实例/语义分割问题。

简要回顾一下最常见的物体检测器,主要有两个系列:

  1. 两阶段方法(一个阶段通过滑动窗口的变体找到边界框,另一个阶段找到对象概率,一些层可能对两个阶段是共同的) - 来自RCNN(通过选择性搜索算法提出框,检查如果它们通过运行 CNN(在这种情况下为 AlexNet)包含一个对象 - 在每个盒子上,如果一个盒子包含一个对象,则运行线性回归以收紧盒子),通过Fast-RCNN(共享所有盒子的计算,使用 ROI 池来选择每个框对应的区域),Faster-RCNN(通过使用完全卷积的区域提议网络而不是繁重的选择性搜索来加速区域提议阶段),R-FCN(共享对象和框提议的所有计算)和Mask-RCNN,将faster-RCNN解决方案扩展到语义分割,但也通过使用双线性插值拟合框坐标+对象特征对应关系来更好地解决检测问题,替换ROI与 ROI 对齐的池化。
  2. 单阶段方法,例如SSDDSSDYOLOYOLO2,最后是具有焦点损失的 RetinaNet,在单次拍摄中同时产生框和对象分数,并且比两阶段方法工作得更快。

此处发布了关于对象识别、检测和分割的精彩总结- 强烈推荐。