StNet: Local and Global Spatial-Temporal Modeling for Action Recognition 論文閱讀

StNet: Local and Global Spatial-Temporal Modeling for Action Recognition 論文閱讀

  • Abstract
  • 1 Introduction
  • 2 Related Work
  • 3 Proposed Approach
  • 4 Experiments
  • 5 Conclusion

文章信息:
在這里插入圖片描述

原文鏈接:https://ojs.aaai.org/index.php/AAAI/article/view/4855
源碼:https://github.com/hyperfraise/Pytorch-StNet/tree/master
發表于:AAAI 2019

Abstract

這篇論文探討了視頻中的空間-時間建模的最有效網絡架構。與現有的CNN+RNN或純粹基于3D卷積的方法不同,我們提出了一種新穎的空間-時間網絡(StNet)架構,用于視頻中的局部和全局建模。具體而言,StNet將N個連續的視頻幀堆疊成一個超級圖像,該圖像具有3N個通道,并在超級圖像上應用2D卷積來捕獲局部空間-時間關系。為了建模全局空間-時間結構,我們在局部空間-時間特征圖上應用時間卷積。具體來說,StNet提出了一個新穎的時間Xception塊,它在視頻的特征序列上分別使用通道級和時間級的卷積。在Kinetics數據集上進行的大量實驗表明,我們的框架在動作識別方面優于幾種最先進的方法,并且可以在識別準確性和模型復雜性之間取得令人滿意的權衡。我們進一步展示了學習到的視頻表示在UCF101數據集上的泛化性能。

1 Introduction

在這里插入圖片描述

圖1:局部信息足以區分“砌磚”和“砌石”,而全局空間-時間線索對于區分“疊牌”和“飛牌”是必要的。

視頻中的動作識別已經引起了計算機視覺和機器學習社區的重視(Karpathy等人,2014年;Wang和Schmid,2013年;Wang、Qiao和Tang,2016年;Simonyan和Zisserman,2014年;Fernando等人,2015年;Wang等人,2016年;Qiu、Yao和Mei,2017年;Carreira和Zisserman,2017年;Shi等人,2017年;Zhang等人,2016年)。錄制設備的普及使得我們遠遠超出了手動處理的能力。因此,開發自動視頻理解算法以用于各種應用(如視頻推薦、人類行為分析、視頻監控等)變得非常重要。在這個任務中,局部和全局信息都很重要,如圖1所示。例如,要識別“砌磚”和“砌石”,局部空間信息對于區分磚和石頭至關重要;而要分類“疊牌”和“飛牌”,全局空間-時間線索是關鍵證據。

受深度網絡在圖像理解任務上取得的可喜成果(Ioffe和Szegedy,2015年;He等人,2016年;Szegedy等人,2017年)的啟發,深度學習被應用到視頻理解問題中。針對動作識別,主要探索了兩個研究方向,即采用CNN+RNN架構進行視頻序列建模(Donahue等人,2015年;Yue-Hei Ng等人,2015年),以及純粹采用基于ConvNet的架構進行視頻識別(Simonyan和Zisserman,2014年;Feichtenhofer、Pinz和Wildes,2016年;2017年;Wang等人,2016年;Tran等人,2015年;Carreira和Zisserman,2017年;Qiu、Yao和Mei,2017年)。

盡管取得了相當大的進展,但當前的動作識別方法在動作識別準確性方面仍然落后于人類表現。主要挑戰在于從視頻中提取具有區分性的空間-時間表示。對于CNN+RNN解決方案,前饋CNN部分用于空間建模,而時序建模部分,即LSTM(Hochreiter和Schmidhuber,1997年)或GRU(Cho等人,2014年),由于其循環架構,使得端到端優化變得非常困難。然而,分別訓練CNN和RNN部分對于整合的空間-時間表示學習來說并不是最優的。

