mmdetection實戰(zhàn),訓練撲克牌數(shù)據(jù)集(VOC格式)并測試計算mAP

一升略、數(shù)據(jù)集準備

我這次用到的數(shù)據(jù)集來自這里:撲克牌數(shù)據(jù)集微王,下載下整個zip文件再從中復制出來屡限。劃重點:但是,我不建議你直接從他那下載炕倘,慢不說囚霸,后來我遇到了一個問題,就是會出現(xiàn)下面這樣的報錯:

FileNotFoundError: img file does not exist: /home/ymz/lsm/mmdetection/data/VOCdevkit/VOC2007/JPEGImages/IMG_2608.jpg

后來我發(fā)現(xiàn)確實數(shù)據(jù)集里面有IMG_2608.JPG激才,唯一的區(qū)別就是文件格式大寫了,后來證實確實mmcv.imread讀不了大寫的.JPG额嘿,所以我這里把所有文件格式小寫之后的數(shù)據(jù)集鏈接放這里瘸恼,提取碼:vmsy
這個數(shù)據(jù)集并沒有收集全部的撲克牌類別,里面只有6類:nine,ten,jack,queen,king,ace册养。一共364張东帅,所以之后訓練不會耗時很久,基本20個epoch半個小時就完事了球拦。解壓之后的文件目錄是這樣的:

├── poker
│   ├── VOC2007
│   │   ├── Annotations
│   │   ├── JPEGImages
│   │   ├── ImageSets
│   │   │   ├── Main
│   │   │   │   ├── val.txt
│   │   │   │   ├── train.txt

二靠闭、mmdetection的安裝

mmdetection是一個基于pytorch的目標檢測框架,非常好用坎炼,支持模型也比較全愧膀,Github上目前star已有8k,而且commit也非骋ス猓活躍檩淋。這次就想熟悉一下怎么使用這個框架,故用了自己找的數(shù)據(jù)集跑一遍萄金。
安裝的話基本照著官網(wǎng)的說明文檔就行蟀悦,不過似乎最近也有一些小改動,這個https://mmdetection.readthedocs.io/en/latest/上面會更新慢一點氧敢。我在這里放一下全部整合的命令:

# 注意官方的Requirements
conda create -n open-mmlab python=3.7 -y
conda activate open-mmlab
# 安裝pytorch和torchvision自己來也行
conda install -c pytorch pytorch torchvision -y
# cython一定要安裝日戈,編譯需要
conda install cython -y
git clone https://github.com/open-mmlab/mmdetection.git
cd mmdetection
pip install -v -e .
# 官方建議創(chuàng)建軟連接,節(jié)省硬盤空間孙乖,在mmdetection目錄下運行下面的命令
mkdir data
ln -s $COCO_ROOT data

當然我們這里是自己VOC格式的數(shù)據(jù)集浙炼,最后一個軟鏈接就不能是上面最后一行,根據(jù)上面的數(shù)據(jù)集目錄結(jié)構(gòu)應該是:

mkdir data
cd data
ln -s /home/你的存放路徑/poker VOCdevkit

這樣就符合官方的推薦結(jié)構(gòu)了唯袄。

三鼓拧、修改相關(guān)文件

1. 修改class_names.py文件

修改mmdetection/mmdet/core/evaluation下的class_names.py中的voc_classes,將其改為要訓練的數(shù)據(jù)集的類別名稱越妈,否則測試的結(jié)果的名稱還會是aeroplane, bicycle, bird, boat,…這些季俩。改完后如圖:


修改class_names.py文件

2. 修改voc.py文件

修改mmdetection/mmdet/datasets/voc.py 下的類別,如果只有一個類梅掠,因為CLASSES是一個元組酌住,所以要加上一個逗號店归,否則將會報錯,改完后如圖:
修改voc.py文件

3. 修改配置文件

配置文件就是mmdetection/configs下一堆的名稱諸如cascade_rcnn_r50_fpn_1x.py的文件酪我,因為我們使用的是VOC格式消痛,這些默認是COCO格式(除了mmdetection/configs/pascal_voc文件夾下的幾個),所以我就挑了cascade_rcnn_r50_fpn_1x.py都哭,將它復制重命名為cascade_rcnn_r50_fpn_1x_poker.py秩伞,有下面幾個地方需要修改:
1、修改num_classes變量欺矫,就是背景類加上要分類的數(shù)量纱新,所以我們這里為7:

修改num_classes變量

2、修改data settings部分穆趴,主要是了dataset_type脸爱、data_root、img_scale未妹、ann_file簿废、img_prefix變量的值:

修改data settings部分1

修改data settings部分2

最后的runtime settings也可以修改一下,比如total_epochs和workflow【[('train', 1)]表示只訓練络它,不驗證族檬;[('train', 2), ('val', 1)] 表示2個epoch訓練,1個epoch驗證】化戳,我將total_epochs設(shè)置成20导梆,所以學習率設(shè)置為step=[8, 15],checkpoint_config = dict(interval=2)迂烁,其他都保持默認看尼。

