ncnn上基于Caffe用MobileNet_SSD訓(xùn)練和測(cè)試自己的數(shù)據(jù)

1.數(shù)據(jù)集標(biāo)注

a.采用VoTT用于圖像檢測(cè)任務(wù)的數(shù)據(jù)集制作voc格式

2.lmdb數(shù)據(jù)集制作

a.采用 weiliu89中的./data/VOC0712/create_list.sh和./data/VOC0712/create_data.sh
腳本制作數(shù)據(jù)集,工程位于本機(jī)ssd/caffe中,以下幾個(gè)文件需要根據(jù)個(gè)人情況修改谭溉。

scripts/create_annoset.py examples/ssd/ssd_pascal.py examples/ssd/score_ssd_pascal.py

指定caffe安裝路徑
caffe_root = '/home/ljg/ssd/caffe'
import os
os.chdir(caffe_root)
import sys
sys.path.insert(0, 'python')
sys.path.insert(0,caffe_root+'python')
把指定gpu訓(xùn)練的注釋掉
還有一些設(shè)置可以參考以下博客
Caffe上用SSD訓(xùn)練和測(cè)試自己的數(shù)據(jù)
SSD框架訓(xùn)練自己的數(shù)據(jù)集
在$CAFFE_ROOT目錄下分別運(yùn)行:

./data/ljy_test/create_list_indoor.sh

./data/ljy_test/create_data_indoor.sh

3.模型訓(xùn)練

chuanqi305/MobileNet-SSD
基于自制數(shù)據(jù)集的MobileNet-SSD模型訓(xùn)練
按照訓(xùn)練步驟訓(xùn)練

4.移植到移動(dòng)端

Ncnn使用詳解(1)——PC端
使用ncnn部署到ios手機(jī)端
android ios 預(yù)編譯庫(kù) 20180129 f133729
我使用的是這個(gè)ncnn庫(kù)文件
之前的版本對(duì)于訓(xùn)練的模型有些層不支持蚕钦,之后的一個(gè)版本對(duì)同樣的圖片輸入結(jié)果不一樣,應(yīng)該是存在bug
dangbo/ncnn-mobile
這是我使用的demoios工程旁钧,我在他的基礎(chǔ)上進(jìn)行啦修改,替換ncnn庫(kù)和相應(yīng)的頭文件,然后還要修改為支持視頻實(shí)時(shí)檢測(cè)

    AVCaptureConnection* videoConnection = [videoDataOutput connectionWithMediaType:AVMediaTypeVideo];
    [videoConnection setVideoOrientation:AVCaptureVideoOrientationPortrait];

我這個(gè)是采用前置攝像頭拍攝冒掌,要如此設(shè)置,否則圖片是橫著的蹲盘,檢測(cè)出錯(cuò)

        Object object;
        object.class_id = values[0];
        object.prob = values[1];
        std::string label = std::string(class_names[object.class_id]);
        object.lable = [NSString stringWithUTF8String:label.c_str()];
        object.rec.x =(1 - values[2]) * screenW;
        object.rec.y = values[3] * screenH;
        object.rec.width = (1-values[4]) * screenW- object.rec.x;
        object.rec.height = values[5] * screenH - object.rec.y;
        objects.push_back(object);

要實(shí)時(shí)在手機(jī)屏幕顯示標(biāo)注框股毫,如上修改

- (void)captureOutput:(AVCaptureOutput*)captureOutput
didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer
       fromConnection:(AVCaptureConnection*)connection
{
    @autoreleasepool {
        CFRetain(sampleBuffer);
        UIImage *image =[self imageFromSampleBuffer:sampleBuffer];
        CFRelease(sampleBuffer);
        [self predictFrameImage:image];
    }
}

我把sampleBuffer先轉(zhuǎn)化為image,然后再預(yù)測(cè)召衔,這是取巧的方法皇拣,并不是合理的方法