用于動作識別的卷積神經網絡可以大致分為2D卷積網絡和3D卷積網絡兩類。2D卷積架構(Simonyan和Zisserman,2014年;Wang等人,2016年)從采樣的RGB幀中提取外觀特征,僅利用局部空間信息而不是局部空間-時間信息。至于時間動態,它們簡單地融合了從幾個片段中獲得的分類分數。雖然對幾個片段的分類分數進行平均是直接而有效的,但可能不太有效地捕獲時空信息。C3D(Tran等人,2015年)和I3D(Carreira和Zisserman,2017年)是典型的基于3D卷積的方法,它們同時建模了空間和時間結構,并實現了令人滿意的識別性能。眾所周知,與更深的網絡相比,淺層網絡在從大規模數據集中學習表示方面表現出較差的能力。當涉及到大規模人類動作識別時,一方面,將淺層2D卷積網絡膨脹到它們的3D對應物可能不足以生成有區別的視頻描述符;另一方面,深層2D卷積網絡的3D版本將導致模型過大以及在訓練和推理階段的計算成本過高。

考慮到上述問題,我們提出了我們的新穎空間-時間網絡(StNet)來解決大規模動作識別問題。首先,我們通過在由N個連續視頻幀組成的3N通道超級圖像上應用2D卷積來考慮局部空間-時間關系。因此,與在N個圖像上進行3D卷積相比,局部空間-時間信息可以更有效地編碼。其次,StNet在超級圖像的特征圖上插入時間卷積,以捕獲它們之間的時間關系。局部空間-時間建模后接時間卷積可以逐步建立全局空間-時間關系,并且具有輕量級和計算友好的特點。第三,在StNet中,我們進一步使用我們提出的時間Xception塊(TXB)而不是對幾個片段的分數進行平均來編碼時間動態。受到可分離的深度卷積的啟發(Chollet,2017年),TXB以獨立的通道級和時間級的1D卷積方式編碼時間動態,以獲得更小的模型尺寸和更高的計算效率。最后,TXB是基于卷積而不是循環架構的,因此可以輕松通過隨機梯度下降(SGD)進行端到端的優化。

我們在新發布的大規模動作識別數據集Kinetics(Kay等人,2017年)上評估了提出的StNet框架。實驗結果表明,StNet優于幾種最先進的基于2D和3D卷積的解決方案,同時從FLOP數量的角度獲得了更好的效率,并在識別準確性方面比其3D CNN對應物更有效。此外,我們將StNet學習到的表示轉移到UCF101(Soomro、Zamir和Shah,2012年)數據集上,以驗證其泛化能力。

2 Related Work

在文獻中,基于視頻的動作識別解決方案可以分為兩類:使用手工特征的動作識別和使用深度卷積網絡的動作識別。為了開發有效的空間-時間表示,研究人員提出了許多手工特征,如HOG3D(Klaser、Marsza?ek和Schmid,2008年)、SIFT3D(Scovanner、Ali和Shah,2007年)、MBH(Dalal、Triggs和Schmid,2006年)。目前,改進的密集軌跡(Wang和Schmid,2013年)是手工特征中的最先進方法。盡管其表現良好,但這種手工特征設計用于局部空間-時間描述,難以捕獲語義級別的概念。由于引入深度卷積神經網絡取得了巨大進展,基于ConvNet的動作識別方法已經實現了比傳統手工特征方法更高的準確性。至于利用CNN進行基于視頻的動作識別,存在以下兩個研究方向:

Encoding CNN Features:CNN通常用于從視頻幀中提取空間特征,然后使用循環神經網絡或特征編碼方法對提取的特征序列進行建模。在LRCN(Donahue等人,2015年)中,視頻幀的CNN特征被饋送到LSTM網絡進行動作分類。ShuttleNet(Shi等人,2017年)引入了生物學啟發的反饋連接來模擬空間CNN描述符的長期依賴關系。TLE(Diba、Sharma和Van Gool,2017年)提出了捕捉視頻片段之間交互作用的時間線性編碼,并將這些交互作用編碼成緊湊的表示形式。類似地,VLAD(Arandjelovic等人,2016年;Girdhar等人,2017年)和AttentionClusters(Long等人,2018年)已被提出用于局部特征集成。

ConvNet as Recognizer:首次嘗試使用深度卷積網絡進行動作識別是由Karpathy等人(Karpathy et al. 2014年)完成的。盡管Karpathy等人(Karpathy et al. 2014年)在動作識別方面取得了強大的結果,但融合了基于RGB的空間流和基于光流的時間流的預測分數的雙流ConvNet(Simonyan和Zisserman 2014年)在性能上取得了顯著改進。STResNet(Feichtenhofer、Pinz和Wildes 2016年)在(Simonyan和Zisserman 2014年)的兩個流之間引入了殘差連接,并展示了結果上的巨大優勢。為了建模視頻的長期時間結構,提出了Temporal Segment Network(TSN)(Wang等人,2016年),通過稀疏時間采樣策略實現了有效的視頻級監督,并進一步提升了基于ConvNet的動作識別器的性能。

