日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

人脸检测中,如何构建输入图像金字塔

發(fā)布時間:2024/7/5 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 人脸检测中,如何构建输入图像金字塔 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目錄

  • 寫在前面
  • 人臉檢測中的圖像金字塔
  • 代碼實(shí)現(xiàn)
    • MTCNN
    • Seetaface
  • 總結(jié)
  • 參考

博客:blog.shinelee.me | 博客園 | CSDN

寫在前面

在文章《特征,特征不變性,尺度空間與圖像金字塔》中我們初步談到了圖像金字塔,在這篇文章中將介紹如何在人臉檢測任務(wù)中構(gòu)建輸入圖像金子塔。

人臉檢測中的圖像金字塔

人臉檢測任務(wù),輸入是一張圖像,輸出圖像中人臉?biāo)谖恢玫腂ounding Box。因?yàn)榫矸e神經(jīng)網(wǎng)絡(luò)強(qiáng)大的特征表達(dá)能力,現(xiàn)在的人臉檢測方法通常都基于卷積神經(jīng)網(wǎng)絡(luò),如MTCNN等。網(wǎng)絡(luò)確定后,通常只適用于檢測一定尺寸范圍內(nèi)的人臉,比如MTCNN中的P-Net,用于判斷\(12 \times 12\)大小范圍內(nèi)是否含有人臉,但是輸入圖像中人臉的尺寸是未知的,因此需要構(gòu)建圖像金字塔,以獲得不同尺寸的圖像,只要某個人臉被放縮到\(12\times12\)左右,就可以被檢測出來。下圖為MTCNN 的Pipeline,來自鏈接。

