最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

【模型+代碼/保姆級(jí)教程】使用Pytorch實(shí)現(xiàn)手寫漢字識(shí)別

2023-06-28 16:01 作者:AI精品課程搬運(yùn)工  | 我要投稿

鑒于已經(jīng)3202年了,GPT4都出來(lái)了,網(wǎng)上還是缺乏漢字識(shí)別這種“底層”基礎(chǔ)神經(jīng)網(wǎng)絡(luò)的能讓新手直接上手跑通的手把手教程,我就斗膽自己寫一篇好了。


本文的主要特點(diǎn):


使用EfficientNetV2模型真正實(shí)現(xiàn)3755類漢字識(shí)別


項(xiàng)目開源


預(yù)訓(xùn)練模型公開


預(yù)制數(shù)據(jù)集,無(wú)需處理直接使用


數(shù)據(jù)集

使用中科院制作的手寫漢字?jǐn)?shù)據(jù)集,鏈接直達(dá)官網(wǎng),所以我這里不多介紹,只有滿腔敬意。


上面參考的博客可能要你自己下載之后按照它的辦法再預(yù)處理一下,但是在這個(gè)環(huán)節(jié)出現(xiàn)問(wèn)題的朋友挺多,本著保姆級(jí)教程教程的原則,我把預(yù)處理的數(shù)據(jù)已經(jīng)傳到北航云盤(貌似有損壞,先用評(píng)論區(qū)的鏈接)了,速度應(yīng)該比百度網(wǎng)盤快吧,大概…


預(yù)訓(xùn)練模型已經(jīng)上傳了(后面有鏈接),但是如果想自己訓(xùn)一下,就需要下載這個(gè)數(shù)據(jù)集,解壓到項(xiàng)目結(jié)構(gòu)里的data文件夾如下所示


data文件夾和log文件夾需要自己建。


項(xiàng)目結(jié)構(gòu)


————————————————

完整源代碼

目錄結(jié)構(gòu)

重點(diǎn)注意data文件夾的結(jié)構(gòu),不要把數(shù)據(jù)集放錯(cuò)位置了或者多嵌套了文件夾

神經(jīng)網(wǎng)絡(luò)模型

預(yù)訓(xùn)練模型參數(shù)鏈接(包含vgg19和efficientnetv2)


請(qǐng)將.pth文件重命名為log+數(shù)字.pth的格式,例如log1.pth,放入log文件夾。方便識(shí)別和retrain。


VGG19

這里先后用了兩種神經(jīng)網(wǎng)絡(luò),我先用VGG19試了一下,分類前1000種漢字。訓(xùn)得有點(diǎn)慢,主要還是這模型有點(diǎn)老了,參數(shù)量也不小。而且要改到3755類的話還用原參數(shù)的話就很難收斂,也不知道該怎么調(diào)參數(shù)了,估計(jì)調(diào)好了也會(huì)規(guī)模很大,所以這里VGG19模型的版本只能分類1000種,就是數(shù)據(jù)集的前1000種(準(zhǔn)確率>92%)。


EfficientNetV2

這個(gè)模型很不錯(cuò),主要是卷積層的部分非常有效,參數(shù)量也很少。直接用small版本去分類3755個(gè)漢字,半小時(shí)就收斂得差不多了。所以本文用來(lái)實(shí)現(xiàn)3755類漢字的模型就是EfficientNetV2(準(zhǔn)確率>89%),后面的教程都是基于這個(gè),VGG19就不管了,在源碼里感興趣的自己看吧。

————————————————

運(yùn)行環(huán)境

顯存>=4G(與batchSize有關(guān),batchSize=512時(shí)顯存占用4.8G;如果是256或者128,應(yīng)該會(huì)低于4G,雖然會(huì)導(dǎo)致訓(xùn)得慢一點(diǎn))


內(nèi)存>=16G(訓(xùn)練時(shí)不太占內(nèi)存,但是剛開始加載的時(shí)候會(huì)突然占一下,如果小于16G還是怕爆)


如果你沒(méi)有安裝過(guò)Pytorch,啊,我也不知道怎么辦,你要不就看看安裝Pytorch的教程吧。(總體步驟是,有一個(gè)不太老的N卡,先去驅(qū)動(dòng)里看看cuda版本,安裝合適的CUDA,然后根據(jù)CUDA版本去pytorch.org找到合適的安裝指令,然后在本地pip install)


以下是項(xiàng)目運(yùn)行環(huán)境,我是3060 6G,CUDA版本11.6


這個(gè)約等號(hào)不用在意,可以都安裝最新版本,反正我這里應(yīng)該沒(méi)用什么特殊的API

————————————————

數(shù)據(jù)集準(zhǔn)備

首先定義classes_txt方法在Utils.py中(不是我寫的,是CSDN那兩篇博客的,MyDataset同):

生成每張圖片的路徑,存儲(chǔ)到train.txt或test.txt。方便訓(xùn)練或評(píng)估時(shí)讀取數(shù)據(jù)

定義Dataset類,用于制作數(shù)據(jù)集,為每個(gè)圖片加上對(duì)應(yīng)的標(biāo)簽,即圖片所在文件夾的代號(hào)

入口

