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

我使用的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 bboxes
COLORS = ['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:相关文件的修改:









  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值