前言
其实之前一直在企图写一篇用人话讲述卷积层反传,最后把自己都搞混了,就鸽了一个月,现在也不想搞那玩意儿了。
在找项目复现练练手的时候,突然发现其实详细的推导过程没那么重要,那是科学家研究的事,工程师搞好落地就行了,也许我也会有一天心血来潮,把那个地方补补。
2月10号,不建议后人去复现这个论文,因为里边的模型都过时了, 复现了之后得到的知识也很少。
电脑配置
win10
16g运行内存(显然不够,需要设置虚拟内存,下面会说)
i7-8750h+rtx2080(cuda的版本安装)
python3.6(因为windows的python2.7的已经不支持tf了。大人,食大便了!!!)
预备操作
anaconda:
安装python3.6环境,不要用命令行装哦,用anaconda直接进去装,我感觉这样稳一点。
如图:
下载代码
进网站,直接下载,或者用git,把别人的代码clone下来。
https://github.com/abhishekrana/DeepFashion
文件内容解压如图:
下载数据集
第一种方式:直接点 dataset_download.sh
第二种方式:百度云 :https://pan.baidu.com/share/init?surl=OmxY1uWeufvfSAKXwQTSdg 密码:vs11
文件来源此处 ,作者:寒武纪元
CUDA和cudnn安装
我的CUDA是V9.0.176。
重点来了:cudnn版本是7.0.5,不然之后会报错,具体安装下载方法网上搜吧,很简单的。
虚拟内存设置(防止出现MemoryError)
之后训练的时候,数据是要一次性整合的,就会造成爆内存(人穷玩不起)。
我的虚拟内存原来是设在c盘的,c盘本来就只剩10g,根本不够用,建议设置在其他盘,具体方法网上有。
我建议初始设置20g,最大40g,不要问我怎么设这么多,问就是稳。
还有另外一种方法,最好一起食用,下面在train.py里会讲的。
pycharm设置
把其中一个文件data_create.py用pycharm打开,我建议是data
点进去,
到这里,就开始找anaconda的环境,一般在anaconda安装目录的envs里面。
我的环境叫test,看这张图片:
里面有一个python.exe,选中按ok就完事,如图:
然后它会说什么requirements.txt啥的,别管他,让他自己装会出事。
最最最痛苦的来了————安装老版本的库
具体思路:先只装一点,然后直接运行,看它缺啥诡异的module,就照着文件里面的requirements.txt要求的版本装(或者直接用我的)。
这次用anaconda的命令行来安装,不然会装到其他环境里去。
activate ***(环境名)
pip install --default-timeout=100 -i https://pypi.tuna.tsinghua.edu.cn/simple + (你要安装的东西)
先安装这几个:
tensorflow-gpu==1.5.0(对,就是1.5.0版本,与cuda啥版本保持匹配)
numpy==1.13.1
matplotlib==2.0.2
Keras==2.0.6
h5py==2.7.0
解下来就是直接run 他妈的 data_create.py
看他缺啥库,缺啥,就在anaconda的命令行里装啥。
再他妈的的run
再他妈的装
某些库经常报错的话,可以试试升级。
如:里面有一个selectivesearch= =0.3,我装的是selectivesearch==0.4。
最好照着我的版本来。
非常重要的警告:你补啥的时候,它会突然升级一些附属库,然后就又尼玛的出事了(最典型的就是numpy),不需要卸载它,直接装旧版本就行了。然后在运行。
下面是我的库:
代码运行中的错误
(稍稍建议先略读代码,理解每个fuc的作用)
主要参考了
【DeepFashion github项目实现】作者:寒武纪元 。
以及
【【计算机视觉】(二)DeepFashion成功复现!代码复现碰到的问题和坎坷,包括代码修改和cudnn库的匹配,】作者:ciecus_csdn 。
非常感谢他们!!!
dataset_create.py(我是按最终运行顺序来改的)
1.category_name_generate()
这里不需要改,只是提示。
最先看到的是这个玩意儿,默认的是category_name_generate=[‘Coat’, ‘Kaftan’, ‘Robe’],意思是只处理这三个的数据。我一开始作死,直接选了个最多的50个种类的那个,跑了一天一夜图片都没分类完(只分了1/4)。
如果想作多种识别,只能每种类型数据少一点,我建议先选3种练练手,将所有代码通读一遍后,再自行修改一些地方(dataset_creat),限制数据集的制作。
我的方法很low,不吹不黑,真的很low,主要是对当时的我来说,要改已经来不及了,只能凑合着用了,牛逼的人建建议改改dataset_create.py里面的iou相关部分,通过if限制iou,限制一下切割图片的数量。
所以我就不放出来了。。。
2.calculate_bbox_score_and_save_img()
第一处:
你可以直接搜索(ctrl + F)上一行,直接定位,我的行数并不准确。
image_save_path = dataset_image_path.rsplit('/', 1)[0]
if not os.path.exists(image_save_path):# 修改项
os.makedirs(image_save_path)
多加个if啥的是为了防止第二次run用的时候报错,说什么文件已存在。
第二处:
下面这个if也是同理,加try是因为有的时候图片box会分割错误,出现OSError。
image_save_path_name = image_save_path + '/' + image_save_name + '_crop_' + str(x) + '-' + str(y) + '-' + str(x+w) + '-' + str(y+h) + '_iou_' + str(iou) + '.jpg'
logging.debug('image_save_path_name {}'.format(image_save_path_name))
if not os.path.exists(image_save_path_name):
try:
img_crop.save(image_save_path_name)
except:
pass
continue
logging.debug('img_crop {} {} {}'.format(img_crop.format, img_crop.size, img_crop.mode))
3.display_category_data()
这里是新旧版本问题,把next()改为__next__()就行
这部分运行完大概15-20min。
train.py
这部分分为制作数据集,和训练数据。
save_bottleneck()
先import gc,然后在每个循环后加个gc.collect(),土豪随意,这是防止溢出的另一个方法。
第一处:
这里是VGG16模型下载速度慢的问题,不需要改代码。
文章与下载地址
第二处:
这里是在括号里面多加一个/*,因为要的是文件夹里的文件。
train_model()
第一处:
for btl_train_image in btl_train_list:
train_labels_class.append(btl_train_image.split('\\')[2]) # 修改处
iou_value = np.round(np.float(btl_train_image.split('_')[-1].split('.jpg')[0]), 2)
train_labels_iou.append(iou_value)
del iou_value
gc.collect()
这里是盘符识别问题,乌班图与windows的不同之处。
第二处:
for btl_val_image in btl_val_list:
val_labels_class.append(btl_val_image.split('\\')[2])
val = np.round(np.float(btl_val_image.split('_')[-1].split('.jpg')[0] ), 2)
val_labels_iou.append(val)
del val
gc.collect()
和第一处同理。
这里还要修改学习率,在config.py里面,在最后几行,叫learn_rate。
predict.py
要先塞张图片,具体位置看get_images()代码。
if name == ‘main’:
预测的图片较大,就激活resize_image(images_path_name),把#去掉。
crop_bbox
这个是在utils.py里面的
def crop_bbox(image_path_name, bboxes):
image_path_name_list = image_path_name[0].split('\\')#修改处
image_path_name_=image_path_name_list[0]+'/'+image_path_name_list[1]#修改处
# image_path_name_ = image_path_name
logging.debug('image_path_name_ {}'.format(image_path_name_))
加载的model参数问题
把config.py里的top_model_weights_path_load参数改成自己训练出来的参数名字。
预测的字体问题
在控制面板下面有个字体,选一个复制到我们文件夹里的fonts里面。
然后在util.py里面的display_bbox_text(img, bbox, text)修改字体位置,应该是在117行。
完事!!!
结果
淘宝上找的,会不会侵权?(#滑稽)