目标检测simple Faster R-CNN训练自己的数据集
一、復(fù)現(xiàn)
剛開始接觸目標(biāo)檢測,自己動(dòng)手復(fù)現(xiàn)的第一個(gè)開源項(xiàng)目是github上chenyuntc的simple faster?rcnn。歷經(jīng)千辛萬苦最后貌似因?yàn)榉?wù)器顯卡內(nèi)存不夠,在訓(xùn)練時(shí)一直出現(xiàn)一個(gè)錯(cuò)誤,如下:
最后也沒解決掉,就直接使用預(yù)訓(xùn)練模型去測試了,測試平臺(tái)是jupyter notebook.在連著實(shí)驗(yàn)室vpn使用服務(wù)器時(shí),外部的網(wǎng)絡(luò)就卡成了狗,而我對(duì)linux環(huán)境的不熟悉,也在一定程度上對(duì)自己造成了困擾。總之最后測試的效果還可以,精確度比較高,但是我不知道是否由于自己訓(xùn)練失敗的原因,總之沒有看到任何訓(xùn)練、測試結(jié)果準(zhǔn)確度和速度的參數(shù)。
二、跑自己數(shù)據(jù)集
這兩天淺淺標(biāo)注了150張圖片的自己的數(shù)據(jù)集,準(zhǔn)備看一下初步效果順便熟悉一下流程。
1、準(zhǔn)備好數(shù)據(jù)集后的第一件事是要裁剪使其大小合適,(當(dāng)然去掉無關(guān)背景后也方便自己選擇圖片),裁剪尺寸自己按需來定。裁剪代碼如下:
import numpy as np import cv2 import osdef update(input_img_path, output_img_path):image = cv2.imread(input_img_path)print(image.shape)cropped = image[800:1170, 780:1180] # 裁剪坐標(biāo)為[y0:y1, x0:x1]cv2.imwrite(output_img_path, cropped)dataset_dir = r'D:\nagetive-33' output_dir = r'D:\nagetive-44' #改成自己的路徑# 獲得需要轉(zhuǎn)化的圖片路徑并生成目標(biāo)路徑 image_filenames = [(os.path.join(dataset_dir, x), os.path.join(output_dir, x))for x in os.listdir(dataset_dir)] # 轉(zhuǎn)化所有圖片 for path in image_filenames:update(path[0], path[1])2、裁剪后需要將選好的數(shù)據(jù)集中的圖片重命名,方便查找。(起始序號(hào)可更改)排序代碼如下:
import os import os.path import numpy as np rootdir = r"F:\DataSet_damo\JPEGImages/" #末尾斜杠不要丟,你的文件存放位置 files = os.listdir(rootdir) b=1 #可更改起始序號(hào) for name in files:a=os.path.splitext(name)print(a[0])newname = str(b)+'.jpg'b = b + 1os.rename(rootdir+name,rootdir+newname)3、 由于我使用的是faster rcnn的改進(jìn)版算法,其使用的數(shù)據(jù)集標(biāo)簽格式為VOC格式,不像使用yolo系列還需要做標(biāo)簽的xml——>txt格式轉(zhuǎn)換,因此目前需要做的只有將打完標(biāo)簽的xml格式的數(shù)據(jù)集分別劃分為訓(xùn)練集、驗(yàn)證集和測試集。劃分代碼如下:
import os import randompath='D:/VOCtrainval_06-Nov-2007/yoloV3conf\keras-yolo3-master/VOCdevkit/VOC2007/'trainval_percent = 0.66 train_percent = 0.5xmlfilepath = path+'Annotations' txtsavepath = path+'ImageSets/Main' total_xml = os.listdir(xmlfilepath)num=len(total_xml) list=range(num) tv=int(num*trainval_percent) tr=int(tv*train_percent) trainval= random.sample(list,tv) train=random.sample(trainval,tr)ftrainval = open(path+'ImageSets/Main/trainval.txt', 'w') ftest = open(path+'ImageSets/Main/test.txt', 'w') ftrain = open(path+'ImageSets/Main/train.txt', 'w') fval = open(path+'ImageSets/Main/val.txt', 'w')for i in list:name=total_xml[i][:-4]+'\n'if i in trainval:ftrainval.write(name)if i in train:ftrain.write(name)else:fval.write(name)else:ftest.write(name)ftrainval.close() ftrain.close() fval.close() ftest .close()總結(jié)
以上是生活随笔為你收集整理的目标检测simple Faster R-CNN训练自己的数据集的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oauth2.0源码分析之oauth/t
- 下一篇: 深度学习笔记之使用Faster-Rcnn