YOLO工程代码如何在windows上配置和运行!window上YOLO训练样本的制作

来源:互联网 发布:小米note3网络设置 编辑:程序博客网 时间:2024/06/10 11:34

我使用的YOLO的GPU版本工程是代码链接是:yolo-windows-master,其博客地址是:http://blog.csdn.net/sinat_30071459/article/details/53161113

CPU版本的博客地址是:http://blog.csdn.net/luojun2007/article/details/52370140

1、GPU配置,其中yolo使用的GPU版本的,其网上下载的代码基本是用CUDA7.5计算版本的,如果自己系统装的不是这个版本的则会出现加载工程失败,其错误信息如下:


此时双击上面的无法加载cuda属性表的错误,这个属性表是我们在安装CUDA时会在系统目录下自动生产相应版本的。如果我们安装的时8.0的,则改为:


保存后重新加载项目,此后会出现一些7.5的字眼,把其改为8.0即可,最后会出现一个:


这时关闭sln那个工程,打开自己的path路径下的\yolo-windows-master\build\darknet\darknet下的那个darknet.vcxproj工程,重新加载则可以加载成功。如下图:


接下来就时配置opencv、thread、cuda。

a、配置opencv,其默认使用的opencv版本时249的,如果配置自己的则需要删除掉:yolo_demo.c、yolo_kernels.cu

两个文件下的opencv引用。然后就可以配置自己的opencv了。

b、其中thead已经配置好了。也是需要自己手动配置工程的。

c、如果前面的cuda路径正确的话,则其也已经配置好了。也是需要自己手动配置工程的。

工程编译需要修改的地方:

a、这个工程使用的时没有配置生产debug的exe的,而是release模式的,此时我们应该做的是:右键解决方案-》配置属性,把图中的1跟2的属性选成一样的即可。


2、window上YOLO训练样本的制作

a、图像数据标注:

参考文章:http://blog.csdn.net/qq_30401249/article/details/51504816

其中使用BBox-Label-Tool的时候需要注意:要从Examples下有的那类开始标注,因为程序是从这里按类别加载例子数据的,如果没有加载到的话会报错。其代码如下;

       # load example bboxes,这说明刚开始标注数据的时候需要从Examples里有的类开始,否则会报错,然后退出。        self.egDir = os.path.join(r'./Examples', '%03d' %(self.category))        if not os.path.exists(self.egDir):            return        filelist = glob.glob(os.path.join(self.egDir, '*.JPEG'))        self.tmp = []        self.egList = []        random.shuffle(filelist)        for (i, f) in enumerate(filelist):            if i == 3:                break            im = Image.open(f)            r = min(SIZE[0] / im.size[0], SIZE[1] / im.size[1])            new_size = int(r * im.size[0]), int(r * im.size[1])            self.tmp.append(im.resize(new_size, Image.ANTIALIAS))            self.egList.append(ImageTk.PhotoImage(self.tmp[-1]))            self.egLabels[i].config(image = self.egList[-1], width = SIZE[0], height = SIZE[1])        self.loadImage()        print '%d images loaded from %s' %(self.total, s)
还有一个就是生成的标注数据格式:

class_number 
box1_x1 box1_y1 box1_width box1_height 
box2_x1 box2_y1 box2_width box2_height 
其中的class_number 指的是训练样本里的同类目标的个数,及在数据标注的时候如果有多个同类目标的话可以把其都标注出来,每次标注时会出现不同的颜色框,其对应于代码为:

# colors for the bboxesCOLORS = ['red', 'blue', 'yellow', 'pink', 'cyan', 'green', 'black']
对应的图片为:


b、接着就是数据转换,转成yolo能够处理的形式,其需要借助:darknet/scripts/convert.py 

其这个代码是在linux系统下的,如果应用带window上有一些需要修改的,主要参考:http://blog.csdn.net/qq_30401249/article/details/51564871 ,一些额外的修改或改正的地方:

(1)文件路径的正确与否:

mypath = "Labels/001/"   #路径要正确outpath = "Labels/stopsign/"
(2)修改换行符:

for txt_name in txt_name_list:    # txt_file =  open("Labels/stop_sign/001.txt", "r")    """ Open input text files """    txt_path = mypath + txt_name    print("Input:" + txt_path)    txt_file = open(txt_path, "r")    lines = txt_file.read().split('\n')  # for ubuntu, use "\r\n" instead of "\n" 
 注意:网上下载的这个转换代码基本上是linux上运行的,其换行符石“\r\n”,所以当我们在window上运行时需要改为“\n”.否则程序会报错。

注意上面的几步,基本可以完成数据的转化,其转换结果会为:

class_index box1_x1_ratio box1_y1_ratio box1_width_ratio box1_height_ratio 
class_index box2_x1_ratio box2_y1_ratio box2_width_ratio box2_height_ratio 
这里的class_index 与上面的class_number 不同,这里是类别索引,就是自己的类别在数组里的ID,例子如下:


其中相应的代码为:

classes = ["001","002"].......cls = "001"if cls not in classes:    exit(0)cls_id = classes.index(cls)
c、生成标签文件:

打开./data/labels/make_labels.py 
加入需要生成的标签,注意标签的文件名stopsign.png和yeildsign.png需要与存放图像的文件夹images和存放框信息的labels文件夹下面的文件夹名称相同。

其主要是通过使用python的os指令来运行shell里的convert命令。os的使用方法如下:


对应在darknet/src/yolo.c中是:

void run_yolo(int argc, char **argv){    int i;    for(i = 0; i < 20; ++i){        char buff[256];        sprintf(buff, "data/labels/%s.png", voc_names[i]);        voc_labels[i] = load_image_color(buff, 0, 0);    }}

至此:训练样本的制作已经完成,接下来的工作就是修改网络进行训练;还有v2版的是不用生产标签文件了,只要在data下有labels文件夹即可。

d:相关文件的修改:









原创粉丝点击