摘要:人群計(jì)數(shù)有什么用讓我們用一個(gè)例子來理解人群計(jì)數(shù)的有用性?;诘姆椒ㄎ覀儾挥每磮D像的補(bǔ)丁,而是使用可靠的卷積神經(jīng)網(wǎng)絡(luò)構(gòu)建一個(gè)端到端的回歸方法。這將整個(gè)圖像作為輸入,并直接生成人群計(jì)數(shù)。
人臉識(shí)別或人臉簽到往往是1:1,或1:N的圖像識(shí)別技術(shù),但如何數(shù)人數(shù),少量只要能識(shí)別人臉當(dāng)然就可以數(shù)人數(shù)了。
但當(dāng)我們面臨大規(guī)模擁擠的人群,我們可能不需要識(shí)別人臉,只是人群計(jì)數(shù),是否可以實(shí)現(xiàn)呢?
能幫我數(shù)數(shù)圖片中這個(gè)活動(dòng)有多少人參加嗎?
太多了?那這個(gè)怎么樣?
還是不行?沒關(guān)系!
今天我們將教你創(chuàng)建一個(gè)基于深度學(xué)習(xí)的人群計(jì)數(shù)模型。
本文是基于卷積神經(jīng)網(wǎng)絡(luò)(CNN)的工作方式建立的,在進(jìn)一步研究之前,您可以參考下面這篇文章來了解這個(gè)主題:
https://www.analyticsvidhya.com/blog/2018/12/guide-convolutional-neural-network-cnn/?utm_source=blog&utm_medium=crowd-counting
現(xiàn)在,我們正式開始介紹~
目錄
?1.什么是人群計(jì)數(shù)?
?2.為什么要數(shù)人群?
?3.了解不同計(jì)算機(jī)視覺技術(shù)在人群計(jì)數(shù)中的應(yīng)用
?4.CSRNet的體系結(jié)構(gòu)與訓(xùn)練方法
?5.用Python構(gòu)建自己的人群計(jì)數(shù)模型
什么是人群計(jì)數(shù)?
人群計(jì)數(shù)是一種計(jì)算或估計(jì)圖像中的人數(shù)的技術(shù)。
還是這張圖——
你能告訴我這個(gè)圖片里大概有多少人嗎?最直接的方法是手工算,但這有實(shí)際意義嗎?當(dāng)人群這么多的時(shí)候,一個(gè)一個(gè)數(shù)幾乎是不可能的!
人群科學(xué)家們可以通過對(duì)圖片區(qū)域劃分,計(jì)算圖像某些部分的人數(shù),然后外推得出估計(jì)值。這種方法是現(xiàn)在較為普遍的方式,但是也存在誤差。幾十年來,我們不得不依靠粗略的指標(biāo)來估計(jì)這個(gè)數(shù)字。
“肯定有更好、更準(zhǔn)確的方法吧?
沒錯(cuò),有!”
雖然我們還沒有算法可以給出確切的數(shù)字,但大多數(shù)計(jì)算機(jī)視覺技術(shù)可以產(chǎn)生幾乎完美的較精確估計(jì)。讓我們先了解為什么人群計(jì)數(shù)是重要的,然后再深入研究其背后的算法。
人群計(jì)數(shù)有什么用?
讓我們用一個(gè)例子來理解人群計(jì)數(shù)的有用性。想象一下,中國傳媒大學(xué)剛剛舉辦了一個(gè)大型的數(shù)據(jù)科學(xué)會(huì)議?;顒?dòng)期間舉行了許多不同的會(huì)議。
你被要求分析和估計(jì)每一次參加會(huì)議的人數(shù)。這將幫助我們了解什么樣的會(huì)議吸引了最多的人數(shù)(以及哪些會(huì)議在這方面失敗了)。并由此可以針對(duì)性塑造明年的會(huì)議,所以這是一項(xiàng)重要的任務(wù)!
參加會(huì)議的人數(shù)太多了,如果人工數(shù)可能將需要很久!這就是學(xué)習(xí)人群計(jì)數(shù)技能的作用所在。只要獲得每一次會(huì)議中人群的照片,就可以建立了一個(gè)計(jì)算機(jī)視覺模型來完成其余的工作!
還有很多其他情況下,人群計(jì)數(shù)算法正在改變行業(yè)的運(yùn)作方式:
統(tǒng)計(jì)參加體育賽事的人數(shù)
估計(jì)有多少人參加了就職典禮或游行(可能是政治集會(huì))
對(duì)交通繁忙地區(qū)的監(jiān)察
協(xié)助人員配置和資源分配
不同計(jì)算機(jī)視覺技術(shù)在人群計(jì)數(shù)中的應(yīng)用
概括地說,目前我們可以用四種方法來計(jì)算人群中的人數(shù):
1.基于檢測的方法
我們可以使用一個(gè)移動(dòng)窗口式檢測器來識(shí)別圖像中的人,并計(jì)算出有多少人。用于檢測的方法需要訓(xùn)練有素的分類器來提取低層次特征。雖然這些方法在人臉檢測方面效果很好,但在擁擠的圖像上效果不佳,因?yàn)榇蠖鄶?shù)目標(biāo)對(duì)象都不是清晰可見的。
2.回歸方法
對(duì)于低級(jí)別的特征,上述方法使用并不有效,可以使用基于回歸的方法。我們首先從圖像中裁剪補(bǔ)丁,然后,針對(duì)每個(gè)補(bǔ)丁,提取低級(jí)別的特征。
3.基于密度估計(jì)的方法
我們首先為要檢測的圖片創(chuàng)建一個(gè)密度圖。然后,該算法學(xué)習(xí)了提取的特征與目標(biāo)密度映射之間的線性映射。我們也可以利用隨機(jī)森林回歸來學(xué)習(xí)非線性映射。
4.基于CNN的方法
我們不用看圖像的補(bǔ)丁,而是使用可靠的卷積神經(jīng)網(wǎng)絡(luò)(CNN)構(gòu)建一個(gè)端到端的回歸方法。這將整個(gè)圖像作為輸入,并直接生成人群計(jì)數(shù)。CNN在回歸或分類任務(wù)中非常有效,并且在生成密度圖方面也證明了它們的價(jià)值。
CSRNet是我們?cè)诒疚闹袑?shí)現(xiàn)的一種技術(shù),它部署了一個(gè)更深層次的CNN,用于捕獲高級(jí)別的特性和生成高質(zhì)量的密度圖,而不需要擴(kuò)展網(wǎng)絡(luò)復(fù)雜性。在講到編碼部分之前,讓我們先了解一下CSRNet是什么。
了解CSRNet的體系結(jié)構(gòu)和培訓(xùn)方法
CSRNet以VGG-16為前端,具有很強(qiáng)的遷移學(xué)習(xí)能力.VGG的輸出大小是原始輸入大小的?。CSRNet還在后端使用膨脹的卷積層。
那么,什么是膨脹的卷積?請(qǐng)參考以下圖像:
使用膨脹卷積的基本概念是在不增加參數(shù)的情況下擴(kuò)大核。所以,如果膨脹率是1,我們?nèi)『瞬⑺D(zhuǎn)到整個(gè)圖像上。然而,如果我們將擴(kuò)展率提高到2,內(nèi)核就會(huì)像上面的圖像所示的那樣擴(kuò)展(按照每個(gè)圖像下面的標(biāo)簽)。它可以替代匯集圖層。
基礎(chǔ)數(shù)學(xué)(推薦,選擇性了解)
我要花點(diǎn)時(shí)間解釋一下數(shù)學(xué)是如何工作的。(請(qǐng)注意,在Python中實(shí)現(xiàn)算法并不是必須的,但我強(qiáng)烈建議學(xué)習(xí)基本思想。)當(dāng)我們需要調(diào)整或修改模型時(shí),這將派上用場。
假設(shè)我們有一個(gè)輸入x(m,n),一個(gè)濾波器w(i,j),以及膨脹率r。輸出y(m,n)為:?
我們可以用(k*k)核推廣這個(gè)方程,其擴(kuò)張率為r。內(nèi)核擴(kuò)展到:
([K+(k-1)*(r-1)]*[k+(k-1)*(r-1)])
因此,每一幅圖像都產(chǎn)生了地面真相。在給定的圖像中,每個(gè)人的頭部都是用高斯核模糊的。所有圖像都被裁剪成9個(gè)補(bǔ)丁,每個(gè)補(bǔ)丁的大小是圖像原始大小的1/4。
前4個(gè)補(bǔ)丁分為4個(gè)四分之一,其他5個(gè)補(bǔ)丁隨機(jī)裁剪。最后,每個(gè)補(bǔ)丁的鏡像被取為訓(xùn)練集的兩倍。?
簡而言之,這就是CSRNet背后的體系結(jié)構(gòu)細(xì)節(jié)。接下來,我們將查看它的培訓(xùn)細(xì)節(jié),包括所使用的評(píng)估指標(biāo)。
隨機(jī)梯度下降用于訓(xùn)練CSRNet作為端到端結(jié)構(gòu)。在訓(xùn)練期間,固定學(xué)習(xí)率設(shè)置為1e-6。損失函數(shù)被認(rèn)為是歐幾里德距離,以便測量地面之間的差異 真相和估計(jì)的密度圖。這表示為:
其中N是訓(xùn)練批次的大小。CSRNet中使用的評(píng)估標(biāo)準(zhǔn)是mae和mse。,即平均誤差和均方誤差。這些建議是由以下方面提供的:
在這里,Ci是估計(jì)數(shù):
L和W是預(yù)測密度圖的寬度。
我們的模型將首先預(yù)測給定圖像的密度圖。如果沒有人在場,像素值將為0。如果某個(gè)像素對(duì)應(yīng)于某個(gè)人,則將指定某個(gè)預(yù)定義的值。因此,計(jì)算一個(gè)人的總像素值會(huì)給出圖像中人的數(shù)量。
那么現(xiàn)在,是時(shí)候建立我們自己的人群計(jì)數(shù)模型了!
建立自己的人群計(jì)數(shù)模型
我們將在上??萍紨?shù)據(jù)集上實(shí)現(xiàn)CSRNet。這包括1198個(gè)加注釋的圖片,總共有330,165人。您可以從這里下載。
https://www.dropbox.com//s/fipgjqxl7uj8hd5/ShanghaiTech.zip?dl=0
使用下面的代碼塊克隆CSRNet-py火炬存儲(chǔ)庫。這保存了用于創(chuàng)建數(shù)據(jù)集、培訓(xùn)模型和驗(yàn)證結(jié)果的全部代碼:
git clone https://github.com/leeyeehoo/CSRNet-pytorch.git
請(qǐng)先安裝CUDA和PyTorch。這些是我們將在下面使用的代碼背后的主干。
現(xiàn)在,將數(shù)據(jù)集移動(dòng)到您在上面克隆的存儲(chǔ)庫并解壓它。然后我們需要?jiǎng)?chuàng)建基本事實(shí)值.make_dataset.ipynbfile是我們的救星。我們只需要在該筆記本中做一些小改動(dòng):
#setting the root to the Shanghai dataset you have downloaded
# change the root path as per your location of datasetroot = "/home/pulkit/CSRNet-pytorch/"
現(xiàn)在,讓我們?yōu)閜art_A和part_B中的圖像生成基本真值:?
生成每幅圖像的密度圖是一個(gè)時(shí)間步驟。所以,在代碼運(yùn)行時(shí),去泡一杯咖啡吧。
到目前為止,我們已經(jīng)在第A部分中為圖像生成了地面真值,我們將對(duì)Part_B圖像進(jìn)行同樣的處理。但在此之前,讓我們看看一個(gè)示例圖像,并繪制它的地面真實(shí)熱圖:?
生成每張圖像的密度圖是一個(gè)很長的時(shí)間。所以在代碼運(yùn)行時(shí)去沖泡一杯咖啡吧,耐心等待一下。?
到目前為止,我們已經(jīng)為part_A中的圖像生成了基本真值。 我們將對(duì)part_B圖像執(zhí)行相同的操作。但在此之前,讓我們看一個(gè)示例圖像并繪制其地面真實(shí)熱圖:
plt.imshow(Image.open(img_paths[0]))
gt_file = h5py.File(img_paths[0].replace(".jpg",".h5").replace("images","ground-truth"),"r")
groundtruth = np.asarray(gt_file["density"])
plt.imshow(groundtruth,cmap=CM.jet)
讓我們數(shù)一下這張圖片中有多少人在場:
np.sum(groundtruth)
270.32568?
同樣,我們將為part_B生成值:?
我們將使用克隆目錄中可用的.json文件。我們只需要更改JSON文件中圖像的位置。為此,打開.json文件并將當(dāng)前位置替換為圖像所在的位置。
請(qǐng)注意,所有這些代碼都是用Python 2編寫的。如果您使用的是其他任何Python版本,請(qǐng)進(jìn)行以下更改:?
1.在model.py中,將第18行中的xrange更改為range
2.在model.py中更改第19行:list(self.frontend.state_dict()。items())[i] [1] .data [:] = list(mod.state_dict()。items())[i][1]。數(shù)據(jù)[:]
3.在image.py中,將ground_truth替換為ground-true?
現(xiàn)在,打開一個(gè)新的終端窗口并鍵入以下命令:
cd CSRNet-pytorch
python train.py part_A_train.json part_A_val.json 0 0
這個(gè)步驟需要一些時(shí)間,耐心等一下。你也可以減少train.py文件中的紀(jì)元數(shù)量,以加快這個(gè)過程。你也可以從這里下載預(yù)先訓(xùn)練的重量,如果你不想等待的話。
最后,讓我們檢查一下我們的模型在看不見的數(shù)據(jù)上的性能。我們將使用val.ipynb文件來驗(yàn)證結(jié)果。記住要更改到預(yù)先訓(xùn)練過的權(quán)重和圖像的路徑。
#defining the image path
img_paths = []
for path in path_sets:
? ? for img_path in glob.glob(os.path.join(path, "*.jpg")):
? ? ? ?img_paths.append(img_path)
model = CSRNet()
#defining the model
model = model.cuda()
#loading the trained weights
checkpoint = torch.load("part_A/0model_best.pth.tar")
model.load_state_dict(checkpoint["state_dict"])
檢查測試圖像上的MAE(平均誤差),以評(píng)估我們的模型:
我們得到的MAE值為75.69,相當(dāng)不錯(cuò)?,F(xiàn)在讓我們檢查一下單個(gè)圖像上的預(yù)測:
哇,最初的數(shù)字是382,我們的模型估計(jì)圖像中有384人。這幾乎是一個(gè)完美的演繹!
恭喜你建立了自己的人群計(jì)數(shù)模型!
原始論文的評(píng)測圖和結(jié)果
最后
您可以在https://colab.research.google.com上測試跑人群計(jì)數(shù)。
需要安裝:Pytorch和Cuda
附論文下載地址:CSRNet: Dilated Convolutional Neural Networks for Understanding the HighlyCongested?
聲明:本文版權(quán)歸原作者所有,文章收集于網(wǎng)絡(luò),為傳播信息而發(fā),如有侵權(quán),請(qǐng)聯(lián)系小編及時(shí)處理,謝謝!
歡迎加入本站公開興趣群商業(yè)智能與數(shù)據(jù)分析群
興趣范圍包括各種讓數(shù)據(jù)產(chǎn)生價(jià)值的辦法,實(shí)際應(yīng)用案例分享與討論,分析工具,ETL工具,數(shù)據(jù)倉庫,數(shù)據(jù)挖掘工具,報(bào)表系統(tǒng)等全方位知識(shí)
QQ群:81035754
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/4860.html
摘要:適用人群爬蟲方向數(shù)據(jù)分析方向非程序員加薪四開發(fā)前后端開發(fā)是程序員職業(yè)中的熱門,目前來講,人才缺口依然很大。寄語上面就是所有方向的學(xué)習(xí)路線了,把你感興趣的方向掌握了之后,你去找工作不是什么問題的。 ...
本設(shè)計(jì)的時(shí)候,應(yīng)用YOLO目標(biāo)檢測算法、Openpose姿勢檢測算法、deepsort跟蹤算法、MSCNN群體密度估計(jì)技術(shù)實(shí)現(xiàn)了火災(zāi)監(jiān)測、抽煙數(shù)據(jù)監(jiān)測、行為表現(xiàn)安全監(jiān)控、人群密度數(shù)據(jù)監(jiān)測、防護(hù)口罩率數(shù)據(jù)監(jiān)測、人員定位系統(tǒng)數(shù)據(jù)監(jiān)測六個(gè)基本要素,對(duì)Python完成旅游景點(diǎn)安防監(jiān)控系統(tǒng)感興趣的小伙伴一起了解一下吧 本設(shè)計(jì)的時(shí)候,應(yīng)用YOLO目標(biāo)檢測算法、Openpose姿勢檢測算法、deepsor...
馬上就要開始啦這次共組織15個(gè)組隊(duì)學(xué)習(xí) 涵蓋了AI領(lǐng)域從理論知識(shí)到動(dòng)手實(shí)踐的內(nèi)容 按照下面給出的最完備學(xué)習(xí)路線分類 難度系數(shù)分為低、中、高三檔 可以按照需要參加 - 學(xué)習(xí)路線 - showImg(https://segmentfault.com/img/remote/1460000019082128); showImg(https://segmentfault.com/img/remote/...
摘要:我們?cè)賮砜磭鴥?nèi)一線公司內(nèi)的一個(gè)實(shí)驗(yàn)吧數(shù)據(jù)訓(xùn)練營都在用的方法,詳解測試的那些坑如上是不同的引導(dǎo)卡片樣式的實(shí)驗(yàn),最終結(jié)果樣式比樣式的提升。設(shè)指標(biāo)數(shù)值隱變量列顯變量列含方案變量。 作者|螞蟻金服人工智能部產(chǎn)品經(jīng)理 范磊 本文首發(fā)|微信公眾號(hào) 友盟數(shù)據(jù)服務(wù) (ID:umengcom),轉(zhuǎn)載請(qǐng)注明出處 If you are not running experiments,you are prob...
摘要:當(dāng)經(jīng)濟(jì)復(fù)蘇時(shí),招聘將再次成為關(guān)鍵戰(zhàn)場,特別是對(duì)年輕求職者來說,不是大量使用云計(jì)算的公司將變得不那么有吸引力。 Nutanix副總裁兼銷售首席運(yùn)營官Andrew Brinded表示,云計(jì)算為我們所處的時(shí)代提供了一種可行的部署模式,其影響必將不斷擴(kuò)大。1991年,著名的科技記者斯圖爾特·奧爾索普(Stewart Alsop)做出了一個(gè)著名的錯(cuò)誤預(yù)測。我預(yù)測最后一臺(tái)主機(jī)將在1996年3月15日...
閱讀 2875·2021-11-22 14:45
閱讀 3028·2021-09-10 11:26
閱讀 3400·2021-09-07 10:18
閱讀 2286·2019-08-30 14:08
閱讀 700·2019-08-29 12:22
閱讀 1452·2019-08-26 13:48
閱讀 2699·2019-08-26 10:24
閱讀 1225·2019-08-23 18:35