構(gòu)建金字塔需要解決幾個問題:

  • 金字塔要建多少層,即一共要生成多少張圖像
  • 每張圖像的尺寸如何確定
  • 下面直接從代碼層面看是如何實(shí)現(xiàn)的,也可以直接跳到總結(jié)查看結(jié)論。

    代碼實(shí)現(xiàn)

    MTCNN

    以下為MTCNN 人臉檢測 matlab代碼

    在人臉檢測,通常要設(shè)置要原圖中要檢測的最小人臉尺寸,原圖中小于這個尺寸的人臉不必care,MTCNN代碼中為minsize=20,MTCNN P-Net用于檢測\(12\times12\)大小的人臉。如果輸入圖像為\(100 \times 120\),其中人臉最小為\(20 \times 20\),最大為\(100 \times 100\)——對應(yīng)圖像較短邊長,為了將人臉放縮到\(12 \times 12\),同時保證相鄰層間縮放比率factor=0.709,則金子塔中圖像尺寸依次為\(60 \times 72\)\(52 \times 61\)\(36 \times 43\)\(26 \times 31\)\(18 \times 22\)\(13 \times 16\),其中\(60 \times 72\)對應(yīng)把\(20\times 20\)的人臉縮放到\(12 \times 12\)\(13 \times 16\)對應(yīng)把\(100 \times 100\)的人臉縮放到\(12 \times 12\)(在保證縮放比率一致的情況下近似)。

    現(xiàn)在就可以回答上面的兩個問題了:

  • 給定輸入圖像,根據(jù)設(shè)置的最小人臉尺寸以及網(wǎng)絡(luò)能檢測的人臉尺寸,確定圖像金子塔中最大圖像和最小圖像
  • 根據(jù)設(shè)置的金字塔層間縮放比率,確定每層圖像的尺寸
  • Seetaface

    可以再看一下Seetaface中是如何構(gòu)建圖像金字塔的,Seetaface人臉檢測使用的是非深度學(xué)習(xí)的方法,檢測窗口大小impl_->kWndSize = 40,其對應(yīng)MTCNN中網(wǎng)絡(luò)適宜檢測的人臉大小。

    // 設(shè)置最大人臉,計(jì)算最大 void FaceDetection::SetMinFaceSize(int32_t size) {if (size >= 20) {impl_->min_face_size_ = size;impl_->img_pyramid_.SetMaxScale(impl_->kWndSize / static_cast<float>(size));} }// 設(shè)置最大尺度 inline void SetMaxScale(float max_scale) {max_scale_ = max_scale;scale_factor_ = max_scale;UpdateBufScaled(); }// 設(shè)置最小人臉 void FaceDetection::SetMaxFaceSize(int32_t size) {if (size >= 0)impl_->max_face_size_ = size; }// 設(shè)置相鄰層放縮比率 void FaceDetection::SetImagePyramidScaleFactor(float factor) {if (factor >= 0.01f && factor <= 0.99f)impl_->img_pyramid_.SetScaleStep(static_cast<float>(factor)); }// 在金字塔中檢測人臉 std::vector<seeta::FaceInfo> FaceDetection::Detect(const seeta::ImageData & img) {int32_t min_img_size = img.height <= img.width ? img.height : img.width;min_img_size = (impl_->max_face_size_ > 0 ? (min_img_size >= impl_->max_face_size_ ? impl_->max_face_size_ : min_img_size) : min_img_size);// ...// 最小尺度為 impl_->kWndSize / min_img_size,在Seetaface中impl_->kWndSize=40impl_->img_pyramid_.SetMinScale(static_cast<float>(impl_->kWndSize) / min_img_size);// ...impl_->pos_wnds_ = impl_->detector_->Detect(&(impl_->img_pyramid_));// ... }// 金子塔中對應(yīng)尺度的圖像 const seeta::ImageData* ImagePyramid::GetNextScaleImage(float* scale_factor) {// initial scale_factor_ = max_scale = impl_->kWndSize / min_face_sizeif (scale_factor_ >= min_scale_) { // min_scale_ = impl_->kWndSize / min_img_sizeif (scale_factor != nullptr)*scale_factor = scale_factor_;width_scaled_ = static_cast<int32_t>(width1x_ * scale_factor_);height_scaled_ = static_cast<int32_t>(height1x_ * scale_factor_);seeta::ImageData src_img(width1x_, height1x_);seeta::ImageData dest_img(width_scaled_, height_scaled_);src_img.data = buf_img_;dest_img.data = buf_img_scaled_;seeta::fd::ResizeImage(src_img, &dest_img);scale_factor_ *= scale_step_;img_scaled_.data = buf_img_scaled_;img_scaled_.width = width_scaled_;img_scaled_.height = height_scaled_;return &img_scaled_;} else {return nullptr;} }

    看代碼就很清晰了,與MTCNN是相通的。

    總結(jié)

    人臉檢測中的圖像金字塔構(gòu)建,涉及如下數(shù)據(jù):

  • 輸入圖像尺寸,定義為(h, w)
  • 最小人臉尺寸,定義為 min_face_size
  • 最大人臉尺寸,如果不設(shè)置,為圖像高寬中較短的那個,定義為max_face_size
  • 網(wǎng)絡(luò)/方法能檢測的人臉尺寸,定義為net_face_size
  • 金字塔層間縮放比率,定義為factor
  • 縮放圖像是為了將圖像中的人臉縮放到網(wǎng)絡(luò)能檢測的適宜尺寸,圖像金字塔中
    最大尺度max_scale = net_face_size / min_face_size,
    最小尺度min_scale = net_face_size / max_face_size,
    中間的尺度scale_n = max_scale * (factor ^ n),
    對應(yīng)的圖像尺寸為(h_n, w_n) = (h * scale_n, w_n * scale_n)。

    以上。

    參考

    • MTCNN_face_detection_alignment
    • SeetaFaceEngine

    轉(zhuǎn)載于:https://www.cnblogs.com/shine-lee/p/10066049.html

    總結(jié)

    以上是生活随笔為你收集整理的人脸检测中,如何构建输入图像金字塔的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。