我把各種超參都放在了args里方便改,請(qǐng)根據(jù)實(shí)際情況自行調(diào)整。這套defaults就是我訓(xùn)練這個(gè)模型時(shí)使用的超參,圖片size默認(rèn)32是因?yàn)槲绎@存太小辣??!但是數(shù)據(jù)集給的圖片大小普遍不超過(guò)64,如果想訓(xùn)得更精確,可以試試64*64的大小。


如果你訓(xùn)練時(shí)爆mem,請(qǐng)調(diào)小batch_size,試試256,128,64,32

————————————————

訓(xùn)練

在前面CSDN博客的基礎(chǔ)上,增加了lr_scheduler自行調(diào)整學(xué)習(xí)率(如果連續(xù)2個(gè)epoch無(wú)改進(jìn),就調(diào)小lr到一半),增加了連續(xù)訓(xùn)練的功能:


先在log文件夾下尋找是否存在參數(shù)文件,如果沒(méi)有,就認(rèn)為是初次訓(xùn)練;如果有,就找到后綴數(shù)字最大的log.pth,在這個(gè)基礎(chǔ)上繼續(xù)訓(xùn)練,并且每訓(xùn)練完一個(gè)epoch,就保存最新的log.pth,代號(hào)是上一次的+1。這樣可以多次訓(xùn)練,防止訓(xùn)練過(guò)程中出錯(cuò),參數(shù)文件損壞前功盡棄。


其中has_log_file和find_max_log在Utils.py中有定義。

————————————————

評(píng)估

沒(méi)什么好說(shuō)的,就是跑測(cè)試集,算總體準(zhǔn)確率。但是有一點(diǎn)不完善,就是看不到每一個(gè)類具體的準(zhǔn)確率。我的預(yù)訓(xùn)練模型其實(shí)感覺(jué)有幾類是過(guò)擬合的,但是我懶得調(diào)整了。

推理

輸入文字圖片,輸出識(shí)別結(jié)果:

其中char_dict就是每個(gè)漢字在數(shù)據(jù)集里的代號(hào)對(duì)應(yīng)的gb2312編碼,這個(gè)模型的輸出結(jié)果是它在數(shù)據(jù)集里的代號(hào),所以要查這個(gè)char_dict來(lái)獲取它對(duì)應(yīng)的漢字。

例如輸入圖片為:


程序運(yùn)行結(jié)果:

其他說(shuō)明

這個(gè)模型我正在嘗試移植到安卓應(yīng)用,因?yàn)镻ytorch有一套Pytorch for Android,但是現(xiàn)在遇到一個(gè)問(wèn)題,它的bitmap2Tensor函數(shù)內(nèi)部實(shí)現(xiàn)與Pytorch的toTensor()+Normalize()不一樣,導(dǎo)致輸入相同的圖片,轉(zhuǎn)出來(lái)的張量是不一樣的,比如我輸入的圖片是白底黑字,白底的部分輸出一樣,但是黑色的部分的數(shù)值出現(xiàn)了偏移,我用的是同一套歸一化參數(shù),不知道這是為什么。然后這個(gè)張量的差異就導(dǎo)致安卓端表現(xiàn)很不好,目前正在尋找解決辦法,灰階處理可能是出路?


另外,這個(gè)模型對(duì)于太細(xì)太黑的字體,準(zhǔn)確度貌似不是很好,可能還是有點(diǎn)過(guò)擬合了。建議輸入的圖片與數(shù)據(jù)集的風(fēng)格靠攏,黑色盡量淺一點(diǎn),線不要太細(xì)。

————————————————

為大家準(zhǔn)備了本項(xiàng)目所需的源代碼!深度學(xué)習(xí)以及計(jì)算機(jī)視覺(jué)學(xué)習(xí)資料!可論文指導(dǎo)1對(duì)1付費(fèi)咨詢!

可添加VX公眾號(hào):咕泡AI,回復(fù)333免費(fèi)領(lǐng)學(xué)習(xí)資料!

【1】人工智能學(xué)習(xí)課程及配套資料

【2】超詳解人工智能學(xué)習(xí)路線圖及學(xué)習(xí)大綱

【3】學(xué)人工智能必看優(yōu)質(zhì)書籍電子書匯總

【4】人工智能面試題庫(kù)大全以及問(wèn)題總結(jié)

【5】人工智能經(jīng)典論文100篇+解讀+復(fù)現(xiàn)教程

【6】計(jì)算機(jī)視覺(jué)技術(shù)教學(xué)課程+YOLO等項(xiàng)目教學(xué)

【7】人工智能最新行業(yè)報(bào)告??

【模型+代碼/保姆級(jí)教程】使用Pytorch實(shí)現(xiàn)手寫漢字識(shí)別的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
宁河县| 五寨县| 北辰区| 巴中市| 沙河市| 龙川县| 逊克县| 蓬莱市| 信丰县| 沙湾县| 新营市| 芮城县| 嵊泗县| 马鞍山市| 石棉县| 荃湾区| 津南区| 白银市| 罗江县| 临沧市| 铁力市| 通化县| 台南县| 无为县| 潜江市| 获嘉县| 比如县| 明星| 晴隆县| 洛扎县| 玉龙| 阆中市| 蒙山县| 济宁市| 昌黎县| 资源县| 龙海市| 乐东| 凤台县| 保山市| 土默特左旗|