最好用的caffe深度学习简单批处理数据集(windows+linux+Python)

简单的批处理方式,包含了windows系统下的bat文件,Linux系统下的sh文件以及最牛逼的Python脚本。在进行AI相关的研究时,不可避免的需要去进行处理数据集。有些数据集是现成的,有些数据集却是需要自己去定制的。以下是自己在学习的过程中总结出来的比较常见的几种方式去处理数据。因为做的是CV,所以设计的处理方式多是处理图片。
一、windows下的bat
1、统计每个文件夹的名称以及相应文件夹下的文件数量并导出为记事本txt文件。使用时需要将此bat放至需要统计的所有文件夹的同级目录下,双击执行即可。正常使用过程中主要起到统计的作用,以及保存的txt文件可以用excel打开,便于数据的处理。

@echo off
set n=%cd%
:aaa
if not "%n:\=%"=="%n%"set n=%n:*\=%& goto aaa
echo 文件夹名;文件数>"%n%.txt"
for /f "delims=" %%a in ('dir /ad/b') do (
  for/f %%s in ('dir /b /s /a-d "%%a" ^| find /v /c ""') do echo%%a;%%s>>"%n%.txt")
echo 完成...
pause

2、从N个文件夹中(N个文件夹下的文件命名一样)抽取某一命名的文件,保存到指定的路径下。这个过程主要是从一些整理好的数据集中去抽取自己所需的数据进行定制。(例如webface,megaface等)。记得修改路径。
 

@echo off
if exist renlian (rd /s /q renlian)
md renlian
dir /s /b 002.jpg > renlian.tmp
setlocal enabledelayedexpansion
set n=1
for /f "eol=| delims=|" %%i in(renlian.tmp) do (
xcopy "%%i" "D:\*\*-*\*-*\*\!n!.jpg"
set /a n=!n!+1
)
pause

3、与bat文件同级的目录下,所有jpg格式的文件全部重新命名,重命名从10000开始累加,起始数字可以修改。

@echo off 
set a=10000
setlocal EnableDelayedExpansion 
for %%n in (*.jpg) do ( 
set /A a+=1 
ren "%%n" "!a!.jpg" 
)

二、Linux下的sh
1、将同级文件夹下的所有图片按照顺序累加重命名。sh文件与图片放至同级目录下。这段是为了将之前抽取好的数据统一进行重命名。

i=100001;
 forimg in `ls *.jpg`;
do mv $img `printf  %.6d $i`.jpg;
i=`expr $i + 1`;
done

2、这段是在上一步重命名结束之后,对分类好的train和val数据进行生成train.txt和val.txt的过程。在为下一步生成lmdb(caffe处理的数据格式)做准备。修改trainDATA和valDATA的路径(这两个就是存放train和val的位置)MY是生成好的train.txt和val.txt保存的位置。

#!/usr/bin/env sh
trainDATA=/home/*/project/Downs
valDATA=/home/*/project/Downs
MY=/home/*/project/Downs
echo "Create train.txt..."
rm -rf $MY/train.txt
find $trainDATA/train -name 100*.jpg | cut-d '/' -f6-7 | sed "s/$/ 0/">>$MY/train.txt
find $trainDATA/train -name 200*.jpg | cut-d '/' -f6-7 | sed "s/$/ 1/">>$MY/train.txt
echo "Create test.txt..."
rm -rf $MY/val.txt
find $valDATA/val -name 100*.jpg | cut -d'/' -f6-7 | sed "s/$/ 0/">>$MY/val.txt
find $valDATA/val -name 200*.jpg | cut -d'/' -f6-7 | sed "s/$/ 1/">>$MY/val.txt
echo "All done"

3、这段是在上一步中生成的train.txt和val.txt文件与train和val文件夹中的图片进行生成lmdb的步骤。MY是需要保存lmdb文件的位置,TRAIN_DATA_ROOT是train文件夹的路径,VAL_DATA_ROOT是val文件夹的路径。同时resize重新调整了图片的大小,是一步简单的图片预处理的操作。(常见的有28*28,32*32,224*224,227*227)

#!/usr/bin/env sh
MY=/home/*/project/Downs/
TRAIN_DATA_ROOT=/home/*/project/Downs/
VAL_DATA_ROOT=/home/*/project/Downs/
echo "Create train lmdb.."
rm -rf $MY/img_train_lmdb
/home/*/caffe/build/tools/convert_imageset\
--shuffle \
--resize_height=227 \
--resize_width=227 \
$TRAIN_DATA_ROOT \
$MY/train.txt \
$MY/img_train_lmdb
echo "Create test lmdb.."
rm -rf $MY/img_val_lmdb
/home/*/caffe/build/tools/convert_imageset\
--shuffle \
--resize_height=227 \
--resize_width=227 \
$VAL_DATA_ROOT \
$MY/val.txt \
$MY/img_val_lmdb
echo "All Done.."