- (UIImage *) imageFromSampleBuffer:(CMSampleBufferRef) sampleBuffer
{
    // Get a CMSampleBuffer's Core Video image buffer for the media data
    CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);
    // Lock the base address of the pixel buffer
    CVPixelBufferLockBaseAddress(imageBuffer, 0);
    
    // Get the number of bytes per row for the pixel buffer
    void *baseAddress = CVPixelBufferGetBaseAddress(imageBuffer);
    
    // Get the number of bytes per row for the pixel buffer
    size_t bytesPerRow = CVPixelBufferGetBytesPerRow(imageBuffer);
    // Get the pixel buffer width and height
    size_t width = CVPixelBufferGetWidth(imageBuffer);
    size_t height = CVPixelBufferGetHeight(imageBuffer);
    
    // Create a device-dependent RGB color space
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
    
    // Create a bitmap graphics context with the sample buffer data
    CGContextRef context = CGBitmapContextCreate(baseAddress, width, height, 8,
                                                 bytesPerRow, colorSpace, kCGBitmapByteOrder32Little | kCGImageAlphaPremultipliedFirst);
    // Create a Quartz image from the pixel data in the bitmap graphics context
    CGImageRef quartzImage = CGBitmapContextCreateImage(context);
    // Unlock the pixel buffer
    CVPixelBufferUnlockBaseAddress(imageBuffer,0);
    
    // Free up the context and color space
    CGContextRelease(context);
    CGColorSpaceRelease(colorSpace);
    
    // Create an image object from the Quartz image
    //UIImage *image = [UIImage imageWithCGImage:quartzImage];
    UIImage *image = [UIImage imageWithCGImage:quartzImage scale:1.0f orientation:UIImageOrientationRight];
    
    // Release the Quartz image
    CGImageRelease(quartzImage);
    
    return (image);
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市薄嫡,隨后出現(xiàn)的幾起案子氧急,更是在濱河造成了極大的恐慌,老刑警劉巖毫深,帶你破解...
    沈念sama閱讀 217,734評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吩坝,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡哑蔫,警方通過(guò)查閱死者的電腦和手機(jī)钉寝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)闸迷,“玉大人嵌纲,你說(shuō)我怎么就攤上這事⌒裙粒” “怎么了逮走?”我有些...
    開封第一講書人閱讀 164,133評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)今阳。 經(jīng)常有香客問(wèn)我师溅,道長(zhǎng)茅信,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,532評(píng)論 1 293
  • 正文 為了忘掉前任墓臭,我火速辦了婚禮蘸鲸,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘窿锉。我一直安慰自己酌摇,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評(píng)論 6 392
  • 文/花漫 我一把揭開白布嗡载。 她就那樣靜靜地躺著妙痹,像睡著了一般。 火紅的嫁衣襯著肌膚如雪鼻疮。 梳的紋絲不亂的頭發(fā)上怯伊,一...
    開封第一講書人閱讀 51,462評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音判沟,去河邊找鬼耿芹。 笑死,一個(gè)胖子當(dāng)著我的面吹牛挪哄,可吹牛的內(nèi)容都是我干的吧秕。 我是一名探鬼主播,決...
    沈念sama閱讀 40,262評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼迹炼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼砸彬!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起斯入,我...
    開封第一講書人閱讀 39,153評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤砂碉,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后刻两,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體增蹭,經(jīng)...
    沈念sama閱讀 45,587評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評(píng)論 3 336
  • 正文 我和宋清朗相戀三年磅摹,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了滋迈。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,919評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡户誓,死狀恐怖饼灿,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情帝美,我是刑警寧澤碍彭,帶...
    沈念sama閱讀 35,635評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響硕旗,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜女责,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評(píng)論 3 329
  • 文/蒙蒙 一漆枚、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧抵知,春花似錦墙基、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至掖疮,卻和暖如春初茶,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背浊闪。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工恼布, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人搁宾。 一個(gè)月前我還...
    沈念sama閱讀 48,048評(píng)論 3 370
  • 正文 我出身青樓折汞,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親盖腿。 傳聞我的和親對(duì)象是個(gè)殘疾皇子爽待,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評(píng)論 2 354

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