根据项目(https://github.com/eriklindernoren/PyTorch-YOLOv3)实施,采用阿里云的人工智能api平台,如有新手需要配置,请转到阿里云平台配置(其中第二节有相关配置内容)。
项目环境(要用阿里云的镜像环境,如有不同可能会出现别的情况)
配好该环境后,先运行第一步以防有库缺失
然后运行.sh文件
安装后继续运行另一个.sh文件(其中安装路径需要改变,具体改变如下)
改为
wget -c http://images.cocodataset.org/zips/val2014.zip
wget -c http://images.cocodataset.org/zips/train2014.zip
安装好的数据集应该有59000张左右的train图片(13G)和6G多的val图片,下载过程中有可能出现下载不全的问题(下载过程中没有中断重新下载应该就没问题)。
这个.sh文件运行完后应该会有这么几个文件被安装
其中强调一个问题,服务器不能够对tgz文件进行解压,因此需要先下载解压文件到线下,然后解压后转变成zip压缩文件上传,最后采用Python的解压方法将其变为labels文件。(具体去网上搜,一搜Python解压zip文件方式)
将这些文件按照一定的结构保存(都放在data文件下)
其中图片路径文件放在coco文件下(coco自己创建在data文件下),labels放在data文件下,数据集放在images文件下(images自己创建在data文件下),json文件放在annotations文件下(annotations自己创建在data文件下,这个好像会自动创建),目的是为了能够找到这些路径读取数据集(具体设置可看config文件中的coco.data)
另外,data中应该有个coco.names文件
这些都下载整理好以后,因为TensorFlow版本较高,我们需要对一些代码进行修改(如果可以用对应的版本更好,笔者没有找到)。
找到utils文件下的logger.py,将整个定义切换为下列代码(注释的是原来的代码,切换为没有注释的):
import tensorflow as tf
# class Logger(object):
# def __init__(self, log_dir):
# """Create a summary writer logging to log_dir."""
# # self.writer = tf.summary.FileWriter(log_dir)
# self.writer = tf.summary.create_file_writer(log_dir)
# def scalar_summary(self, tag, value, step):
# """Log a scalar variable."""
# summary = tf.Summary(value=[tf.Summary.Value(tag=tag, simple_value=value)])
# self.writer.add_summary(summary, step)
# def list_of_scalars_summary(self, tag_value_pairs, step):
# """Log scalar variables."""
# summary = tf.Summary(value=[tf.Summary.Value(tag=tag, simple_value=value) for tag, value in tag_value_pairs])
# self.writer.add_summary(summary, step)
class Logger(object):
def __init__(self, log_dir):
"""Create a summary writer logging to log_dir."""
# self.writer = tf.summary.FileWriter(log_dir)
self.writer = tf.summary.create_file_writer(log_dir)
def scalar_summary(self, tag, value, step):
"""Log a scalar variable."""
#summary = tf.Summary(value=[tf.Summary.Value(tag=tag, simple_value=value)])
#self.writer.add_summary(summary, step)
with self.writer.as_default():
tf.summary.scalar(tag, value, step=step)
self.writer.flush()
# summary = tf.Summary(value=[tf.Summary.Value(tag=tag, simple_value=value)])
# self.writer.add_summary(summary, step)
def list_of_scalars_summary(self, tag_value_pairs, step):
"""Log scalar variables."""
# summary = tf.Summary(value=[tf.Summary.Value(tag=tag, simple_value=value) for tag, value in tag_value_pairs])
#self.writer.add_summary(summary, step)
with self.writer.as_default():
for tag, value in tag_value_pairs:
tf.summary.scalar(tag, value, step=step)
self.writer.flush()
# summary = tf.Summary(value=[tf.Summary.Value(tag=tag, simple_value=value) for tag, value in tag_value_pairs])
# self.writer.add_summary(summary, step)
然后通过下列命令进行运行(正常到这里就可以了,可能有疏漏)
这个从README.md中找到即可,根据具体参数更改模型配置。
下面说一下自己遇到的两个问题:
1.如果出现NoneType报错,很有可能是之前所提到的路径放的不正确,请结合config和文章仔细检查一下;
2.如果出现路径找不到,比如某张图片缺失路径,请检查数据集中是否有该图片,如果没有则重新下载数据集,如果有检查路径是否正确。
如果有别的问题,请联系作者,作者也只是初步尝试,很有可能有失误(手动狗头)