四、開始訓練

到現(xiàn)在就可以開始訓練了盟步,在mmdetection目錄下:

python tools/train.py configs/cascade_rcnn_r50_fpn_1x_poker.py

這樣就能成功訓練了藏斩,屏幕上會打印很多l(xiāng)og日志,當然訓練完成之后會在work_dirs目錄下出現(xiàn)如下圖的東西:有.log日志和.log.json却盘,還有每隔一定epoch(我這里是每隔2個epoch)保存模型狰域,為了方便后面的測試,還有最后的模型latest.pth黄橘。


訓練過程中保存的文件

五兆览、測試并計算mAP

1. 測試一張圖片的效果

我模仿demo/webcam_demo.py文件寫了試用于一張圖片的demo腳本image_demo.py:

import argparse
import torch

from mmdet.apis import inference_detector, init_detector, show_result


def parse_args():
    parser = argparse.ArgumentParser(description='MMDetection image demo')
    parser.add_argument('config', help='test config file path')
    parser.add_argument('checkpoint', help='checkpoint file')
    parser.add_argument('imagepath', help='camera device id')
    parser.add_argument('--device', type=int, default=0, help='CUDA device id')
    parser.add_argument(
        '--score-thr', type=float, default=0.5, help='bbox score threshold')
    args = parser.parse_args()
    return args


def main():
    args = parse_args()

    model = init_detector(
        args.config, args.checkpoint, device=torch.device('cuda', args.device))

    result = inference_detector(model, args.imagepath)
    show_result(
        args.imagepath, result, model.CLASSES, score_thr=args.score_thr, wait_time=0)


if __name__ == '__main__':
    main()

然后運行下面的命令:

python demo/image_demo.py configs/cascade_rcnn_r50_fpn_1x_poker.py work_dirs/cascade_rcnn_r50_fpn_1x_poker/latest.pth demo/poker_test.jpg

得到下面的結(jié)果,可以看到bbox框得非常tight塞关,分類也都正確了:


demo測試結(jié)果圖

2. 計算mAP

計算mAP之前需要修改mmdetection/tools/voc_eval.py文件中的voc_eval函數(shù)抬探,改完后的圖:


修改voc_eval.py文件

然后通過下面命令產(chǎn)生poker_results.pkl文件:

python tools/test.py configs/cascade_rcnn_r50_fpn_1x_poker.py work_dirs/cascade_rcnn_r50_fpn_1x_poker/latest.pth --out poker_results.pkl

然后執(zhí)行如下命令,采用voc標準計算mAP:

python tools/voc_eval.py poker_results.pkl configs/cascade_rcnn_r50_fpn_1x_poker.py

便得到了下面的結(jié)果,可以看到mAP高達0.977小压,這當然因為撲克牌方方正正很容易檢測的緣故啦:

mAP測試結(jié)果

好线梗,算是玩了一下mmdetection吧。以后會常碰到它的~~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末怠益,一起剝皮案震驚了整個濱河市仪搔,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蜻牢,老刑警劉巖烤咧,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異抢呆,居然都是意外死亡煮嫌,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進店門镀娶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人揪罕,你說我怎么就攤上這事梯码。” “怎么了好啰?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵轩娶,是天一觀的道長。 經(jīng)常有香客問我框往,道長鳄抒,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任椰弊,我火速辦了婚禮许溅,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘秉版。我一直安慰自己贤重,他們只是感情好,可當我...
    茶點故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布清焕。 她就那樣靜靜地躺著并蝗,像睡著了一般。 火紅的嫁衣襯著肌膚如雪秸妥。 梳的紋絲不亂的頭發(fā)上滚停,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天,我揣著相機與錄音粥惧,去河邊找鬼键畴。 笑死,一個胖子當著我的面吹牛突雪,可吹牛的內(nèi)容都是我干的镰吵。 我是一名探鬼主播檩禾,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼疤祭!你這毒婦竟也來了盼产?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤勺馆,失蹤者是張志新(化名)和其女友劉穎戏售,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體草穆,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡灌灾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了悲柱。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片锋喜。...
    茶點故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖豌鸡,靈堂內(nèi)的尸體忽然破棺而出嘿般,到底是詐尸還是另有隱情,我是刑警寧澤涯冠,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布炉奴,位于F島的核電站,受9級特大地震影響蛇更,放射性物質(zhì)發(fā)生泄漏瞻赶。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一派任、第九天 我趴在偏房一處隱蔽的房頂上張望砸逊。 院中可真熱鬧,春花似錦掌逛、人聲如沸痹兜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽字旭。三九已至,卻和暖如春崖叫,著一層夾襖步出監(jiān)牢的瞬間遗淳,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工心傀, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留屈暗,地道東北人。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像养叛,于是被迫代替她去往敵國和親种呐。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,697評論 2 351

推薦閱讀更多精彩內(nèi)容