觀察到2D卷積網絡不能直接利用動作的時間模式,因此空間-時間建模技術被更加顯式地引入。C3D(Tran等人,2015年)將3D卷積濾波器應用于視頻中以學習空間-時間特征。與2D卷積網絡相比,C3D具有更多的參數,要獲得良好的收斂性要困難得多。為了克服這一困難,T-ResNet(Feichtenhofer、Pinz和Wildes,2017年)在空間卷積網絡的層之間注入了時間快捷連接,以擺脫3D卷積。I3D(Carreira和Zisserman,2017年)通過將傳統的2D卷積網絡架構擴展為3D卷積網絡,同時從視頻中學習空間-時間表示。P3D(Qiu、Yao和Mei,2017年)將3D卷積濾波器解耦為2D空間卷積濾波器,后跟1D時間卷積濾波器。最近,有許多框架提出了改進3D卷積的方法(Zolfaghari、Singh和Brox,2018年;Wang等人,2018a年;Xie等人,2018年;Tran等人,2018年;Wang等人,2018b年;Chen等人,2018年)。我們的工作不同之處在于,通過對局部空間-時間特征圖進行時間卷積逐漸建模空間-時間關系

3 Proposed Approach

在這里插入圖片描述

圖2:基于ResNet(He等人,2016年)骨干構建StNet的示意圖。StNet的輸入是一個 T × 3 N × H × W T\times3N\times H\times W T×3N×H×W張量。局部空間-時間模式通過2D卷積進行建模。3D卷積被插入到Res3和Res4塊之后,用于長期時間動態建模。3D卷積的設置(# 輸出通道數,(時間核大小,高度核大小,寬度核大小),# 組)是 ( C i , ( 3 , 1 , 1 ) , 1 ) (C_i,(3,1,1),1) (Ci?,(3,1,1),1)

提出的StNet可以從現有的最先進的2D卷積網絡框架中構建,例如ResNet(He等人,2016年)、InceptionResNet(Szegedy等人,2017年)等等。以ResNet為例,圖2說明了我們如何從現有的2D卷積網絡構建StNet。從其他2D卷積網絡框架(如InceptionResNetV2(Szegedy等人,2017年)、ResNeXt(Xie等人,2017年)和SENet(Hu、Shen和Sun,2018年))構建StNet類似。因此,我們在這里不詳細說明所有這些細節。

Super-Image:受TSN(Wang等人,2016年)啟發,我們選擇通過對時間片段進行采樣來建模長期的時間動態,而不是輸入整個視頻序列。與TSN的一個不同之處在于,我們對T個時間段進行采樣,每個時間段由N個連續的RGB幀組成,而不是單個幀。這N幀在通道維度上堆疊以形成一個超級圖像,因此網絡的輸入是大小為T×3N×H×W的張量。超級圖像不僅包含由單個幀表示的局部空間外觀信息,還包含這些連續視頻幀之間的局部時間依賴關系。為了共同建模其中的局部空間-時間關系,并且節省模型權重和計算成本,我們在每個T個超級圖像上利用2D卷積(其輸入通道大小為3N)。具體來說,局部空間-時間相關性由ResNet的Conv1、Res2和Res3塊內的2D卷積核建模,如圖2所示。在我們當前的設置中,N被設置為5。在訓練階段,除了第一個卷積層外,2D卷積塊的權重可以直接從ImageNet預訓練的骨干2D卷積模型中初始化。Conv1的權重可以按照I3D(Carreira和Zisserman,2017年)中作者的做法進行初始化。

Temporal Modeling Block:應用在T個超級圖像上的2D卷積產生了T個局部空間-時間特征圖。構建采樣的T個超級圖像的全局空間-時間表示對于理解整個視頻至關重要。具體而言,我們選擇在Res3塊和Res4塊之后插入兩個時間建模塊。這些時間建模塊被設計用于捕獲視頻序列中的長期時間動態,它們可以通過利用Conv3d-BN3d-ReLU的架構輕松實現。值得注意的是,現有的2D卷積網絡框架已經足夠強大,可以用于空間建模,因此我們將3D卷積的空間卷積核大小都設置為1,以節省計算成本,而將時間卷積核的大小經驗性地設置為3。在Res3塊和Res4塊之后應用兩個時間卷積層的計算成本增加非常有限,但能夠有效地逐步捕獲全局空間-時間相關性。在時間建模塊中,Conv3d層的權重初始設置為 1 / ( 3 × C i ) 1/(3×C_i) 1/(3×Ci?),其中 C i C_i Ci?表示輸入通道的大小,偏置設置為0。BN3d被初始化為一個恒等映射。

Temporal Xception Block:我們的時間Xception塊是為了在特征序列中進行高效的時間建模并以端到端的方式進行簡單優化而設計的。我們選擇時間卷積來捕獲時間關系,而不是循環架構,主要是為了端到端訓練的目的。與普通的1D卷積不同,后者同時捕獲通道維和時間維信息,我們將通道維和時間維的計算分開,以提高計算效率。時間Xception架構如圖3(a)所示。特征序列被視為一個 T × C i n T×C_{in} T×Cin?的張量,這個張量是通過從T個超級圖像的特征圖上進行全局平均池化得到的。然后,沿著通道維度應用1D批量歸一化(Ioffe和Szegedy,2015年)來處理已知的協方差偏移問題,輸出信號是V。
在這里插入圖片描述
其中, v i v^i vi u i u^i ui分別表示輸出信號和輸入信號的第 i i i行; α \alpha α β \beta β是可訓練參數, m m m v a r var var是輸入小批量數據的累積運行均值和方差。為了建模時間關系,沿著時間維度的卷積應用于 V V V。我們將時間卷積分解為單獨的通道維和時間維的1D卷積。從技術上講,對于通道維的1D卷積,時間核大小設置為3,并且核的數量和組數設置為與輸入通道數相同。在這種情況下,每個核在單個通道內沿時間維進行卷積。對于時間維的1D卷積,我們將核的大小和組數都設置為1,這樣時間維的卷積核可以在每個時間步上跨越沿著通道維的所有元素進行操作。形式上,通道維和時間維的卷積可以分別描述為方程2和方程3。
在這里插入圖片描述
其中, x ∈ R T × C i x\in \mathbb{R}^{T\times C^i} xRT×Ci 是長度為 T T T的輸入 C i C_i Ci?維特征序列, y ∈ R T × C o y\in \mathbb{R}^{T\times C_o} yRT×Co? 表示輸出特征序列, y i , j y_{i,j} yi,j?是第 i i i個特征的第 j j j個通道的值,*表示乘法。在方程2中, W ( c ) ∈ R C o × 3 × 1 W^{(c)}\in \mathbb{R}^{C_o\times 3\times 1} W(c)RCo?×3×1 表示通道維卷積核,其參數為(#核,核大小,#組)=( C o C_o Co?,3, C i C_i Ci?)。在方程3中, W ( t ) ∈ R C o × 1 × C i W^{(t)}\in \mathbb{R}^{C_o\times 1\times C_i} W(t)RCo?×1×Ci? 表示時間維卷積核,其參數為(#核,核大小,#組)=( C o C_o Co?,1,1)。 b b b表示偏置。本文中, C o C_o Co?被設定為1024。單獨通道和時間維卷積的直觀示意圖可以在圖3(b)中找到。

如圖3(a)所示,與(He等人,2016年)的瓶頸設計類似,時間Xception塊有一個長支路和一個短支路。短支路是一個單一的1D時間維卷積,其核大小和組大小都為1。因此,短支路具有1的時間感受野。與此同時,長支路包含兩個通道維1D卷積層,因此具有5的時間感受野。直覺是,融合具有不同時間感受野大小的支路有助于更好地建模時間動態。時間Xception塊的輸出特征被送入沿時間維度的1D最大池化層,池化后的輸出被用作空間-時間聚合描述符進行分類。

在這里插入圖片描述

圖3:時間Xception塊(TXB)。我們提出的時間Xception塊的詳細配置如(a)所示。括號中的參數表示1D卷積的(#核,核大小,填充,#組)配置。綠色塊表示通道維1D卷積,藍色塊表示時間維1D卷積。 (b)描述了通道維和時間維的1D卷積。TXB的輸入是視頻的特征序列,表示為一個 T × C i n T\times C_{in} T×Cin?的張量。通道維1D卷積的每個核只沿著一個通道的時間維進行應用。時間維1D卷積核在每個時間步上跨越所有通道進行卷積。

4 Experiments

在這里插入圖片描述

5 Conclusion

在本文中,我們提出了StNet,用于聯合局部和全局空間-時間建模,以解決視頻動作識別問題。通過在采樣的超級圖像上應用2D卷積來對局部空間-時間信息進行建模,同時通過對超級圖像的局部空間-時間特征圖進行時間卷積來編碼全局時間交互。此外,我們提出了一個時間Xception塊來增強建模時間動態的能力。這樣的設計選擇使得我們的模型在訓練和推理階段都相對輕量級和計算效率高。因此,它允許使用最強大的2D CNN在大規模數據集上實例化StNet,并提高最終的動作識別準確性。在大規模動作識別基準Kinetics上進行了大量實驗證實了StNet的有效性。此外,在Kinetics數據集上訓練的StNet在UCF101數據集上展現出了相當好的遷移學習能力。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/12251.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/12251.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/12251.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Flutter 中的 Spacer 小部件:全面指南

Flutter 中的 Spacer 小部件:全面指南 在Flutter布局系統中,Spacer是一個Flex組件,用于占據可用空間,從而推動其他Widget到布局的開始或結束位置。Spacer通常與Row、Column或Flex一起使用,以實現靈活的布局設計。本文…

二叉樹專題(有關二叉樹的相關學習)

二叉樹 1.數概念及結構 1.1樹的結構 樹是一種非線性的數據結構,它是由n(n>0)個有限結點組成一個具有層次關系的集合。把它叫做樹是因 為它看起來像一棵倒掛的樹,也就是說它是根朝上,而葉朝下的。 有一個特殊的結…

ollama離線部署llama3(window系統)

首先介紹下ollama是什么?Ollama是一個開源的大型語言模型服務工具,旨在為用戶提供本地化的運行環境,滿足個性化的需求。具體來說,Ollama是一個功能強大的開源框架,可以簡化在Docker容器中部署和管理大型語言模型&a…

【C++】內聯函數、auto、范圍for

文章目錄 1.內聯函數2.auto關鍵字2.1auto簡介2.2auto的注意事項2.3auto不能推導的場景 3.基于范圍的for循環(C11)4.指針空值nullptr(C11) 1.內聯函數 概念: 以inline修飾的函數叫做內聯函數,編譯時C編譯器會在調用內聯函數的地方展開,沒有函…

商場綜合體能源監管平臺,實現能源高效管理

商場作為大型綜合體建筑,其能源消耗一直是備受關注的問題。為了有效管理商場能耗,提高商場能源效率,商場綜合體能源監管平臺應運而生。 商場綜合體能源監管平臺可通過軟硬件一起進行節能監管,硬件設備包括各種傳感器、監測儀表和…

Matter 1.3版標準新出爐,支持更多智能家居/家電/能源等設備

5月8日,CSA連接標準聯盟正式發布了Matter 1.3標準,過去CSA一直保持約每六個月一次的標準更新節奏。 圖源CSA連接標準聯盟官方 獲得一系列改進的Matter 1.3標準,將提升設備的互操作性,擴展支持的設備類別,并增強整個智…

Android 幾種系統升級方式詳解

目錄 ◆ 概述 ● 幾種啟動模式 ● MISC分區 ● CACHE分區 ● 幾種系統升級方式 ◆ Recovery升級 ● 升級包構成,簽名,制作 ● 升級腳本 ● 升級過程 ◆ OTA升級 ● 升級包構成,制作 ● 升級腳本 ● 升級過程 ◆ fastboot升級 ◆ ADB升級 幾…

【研發日記】Matlab/Simulink技能解鎖(七)——兩種復數移相算法

復數移相,也稱為復數相位旋轉,就是在原有復數的基礎上,不改變模數,只把相位角做一定的偏移。 文章目錄 前言 三角函數移相 復數乘法移相 分析和應用 總結 前言 見《【研發日記】Matlab/Simulink技能解鎖(二)——在Function編…

(三)Spring教程——依賴注入與控制反轉

Spring框架是為了簡化企業級應用開發而創建的,其強大之處在于對Java SE和Java EE開發進行全方位的簡化,Spring還對常用的功能進行封裝,可以極大地提高Java EE的開發效率。 依賴注入是Spring的核心技術之一,也被稱為“控制反轉”&a…

【Linux】自動化編譯工具——make/makefile(超細圖例詳解!!)

目錄 一、前言 二、make / Makefile背景介紹 🥝Makefile是干什么的? 🍇make又是什么? 三、demo實現【見見豬跑🐖】 四、依賴關系與依賴方法 1、概念理清 2、感性理解【父與子👨】 3、深層理解【程序…

【JavaEE】HTTP 協議

文章目錄 一、HTTP 協議1、HTTP 是什么2、理解 "應用層協議"3、理解 HTTP 協議的工作過程4、HTTP 協議格式5、HTTP 請求 (Request)5.1 認識 URL 6、 二、HTTPS1、HTTPS是什么2、"加密" 是什么3、HTTPS 的工作過程3.1 對稱加密3.2 非對稱加密3.3 證書3.4 完…

零樣本身份保持:ID-Animator引領個性化視頻生成技術新前沿

在最新的研究進展中,由Xuanhua He及其團隊提出的ID-Animator技術,為個性化視頻生成領域帶來了突破性的創新。這項技術的核心在于其零樣本(zero-shot)人物視頻生成方法,它允許研究者和開發者根據單一的參考面部圖像生成…

深度解刨性能測試工具Locust

🍅 視頻學習:文末有免費的配套視頻可觀看 🍅 關注公眾號【互聯網雜貨鋪】,回復 1 ,免費獲取軟件測試全套資料,資料在手,漲薪更快 Locust安裝 …

Python3 筆記:range() 函數

range() 函數返回數字序列,默認從 0 開始,默認以 1 遞增,并以指定的數字結束。 它的語法格式:range(start,end,step) start是起始值,end是終止值,step是間隔值 上述語句可以產生一個[start,…, end-1]列…

gin框架學習筆記(三) ——路由請求與相關參數

參數種類與參數處理 查詢參數 在講解查詢參數的定義之前,我們先來看一個例子,當我打開了CSDN,我現在想查看我的博客瀏覽量,那么我就需要點擊我的頭像來打開我的個人主頁,像下面這樣: 我們現在把瀏覽器的網址取下來,…

【35分鐘掌握金融風控策略27】貸中風控策略與客戶運營體系

目錄 貸中風控策略與客戶運營體系 貸中風控日標 貸中風控數據源 貸中風控策略與客戶運營體系 貸中是風控的第二道防線,貸中階段風控的重點工作就是存量客戶風控及運營。在當下,新客市場趨于飽和且獲客成本越來越高,所以,在做好…

基于Java的俄羅斯方塊游戲的設計與實現

關于俄羅斯方塊項目源碼.zip資源-CSDN文庫https://download.csdn.net/download/JW_559/89300281 基于Java的俄羅斯方塊游戲的設計與實現 摘 要 俄羅斯方塊是一款風靡全球,從一開始到現在都一直經久不衰的電腦、手機、掌上游戲機產品,是一款游戲規則簡單…

物聯網設計競賽_1_邊緣人工智能云計算

邊緣人工智能: 本質上邊緣人工智能,直接會在邊緣設備上運行機器學習算法,例如物聯網設備或邊緣服務器上,這樣可以減少數據傳輸延遲,提高響應速度。 云計算: 云計算模型中,數據通常被發送到遠…

在React中利用Postman測試代碼獲取數據

文章目錄 概要名詞解釋1、Postman2、axios 使用Postman測試API在React中獲取并展示數據小結 概要 在Web開發中,通過API獲取數據是一項常見任務。Postman是一個功能強大的工具,可以幫助開發者測試API,并查看API的響應數據。在本篇博客中&…

【C語言】—— 動態內存管理

【C語言】——動態內存管理 一、動態內存管理概述1.1、動態內存的概念1.2、動態內存的必要性 二、 m a l l o c malloc malloc 函數2.1、函數介紹2.2、應用舉例 三、 c a l l o c calloc calloc 函數四、 f r e e free free 函數4.1、函數介紹4.2、應用舉例 五、 r e a l l o …