長(zhǎng)沙民政職業(yè)技術(shù)學(xué)院 譚剛林
本論文對(duì)基于Mac OS操作系統(tǒng)的TFRecords圖片數(shù)據(jù)集制作進(jìn)行了有效地探索。從數(shù)據(jù)采集、圖片預(yù)處理到生成TFRecords數(shù)據(jù)的整個(gè)TFRecords圖片數(shù)據(jù)集的制作流程步驟都進(jìn)行了詳細(xì)介紹,為基于Mac OS操作系統(tǒng)進(jìn)行Tensorflow開(kāi)發(fā)的研究人員提供了有效的參考途徑。
Mac操作系統(tǒng)是基于Unix開(kāi)發(fā)而來(lái),對(duì)python支持相當(dāng)友好,但最大的缺點(diǎn)就是非常封閉,各種沙盒安全機(jī)制,導(dǎo)致除了官方的顯卡,對(duì)其它顯卡支持相當(dāng)?shù)夭?,基于此原因,谷歌官方現(xiàn)在放棄了Tensorflow GPU版本對(duì)Mac的后續(xù)支持。
蘋(píng)果電腦在市場(chǎng)上占有6%左右市場(chǎng)份額(各個(gè)評(píng)測(cè)機(jī)構(gòu)發(fā)布的數(shù)據(jù)不一樣),在Mac系統(tǒng)上進(jìn)行Tensorflow開(kāi)發(fā)是開(kāi)發(fā)人員的選項(xiàng)之一。數(shù)據(jù)集是使用Tensorflow進(jìn)行機(jī)器學(xué)習(xí)的“糧食”,谷歌官方推薦的數(shù)據(jù)集格式為TFRecords格式。筆者完成了在Mac OS Catalina(10.15.7)上進(jìn)行tfrecords圖片數(shù)據(jù)集的制作,對(duì)在Mac系統(tǒng)上進(jìn)行Tensorflow開(kāi)發(fā)進(jìn)行了有效地探索。
MAC OS是基于UNIX的蘋(píng)果電腦專用操作系統(tǒng),由于蘋(píng)果公司自己生產(chǎn)MAC的大部分硬件,MAC所用的操作系統(tǒng)是它自行開(kāi)發(fā)的,系統(tǒng)的穩(wěn)定性高、病毒攻擊少于windows系統(tǒng)。根據(jù)市場(chǎng)調(diào)研機(jī)構(gòu)Canalys發(fā)布的數(shù)據(jù)顯示,2020年第一季度蘋(píng)果電腦出貨量占全球PC出貨量的6%,如圖1所示。
本論文所用操作系統(tǒng)平臺(tái)為MAC OS Catalin(10.15.7)。
Conda是一種通用包管理系統(tǒng),旨在構(gòu)建和管理任何語(yǔ)言和任何類型的軟件。環(huán)境管理允許用戶方便地安裝不同版本的python并可以快速切換。Miniconda是簡(jiǎn)化版的Conda,只包含最基本的python與conda,以及相關(guān)的必須依賴項(xiàng),對(duì)于空間要求嚴(yán)格的用戶,Miniconda是一種更優(yōu)選擇。只包含最基本的東西,其他的庫(kù)需要用戶后期安裝。本論文的開(kāi)發(fā)環(huán)境通過(guò)Miniconda3來(lái)進(jìn)行管理。
Python是結(jié)合了解釋性、編譯性、互動(dòng)性和面向?qū)ο蟮哪_本語(yǔ)言。具有易學(xué)習(xí)、易閱讀、易維護(hù),標(biāo)準(zhǔn)庫(kù)豐富,可跨平臺(tái)使用和系統(tǒng)兼容性好等特點(diǎn)。Python 2.7被確定為最后一個(gè)Python 2.x版本,目前python最新版本為python3.8,本論文的研究是基于python3.8進(jìn)行開(kāi)發(fā)。
圖1 2020年第一季度電腦出貨量
TensorFlow是谷歌開(kāi)源的一款深度學(xué)習(xí)框架,2015年谷歌首次發(fā)布了TensorFlow1,2019年谷歌對(duì)TensorFlow進(jìn)行了重大版本更新,發(fā)布了TensorFlow2。新的版本TensorFlow2推薦使用tf.keras、tf.data等高級(jí)庫(kù),采用Eager模式搭建原型,tf.data處理數(shù)據(jù),tf.feature_column提取特征,tf.keras搭建模型,tf.saved_model打包模型。TensorFlow2相對(duì)TensorFlow1來(lái)說(shuō),對(duì)用戶更友好,更容易入門。TensorFlow2已被眾多企業(yè)與初創(chuàng)公司廣泛用于自動(dòng)化工作任務(wù)和開(kāi)發(fā)新系統(tǒng)。
圖2 攝像頭采集到的圖片
圖片拍攝采用威視達(dá)康的C7837WIP無(wú)線網(wǎng)絡(luò)攝像頭,圖像傳感器為1/4in,720p逐行掃描方式。使用C7837WIP采集黑色標(biāo)志線圖片,采集到的圖片如圖2所示。圖片大小為,png格式的彩色圖片。共采集500張圖片,其中400張圖片存放在train文件夾中作為訓(xùn)練集,100張圖片存放在test文件夾中作為測(cè)試集。
攝像頭采集到圖片過(guò)大,若直接將此類圖片輸入到機(jī)器學(xué)習(xí)網(wǎng)絡(luò)進(jìn)行學(xué)習(xí),導(dǎo)致計(jì)算量過(guò)大。先對(duì)圖像進(jìn)行裁剪,裁剪掉周圍無(wú)關(guān)的圖像。根據(jù)圖片的特點(diǎn)將的圖像裁剪成的圖像(如圖3所示),方便后期機(jī)器學(xué)習(xí)。圖片裁剪python程序流程如圖4所求。mac系統(tǒng)中的文件夾會(huì)有一些隱藏文件,在讀入圖片之前要先判斷文件是否為圖片文件,只能對(duì)圖片文件進(jìn)行裁剪操作,否則python程序運(yùn)行時(shí)會(huì)報(bào)屬性錯(cuò)誤。
圖3 裁剪后的圖片
對(duì)于裁剪后的圖片喂入機(jī)器學(xué)習(xí)網(wǎng)絡(luò)時(shí)數(shù)據(jù)量還是過(guò)大,對(duì)裁剪后的圖片再縮小4倍成的圖片。在python中導(dǎo)入opencv-python模塊,利用cv2.resize(image,size,inte rpolation=cv2.INTER_AREA)函數(shù)對(duì)圖片進(jìn)入縮小操作??s小后的圖片如圖5所求。
圖4 圖片裁剪流程圖
圖5 縮小4倍后的圖片
圖6 生成TFRecords數(shù)據(jù)流程圖
TFRecords是TensorFlow中常用的二進(jìn)制數(shù)據(jù)打包格式。將訓(xùn)練數(shù)據(jù)集和測(cè)試數(shù)據(jù)集分別打包成TFRecords文件,配合TF中相關(guān)的DataLoader / Transformer等API實(shí)現(xiàn)數(shù)據(jù)的加載和處理,便于高效地訓(xùn)練和評(píng)估模型。TFRecords內(nèi)部使用了“Protocol Buffer”二進(jìn)制數(shù)據(jù)編碼方案,幫助開(kāi)發(fā)人員合理地存儲(chǔ)數(shù)據(jù),程序運(yùn)行時(shí),只占用一個(gè)內(nèi)存塊,只需一次性加載一個(gè)二進(jìn)制文件的方式即可,對(duì)大型訓(xùn)練數(shù)據(jù)很友好。
生成TFRecords數(shù)據(jù)程序流程如圖6所示。訓(xùn)練集和測(cè)試集要分開(kāi)運(yùn)行,最終生成2個(gè).tfrecords文件。
通過(guò)實(shí)驗(yàn),發(fā)現(xiàn)在Mac系統(tǒng)Catalina(10.15.7)上制作TFRecords圖片集是完全可行的。在運(yùn)行速度和穩(wěn)定性上相對(duì)Windows系統(tǒng)來(lái)說(shuō)更穩(wěn)定。