4、这个步骤就是利用生成好的img_train_lmdb文件生成均值文件mean.binaryproto。EXAMPLE是img_train_lmdb的存放路径,DATA是生成后的mean.binaryproto存放路径,TOOLS是CAFFE的tools文件夹路径。

#!/usr/bin/env sh
EXAMPLE=/home/*/project/Downs
DATA=/home/*/project/Downs
TOOLS=/home/*/caffe/build/tools
$TOOLS/compute_image_mean$EXAMPLE/img_train_lmdb $DATA/mean.binaryproto
echo "Done."

5、赘述:训练网络时候的命令,封装成train.sh文件方便训练网络。

/home/*/caffe/build/tools/caffe train-solver /home/*/project/Downs/solver4.prototxt

三、life is short的Python
1、这个Python脚本需要安装caffe和numpy。Caffe的骨头是难啃的,装过的同学大家都知道,caffe安装教程另外抽空再写。修改两个路径,即可运行,将均值文件转换为numpy格式的均值文件。(有点顺口溜的感觉,hiahiahiahiahiahiahiahiahia)

import caffe
import numpy as np
prototxt = '/home/* /mean.binaryproto'
npy = '/home/*/ mean.npy'
blob = caffe.proto.caffe_pb2.BlobProto()
data = open(prototxt, 'rb' ).read()
blob.ParseFromString(data)
array =np.array(caffe.io.blobproto_to_array(blob))
mean_npy = array[0]
np.save(npy ,mean_npy)

2、下面这个有些东西的。需要安装face_recognition和PIL。face_recognition是GITHUB上面star颇高的人脸检测的项目,包含了人脸检测、人脸关键点标记等功能。安装过程有些小波澜,也跟caffe一样,抽空整理。下面的脚本基于官方演示代码修改,实现的就是批量完成某文件夹下所有图片的人脸框定位后重新生成新图片的过程。Range函数是可以优化的,评论区的大佬们可给出建议。

import os
from PIL import Image
import face_recognition
Image_Path="/home/*/project/Downs/images/"
Image_Path1="/home/*/project/Downs/images1/"
Image_List=os.listdir(Image_Path)
for i in range(0,4279,1):
    #Load the jpg file into a numpy array
   image =face_recognition.load_image_file("/home/*/project/Downs/images/"+Image_List[i])
    #Find all the faces in the image using the default HOG-based model.
    #This method is fairly accurate, but not as accurate as the CNN model and notGPU accelerated.
    #See also: find_faces_in_picture_cnn.py
   face_locations = face_recognition.face_locations(image)
   print("I found {} face(s) in this photograph.".format(len(face_locations)))
   for face_location in face_locations:
       # Print the location of each face in this image
       top, right, bottom, left = face_location
       print("A face is located at pixel location Top: {}, Left: {}, Bottom:{}, Right: {}".format(top, left, bottom, right))
       # You can access the actual face itself like this:
       face_image = image[top:bottom, left:right]
       pil_image = Image.fromarray(face_image)
       #pil_image.show()
       pil_image.save("/home/*/project/Downs/images1/"+Image_List[i])

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值