深度学习是在图片中检测人类的唯一方法吗?

信息处理 图像处理 图像分割 分割 深度学习
2022-02-01 14:47:42

我正在寻找一种在图片中检测人类的方法。比如下面这张图,我想粗略的判断一下场景中有多少人。我必须能够检测到站着和坐着的人。我不介意不检测位于物理对象(例如公共汽车图片中的玻璃)后面的人。

在此处输入图像描述

AFAIK,通过训练深度神经网络可以很容易地解决这样的问题。但是,我的同事希望我也实现基于通用图像处理技术的检测技术。我花了几天时间寻找研究人员设计的技术,但除了基于显着性的技术之外我找不到任何其他技术(这可能很好,但我想测试几种基于老式图像处理的技术)。

我对图像的性质有严格的限制,例如亮度:无论它们是在白天还是晚上拍摄的,照片都会有非常不同的特征(例如,图像对比度可能会有很大差异)。

长话短说,考虑到图像携带的信息差异很大,我想知道是否确实存在一些现有的分割技术,试一试会很有趣?

1个回答

用于人体检测的流行特征描述符之一是 HOG- Histogram of Oriented Gradients通常你会训练一个分类器来识别人类和非人类,然后你会实现一个滑动窗口技术。HOG 在 Python 社区的大多数科学库中都有实现,例如在 skimage 中有一个示例here,我在这里复制它,因为链接总是会损坏:

import matplotlib.pyplot as plt

from skimage.feature import hog
from skimage import data, exposure


image = data.astronaut()

fd, hog_image = hog(image, orientations=8, pixels_per_cell=(16, 16),
                    cells_per_block=(1, 1), visualize=True, multichannel=True)

fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(8, 4), sharex=True, sharey=True)

ax1.axis('off')
ax1.imshow(image, cmap=plt.cm.gray)
ax1.set_title('Input image')

# Rescale histogram for better display
hog_image_rescaled = exposure.rescale_intensity(hog_image, in_range=(0, 10))

ax2.axis('off')
ax2.imshow(hog_image_rescaled, cmap=plt.cm.gray)
ax2.set_title('Histogram of Oriented Gradients')
plt.show()