├── .gitignore ├── README.md ├── train_cnn-rnn-attention_v0 ├── README.md ├── config.py ├── data_aug │ ├── __pycache__ │ │ └── data_aug.cpython-35.pyc │ └── data_aug.py ├── load_image │ ├── __pycache__ │ │ └── load_image.cpython-35.pyc │ └── load_image.py ├── main.py ├── net │ ├── alexnet │ │ └── alexnet.py │ ├── attention │ │ ├── __pycache__ │ │ │ └── attention.cpython-35.pyc │ │ └── attention.py │ ├── cifarnet │ │ └── cifarnet.py │ ├── inception_resnet_v2 │ │ └── inception_resnet_v2.py │ ├── inception_v4 │ │ ├── __pycache__ │ │ │ ├── inception_utils.cpython-35.pyc │ │ │ └── inception_v4.cpython-35.pyc │ │ ├── inception_utils.py │ │ └── inception_v4.py │ ├── resnet_v2 │ │ ├── __pycache__ │ │ │ ├── resnet_utils.cpython-35.pyc │ │ │ └── resnet_v2.cpython-35.pyc │ │ ├── resnet_utils.py │ │ └── resnet_v2.py │ ├── vgg │ │ ├── __pycache__ │ │ │ └── vgg.cpython-35.pyc │ │ └── vgg.py │ └── z_build_net │ │ ├── __pycache__ │ │ └── build_net.cpython-35.pyc │ │ └── build_net.py ├── pretrain │ └── README.md ├── sample_train │ ├── 0male │ │ ├── 0(1).jpeg │ │ ├── 0(1).jpg │ │ ├── 0(2).jpeg │ │ ├── 0(2).jpg │ │ ├── 0(3).jpeg │ │ └── 0(3).jpg │ ├── 1female │ │ ├── 1(1).jpg │ │ ├── 1(2).jpg │ │ ├── 1(3).jpg │ │ ├── 1(4).jpg │ │ ├── 1(5).jpg │ │ └── 1(6).jpg │ ├── 2many │ │ ├── 0_Parade_marchingband_1_12.jpg │ │ ├── 0_Parade_marchingband_1_13.jpg │ │ ├── 0_Parade_marchingband_1_17.jpg │ │ ├── 0_Parade_marchingband_1_5.jpg │ │ ├── 0_Parade_marchingband_1_6.jpg │ │ └── 0_Parade_marchingband_1_8.jpg │ └── 3other │ │ ├── 6(2).jpg │ │ ├── 6(3).jpg │ │ ├── 6(4).jpg │ │ ├── 6(5).jpg │ │ ├── 6(6).jpg │ │ └── 6(9).jpg ├── train_net │ ├── __pycache__ │ │ └── train.cpython-35.pyc │ └── train.py └── z_ckpt_pb │ ├── ckpt_pb.py │ ├── img_preprocessing.py │ ├── inception_preprocessing.py │ ├── inception_utils.py │ ├── inception_v4.py │ └── test.py ├── train_cnn_multiGPU_v0 ├── README.md ├── ckpt_pb.py ├── ckpt_pb3.py ├── config.py ├── gender │ ├── 0male │ │ ├── 0(1).jpeg │ │ ├── 0(1).jpg │ │ ├── 0(2).jpeg │ │ ├── 0(2).jpg │ │ ├── 0(3).jpeg │ │ └── 0(3).jpg │ ├── 1female │ │ ├── 1(1).jpg │ │ ├── 1(2).jpg │ │ ├── 1(3).jpg │ │ ├── 1(4).jpg │ │ ├── 1(5).jpg │ │ └── 1(6).jpg │ ├── 2many │ │ ├── 0_Parade_marchingband_1_12.jpg │ │ ├── 0_Parade_marchingband_1_13.jpg │ │ ├── 0_Parade_marchingband_1_17.jpg │ │ ├── 0_Parade_marchingband_1_5.jpg │ │ ├── 0_Parade_marchingband_1_6.jpg │ │ └── 0_Parade_marchingband_1_8.jpg │ └── 3other │ │ ├── 6(2).jpg │ │ ├── 6(3).jpg │ │ ├── 6(4).jpg │ │ ├── 6(5).jpg │ │ ├── 6(6).jpg │ │ └── 6(9).jpg ├── lib │ ├── data_aug │ │ └── data_aug.py │ ├── data_load │ │ ├── data_load.py │ │ ├── data_load_from_txt.py │ │ └── data_load_from_txt_nolabel.py │ ├── grad_cam │ │ ├── __pycache__ │ │ │ └── grad_cam.cpython-35.pyc │ │ └── grad_cam.py │ ├── loss │ │ └── loss.py │ ├── model │ │ ├── alexnet │ │ │ ├── __pycache__ │ │ │ │ └── alexnet.cpython-35.pyc │ │ │ └── alexnet.py │ │ ├── attention │ │ │ ├── __pycache__ │ │ │ │ └── attention.cpython-35.pyc │ │ │ └── attention.py │ │ ├── build_model │ │ │ ├── __pycache__ │ │ │ │ └── build_net.cpython-35.pyc │ │ │ └── build_net.py │ │ ├── cifarnet │ │ │ └── cifarnet.py │ │ ├── inception_resnet_v2 │ │ │ └── inception_resnet_v2.py │ │ ├── inception_v4 │ │ │ ├── inception_utils.py │ │ │ └── inception_v4.py │ │ ├── resnet_v2 │ │ │ ├── __pycache__ │ │ │ │ ├── resnet_utils.cpython-35.pyc │ │ │ │ └── resnet_v2.cpython-35.pyc │ │ │ ├── resnet_utils.py │ │ │ └── resnet_v2.py │ │ └── vgg │ │ │ ├── __pycache__ │ │ │ └── vgg.cpython-35.pyc │ │ │ └── vgg.py │ ├── optimizer │ │ ├── optimizer.py │ │ └── optimizer_minimize.py │ ├── train │ │ ├── train.py │ │ └── train3.py │ └── utils │ │ └── utils.py ├── lp.jpg ├── main.py ├── pretrain │ └── README.md ├── start.sh ├── test │ ├── lp.png │ ├── predict.py │ └── test_interface .py └── vis_cam.py ├── train_cnn_multilabel ├── README.md ├── ckpt_pb.py ├── config.py ├── g_tfrecords.py ├── gender │ ├── 0male │ │ ├── 0(1).jpeg │ │ ├── 0(1).jpg │ │ ├── 0(2).jpeg │ │ ├── 0(2).jpg │ │ ├── 0(3).jpeg │ │ └── 0(3).jpg │ ├── 1female │ │ ├── 1(1).jpg │ │ ├── 1(2).jpg │ │ ├── 1(3).jpg │ │ ├── 1(4).jpg │ │ ├── 1(5).jpg │ │ └── 1(6).jpg │ ├── 2many │ │ ├── 0_Parade_marchingband_1_12.jpg │ │ ├── 0_Parade_marchingband_1_13.jpg │ │ ├── 0_Parade_marchingband_1_17.jpg │ │ ├── 0_Parade_marchingband_1_5.jpg │ │ ├── 0_Parade_marchingband_1_6.jpg │ │ └── 0_Parade_marchingband_1_8.jpg │ └── 3other │ │ ├── 6(2).jpg │ │ ├── 6(3).jpg │ │ ├── 6(4).jpg │ │ ├── 6(5).jpg │ │ ├── 6(6).jpg │ │ └── 6(9).jpg ├── lib │ ├── data_aug │ │ ├── __pycache__ │ │ │ └── data_aug.cpython-35.pyc │ │ └── data_aug.py │ ├── data_load │ │ ├── __pycache__ │ │ │ └── data_load_from_txt_mullabel.cpython-35.pyc │ │ └── data_load_from_txt_mullabel.py │ ├── loss │ │ ├── __pycache__ │ │ │ └── loss.cpython-35.pyc │ │ └── loss.py │ ├── model │ │ ├── alexnet │ │ │ ├── __pycache__ │ │ │ │ └── alexnet.cpython-35.pyc │ │ │ └── alexnet.py │ │ ├── attention │ │ │ ├── __pycache__ │ │ │ │ └── attention.cpython-35.pyc │ │ │ └── attention.py │ │ ├── build_model │ │ │ ├── __pycache__ │ │ │ │ └── build_net.cpython-35.pyc │ │ │ └── build_net.py │ │ ├── cifarnet │ │ │ └── cifarnet.py │ │ ├── inception_resnet_v2 │ │ │ └── inception_resnet_v2.py │ │ ├── inception_v4 │ │ │ ├── __pycache__ │ │ │ │ ├── inception_utils.cpython-35.pyc │ │ │ │ └── inception_v4.cpython-35.pyc │ │ │ ├── inception_utils.py │ │ │ └── inception_v4.py │ │ ├── lp_net │ │ │ ├── __pycache__ │ │ │ │ └── lp_net.cpython-35.pyc │ │ │ └── lp_net.py │ │ ├── resnet_v2 │ │ │ ├── __pycache__ │ │ │ │ ├── resnet_utils.cpython-35.pyc │ │ │ │ └── resnet_v2.cpython-35.pyc │ │ │ ├── resnet_utils.py │ │ │ └── resnet_v2.py │ │ └── vgg │ │ │ ├── __pycache__ │ │ │ └── vgg.cpython-35.pyc │ │ │ └── vgg.py │ ├── optimizer │ │ ├── __pycache__ │ │ │ ├── optimizer.cpython-35.pyc │ │ │ └── optimizer_minimize.cpython-35.pyc │ │ ├── optimizer.py │ │ └── optimizer_minimize.py │ ├── train │ │ ├── __pycache__ │ │ │ └── train_multi_label.cpython-35.pyc │ │ ├── train_multi_label.py │ │ └── train_multi_label_tfRecords.py │ └── utils │ │ ├── __pycache__ │ │ └── multi_label_utils.cpython-35.pyc │ │ └── multi_label_utils.py ├── main.py ├── pretrain │ └── README.md ├── test_accuracy.py ├── test_tfRecords.py └── train.txt ├── train_cnn_v0 ├── README.md ├── config.py ├── data_aug │ └── data_aug.py ├── load_image │ └── load_image.py ├── main.py ├── model │ └── README.md ├── net │ ├── alexnet │ │ └── alexnet.py │ ├── cifarnet │ │ └── cifarnet.py │ ├── inception_resnet_v2 │ │ └── inception_resnet_v2.py │ ├── inception_v4 │ │ ├── __pycache__ │ │ │ ├── inception_utils.cpython-35.pyc │ │ │ └── inception_v4.cpython-35.pyc │ │ ├── inception_utils.py │ │ └── inception_v4.py │ ├── resnet_v2 │ │ ├── __pycache__ │ │ │ ├── resnet_utils.cpython-35.pyc │ │ │ └── resnet_v2.cpython-35.pyc │ │ ├── resnet_utils.py │ │ └── resnet_v2.py │ └── vgg │ │ ├── __pycache__ │ │ └── vgg.cpython-35.pyc │ │ └── vgg.py ├── pretrain │ └── README.md ├── sample_train │ ├── 0male │ │ ├── 0(1).jpeg │ │ ├── 0(1).jpg │ │ ├── 0(2).jpeg │ │ ├── 0(2).jpg │ │ ├── 0(3).jpeg │ │ └── 0(3).jpg │ ├── 1female │ │ ├── 1(1).jpg │ │ ├── 1(2).jpg │ │ ├── 1(3).jpg │ │ ├── 1(4).jpg │ │ ├── 1(5).jpg │ │ └── 1(6).jpg │ ├── 2many │ │ ├── 0_Parade_marchingband_1_12.jpg │ │ ├── 0_Parade_marchingband_1_13.jpg │ │ ├── 0_Parade_marchingband_1_17.jpg │ │ ├── 0_Parade_marchingband_1_5.jpg │ │ ├── 0_Parade_marchingband_1_6.jpg │ │ └── 0_Parade_marchingband_1_8.jpg │ ├── 3other │ │ ├── 6(2).jpg │ │ ├── 6(3).jpg │ │ ├── 6(4).jpg │ │ ├── 6(5).jpg │ │ ├── 6(6).jpg │ │ └── 6(9).jpg │ └── README.md ├── train_net │ ├── train.py │ └── train_tensorboard.py └── z_ckpt_pb │ ├── ckpt_pb.py │ ├── img_preprocessing.py │ ├── inception_preprocessing.py │ ├── inception_utils.py │ ├── inception_v4.py │ └── test.py └── train_cnn_v1 ├── README.md ├── ckpt_pb.py ├── ckpt_pb3.py ├── config.py ├── gender ├── 0male │ ├── 0(1).jpeg │ ├── 0(1).jpg │ ├── 0(2).jpeg │ ├── 0(2).jpg │ ├── 0(3).jpeg │ └── 0(3).jpg ├── 1female │ ├── 1(1).jpg │ ├── 1(2).jpg │ ├── 1(3).jpg │ ├── 1(4).jpg │ ├── 1(5).jpg │ └── 1(6).jpg ├── 2many │ ├── 0_Parade_marchingband_1_12.jpg │ ├── 0_Parade_marchingband_1_13.jpg │ ├── 0_Parade_marchingband_1_17.jpg │ ├── 0_Parade_marchingband_1_5.jpg │ ├── 0_Parade_marchingband_1_6.jpg │ └── 0_Parade_marchingband_1_8.jpg └── 3other │ ├── 6(2).jpg │ ├── 6(3).jpg │ ├── 6(4).jpg │ ├── 6(5).jpg │ ├── 6(6).jpg │ └── 6(9).jpg ├── lib ├── data_aug │ └── data_aug.py ├── data_load │ ├── data_load.py │ ├── data_load_from_txt.py │ ├── data_load_from_txt_nolabel.py │ └── data_loader.py ├── grad_cam │ └── grad_cam.py ├── loss │ └── loss.py ├── model │ ├── alexnet │ │ ├── __pycache__ │ │ │ └── alexnet.cpython-35.pyc │ │ └── alexnet.py │ ├── attention │ │ ├── __pycache__ │ │ │ └── attention.cpython-35.pyc │ │ └── attention.py │ ├── build_model │ │ ├── __pycache__ │ │ │ └── build_net.cpython-35.pyc │ │ └── build_net.py │ ├── cifarnet │ │ └── cifarnet.py │ ├── inception_resnet_v2 │ │ └── inception_resnet_v2.py │ ├── inception_v4 │ │ ├── __pycache__ │ │ │ ├── inception_utils.cpython-35.pyc │ │ │ └── inception_v4.cpython-35.pyc │ │ ├── inception_utils.py │ │ └── inception_v4.py │ ├── resnet_v2 │ │ ├── __pycache__ │ │ │ ├── resnet_utils.cpython-35.pyc │ │ │ └── resnet_v2.cpython-35.pyc │ │ ├── resnet_utils.py │ │ └── resnet_v2.py │ └── vgg │ │ ├── __pycache__ │ │ └── vgg.cpython-35.pyc │ │ └── vgg.py ├── optimizer │ ├── optimizer.py │ └── optimizer_minimize.py ├── train │ ├── train.py │ └── train3.py └── utils │ └── utils.py ├── main.py ├── model └── README.md ├── pretrain └── README.md ├── start.sh ├── test ├── lp.png ├── predict.py └── test_interface .py └── vis_cam.py /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | .git 3 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 此repo是tensorflow版本的,pytorch版本:https://github.com/MachineLP/PyTorch_image_classifier 2 | 3 | > tensorflow搭建的一个训练框架,包含模型有:vgg(vgg16,vgg19), resnet(resnet_v2_50,resnet_v2_101,resnet_v2_152), inception_v4, inception_resnet_v2等。 4 | 5 | > 此框架主要针对分类任务, 后面会陆续搭建多任务多标签、检测、以及rnn等框架,欢迎关注。 6 | 搭建时使用的环境为:Python3.5, tensorflow1.4 7 | 8 | 具体: 9 | 10 | - [train_cnn_v0](https://github.com/MachineLP/train_arch/tree/master/train_cnn_v0) 11 | > 实现基础cnn训练,数据读取方式慢。 12 | 13 | - [train_cnn_v1](https://github.com/MachineLP/train_arch/tree/master/train_cnn_v1) 14 | > 优化数据读取的方式,学习率加入衰减。 15 | 16 | - [train_cnn-rnn](https://github.com/MachineLP/train_cnn-rnn) 17 | > 在train_cnn_v0基础上加入rnn。 18 | 19 | - [train_cnn-rnn-attention_v0](https://github.com/MachineLP/train_cnn-rnn-attention) 20 | > 在train_cnn_v0基础上加入rnn、attention。 21 | 22 | - [train_cnn_multiGPU_v0](https://github.com/MachineLP/train_arch/tree/master/train_cnn_multiGPU_v0) 23 | > 使用多GPU训练(默认两块gpu),以上其他框架使用多GPU,只需把train.py替换掉就可以了。 24 | 25 | - [train_cnn_multilabel](https://github.com/MachineLP/train_arch/tree/master/train_cnn_multilabel) 26 | > 多任务多标签训练及其总结。 27 | 28 | - [train_cnn_GANs](https://github.com/MachineLP/train_cnn_GANs) 29 | > GANs训练及其总结。 30 | 31 | - [TensorFlow基础教程](https://github.com/MachineLP/Tensorflow-) 32 | > 理论及其代码实践。 33 | 34 | - [python实践教程](https://github.com/MachineLP/py_workSpace) 35 | > MachineLP的日常代码。 36 | 37 | 38 | 对dl感兴趣,还可以关注我的博客,这是我的博客目录:(地址: http://blog.csdn.net/u014365862/article/details/78422372 ) 39 | 本文为博主原创文章,未经博主允许不得转载。有问题可以加微信:lp9628(注明CSDN)。 40 | 41 | 公众号MachineLN,邀请您扫码关注: 42 | 43 | ![image](http://upload-images.jianshu.io/upload_images/4618424-3ef1722341ba72d2?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 44 | -------------------------------------------------------------------------------- /train_cnn-rnn-attention_v0/README.md: -------------------------------------------------------------------------------- 1 | 2 | > 自己搭建的一个训练框架,包含模型有:cnn+rnn+attention: vgg(vgg16,vgg19)+rnn(LSTM, GRU)+attention, resnet(resnet_v2_50,resnet_v2_101,resnet_v2_152)+rnn(LSTM, GRU)+attention, inception_v4+rnn(LSTM, GRU)+attention, inception_resnet_v2+rnn(LSTM, GRU)+attention等。 3 | 4 | >此框架主要针对分类任务, 后面会陆续搭建多任务多标签、检测等框架,欢迎关注。 5 | 使用说明: 6 | 搭建时使用的环境为:Python3.5, tensorflow1.4 7 | 8 | 变量设置参考config.py。 9 | 详细说明参见config.py。 10 | 11 | ( mkdir pretrain/inception_v4, 下载与训练模型, cp到pretrain/inception_v4/ ) 12 | 13 | 运行代码: python main.py 14 | 15 | 另外此代码加了tensorboard,将在工程目录下生成 xxx_log 的文件。 然后使用:tensorboard --logdir arch_inceion_v4_rnn_attention_train_log查看(tensorboard --logdir arch_inceion_v4_rnn_attention_valid_log)。 后续有时间会把其它的功能加上。 16 | 17 | 其中,z_ckpt_pb:ckpt转pb的代码,和测试接口。 18 | 19 | 20 | 对dl感兴趣,还可以关注我的博客,这是我的博客目录:(地址: http://blog.csdn.net/u014365862/article/details/78422372 ) 21 | 本文为博主原创文章,未经博主允许不得转载。有问题可以加微信:lp9628(注明CSDN)。 22 | 23 | -------------------------------------------------------------------------------- /train_cnn-rnn-attention_v0/config.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | Created on 2017 10.17 4 | @author: liupeng 5 | wechat: lp9628 6 | blog: http://blog.csdn.net/u014365862/article/details/78422372 7 | """ 8 | 9 | # inception_v4:299 10 | # resnet_v2:224 11 | # vgg:224 12 | 13 | IMAGE_HEIGHT = 299 14 | IMAGE_WIDTH = 299 15 | num_classes = 4 16 | EARLY_STOP_PATIENCE = 1000 17 | # epoch 18 | epoch = 1000 19 | batch_size = 1 20 | # 模型的学习率 21 | learning_rate = 0.00001 22 | keep_prob = 0.8 23 | 24 | 25 | # 设置训练样本的占总样本的比例: 26 | train_rate = 0.9 27 | 28 | # 每个类别保存到一个文件中,放在此目录下,只要是二级目录就可以。 29 | craterDir = "sample_train" 30 | 31 | # 选择需要的模型 32 | # arch_model="arch_inception_v4"; 33 | # arch_model="arch_resnet_v2_50" 34 | # arch_model="vgg_16" 35 | arch_model="arch_inception_v4_rnn_attention" 36 | 37 | # 设置要更新的参数和加载的参数,目前是非此即彼,可以自己修改哦 38 | checkpoint_exclude_scopes = "Logits_out" 39 | 40 | # 迁移学习模型参数, 下载训练好模型:https://github.com/MachineLP/models/tree/master/research/slim 41 | # checkpoint_path="pretrain/inception_v4/inception_v4.ckpt"; 42 | # checkpoint_path="pretrain/resnet_v2_50/resnet_v2_50.ckpt" 43 | checkpoint_path="pretrain/inception_v4/inception_v4.ckpt" 44 | 45 | #训练好的模型参数在model文件夹下。 46 | 47 | # 接下来可以添加的功能: 48 | # 图像归一化:默认的是归一化到[-1,1]:(load_image/load_image.py:get_next_batch_from_path) (可以自行加一些设置参数,在此处设置) 49 | # 需要加入模型 需修改 (train_net/train.py) 50 | # 设置GPU使用, train_net/train.py (多GPU), main.py 51 | # 设置学习率衰减:learningRate_1 = tf.train.exponential_decay(lr1_init, tf.subtract(global_step, 1), decay_steps, decay_rate, True) 52 | # 加入tensorboard 可视化 53 | # 需要修改参数更新的方法请参考:(train_net/train.py) 54 | ''' 55 | def _configure_optimizer(learning_rate): 56 | """Configures the optimizer used for training. 57 | 58 | Args: 59 | learning_rate: A scalar or `Tensor` learning rate. 60 | 61 | Returns: 62 | An instance of an optimizer. 63 | 64 | Raises: 65 | ValueError: if FLAGS.optimizer is not recognized. 66 | """ 67 | if FLAGS.optimizer == 'adadelta': 68 | optimizer = tf.train.AdadeltaOptimizer( 69 | learning_rate, 70 | rho=FLAGS.adadelta_rho, 71 | epsilon=FLAGS.opt_epsilon) 72 | elif FLAGS.optimizer == 'adagrad': 73 | optimizer = tf.train.AdagradOptimizer( 74 | learning_rate, 75 | initial_accumulator_value=FLAGS.adagrad_initial_accumulator_value) 76 | elif FLAGS.optimizer == 'adam': 77 | optimizer = tf.train.AdamOptimizer( 78 | learning_rate, 79 | beta1=FLAGS.adam_beta1, 80 | beta2=FLAGS.adam_beta2, 81 | epsilon=FLAGS.opt_epsilon) 82 | elif FLAGS.optimizer == 'ftrl': 83 | optimizer = tf.train.FtrlOptimizer( 84 | learning_rate, 85 | learning_rate_power=FLAGS.ftrl_learning_rate_power, 86 | initial_accumulator_value=FLAGS.ftrl_initial_accumulator_value, 87 | l1_regularization_strength=FLAGS.ftrl_l1, 88 | l2_regularization_strength=FLAGS.ftrl_l2) 89 | elif FLAGS.optimizer == 'momentum': 90 | optimizer = tf.train.MomentumOptimizer( 91 | learning_rate, 92 | momentum=FLAGS.momentum, 93 | name='Momentum') 94 | elif FLAGS.optimizer == 'rmsprop': 95 | optimizer = tf.train.RMSPropOptimizer( 96 | learning_rate, 97 | decay=FLAGS.rmsprop_decay, 98 | momentum=FLAGS.rmsprop_momentum, 99 | epsilon=FLAGS.opt_epsilon) 100 | elif FLAGS.optimizer == 'sgd': 101 | optimizer = tf.train.GradientDescentOptimizer(learning_rate) 102 | else: 103 | raise ValueError('Optimizer [%s] was not recognized', FLAGS.optimizer) 104 | 105 | 106 | return optimizer''' 107 | -------------------------------------------------------------------------------- /train_cnn-rnn-attention_v0/data_aug/__pycache__/data_aug.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn-rnn-attention_v0/data_aug/__pycache__/data_aug.cpython-35.pyc -------------------------------------------------------------------------------- /train_cnn-rnn-attention_v0/data_aug/data_aug.py: -------------------------------------------------------------------------------- 1 | 2 | # -*- coding: utf-8 -*- 3 | """ 4 | Created on 2017 10.17 5 | @author: liupeng 6 | wechat: lp9628 7 | blog: http://blog.csdn.net/u014365862/article/details/78422372 8 | """ 9 | 10 | import numpy as np 11 | import tensorflow as tf 12 | import numpy as np 13 | import os 14 | from PIL import Image 15 | import cv2 16 | from skimage import exposure 17 | 18 | class data_aug(object): 19 | 20 | def __init__(self, img): 21 | self.image= img 22 | 23 | # 左右镜像 24 | def _random_fliplr(self, random_fliplr = True): 25 | if random_fliplr and np.random.choice([True, False]): 26 | self.image = np.fliplr(self.image) # 左右 27 | 28 | # 上下镜像 29 | def _random_flipud(self, random_flipud = True): 30 | if random_flipud and np.random.choice([True, False]): 31 | self.image = np.flipud(self.image) # 上下 32 | 33 | # 改变光照 34 | def _random_exposure(self, random_exposure = True): 35 | if random_exposure and np.random.choice([True, False]): 36 | e_rate = np.random.uniform(0.5,1.5) 37 | self.image = exposure.adjust_gamma(self.image, e_rate) 38 | 39 | # 旋转 40 | def _random_rotation(self, random_rotation = True): 41 | if random_rotation and np.random.choice([True, False]): 42 | w,h = self.image.shape[1], self.image.shape[0] 43 | # 0-180随机产生旋转角度。 44 | angle = np.random.randint(0,10) 45 | RotateMatrix = cv2.getRotationMatrix2D(center=(w/2, h/2), angle=angle, scale=0.7) 46 | # image = cv2.warpAffine(image, RotateMatrix, (w,h), borderValue=(129,137,130)) 47 | self.image = cv2.warpAffine(self.image, RotateMatrix, (w,h), borderMode=cv2.BORDER_REPLICATE) 48 | 49 | # 裁剪 50 | def _random_crop(self, crop_size = 299, random_crop = True): 51 | if random_crop and np.random.choice([True, False]): 52 | if self.image.shape[1] > crop_size: 53 | sz1 = self.image.shape[1] // 2 54 | sz2 = crop_size // 2 55 | diff = sz1 - sz2 56 | (h, v) = (np.random.randint(0, diff + 1), np.random.randint(0, diff + 1)) 57 | self.image = self.image[v:(v + crop_size), h:(h + crop_size), :] 58 | # 59 | def get_aug_img(self): 60 | data_aug_list = [self._random_fliplr, self._random_flipud, self._random_rotation, self._random_exposure, self._random_crop] 61 | data_aug_func = np.random.choice(data_aug_list, 2) 62 | for func in data_aug_func: 63 | func() 64 | return self.image 65 | 66 | 67 | -------------------------------------------------------------------------------- /train_cnn-rnn-attention_v0/load_image/__pycache__/load_image.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn-rnn-attention_v0/load_image/__pycache__/load_image.cpython-35.pyc -------------------------------------------------------------------------------- /train_cnn-rnn-attention_v0/main.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | Created on 2017 10.17 4 | @author: liupeng 5 | wechat: lp9628 6 | blog: http://blog.csdn.net/u014365862/article/details/78422372 7 | """ 8 | 9 | import numpy as np 10 | import tensorflow as tf 11 | slim = tf.contrib.slim 12 | import numpy as np 13 | import argparse 14 | import os 15 | from PIL import Image 16 | from datetime import datetime 17 | import math 18 | import time 19 | from load_image import load_image 20 | try: 21 | from train import train 22 | except: 23 | from train_net.train import train 24 | import cv2 25 | import os 26 | from keras.utils import np_utils 27 | os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID" 28 | os.environ["CUDA_VISIBLE_DEVICES"] = "0" 29 | 30 | import config 31 | 32 | if __name__ == '__main__': 33 | 34 | IMAGE_HEIGHT = config.IMAGE_HEIGHT 35 | IMAGE_WIDTH = config.IMAGE_WIDTH 36 | num_classes = config.num_classes 37 | EARLY_STOP_PATIENCE = config.EARLY_STOP_PATIENCE 38 | # epoch 39 | epoch = config.epoch 40 | batch_size = config.batch_size 41 | # 模型的学习率 42 | learning_rate = config.learning_rate 43 | keep_prob = config.keep_prob 44 | 45 | ##----------------------------------------------------------------------------## 46 | # 设置训练样本的占总样本的比例: 47 | train_rate = config.train_rate 48 | # 每个类别保存到一个文件中,放在此目录下,只要是二级目录就可以。 49 | craterDir = config.craterDir 50 | 51 | # 选择需要的模型 52 | # arch_model="arch_inception_v4"; arch_model="arch_resnet_v2_50"; arch_model="vgg_16" 53 | arch_model=config.arch_model 54 | # 设置要更新的参数和加载的参数,目前是非此即彼,可以自己修改哦 55 | checkpoint_exclude_scopes = config.checkpoint_exclude_scopes 56 | # 迁移学习模型参数 57 | checkpoint_path=config.checkpoint_path 58 | 59 | ##----------------------------------------------------------------------------## 60 | print ("-----------------------------load_image.py start--------------------------") 61 | # 准备训练数据 62 | all_image = load_image.load_image(craterDir, train_rate) 63 | train_data, train_label, valid_data, valid_label= all_image.gen_train_valid_image() 64 | image_n = all_image.image_n 65 | # 样本的总数量 66 | print ("样本的总数量:") 67 | print (image_n) 68 | # 定义90%作为训练样本 69 | train_n = all_image.train_n 70 | valid_n = all_image.valid_n 71 | # ont-hot 72 | train_label = np_utils.to_categorical(train_label, num_classes) 73 | valid_label = np_utils.to_categorical(valid_label, num_classes) 74 | if not os.path.isdir('model'): 75 | os.makedirs('model') 76 | ##----------------------------------------------------------------------------## 77 | 78 | print ("-----------------------------train.py start--------------------------") 79 | train(train_data,train_label,valid_data,valid_label,train_n,valid_n,IMAGE_HEIGHT,IMAGE_WIDTH,learning_rate,num_classes,epoch,EARLY_STOP_PATIENCE,batch_size,keep_prob, 80 | arch_model, checkpoint_exclude_scopes, checkpoint_path) 81 | -------------------------------------------------------------------------------- /train_cnn-rnn-attention_v0/net/attention/__pycache__/attention.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn-rnn-attention_v0/net/attention/__pycache__/attention.cpython-35.pyc -------------------------------------------------------------------------------- /train_cnn-rnn-attention_v0/net/attention/attention.py: -------------------------------------------------------------------------------- 1 | # coding=utf-8 2 | 3 | import tensorflow as tf 4 | 5 | def attention(inputs, attention_size, time_major=False): 6 | if isinstance(inputs, tuple): 7 | # In case of Bi-RNN, concatenate the forward and the backward RNN outputs. 8 | inputs = tf.concat(inputs, 2) 9 | 10 | if time_major: 11 | # (T,B,D) => (B,T,D) 12 | inputs = tf.transpose(inputs, [1, 0, 2]) 13 | 14 | inputs_shape = inputs.shape 15 | sequence_length = inputs_shape[1].value # the length of sequences processed in the antecedent RNN layer 16 | hidden_size = inputs_shape[2].value # hidden size of the RNN layer 17 | 18 | # Attention mechanism 19 | W_omega = tf.Variable(tf.random_normal([hidden_size, attention_size], stddev=0.1)) 20 | b_omega = tf.Variable(tf.random_normal([attention_size], stddev=0.1)) 21 | u_omega = tf.Variable(tf.random_normal([attention_size], stddev=0.1)) 22 | 23 | v = tf.tanh(tf.matmul(tf.reshape(inputs, [-1, hidden_size]), W_omega) + tf.reshape(b_omega, [1, -1])) 24 | vu = tf.matmul(v, tf.reshape(u_omega, [-1, 1])) 25 | exps = tf.reshape(tf.exp(vu), [-1, sequence_length]) 26 | alphas = exps / tf.reshape(tf.reduce_sum(exps, 1), [-1, 1]) 27 | 28 | # Output of Bi-RNN is reduced with attention vector 29 | output = tf.reduce_sum(inputs * tf.reshape(alphas, [-1, sequence_length, 1]), 1) 30 | 31 | return output 32 | -------------------------------------------------------------------------------- /train_cnn-rnn-attention_v0/net/cifarnet/cifarnet.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | Created on 2017 10.17 4 | @author: liupeng 5 | wechat: lp9628 6 | blog: http://blog.csdn.net/u014365862/article/details/78422372 7 | """ 8 | 9 | from __future__ import absolute_import 10 | from __future__ import division 11 | from __future__ import print_function 12 | 13 | import tensorflow as tf 14 | 15 | slim = tf.contrib.slim 16 | 17 | trunc_normal = lambda stddev: tf.truncated_normal_initializer(stddev=stddev) 18 | 19 | 20 | def cifarnet(images, num_classes=10, is_training=False, 21 | dropout_keep_prob=0.5, 22 | prediction_fn=slim.softmax, 23 | scope='CifarNet'): 24 | """Creates a variant of the CifarNet model. 25 | 26 | Note that since the output is a set of 'logits', the values fall in the 27 | interval of (-infinity, infinity). Consequently, to convert the outputs to a 28 | probability distribution over the characters, one will need to convert them 29 | using the softmax function: 30 | 31 | logits = cifarnet.cifarnet(images, is_training=False) 32 | probabilities = tf.nn.softmax(logits) 33 | predictions = tf.argmax(logits, 1) 34 | 35 | Args: 36 | images: A batch of `Tensors` of size [batch_size, height, width, channels]. 37 | num_classes: the number of classes in the dataset. 38 | is_training: specifies whether or not we're currently training the model. 39 | This variable will determine the behaviour of the dropout layer. 40 | dropout_keep_prob: the percentage of activation values that are retained. 41 | prediction_fn: a function to get predictions out of logits. 42 | scope: Optional variable_scope. 43 | 44 | Returns: 45 | logits: the pre-softmax activations, a tensor of size 46 | [batch_size, `num_classes`] 47 | end_points: a dictionary from components of the network to the corresponding 48 | activation. 49 | """ 50 | end_points = {} 51 | 52 | with tf.variable_scope(scope, 'CifarNet', [images, num_classes]): 53 | net = slim.conv2d(images, 64, [5, 5], scope='conv1') 54 | end_points['conv1'] = net 55 | net = slim.max_pool2d(net, [2, 2], 2, scope='pool1') 56 | end_points['pool1'] = net 57 | net = tf.nn.lrn(net, 4, bias=1.0, alpha=0.001/9.0, beta=0.75, name='norm1') 58 | net = slim.conv2d(net, 64, [5, 5], scope='conv2') 59 | end_points['conv2'] = net 60 | net = tf.nn.lrn(net, 4, bias=1.0, alpha=0.001/9.0, beta=0.75, name='norm2') 61 | net = slim.max_pool2d(net, [2, 2], 2, scope='pool2') 62 | end_points['pool2'] = net 63 | net = slim.flatten(net) 64 | end_points['Flatten'] = net 65 | net = slim.fully_connected(net, 384, scope='fc3') 66 | end_points['fc3'] = net 67 | net = slim.dropout(net, dropout_keep_prob, is_training=is_training, 68 | scope='dropout3') 69 | net = slim.fully_connected(net, 192, scope='fc4') 70 | end_points['fc4'] = net 71 | logits = slim.fully_connected(net, num_classes, 72 | biases_initializer=tf.zeros_initializer(), 73 | weights_initializer=trunc_normal(1/192.0), 74 | weights_regularizer=None, 75 | activation_fn=None, 76 | scope='logits') 77 | 78 | end_points['Logits'] = logits 79 | end_points['Predictions'] = prediction_fn(logits, scope='Predictions') 80 | 81 | return logits, end_points 82 | cifarnet.default_image_size = 32 83 | 84 | 85 | def cifarnet_arg_scope(weight_decay=0.004): 86 | """Defines the default cifarnet argument scope. 87 | 88 | Args: 89 | weight_decay: The weight decay to use for regularizing the model. 90 | 91 | Returns: 92 | An `arg_scope` to use for the inception v3 model. 93 | """ 94 | with slim.arg_scope( 95 | [slim.conv2d], 96 | weights_initializer=tf.truncated_normal_initializer(stddev=5e-2), 97 | activation_fn=tf.nn.relu): 98 | with slim.arg_scope( 99 | [slim.fully_connected], 100 | biases_initializer=tf.constant_initializer(0.1), 101 | weights_initializer=trunc_normal(0.04), 102 | weights_regularizer=slim.l2_regularizer(weight_decay), 103 | activation_fn=tf.nn.relu) as sc: 104 | return sc 105 | -------------------------------------------------------------------------------- /train_cnn-rnn-attention_v0/net/inception_v4/__pycache__/inception_utils.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn-rnn-attention_v0/net/inception_v4/__pycache__/inception_utils.cpython-35.pyc -------------------------------------------------------------------------------- /train_cnn-rnn-attention_v0/net/inception_v4/__pycache__/inception_v4.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn-rnn-attention_v0/net/inception_v4/__pycache__/inception_v4.cpython-35.pyc -------------------------------------------------------------------------------- /train_cnn-rnn-attention_v0/net/inception_v4/inception_utils.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | Created on 2017 10.17 4 | @author: liupeng 5 | wechat: lp9628 6 | blog: http://blog.csdn.net/u014365862/article/details/78422372 7 | """ 8 | 9 | from __future__ import absolute_import 10 | from __future__ import division 11 | from __future__ import print_function 12 | 13 | import tensorflow as tf 14 | 15 | slim = tf.contrib.slim 16 | 17 | 18 | def inception_arg_scope(weight_decay=0.00004, 19 | use_batch_norm=True, 20 | batch_norm_decay=0.9997, 21 | batch_norm_epsilon=0.001): 22 | """Defines the default arg scope for inception models. 23 | Args: 24 | weight_decay: The weight decay to use for regularizing the model. 25 | use_batch_norm: "If `True`, batch_norm is applied after each convolution. 26 | batch_norm_decay: Decay for batch norm moving average. 27 | batch_norm_epsilon: Small float added to variance to avoid dividing by zero 28 | in batch norm. 29 | Returns: 30 | An `arg_scope` to use for the inception models. 31 | """ 32 | batch_norm_params = { 33 | # Decay for the moving averages. 34 | 'decay': batch_norm_decay, 35 | # epsilon to prevent 0s in variance. 36 | 'epsilon': batch_norm_epsilon, 37 | # collection containing update_ops. 38 | 'updates_collections': tf.GraphKeys.UPDATE_OPS, 39 | } 40 | if use_batch_norm: 41 | normalizer_fn = slim.batch_norm 42 | normalizer_params = batch_norm_params 43 | else: 44 | normalizer_fn = None 45 | normalizer_params = {} 46 | # Set weight_decay for weights in Conv and FC layers. 47 | with slim.arg_scope([slim.conv2d, slim.fully_connected], 48 | weights_regularizer=slim.l2_regularizer(weight_decay)): 49 | with slim.arg_scope( 50 | [slim.conv2d], 51 | weights_initializer=slim.variance_scaling_initializer(), 52 | activation_fn=tf.nn.relu, 53 | normalizer_fn=normalizer_fn, 54 | normalizer_params=normalizer_params) as sc: 55 | return sc 56 | -------------------------------------------------------------------------------- /train_cnn-rnn-attention_v0/net/resnet_v2/__pycache__/resnet_utils.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn-rnn-attention_v0/net/resnet_v2/__pycache__/resnet_utils.cpython-35.pyc -------------------------------------------------------------------------------- /train_cnn-rnn-attention_v0/net/resnet_v2/__pycache__/resnet_v2.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn-rnn-attention_v0/net/resnet_v2/__pycache__/resnet_v2.cpython-35.pyc -------------------------------------------------------------------------------- /train_cnn-rnn-attention_v0/net/vgg/__pycache__/vgg.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn-rnn-attention_v0/net/vgg/__pycache__/vgg.cpython-35.pyc -------------------------------------------------------------------------------- /train_cnn-rnn-attention_v0/net/z_build_net/__pycache__/build_net.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn-rnn-attention_v0/net/z_build_net/__pycache__/build_net.cpython-35.pyc -------------------------------------------------------------------------------- /train_cnn-rnn-attention_v0/pretrain/README.md: -------------------------------------------------------------------------------- 1 | 2 | # 预训练好的模型放在这里。 3 | 4 | ## arch_inception_v4 download inception_v4 model: http://download.tensorflow.org/models/inception_v4_2016_09_09.tar.gz 5 | wget http://download.tensorflow.org/models/inception_v4_2016_09_09.tar.gz 6 | tar zxvf inception_v4_2016_09_09.tar.gz 7 | 8 | cd pretrain 9 | 10 | mkdir inception_v4 11 | 12 | mv .../inception_v4.ckpt inception_v4 13 | 14 | ## arch_vgg16 download vgg model: http://download.tensorflow.org/models/vgg_16_2016_08_28.tar.gz 15 | wget http://download.tensorflow.org/models/vgg_16_2016_08_28.tar.gz 16 | 17 | tar zxvf vgg_16_2016_08_28.tar.gz 18 | 19 | cd pretrain 20 | 21 | mkdir vgg 22 | 23 | mv .../vgg_16.ckpt vgg 24 | 25 | ## arch_resnet_v2_50 download resnet_v2_50 model: http://download.tensorflow.org/models/resnet_v2_50_2017_04_14.tar.gz 26 | wget http://download.tensorflow.org/models/resnet_v2_50_2017_04_14.tar.gz 27 | tar zxvf resnet_v2_50_2017_04_14.tar.gz 28 | 29 | cd pretrain 30 | 31 | mkdir resnet_v2 32 | 33 | mv .../resnet_v2_50.ckpt resnet_v2 34 | 35 | 36 | -------------------------------------------------------------------------------- /train_cnn-rnn-attention_v0/sample_train/0male/0(1).jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn-rnn-attention_v0/sample_train/0male/0(1).jpeg -------------------------------------------------------------------------------- /train_cnn-rnn-attention_v0/sample_train/0male/0(1).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn-rnn-attention_v0/sample_train/0male/0(1).jpg -------------------------------------------------------------------------------- /train_cnn-rnn-attention_v0/sample_train/0male/0(2).jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn-rnn-attention_v0/sample_train/0male/0(2).jpeg -------------------------------------------------------------------------------- /train_cnn-rnn-attention_v0/sample_train/0male/0(2).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn-rnn-attention_v0/sample_train/0male/0(2).jpg -------------------------------------------------------------------------------- /train_cnn-rnn-attention_v0/sample_train/0male/0(3).jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn-rnn-attention_v0/sample_train/0male/0(3).jpeg -------------------------------------------------------------------------------- /train_cnn-rnn-attention_v0/sample_train/0male/0(3).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn-rnn-attention_v0/sample_train/0male/0(3).jpg -------------------------------------------------------------------------------- /train_cnn-rnn-attention_v0/sample_train/1female/1(1).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn-rnn-attention_v0/sample_train/1female/1(1).jpg -------------------------------------------------------------------------------- /train_cnn-rnn-attention_v0/sample_train/1female/1(2).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn-rnn-attention_v0/sample_train/1female/1(2).jpg -------------------------------------------------------------------------------- /train_cnn-rnn-attention_v0/sample_train/1female/1(3).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn-rnn-attention_v0/sample_train/1female/1(3).jpg -------------------------------------------------------------------------------- /train_cnn-rnn-attention_v0/sample_train/1female/1(4).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn-rnn-attention_v0/sample_train/1female/1(4).jpg -------------------------------------------------------------------------------- /train_cnn-rnn-attention_v0/sample_train/1female/1(5).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn-rnn-attention_v0/sample_train/1female/1(5).jpg -------------------------------------------------------------------------------- /train_cnn-rnn-attention_v0/sample_train/1female/1(6).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn-rnn-attention_v0/sample_train/1female/1(6).jpg -------------------------------------------------------------------------------- /train_cnn-rnn-attention_v0/sample_train/2many/0_Parade_marchingband_1_12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn-rnn-attention_v0/sample_train/2many/0_Parade_marchingband_1_12.jpg -------------------------------------------------------------------------------- /train_cnn-rnn-attention_v0/sample_train/2many/0_Parade_marchingband_1_13.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn-rnn-attention_v0/sample_train/2many/0_Parade_marchingband_1_13.jpg -------------------------------------------------------------------------------- /train_cnn-rnn-attention_v0/sample_train/2many/0_Parade_marchingband_1_17.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn-rnn-attention_v0/sample_train/2many/0_Parade_marchingband_1_17.jpg -------------------------------------------------------------------------------- /train_cnn-rnn-attention_v0/sample_train/2many/0_Parade_marchingband_1_5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn-rnn-attention_v0/sample_train/2many/0_Parade_marchingband_1_5.jpg -------------------------------------------------------------------------------- /train_cnn-rnn-attention_v0/sample_train/2many/0_Parade_marchingband_1_6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn-rnn-attention_v0/sample_train/2many/0_Parade_marchingband_1_6.jpg -------------------------------------------------------------------------------- /train_cnn-rnn-attention_v0/sample_train/2many/0_Parade_marchingband_1_8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn-rnn-attention_v0/sample_train/2many/0_Parade_marchingband_1_8.jpg -------------------------------------------------------------------------------- /train_cnn-rnn-attention_v0/sample_train/3other/6(2).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn-rnn-attention_v0/sample_train/3other/6(2).jpg -------------------------------------------------------------------------------- /train_cnn-rnn-attention_v0/sample_train/3other/6(3).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn-rnn-attention_v0/sample_train/3other/6(3).jpg -------------------------------------------------------------------------------- /train_cnn-rnn-attention_v0/sample_train/3other/6(4).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn-rnn-attention_v0/sample_train/3other/6(4).jpg -------------------------------------------------------------------------------- /train_cnn-rnn-attention_v0/sample_train/3other/6(5).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn-rnn-attention_v0/sample_train/3other/6(5).jpg -------------------------------------------------------------------------------- /train_cnn-rnn-attention_v0/sample_train/3other/6(6).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn-rnn-attention_v0/sample_train/3other/6(6).jpg -------------------------------------------------------------------------------- /train_cnn-rnn-attention_v0/sample_train/3other/6(9).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn-rnn-attention_v0/sample_train/3other/6(9).jpg -------------------------------------------------------------------------------- /train_cnn-rnn-attention_v0/train_net/__pycache__/train.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn-rnn-attention_v0/train_net/__pycache__/train.cpython-35.pyc -------------------------------------------------------------------------------- /train_cnn-rnn-attention_v0/z_ckpt_pb/inception_utils.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | Created on 2017 10.17 4 | @author: liupeng 5 | wechat: lp9628 6 | blog: http://blog.csdn.net/u014365862/article/details/78422372 7 | """ 8 | 9 | from __future__ import absolute_import 10 | from __future__ import division 11 | from __future__ import print_function 12 | 13 | import tensorflow as tf 14 | 15 | slim = tf.contrib.slim 16 | 17 | 18 | def inception_arg_scope(weight_decay=0.00004, 19 | use_batch_norm=True, 20 | batch_norm_decay=0.9997, 21 | batch_norm_epsilon=0.001): 22 | """Defines the default arg scope for inception models. 23 | Args: 24 | weight_decay: The weight decay to use for regularizing the model. 25 | use_batch_norm: "If `True`, batch_norm is applied after each convolution. 26 | batch_norm_decay: Decay for batch norm moving average. 27 | batch_norm_epsilon: Small float added to variance to avoid dividing by zero 28 | in batch norm. 29 | Returns: 30 | An `arg_scope` to use for the inception models. 31 | """ 32 | batch_norm_params = { 33 | # Decay for the moving averages. 34 | 'decay': batch_norm_decay, 35 | # epsilon to prevent 0s in variance. 36 | 'epsilon': batch_norm_epsilon, 37 | # collection containing update_ops. 38 | 'updates_collections': tf.GraphKeys.UPDATE_OPS, 39 | } 40 | if use_batch_norm: 41 | normalizer_fn = slim.batch_norm 42 | normalizer_params = batch_norm_params 43 | else: 44 | normalizer_fn = None 45 | normalizer_params = {} 46 | # Set weight_decay for weights in Conv and FC layers. 47 | with slim.arg_scope([slim.conv2d, slim.fully_connected], 48 | weights_regularizer=slim.l2_regularizer(weight_decay)): 49 | with slim.arg_scope( 50 | [slim.conv2d], 51 | weights_initializer=slim.variance_scaling_initializer(), 52 | activation_fn=tf.nn.relu, 53 | normalizer_fn=normalizer_fn, 54 | normalizer_params=normalizer_params) as sc: 55 | return sc 56 | -------------------------------------------------------------------------------- /train_cnn-rnn-attention_v0/z_ckpt_pb/test.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | Created on 2017 10.17 4 | @author: liupeng""" 5 | 6 | import numpy as np 7 | import numpy as np 8 | import os 9 | from PIL import Image 10 | import cv2 11 | 12 | import csv 13 | import argparse, json, textwrap 14 | import sys 15 | import csv 16 | 17 | 18 | def result2num(out, image_path): 19 | # print (out) 20 | dc = out[image_path] 21 | # print (dc) 22 | 23 | if dc.get("help", ""): 24 | print ("help is true!") 25 | dc.pop('help') 26 | print (">>>>>>>>", dc) 27 | 28 | def dict2list(dic:dict): 29 | ''''' 将字典转化为列表 ''' 30 | keys = dic.keys() 31 | vals = dic.values() 32 | lst = [(key, val) for key, val in zip(keys, vals)] 33 | return lst 34 | dc = sorted(dict2list(dc), key=lambda d:d[1], reverse=True) 35 | # print (dc[0][0]) 36 | if dc[0][0] == 'NG1': 37 | return 0 38 | if dc[0][0] == 'NG2': 39 | return 1 40 | if dc[0][0] == 'OK': 41 | return 2 42 | 43 | file = open("output.csv", "r") 44 | 45 | err_num = 0 46 | sample_num = 0 47 | for r in file: 48 | sample_num = sample_num + 1 49 | # 转为字典 50 | r = eval(r) 51 | # 转为列表 52 | image_path = list(r.keys()) 53 | la = 888888888888888 54 | label = str (str(image_path[0]).split('/')[1]) 55 | # print (label) 56 | if label == 'NG1': 57 | la = 0 58 | if label == 'NG2': 59 | la = 1 60 | if label == 'OK': 61 | la = 2 62 | print (la) 63 | 64 | image_path = str(image_path[0]) 65 | res = result2num(r, image_path) 66 | print (res) 67 | 68 | if (la != res): 69 | err_num = err_num + 1 70 | print (sample_num) 71 | print (err_num) 72 | acc_num = sample_num - err_num 73 | print ('accuracy >>> ', acc_num/sample_num) 74 | -------------------------------------------------------------------------------- /train_cnn_multiGPU_v0/README.md: -------------------------------------------------------------------------------- 1 | 2 | 使用方法: 3 | 训 练: python main.py (通过config.PY设置参数) 4 | 可视化:python vis_cam.py 5 | 6 | 7 | 8 | 训练平台搭建代码说明: 9 | 10 | 1. gender文件: 11 | 存放样本,不同的类别已不同的文件夹存放。 12 | 13 | 2. lib文件: 14 | (1)model文件: 15 | 各网络。 16 | (2)data_aug文件: 17 | 用于图像增强, 里边包含两种方法。 18 | (3)grad_cam文件: 19 | 可视化模块。 20 | (4)data_load文件: 21 | 加载训练数据。 22 | (5)train_文件: 23 | 构建训练。 24 | (6)utils文件: 25 | 。。。 26 | (7) loss文件: 27 | 策略:损失函数。 28 | (8)optimizer文件: 29 | 优化方法。 30 | 31 | 3. model文件: 32 | 存放训练过程中的保存的模型。 33 | 34 | 4. pretrain文件: 35 | 迁移学习中的预训练模型。 36 | 37 | 5. config.py文件: 38 | 调整训练过程的参数。 39 | 40 | 6. main.py文件: 41 | 启动训练: python main.py 42 | 43 | 7. vis_cam.py文件: 44 | 可视化: python vis_cam.py 45 | 8. ckpt_pb.py文件: 46 | ckpt转pb的。 47 | 9. test文件: 48 | 用于模型的测试。 -------------------------------------------------------------------------------- /train_cnn_multiGPU_v0/ckpt_pb.py: -------------------------------------------------------------------------------- 1 | # coding = utf-8 2 | 3 | import tensorflow as tf 4 | from tensorflow.python.framework import graph_util 5 | from lib.utils.utils import input_placeholder, g_parameter, build_net 6 | import cv2 7 | import numpy as np 8 | import os 9 | import sys 10 | import config 11 | MODEL_DIR = "model/" 12 | MODEL_NAME = "frozen_model.pb" 13 | if not tf.gfile.Exists(MODEL_DIR): #创建目录 14 | tf.gfile.MakeDirs(MODEL_DIR) 15 | 16 | height, width = config.height, config.width 17 | num_classes = config.num_classes 18 | arch_model = config.arch_model 19 | 20 | X = tf.placeholder(tf.float32, [None, height, width, 3], name = "inputs_placeholder") 21 | net, net_vis = build_net(X, num_classes, 1.0, False, arch_model) 22 | net = tf.nn.softmax(net) 23 | predict = tf.reshape(net, [-1, num_classes], name='predictions') 24 | 25 | 26 | def freeze_graph(model_folder): 27 | #checkpoint = tf.train.get_checkpoint_state(model_folder) #检查目录下ckpt文件状态是否可用 28 | #input_checkpoint = checkpoint.model_checkpoint_path #得ckpt文件路径 29 | input_checkpoint = model_folder 30 | output_graph = os.path.join(MODEL_DIR, MODEL_NAME) #PB模型保存路径 31 | 32 | output_node_names = "predictions" #原模型输出操作节点的名字 33 | #saver = tf.train.import_meta_graph(input_checkpoint + '.meta', clear_devices=True) #得到图、clear_devices :Whether or not to clear the device field for an `Operation` or `Tensor` during import. 34 | saver = tf.train.Saver() 35 | 36 | graph = tf.get_default_graph() #获得默认的图 37 | input_graph_def = graph.as_graph_def() #返回一个序列化的图代表当前的图 38 | 39 | with tf.Session() as sess: 40 | sess.run(tf.initialize_all_variables()) 41 | saver.restore(sess, input_checkpoint) #恢复图并得到数据 42 | 43 | #print "predictions : ", sess.run("predictions:0", feed_dict={"input_holder:0": [10.0]}) # 测试读出来的模型是否正确,注意这里传入的是输出 和输入 节点的 tensor的名字,不是操作节点的名字 44 | 45 | output_graph_def = graph_util.convert_variables_to_constants( #模型持久化,将变量值固定 46 | sess, 47 | input_graph_def, 48 | output_node_names.split(",") #如果有多个输出节点,以逗号隔开 49 | ) 50 | with tf.gfile.GFile(output_graph, "wb") as f: #保存模型 51 | f.write(output_graph_def.SerializeToString()) #序列化输出 52 | print("%d ops in the final graph." % len(output_graph_def.node)) #得到当前图有几个操作节点 53 | 54 | for op in graph.get_operations(): 55 | #print(op.name, op.values()) 56 | print("name:",op.name) 57 | print ("success!") 58 | 59 | 60 | #下面是用于测试, 读取pd模型,答应每个变量的名字。 61 | graph = load_graph("model/frozen_model.pb") 62 | for op in graph.get_operations(): 63 | #print(op.name, op.values()) 64 | print("name111111111111:",op.name) 65 | pred = graph.get_tensor_by_name('prefix/inputs_placeholder:0') 66 | print (pred) 67 | temp = graph.get_tensor_by_name('prefix/predictions:0') 68 | print (temp) 69 | 70 | def load_graph(frozen_graph_filename): 71 | # We load the protobuf file from the disk and parse it to retrieve the 72 | # unserialized graph_def 73 | with tf.gfile.GFile(frozen_graph_filename, "rb") as f: 74 | graph_def = tf.GraphDef() 75 | graph_def.ParseFromString(f.read()) 76 | 77 | # Then, we can use again a convenient built-in function to import a graph_def into the 78 | # current default Graph 79 | with tf.Graph().as_default() as graph: 80 | tf.import_graph_def( 81 | graph_def, 82 | input_map=None, 83 | return_elements=None, 84 | name="prefix", 85 | op_dict=None, 86 | producer_op_list=None 87 | ) 88 | return graph 89 | 90 | 91 | if __name__ == '__main__': 92 | train_dir = 'model' 93 | latest = tf.train.latest_checkpoint(train_dir) 94 | if not latest: 95 | print ("No checkpoint to continue from in", train_dir) 96 | sys.exit(1) 97 | print ("resume", latest) 98 | # saver2.restore(sess, latest) 99 | # model_folder = './model/model.ckpt-0' 100 | model_folder = latest 101 | freeze_graph(model_folder) 102 | 103 | -------------------------------------------------------------------------------- /train_cnn_multiGPU_v0/ckpt_pb3.py: -------------------------------------------------------------------------------- 1 | # coding = utf-8 2 | 3 | import tensorflow as tf 4 | from tensorflow.python.framework import graph_util 5 | from lib.utils.utils import input_placeholder, g_parameter, build_net 6 | import cv2 7 | import numpy as np 8 | import os 9 | import sys 10 | import config 11 | MODEL_DIR = "model/" 12 | MODEL_NAME = "frozen_model.pb" 13 | if not tf.gfile.Exists(MODEL_DIR): #创建目录 14 | tf.gfile.MakeDirs(MODEL_DIR) 15 | 16 | height, width = config.height, config.width 17 | num_classes = config.num_classes 18 | arch_model = config.arch_model 19 | 20 | X = tf.placeholder(tf.float32, [None, height, width, 3], name = "inputs_placeholder") 21 | net, net_vis = build_net(X, num_classes, 1.0, False, arch_model) 22 | net = tf.nn.softmax(net) 23 | predict = tf.reshape(net, [-1, num_classes], name='predictions') 24 | 25 | 26 | def freeze_graph(model_folder): 27 | #checkpoint = tf.train.get_checkpoint_state(model_folder) #检查目录下ckpt文件状态是否可用 28 | #input_checkpoint = checkpoint.model_checkpoint_path #得ckpt文件路径 29 | input_checkpoint = model_folder 30 | output_graph = os.path.join(MODEL_DIR, MODEL_NAME) #PB模型保存路径 31 | 32 | output_node_names = "predictions" #原模型输出操作节点的名字 33 | #saver = tf.train.import_meta_graph(input_checkpoint + '.meta', clear_devices=True) #得到图、clear_devices :Whether or not to clear the device field for an `Operation` or `Tensor` during import. 34 | saver = tf.train.Saver() 35 | 36 | graph = tf.get_default_graph() #获得默认的图 37 | input_graph_def = graph.as_graph_def() #返回一个序列化的图代表当前的图 38 | 39 | with tf.Session() as sess: 40 | sess.run(tf.initialize_all_variables()) 41 | saver.restore(sess, input_checkpoint) #恢复图并得到数据 42 | 43 | #print "predictions : ", sess.run("predictions:0", feed_dict={"input_holder:0": [10.0]}) # 测试读出来的模型是否正确,注意这里传入的是输出 和输入 节点的 tensor的名字,不是操作节点的名字 44 | 45 | output_graph_def = graph_util.convert_variables_to_constants( #模型持久化,将变量值固定 46 | sess, 47 | input_graph_def, 48 | output_node_names.split(",") #如果有多个输出节点,以逗号隔开 49 | ) 50 | with tf.gfile.GFile(output_graph, "wb") as f: #保存模型 51 | f.write(output_graph_def.SerializeToString()) #序列化输出 52 | print("%d ops in the final graph." % len(output_graph_def.node)) #得到当前图有几个操作节点 53 | 54 | for op in graph.get_operations(): 55 | #print(op.name, op.values()) 56 | print("name:",op.name) 57 | print ("success!") 58 | 59 | 60 | #下面是用于测试, 读取pd模型,答应每个变量的名字。 61 | graph = load_graph("model/frozen_model.pb") 62 | for op in graph.get_operations(): 63 | #print(op.name, op.values()) 64 | print("name111111111111:",op.name) 65 | pred = graph.get_tensor_by_name('prefix/inputs_placeholder:0') 66 | print (pred) 67 | temp = graph.get_tensor_by_name('prefix/predictions:0') 68 | print (temp) 69 | 70 | def load_graph(frozen_graph_filename): 71 | # We load the protobuf file from the disk and parse it to retrieve the 72 | # unserialized graph_def 73 | with tf.gfile.GFile(frozen_graph_filename, "rb") as f: 74 | graph_def = tf.GraphDef() 75 | graph_def.ParseFromString(f.read()) 76 | 77 | # Then, we can use again a convenient built-in function to import a graph_def into the 78 | # current default Graph 79 | with tf.Graph().as_default() as graph: 80 | tf.import_graph_def( 81 | graph_def, 82 | input_map=None, 83 | return_elements=None, 84 | name="prefix", 85 | op_dict=None, 86 | producer_op_list=None 87 | ) 88 | return graph 89 | 90 | 91 | if __name__ == '__main__': 92 | train_dir = 'model' 93 | latest = tf.train.latest_checkpoint(train_dir) 94 | if not latest: 95 | print ("No checkpoint to continue from in", train_dir) 96 | sys.exit(1) 97 | print ("resume", latest) 98 | # saver2.restore(sess, latest) 99 | # model_folder = './model/model.ckpt-0' 100 | model_folder = latest 101 | freeze_graph(model_folder) 102 | 103 | -------------------------------------------------------------------------------- /train_cnn_multiGPU_v0/config.py: -------------------------------------------------------------------------------- 1 | # coding=utf-8 2 | 3 | # 训练文件夹 4 | sample_dir = "gender" 5 | # 需要分类的类别数量 6 | num_classes = 4 7 | # 最小批训练的大小 8 | batch_size = 128 9 | # 选择使用的模型 10 | arch_model="arch_inception_v4" 11 | # arch_model="arch_multi_alexnet_v2" 12 | # arch_model="arch_multi_vgg16_conv" 13 | # 选择训练的网络层 14 | checkpoint_exclude_scopes = "Logits_out" 15 | # dropout的大小 16 | dropout_prob = 0.8 17 | # 选择训练样本的比例 18 | train_rate = 0.9 19 | # 整个训练集上进行多少次迭代 20 | epoch = 2000 21 | # 是否使用提前终止训练 22 | early_stop = True 23 | EARLY_STOP_PATIENCE = 1000 24 | # 是否使用learning_rate 25 | learning_r_decay = True 26 | learning_rate_base = 0.0001 27 | decay_rate = 0.95 28 | height, width = 299, 299 29 | # 模型保存的路径 30 | train_dir = 'model' 31 | # 是否进行fine-tune。 选择fine-tune的的参数 32 | fine_tune = False 33 | # 是否训练所有层的参数 34 | train_all_layers = True 35 | # 迁移学习的网络模 36 | checkpoint_path = 'pretrain/inception_v4.ckpt' 37 | -------------------------------------------------------------------------------- /train_cnn_multiGPU_v0/gender/0male/0(1).jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_multiGPU_v0/gender/0male/0(1).jpeg -------------------------------------------------------------------------------- /train_cnn_multiGPU_v0/gender/0male/0(1).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_multiGPU_v0/gender/0male/0(1).jpg -------------------------------------------------------------------------------- /train_cnn_multiGPU_v0/gender/0male/0(2).jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_multiGPU_v0/gender/0male/0(2).jpeg -------------------------------------------------------------------------------- /train_cnn_multiGPU_v0/gender/0male/0(2).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_multiGPU_v0/gender/0male/0(2).jpg -------------------------------------------------------------------------------- /train_cnn_multiGPU_v0/gender/0male/0(3).jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_multiGPU_v0/gender/0male/0(3).jpeg -------------------------------------------------------------------------------- /train_cnn_multiGPU_v0/gender/0male/0(3).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_multiGPU_v0/gender/0male/0(3).jpg -------------------------------------------------------------------------------- /train_cnn_multiGPU_v0/gender/1female/1(1).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_multiGPU_v0/gender/1female/1(1).jpg -------------------------------------------------------------------------------- /train_cnn_multiGPU_v0/gender/1female/1(2).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_multiGPU_v0/gender/1female/1(2).jpg -------------------------------------------------------------------------------- /train_cnn_multiGPU_v0/gender/1female/1(3).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_multiGPU_v0/gender/1female/1(3).jpg -------------------------------------------------------------------------------- /train_cnn_multiGPU_v0/gender/1female/1(4).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_multiGPU_v0/gender/1female/1(4).jpg -------------------------------------------------------------------------------- /train_cnn_multiGPU_v0/gender/1female/1(5).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_multiGPU_v0/gender/1female/1(5).jpg -------------------------------------------------------------------------------- /train_cnn_multiGPU_v0/gender/1female/1(6).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_multiGPU_v0/gender/1female/1(6).jpg -------------------------------------------------------------------------------- /train_cnn_multiGPU_v0/gender/2many/0_Parade_marchingband_1_12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_multiGPU_v0/gender/2many/0_Parade_marchingband_1_12.jpg -------------------------------------------------------------------------------- /train_cnn_multiGPU_v0/gender/2many/0_Parade_marchingband_1_13.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_multiGPU_v0/gender/2many/0_Parade_marchingband_1_13.jpg -------------------------------------------------------------------------------- /train_cnn_multiGPU_v0/gender/2many/0_Parade_marchingband_1_17.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_multiGPU_v0/gender/2many/0_Parade_marchingband_1_17.jpg -------------------------------------------------------------------------------- /train_cnn_multiGPU_v0/gender/2many/0_Parade_marchingband_1_5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_multiGPU_v0/gender/2many/0_Parade_marchingband_1_5.jpg -------------------------------------------------------------------------------- /train_cnn_multiGPU_v0/gender/2many/0_Parade_marchingband_1_6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_multiGPU_v0/gender/2many/0_Parade_marchingband_1_6.jpg -------------------------------------------------------------------------------- /train_cnn_multiGPU_v0/gender/2many/0_Parade_marchingband_1_8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_multiGPU_v0/gender/2many/0_Parade_marchingband_1_8.jpg -------------------------------------------------------------------------------- /train_cnn_multiGPU_v0/gender/3other/6(2).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_multiGPU_v0/gender/3other/6(2).jpg -------------------------------------------------------------------------------- /train_cnn_multiGPU_v0/gender/3other/6(3).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_multiGPU_v0/gender/3other/6(3).jpg -------------------------------------------------------------------------------- /train_cnn_multiGPU_v0/gender/3other/6(4).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_multiGPU_v0/gender/3other/6(4).jpg -------------------------------------------------------------------------------- /train_cnn_multiGPU_v0/gender/3other/6(5).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_multiGPU_v0/gender/3other/6(5).jpg -------------------------------------------------------------------------------- /train_cnn_multiGPU_v0/gender/3other/6(6).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_multiGPU_v0/gender/3other/6(6).jpg -------------------------------------------------------------------------------- /train_cnn_multiGPU_v0/gender/3other/6(9).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_multiGPU_v0/gender/3other/6(9).jpg -------------------------------------------------------------------------------- /train_cnn_multiGPU_v0/lib/data_aug/data_aug.py: -------------------------------------------------------------------------------- 1 | # coding=utf-8 2 | 3 | import numpy as np 4 | import cv2 5 | from skimage import exposure 6 | 7 | class DataAugmenters(): 8 | 9 | def __init__(self, image): 10 | self.img = image 11 | 12 | def _random_fliplr(self, random_fliplr=True): 13 | if random_fliplr and np.random.choice([True, False]): 14 | self.img = np.fliplr(self.img) 15 | 16 | def _random_flipud(self, random_flipud=True): 17 | if random_flipud and np.random.choice([True, False]): 18 | self.img = np.fliplr(self.img) 19 | 20 | def _random_rotation(self, random_rotation=True): 21 | if random_rotation and np.random.choice([True, False]): 22 | w,h = self.img.shape[1], self.img.shape[0] 23 | angle = np.random.randint(0,360) 24 | rotate_matrix = cv2.getRotationMatrix2D(center=(self.img.shape[1]/2, self.img.shape[0]/2), angle=angle, scale=0.7) 25 | self.img = cv2.warpAffine(self.img, rotate_matrix, (w,h)) 26 | 27 | def _random_exposure(self, random_exposure=True): 28 | if random_exposure and np.random.choice([True, False]): 29 | e_rate = np.random.uniform(0.5,1.5) 30 | self.img = exposure.adjust_gamma(self.img, e_rate) 31 | 32 | # 裁剪 33 | def _random_crop(self, crop_size = 299, random_crop = True): 34 | if random_crop and np.random.choice([True, False]): 35 | if self.img.shape[1] > crop_size: 36 | sz1 = self.img.shape[1] // 2 37 | sz2 = crop_size // 2 38 | diff = sz1 - sz2 39 | (h, v) = (np.random.randint(0, diff + 1), np.random.randint(0, diff + 1)) 40 | self.img = self.img[v:(v + crop_size), h:(h + crop_size), :] 41 | 42 | def run(self): 43 | data_aug_list = [self._random_fliplr, self._random_flipud, self._random_rotation, self._random_exposure, self._random_crop] 44 | data_aug_func = np.random.choice(data_aug_list, 2) 45 | for func in data_aug_func: 46 | func() 47 | return self.img 48 | -------------------------------------------------------------------------------- /train_cnn_multiGPU_v0/lib/data_load/data_load.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | Created on 2017 10.17 4 | @author: liupeng 5 | """ 6 | 7 | import sys 8 | import tensorflow as tf 9 | import numpy as np 10 | import os 11 | import cv2 12 | from skimage import exposure 13 | from lib.utils.utils import shuffle_train_data 14 | 15 | class load_image(object): 16 | 17 | def __init__(self, img_dir, train_rate): 18 | self.img_dir = img_dir 19 | self.train_rate = train_rate 20 | self.train_imgs = [] 21 | self.train_labels = [] 22 | self.note_label = [] 23 | 24 | def _load_img_path(self, img_sub_dir, img_label): 25 | img_all_path = os.listdir(os.path.join(self.img_dir, img_sub_dir)) 26 | img_num = len(img_all_path) 27 | data = [] 28 | label = [] 29 | for i in range (img_num): 30 | img_path = os.path.join(self.img_dir, img_sub_dir, img_all_path[i]) 31 | data.append(img_path) 32 | # print (img_path) 33 | label.append(int(img_label)) 34 | return data, label 35 | 36 | def _load_database_path(self): 37 | file_path = os.listdir(self.img_dir) 38 | for i, path in enumerate(file_path): 39 | if os.path.isfile(os.path.join(self.img_dir, path)): 40 | continue 41 | data, label = self._load_img_path(path, i) 42 | self.train_imgs.extend(data) 43 | self.train_labels.extend(label) 44 | self.note_label.append([path, i]) 45 | # print (path, i) 46 | self.train_imgs, self.train_labels = shuffle_train_data(self.train_imgs, self.train_labels) 47 | 48 | def gen_train_valid(self): 49 | self._load_database_path() 50 | image_n = len(self.train_imgs) 51 | train_n = int(image_n*self.train_rate) 52 | valid_n = int(image_n*(1-self.train_rate)) 53 | train_data, train_label = self.train_imgs[0:train_n], self.train_labels[0:train_n] 54 | valid_data, valid_label = self.train_imgs[train_n:image_n], self.train_labels[train_n:image_n] 55 | return train_data, train_label, valid_data, valid_label, train_n, valid_n, self.note_label 56 | 57 | 58 | 59 | -------------------------------------------------------------------------------- /train_cnn_multiGPU_v0/lib/data_load/data_load_from_txt.py: -------------------------------------------------------------------------------- 1 | #coding=utf-8 2 | 3 | from lib.utils.utils import shuffle_train_data 4 | 5 | class data_load_from_txt(object): 6 | 7 | def __init__(self, img_dir, train_rate): 8 | self.img_dir = img_dir 9 | self.train_imgs = [] 10 | self.train_labels = [] 11 | self.train_rate = train_rate 12 | 13 | def _gen_img_path(self): 14 | data_lines = open(self.img_dir, 'r').readlines() 15 | for line in data_lines: 16 | img_path = line.split(' ')[0] 17 | img_label = line.split(' ')[1] 18 | img_label = img_label.split('\n')[0] 19 | self.train_imgs.append(img_path) 20 | self.train_labels.append(img_label) 21 | self.train_imgs, self.train_labels = shuffle_train_data(self.train_imgs, self.train_labels) 22 | 23 | def gen_train_valid(self): 24 | self._gen_img_path() 25 | image_n = len(self.train_imgs) 26 | train_n = int(image_n*self.train_rate) 27 | valid_n = int(image_n*(1-self.train_rate)) 28 | train_data, train_label = self.train_imgs[0:train_n], self.train_labels[0:train_n] 29 | valid_data, valid_label = self.train_imgs[train_n:image_n], self.train_labels[train_n:image_n] 30 | return train_data, train_label, valid_data, valid_label, train_n, valid_n 31 | 32 | # 以下测试用 33 | if __name__ == '__main__': 34 | data = data_load_from_txt('train.txt', 0.9) 35 | train_data, train_label, valid_data, valid_label, train_n, valid_n = data.gen_train_valid() 36 | print (train_data) 37 | print (train_label) -------------------------------------------------------------------------------- /train_cnn_multiGPU_v0/lib/data_load/data_load_from_txt_nolabel.py: -------------------------------------------------------------------------------- 1 | #coding=utf-8 2 | 3 | from lib.utils.utils import shuffle_train_data 4 | 5 | class data_load_from_txt_nolabel(object): 6 | 7 | def __init__(self, img_dir, train_rate): 8 | self.img_dir = img_dir 9 | self.train_imgs = [] 10 | self.train_rate = train_rate 11 | 12 | def _gen_img_path(self): 13 | data_lines = open(self.img_dir, 'r').readlines() 14 | for line in data_lines: 15 | img_path = line.split(' ')[0] 16 | img_path = img_path.split('\n')[0] 17 | self.train_imgs.append(img_path) 18 | 19 | def gen_train_valid(self): 20 | self._gen_img_path() 21 | image_n = len(self.train_imgs) 22 | train_n = int(image_n*self.train_rate) 23 | valid_n = int(image_n*(1-self.train_rate)) 24 | train_data = self.train_imgs[0:train_n] 25 | valid_data = self.train_imgs[train_n:image_n] 26 | return train_data, valid_data, train_n, valid_n 27 | 28 | # 以下测试用 29 | if __name__ == '__main__': 30 | data = data_load_from_txt_nolabel('train.txt', 0.9) 31 | train_data, valid_data, train_n, valid_n = data.gen_train_valid() 32 | print (train_data) 33 | print (valid_data) -------------------------------------------------------------------------------- /train_cnn_multiGPU_v0/lib/grad_cam/__pycache__/grad_cam.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_multiGPU_v0/lib/grad_cam/__pycache__/grad_cam.cpython-35.pyc -------------------------------------------------------------------------------- /train_cnn_multiGPU_v0/lib/grad_cam/grad_cam.py: -------------------------------------------------------------------------------- 1 | # coding=utf-8 2 | 3 | import tensorflow as tf 4 | from skimage.transform import resize 5 | import numpy as np 6 | 7 | class vis: 8 | 9 | def __init__(self): 10 | pass 11 | 12 | def grad_cam(self, img_input, X_, keep_prob_fc, is_train, net_layers, net, sess, predicted_class, nb_classes): 13 | ''' 14 | img_input : 需要预测类别的图像。 (cv2.imread()) 15 | X_ : 输入占位符 (模型的输入) 16 | keep_prob_fc : dropout 17 | is_train : False 18 | net_layers : 卷积层的输出 (一般都是卷积最后一层的输出) 19 | net : 模型的输出, softmax之前 20 | sess : 21 | predicted_class : 模型预测的类别 22 | nb_classes : 总类别 23 | ''' 24 | 25 | conv_layer = net_layers 26 | one_hot = tf.sparse_to_dense(predicted_class, [nb_classes], 1.0) 27 | signal = tf.multiply(net, one_hot) 28 | 29 | loss = tf.reduce_mean(signal) 30 | grads = tf.gradients(loss, conv_layer)[0] 31 | 32 | norm_grads = tf.div(grads, tf.sqrt(tf.reduce_mean(tf.square(grads))) + tf.constant(1e-5)) 33 | 34 | output, grads_val = sess.run([conv_layer, norm_grads], feed_dict={X_: [img_input], keep_prob_fc:1.0, is_train:False}) 35 | 36 | output = output[0] # [8,8,1536] 37 | grads_val = grads_val[0] 38 | 39 | weights = np.mean(grads_val, axis = (0, 1)) # [1536] 40 | cam = np.ones(output.shape[0 : 2], dtype = np.float32) # [8,8] 41 | 42 | for i, w in enumerate(weights): 43 | cam += w * output[:, :, i] 44 | 45 | cam = np.maximum(cam, 0) 46 | cam = cam / np.max(cam) 47 | cam = resize(cam, (299,299)) 48 | 49 | cam3 = np.expand_dims(cam, axis=2) 50 | cam3 = np.tile(cam3,[1,1,3]) 51 | 52 | return cam3 -------------------------------------------------------------------------------- /train_cnn_multiGPU_v0/lib/loss/loss.py: -------------------------------------------------------------------------------- 1 | # coding=utf-8 2 | 3 | import tensorflow as tf 4 | import numpy as np 5 | 6 | 7 | # quared loss 8 | def squared_loss(label, logit): 9 | loss = tf.reduce_mean(tf.reduce_sum(tf.square(label - logit), 1)) 10 | return loss 11 | 12 | # sigmoid loss 13 | def sigmoid_loss(label, logit): 14 | loss = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(labels = label, logits = logit)) 15 | return loss 16 | 17 | # softmax loss 18 | def softmax_loss(label, logit): 19 | loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels = label, logits = logit)) 20 | return loss 21 | 22 | # triplet loss 23 | def triplet_loss(anchor, positive, negative, alpha): 24 | # 理论可以看这里: https://blog.csdn.net/tangwei2014/article/details/46788025 25 | # facenet理解: http://www.mamicode.com/info-detail-2096766.html 26 | """Calculate the triplet loss according to the FaceNet paper 27 | 28 | Args: 29 | anchor: the embeddings for the anchor images. 30 | positive: the embeddings for the positive images. 31 | negative: the embeddings for the negative images. 32 | 33 | Returns: 34 | the triplet loss according to the FaceNet paper as a float tensor. 35 | """ 36 | with tf.variable_scope('triplet_loss'): 37 | pos_dist = tf.reduce_sum(tf.square(tf.subtract(anchor, positive)), 1) 38 | neg_dist = tf.reduce_sum(tf.square(tf.subtract(anchor, negative)), 1) 39 | 40 | basic_loss = tf.add(tf.subtract(pos_dist,neg_dist), alpha) 41 | loss = tf.reduce_mean(tf.maximum(basic_loss, 0.0), 0) 42 | 43 | return loss 44 | 45 | 46 | # center loss 47 | def center_loss(features, label, alfa, nrof_classes): 48 | """Center loss based on the paper "A Discriminative Feature Learning Approach for Deep Face Recognition" 49 | (http://ydwen.github.io/papers/WenECCV16.pdf) 50 | """ 51 | """获取center loss及center的更新op 52 | 还可参考博客: https://blog.csdn.net/u014365862/article/details/79184966 53 | Arguments: 54 | features: Tensor,表征样本特征,一般使用某个fc层的输出,shape应该为[batch_size, feature_length]. 55 | labels: Tensor,表征样本label,非one-hot编码,shape应为[batch_size]. 56 | alpha: 0-1之间的数字,控制样本类别中心的学习率,细节参考原文. 57 | num_classes: 整数,表明总共有多少个类别,网络分类输出有多少个神经元这里就取多少. 58 | 59 | Return: 60 | loss: Tensor,可与softmax loss相加作为总的loss进行优化. 61 | centers: Tensor,存储样本中心值的Tensor,仅查看样本中心存储的具体数值时有用. 62 | centers_update_op: op,用于更新样本中心的op,在训练时需要同时运行该op,否则样本中心不会更新 63 | """ 64 | nrof_features = features.get_shape()[1] 65 | centers = tf.get_variable('centers', [nrof_classes, nrof_features], dtype=tf.float32, 66 | initializer=tf.constant_initializer(0), trainable=False) 67 | label = tf.reshape(label, [-1]) 68 | centers_batch = tf.gather(centers, label) 69 | diff = (1 - alfa) * (centers_batch - features) 70 | centers = tf.scatter_sub(centers, label, diff) 71 | loss = tf.reduce_mean(tf.square(features - centers_batch)) 72 | return loss, centers 73 | 74 | 75 | # 加入L2正则化的loss 76 | def add_l2(loss, weight_decay): 77 | l2_losses = [weight_decay * tf.nn.l2_loss(v) for v in tf.trainable_variables() if 'weights' in v.name] 78 | reduced_loss = tf.reduce_mean(loss) + tf.add_n(l2_losses) 79 | return reduced_loss 80 | 81 | -------------------------------------------------------------------------------- /train_cnn_multiGPU_v0/lib/model/alexnet/__pycache__/alexnet.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_multiGPU_v0/lib/model/alexnet/__pycache__/alexnet.cpython-35.pyc -------------------------------------------------------------------------------- /train_cnn_multiGPU_v0/lib/model/attention/__pycache__/attention.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_multiGPU_v0/lib/model/attention/__pycache__/attention.cpython-35.pyc -------------------------------------------------------------------------------- /train_cnn_multiGPU_v0/lib/model/attention/attention.py: -------------------------------------------------------------------------------- 1 | # coding=utf-8 2 | 3 | import tensorflow as tf 4 | 5 | def attention(inputs, attention_size, time_major=False): 6 | if isinstance(inputs, tuple): 7 | # In case of Bi-RNN, concatenate the forward and the backward RNN outputs. 8 | inputs = tf.concat(inputs, 2) 9 | 10 | if time_major: 11 | # (T,B,D) => (B,T,D) 12 | inputs = tf.transpose(inputs, [1, 0, 2]) 13 | 14 | inputs_shape = inputs.shape 15 | sequence_length = inputs_shape[1].value # the length of sequences processed in the antecedent RNN layer 16 | hidden_size = inputs_shape[2].value # hidden size of the RNN layer 17 | 18 | # Attention mechanism 19 | W_omega = tf.Variable(tf.random_normal([hidden_size, attention_size], stddev=0.1)) 20 | b_omega = tf.Variable(tf.random_normal([attention_size], stddev=0.1)) 21 | u_omega = tf.Variable(tf.random_normal([attention_size], stddev=0.1)) 22 | 23 | v = tf.tanh(tf.matmul(tf.reshape(inputs, [-1, hidden_size]), W_omega) + tf.reshape(b_omega, [1, -1])) 24 | vu = tf.matmul(v, tf.reshape(u_omega, [-1, 1])) 25 | exps = tf.reshape(tf.exp(vu), [-1, sequence_length]) 26 | alphas = exps / tf.reshape(tf.reduce_sum(exps, 1), [-1, 1]) 27 | 28 | # Output of Bi-RNN is reduced with attention vector 29 | output = tf.reduce_sum(inputs * tf.reshape(alphas, [-1, sequence_length, 1]), 1) 30 | 31 | return output 32 | -------------------------------------------------------------------------------- /train_cnn_multiGPU_v0/lib/model/build_model/__pycache__/build_net.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_multiGPU_v0/lib/model/build_model/__pycache__/build_net.cpython-35.pyc -------------------------------------------------------------------------------- /train_cnn_multiGPU_v0/lib/model/inception_v4/inception_utils.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | Created on 2017 10.17 4 | @author: liupeng 5 | wechat: lp9628 6 | blog: http://blog.csdn.net/u014365862/article/details/78422372 7 | """ 8 | 9 | from __future__ import absolute_import 10 | from __future__ import division 11 | from __future__ import print_function 12 | 13 | import tensorflow as tf 14 | 15 | slim = tf.contrib.slim 16 | 17 | 18 | def inception_arg_scope(weight_decay=0.00004, 19 | use_batch_norm=True, 20 | batch_norm_decay=0.9997, 21 | batch_norm_epsilon=0.001): 22 | """Defines the default arg scope for inception models. 23 | Args: 24 | weight_decay: The weight decay to use for regularizing the model. 25 | use_batch_norm: "If `True`, batch_norm is applied after each convolution. 26 | batch_norm_decay: Decay for batch norm moving average. 27 | batch_norm_epsilon: Small float added to variance to avoid dividing by zero 28 | in batch norm. 29 | Returns: 30 | An `arg_scope` to use for the inception models. 31 | """ 32 | batch_norm_params = { 33 | # Decay for the moving averages. 34 | 'decay': batch_norm_decay, 35 | # epsilon to prevent 0s in variance. 36 | 'epsilon': batch_norm_epsilon, 37 | # collection containing update_ops. 38 | 'updates_collections': tf.GraphKeys.UPDATE_OPS, 39 | } 40 | if use_batch_norm: 41 | normalizer_fn = slim.batch_norm 42 | normalizer_params = batch_norm_params 43 | else: 44 | normalizer_fn = None 45 | normalizer_params = {} 46 | # Set weight_decay for weights in Conv and FC layers. 47 | with slim.arg_scope([slim.conv2d, slim.fully_connected], 48 | weights_regularizer=slim.l2_regularizer(weight_decay)): 49 | with slim.arg_scope( 50 | [slim.conv2d], 51 | weights_initializer=slim.variance_scaling_initializer(), 52 | activation_fn=tf.nn.relu, 53 | normalizer_fn=normalizer_fn, 54 | normalizer_params=normalizer_params) as sc: 55 | return sc 56 | -------------------------------------------------------------------------------- /train_cnn_multiGPU_v0/lib/model/resnet_v2/__pycache__/resnet_utils.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_multiGPU_v0/lib/model/resnet_v2/__pycache__/resnet_utils.cpython-35.pyc -------------------------------------------------------------------------------- /train_cnn_multiGPU_v0/lib/model/resnet_v2/__pycache__/resnet_v2.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_multiGPU_v0/lib/model/resnet_v2/__pycache__/resnet_v2.cpython-35.pyc -------------------------------------------------------------------------------- /train_cnn_multiGPU_v0/lib/model/vgg/__pycache__/vgg.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_multiGPU_v0/lib/model/vgg/__pycache__/vgg.cpython-35.pyc -------------------------------------------------------------------------------- /train_cnn_multiGPU_v0/lib/optimizer/optimizer.py: -------------------------------------------------------------------------------- 1 | # coding=utf-8 2 | 3 | import tensorflow as tf 4 | import numpy as np 5 | 6 | def adam_optimizer(learning_rate, adam_beta1=0.9, adam_beta2=0.999, opt_epsilon=1e-08): 7 | optimizer = tf.train.AdamOptimizer(learning_rate, beta1=adam_beta1, beta2=adam_beta2, epsilon=opt_epsilon) 8 | return optimizer 9 | 10 | def adadelta_optimizer(learning_rate, adadelta_rho=0.95, opt_epsilon=1e-08): 11 | optimizer = tf.train.AdadeltaOptimizer(learning_rate, rho=adadelta_rho, epsilon=opt_epsilon) 12 | return optimizer 13 | 14 | def adagrad_optimizer(learning_rate, adagrad_initial_accumulator_value=0.1): 15 | optimizer = tf.train.AdagradOptimizer(learning_rate, initial_accumulator_value=adagrad_initial_accumulator_value) 16 | return optimizer 17 | 18 | def ftrl_optimizer(learning_rate, ftrl_learning_rate_power=-0.5, ftrl_initial_accumulator_value=0.1, ftrl_l1=0.0, ftrl_l2=0.0): 19 | optimizer = tf.train.FtrlOptimizer(learning_rate, learning_rate_power=ftrl_learning_rate_power, initial_accumulator_value=ftrl_initial_accumulator_value, l1_regularization_strength=ftrl_l1, l2_regularization_strength=ftrl_l2) 20 | return optimizer 21 | 22 | def momentum_optimizer(learning_rate, momentum): 23 | optimizer = tf.train.MomentumOptimizer(learning_rate, momentum=momentum, name='Momentum') 24 | return optimizer 25 | 26 | def rmsprop_optimizer(learning_rate, rmsprop_decay=0.9, rmsprop_momentum=0.0, opt_epsilon=1e-10): 27 | optimizer = tf.train.RMSPropOptimizer(learning_rate, decay=rmsprop_decay, momentum=rmsprop_momentum, epsilon=opt_epsilon) 28 | return optimizer 29 | 30 | def sgd_optimizer(learning_rate): 31 | optimizer = tf.train.GradientDescentOptimizer(learning_rate) 32 | return optimizer 33 | 34 | 35 | 36 | def _configure_optimizer(learning_rate): 37 | """Configures the optimizer used for training. 38 | Args: 39 | learning_rate: A scalar or `Tensor` learning rate. 40 | Returns: 41 | An instance of an optimizer. 42 | Raises: 43 | ValueError: if FLAGS.optimizer is not recognized. 44 | """ 45 | if FLAGS.optimizer == 'adadelta': 46 | optimizer = tf.train.AdadeltaOptimizer( 47 | learning_rate, 48 | rho=FLAGS.adadelta_rho, 49 | epsilon=FLAGS.opt_epsilon) 50 | elif FLAGS.optimizer == 'adagrad': 51 | optimizer = tf.train.AdagradOptimizer( 52 | learning_rate, 53 | initial_accumulator_value=FLAGS.adagrad_initial_accumulator_value) 54 | elif FLAGS.optimizer == 'adam': 55 | optimizer = tf.train.AdamOptimizer( 56 | learning_rate, 57 | beta1=FLAGS.adam_beta1, 58 | beta2=FLAGS.adam_beta2, 59 | epsilon=FLAGS.opt_epsilon) 60 | elif FLAGS.optimizer == 'ftrl': 61 | optimizer = tf.train.FtrlOptimizer( 62 | learning_rate, 63 | learning_rate_power=FLAGS.ftrl_learning_rate_power, 64 | initial_accumulator_value=FLAGS.ftrl_initial_accumulator_value, 65 | l1_regularization_strength=FLAGS.ftrl_l1, 66 | l2_regularization_strength=FLAGS.ftrl_l2) 67 | elif FLAGS.optimizer == 'momentum': 68 | optimizer = tf.train.MomentumOptimizer( 69 | learning_rate, 70 | momentum=FLAGS.momentum, 71 | name='Momentum') 72 | elif FLAGS.optimizer == 'rmsprop': 73 | optimizer = tf.train.RMSPropOptimizer( 74 | learning_rate, 75 | decay=FLAGS.rmsprop_decay, 76 | momentum=FLAGS.rmsprop_momentum, 77 | epsilon=FLAGS.opt_epsilon) 78 | elif FLAGS.optimizer == 'sgd': 79 | optimizer = tf.train.GradientDescentOptimizer(learning_rate) 80 | else: 81 | raise ValueError('Optimizer [%s] was not recognized', FLAGS.optimizer) 82 | return optimizer 83 | 84 | 85 | 86 | -------------------------------------------------------------------------------- /train_cnn_multiGPU_v0/lib/optimizer/optimizer_minimize.py: -------------------------------------------------------------------------------- 1 | # coding=utf-8 2 | 3 | import tensorflow as tf 4 | import numpy as np 5 | 6 | 7 | def optimizer_minimize(optimizer, loss, global_step=tf.train.get_global_step(), var_list=tf.all_variables()): 8 | opt_op = optimizer.minimize(loss, var_list=var_list) 9 | return opt_op 10 | 11 | 12 | def optimizer_apply_gradients(optimizer, loss, global_step=tf.train.get_global_step(), var_list=tf.all_variables()): 13 | gradients = tf.gradients(loss, var_list) 14 | opt_op = optimizer.apply_gradients(zip(gradients, var_list), global_step=global_step) 15 | return opt_op 16 | -------------------------------------------------------------------------------- /train_cnn_multiGPU_v0/lp.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_multiGPU_v0/lp.jpg -------------------------------------------------------------------------------- /train_cnn_multiGPU_v0/main.py: -------------------------------------------------------------------------------- 1 | # coding=utf-8 2 | """ 3 | Created on 2017 10.17 4 | @author: liupeng 5 | """ 6 | 7 | import numpy as np 8 | import os 9 | import tensorflow as tf 10 | slim = tf.contrib.slim 11 | from lib.data_load.data_load import load_image 12 | from lib.model.build_model.build_net import net_arch 13 | from lib.utils.utils import g_parameter 14 | # from lib.train.train3 import train3 as train 15 | from keras.utils import np_utils 16 | import config 17 | #os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID" 18 | #os.environ["CUDA_VISIBLE_DEVICES"] = "0" 19 | 20 | sample_dir = config.sample_dir 21 | num_classes = config.num_classes 22 | batch_size = config.batch_size 23 | arch_model = config.arch_model 24 | checkpoint_exclude_scopes = config.checkpoint_exclude_scopes 25 | dropout_prob = config.dropout_prob 26 | train_rate = config.train_rate 27 | epoch = config.epoch 28 | # 是否使用提前终止训练 29 | early_stop = config.early_stop 30 | EARLY_STOP_PATIENCE = config.EARLY_STOP_PATIENCE 31 | # 是否使用learning_rate 32 | learning_r_decay = config.learning_r_decay 33 | learning_rate_base = config.learning_rate_base 34 | decay_rate = config.decay_rate 35 | height, width = config.height, config.width 36 | # 模型保存的路径 37 | train_dir = config.train_dir 38 | # 是否进行fine-tune。 选择fine-tune的的参数 39 | fine_tune = config.fine_tune 40 | # 训练所有层的参数 41 | train_all_layers = config.train_all_layers 42 | # 迁移学习的网络模型 43 | checkpoint_path = config.checkpoint_path 44 | 45 | if arch_model=='arch_multi_alexnet_v2' or arch_model=='arch_multi_vgg16' or arch_model=='arch_multi_vgg16_conv': 46 | from lib.train.train3 import train3 as train 47 | else: 48 | from lib.train.train import train as train 49 | 50 | train_data, train_label, valid_data, valid_label, train_n, valid_n, note_label = load_image(sample_dir, train_rate).gen_train_valid() 51 | print ('note_label', note_label) 52 | train_label = np_utils.to_categorical(train_label, num_classes) 53 | valid_label = np_utils.to_categorical(valid_label, num_classes) 54 | if not os.path.isdir(train_dir): 55 | os.makedirs(train_dir) 56 | 57 | train(train_data,train_label,valid_data,valid_label,train_dir,num_classes,batch_size,arch_model,learning_r_decay,learning_rate_base,decay_rate,dropout_prob,epoch,height,width,checkpoint_exclude_scopes,early_stop,EARLY_STOP_PATIENCE,fine_tune,train_all_layers,checkpoint_path,train_n,valid_n,g_parameter) 58 | 59 | -------------------------------------------------------------------------------- /train_cnn_multiGPU_v0/pretrain/README.md: -------------------------------------------------------------------------------- 1 | 2 | # 预训练好的模型放在这里。 3 | 4 | ## arch_inception_v4 download inception_v4 model: http://download.tensorflow.org/models/inception_v4_2016_09_09.tar.gz 5 | wget http://download.tensorflow.org/models/inception_v4_2016_09_09.tar.gz 6 | tar zxvf inception_v4_2016_09_09.tar.gz 7 | 8 | cd pretrain 9 | 10 | mkdir inception_v4 11 | 12 | mv .../inception_v4.ckpt inception_v4 13 | 14 | ## arch_vgg16 download vgg model: http://download.tensorflow.org/models/vgg_16_2016_08_28.tar.gz 15 | wget http://download.tensorflow.org/models/vgg_16_2016_08_28.tar.gz 16 | 17 | tar zxvf vgg_16_2016_08_28.tar.gz 18 | 19 | cd pretrain 20 | 21 | mkdir vgg 22 | 23 | mv .../vgg_16.ckpt vgg 24 | 25 | ## arch_resnet_v2_50 download resnet_v2_50 model: http://download.tensorflow.org/models/resnet_v2_50_2017_04_14.tar.gz 26 | wget http://download.tensorflow.org/models/resnet_v2_50_2017_04_14.tar.gz 27 | tar zxvf resnet_v2_50_2017_04_14.tar.gz 28 | 29 | cd pretrain 30 | 31 | mkdir resnet_v2 32 | 33 | mv .../resnet_v2_50.ckpt resnet_v2 34 | -------------------------------------------------------------------------------- /train_cnn_multiGPU_v0/start.sh: -------------------------------------------------------------------------------- 1 | nohup python -u main.py > output.log 2>&1 & 2 | tail -f output.log -------------------------------------------------------------------------------- /train_cnn_multiGPU_v0/test/lp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_multiGPU_v0/test/lp.png -------------------------------------------------------------------------------- /train_cnn_multiGPU_v0/test/test_interface .py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | Created on 2017 10.17 4 | @author: liupeng 5 | """ 6 | 7 | import numpy as np 8 | import numpy as np 9 | import os 10 | from PIL import Image 11 | import cv2 12 | #from predict_cnn import * 13 | #from predict import * 14 | from predict import * 15 | 16 | import csv 17 | import argparse, json, textwrap 18 | import sys 19 | alg_core = TEAlg(pb_path_1="model/frozen_model.pb") 20 | 21 | File = open("output.csv", "w") 22 | 23 | 24 | def load_img(imgDir,imgFoldName, img_label): 25 | imgs = os.listdir(imgDir+imgFoldName) 26 | imgNum = len(imgs) 27 | data = []#np.empty((imgNum,224,224,3),dtype="float32") 28 | label = []#np.empty((imgNum,),dtype="uint8") 29 | for i in range (imgNum): 30 | image_path = imgDir+imgFoldName+"/"+imgs[i] 31 | img = cv2.imread(image_path) 32 | #for j in range(1): 33 | if img is not None: 34 | result_dict = ProjectInterface({image_path: image_path}, proxy=alg_core) 35 | print (result_dict) 36 | # print(result_dict.keys(), result_dict.values()) 37 | #print ('Img_dir:{},label:{},prediction:{}'.format(result_dict.keys(), img_label, result_dict.values())) 38 | File.write(str(result_dict) + "\n") 39 | return data,label 40 | ''' 41 | craterDir = "train/" 42 | foldName = "0male" 43 | data, label = load_Img(craterDir,foldName, 0) 44 | 45 | print (data[0].shape) 46 | print (label[0])''' 47 | 48 | 49 | def load_database(imgDir): 50 | img_path = os.listdir(imgDir) 51 | train_imgs = [] 52 | train_labels = [] 53 | for i, path in enumerate(img_path): 54 | craterDir = imgDir + '/' 55 | foldName = path 56 | data, label = load_img(craterDir,foldName, i) 57 | train_imgs.extend(data) 58 | train_labels.extend(label) 59 | #打乱数据集 60 | index = [i for i in range(len(train_imgs))] 61 | np.random.shuffle(index) 62 | train_imgs = np.asarray(train_imgs) 63 | train_labels = np.asarray(train_labels) 64 | train_imgs = train_imgs[index] 65 | train_labels = train_labels[index] 66 | return train_imgs, train_labels 67 | 68 | 69 | def test(): 70 | # train 71 | craterDir = "train_black18117" 72 | global dir_path 73 | dir_path = "train_crop/" 74 | #dir_path = "train/" 75 | data, label = load_database(craterDir) 76 | #dir = "/1female" 77 | #data, label = load_img(craterDir,dir,0) 78 | File.close() 79 | print (data.shape) 80 | print (len(data)) 81 | print (data[0].shape) 82 | print (label[0]) 83 | 84 | 85 | if __name__ == '__main__': 86 | test() 87 | -------------------------------------------------------------------------------- /train_cnn_multiGPU_v0/vis_cam.py: -------------------------------------------------------------------------------- 1 | # coding = utf-8 2 | 3 | import tensorflow as tf 4 | from lib.utils.utils import input_placeholder, g_parameter, build_net 5 | from lib.grad_cam.grad_cam import vis 6 | from skimage import io 7 | from matplotlib import pyplot as plt 8 | import cv2 9 | import numpy as np 10 | import config 11 | 12 | arch_model = config.arch_model 13 | 14 | def main(img, height, width, num_classes, mode_dir): 15 | X, Y, is_train, keep_prob_fc = input_placeholder(height, width, num_classes) 16 | net, net_vis = build_net(X, num_classes, keep_prob_fc, is_train, arch_model) 17 | 18 | net_ = tf.nn.softmax(net) 19 | predict = tf.reshape(net_, [-1, num_classes]) 20 | model_output = tf.argmax(predict, 1) 21 | 22 | sess = tf.Session() 23 | saver = tf.train.Saver(tf.global_variables()) 24 | saver.restore(sess, mode_dir) 25 | 26 | predicted_class = sess.run(model_output, feed_dict={X: [img], keep_prob_fc:1.0, is_train:False}) 27 | 28 | cam3 = vis().grad_cam(img, X, keep_prob_fc, is_train, net_vis, net, sess, predicted_class[0], num_classes) 29 | img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) 30 | img = img.astype(float) 31 | img /= img.max() 32 | # Superimposing the visualization with the image. 33 | cam3 = cv2.applyColorMap(np.uint8(255*cam3), cv2.COLORMAP_JET) 34 | cam3 = cv2.cvtColor(cam3, cv2.COLOR_BGR2RGB) 35 | 36 | alpha = 0.0025 37 | new_img = img+alpha*cam3 38 | # new_img = img+3*cam3 39 | new_img /= new_img.max() 40 | 41 | # Display and save 42 | io.imshow(new_img) 43 | plt.show() 44 | io.imsave('vis.jpg', new_img) 45 | 46 | def vis_conv(img, height, width, num_classes, mode_dir): 47 | X, Y, is_train, keep_prob_fc = input_placeholder(height, width, num_classes) 48 | net, net_vis = build_net(X, num_classes, keep_prob_fc, is_train, arch_model) 49 | 50 | net_ = tf.nn.softmax(net) 51 | predict = tf.reshape(net_, [-1, num_classes]) 52 | model_output = tf.argmax(predict, 1) 53 | 54 | sess = tf.Session() 55 | saver = tf.train.Saver(tf.global_variables()) 56 | saver.restore(sess, mode_dir) 57 | 58 | predicted_class = sess.run(model_output, feed_dict={X: [img], keep_prob_fc:1.0, is_train:False}) 59 | 60 | cam3 = vis().grad_cam(img, X, keep_prob_fc, is_train, net_vis, net, sess, predicted_class[0], num_classes) 61 | 62 | img = img.astype(float) 63 | img /= img.max() 64 | cam3 = cv2.applyColorMap(np.uint8(255*cam3), cv2.COLORMAP_JET) 65 | # cam3 = cv2.cvtColor(cam3, cv2.COLOR_BGR2RGB) 66 | alpha = 0.0025 67 | new_img = img+alpha*cam3 68 | new_img /= new_img.max() 69 | return new_img 70 | 71 | 72 | 73 | if __name__ == '__main__': 74 | img = cv2.imread('./lp.jpg') 75 | height, width = config.height, config.width 76 | num_classes = config.num_classes 77 | ''' 78 | train_dir = './model' 79 | latest = tf.train.latest_checkpoint(train_dir) 80 | if not latest: 81 | print ("No checkpoint to continue from in", train_dir) 82 | sys.exit(1) 83 | print ("resume", latest) 84 | mode_dir = latest 85 | ''' 86 | mode_dir = './model/model.ckpt-0' 87 | img = cv2.resize(img, (height, width)) 88 | # main(img, height, width, num_classes, mode_dir) 89 | vis_image = vis_conv(img, height, width, num_classes, mode_dir) 90 | cv2.imshow('vis_image', vis_image) 91 | cv2.waitKey(0) 92 | 93 | -------------------------------------------------------------------------------- /train_cnn_multilabel/config.py: -------------------------------------------------------------------------------- 1 | # coding=utf-8 2 | 3 | # 训练文件夹 4 | sample_dir = "train.txt" # 可以为txt, 但是需要该代码 5 | tfRecord = False 6 | # 需要分类的类别数量 7 | num_classes = 20 8 | # 最小批训练的大小 9 | batch_size = 2 10 | # 选择使用的模型 11 | # arch_model="arch_resnet_v2_50_multi_label" 12 | arch_model = "arch_inception_v4_multi_label" 13 | # 选择训练的网络层 14 | checkpoint_exclude_scopes = "Logits_out" 15 | # dropout的大小 16 | dropout_prob = 0.8 17 | # 选择训练样本的比例 18 | train_rate = 0.9 19 | # 整个训练集上进行多少次迭代 20 | epoch = 2000 21 | # 是否使用提前终止训练 22 | early_stop = True 23 | EARLY_STOP_PATIENCE = 1000 24 | # 是否使用learning_rate 25 | learning_r_decay = True 26 | learning_rate_base = 0.0001 27 | decay_rate = 0.95 28 | height, width = 299,299 #224, 224 29 | # 模型保存的路径 30 | train_dir = 'model' 31 | # 是否进行fine-tune。 选择fine-tune的的参数 32 | fine_tune = False 33 | # 是否训练所有层的参数 34 | train_all_layers = False 35 | # 迁移学习模型参数, 下载训练好模型:https://github.com/MachineLP/models/tree/master/research/slim 36 | # checkpoint_path="pretrain/inception_v4/inception_v4.ckpt"; 37 | # checkpoint_path="pretrain/resnet_v2_50/resnet_v2_50.ckpt" 38 | checkpoint_path = 'pretrain/inception_v4/inception_v4.ckpt' 39 | -------------------------------------------------------------------------------- /train_cnn_multilabel/gender/0male/0(1).jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_multilabel/gender/0male/0(1).jpeg -------------------------------------------------------------------------------- /train_cnn_multilabel/gender/0male/0(1).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_multilabel/gender/0male/0(1).jpg -------------------------------------------------------------------------------- /train_cnn_multilabel/gender/0male/0(2).jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_multilabel/gender/0male/0(2).jpeg -------------------------------------------------------------------------------- /train_cnn_multilabel/gender/0male/0(2).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_multilabel/gender/0male/0(2).jpg -------------------------------------------------------------------------------- /train_cnn_multilabel/gender/0male/0(3).jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_multilabel/gender/0male/0(3).jpeg -------------------------------------------------------------------------------- /train_cnn_multilabel/gender/0male/0(3).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_multilabel/gender/0male/0(3).jpg -------------------------------------------------------------------------------- /train_cnn_multilabel/gender/1female/1(1).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_multilabel/gender/1female/1(1).jpg -------------------------------------------------------------------------------- /train_cnn_multilabel/gender/1female/1(2).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_multilabel/gender/1female/1(2).jpg -------------------------------------------------------------------------------- /train_cnn_multilabel/gender/1female/1(3).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_multilabel/gender/1female/1(3).jpg -------------------------------------------------------------------------------- /train_cnn_multilabel/gender/1female/1(4).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_multilabel/gender/1female/1(4).jpg -------------------------------------------------------------------------------- /train_cnn_multilabel/gender/1female/1(5).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_multilabel/gender/1female/1(5).jpg -------------------------------------------------------------------------------- /train_cnn_multilabel/gender/1female/1(6).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_multilabel/gender/1female/1(6).jpg -------------------------------------------------------------------------------- /train_cnn_multilabel/gender/2many/0_Parade_marchingband_1_12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_multilabel/gender/2many/0_Parade_marchingband_1_12.jpg -------------------------------------------------------------------------------- /train_cnn_multilabel/gender/2many/0_Parade_marchingband_1_13.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_multilabel/gender/2many/0_Parade_marchingband_1_13.jpg -------------------------------------------------------------------------------- /train_cnn_multilabel/gender/2many/0_Parade_marchingband_1_17.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_multilabel/gender/2many/0_Parade_marchingband_1_17.jpg -------------------------------------------------------------------------------- /train_cnn_multilabel/gender/2many/0_Parade_marchingband_1_5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_multilabel/gender/2many/0_Parade_marchingband_1_5.jpg -------------------------------------------------------------------------------- /train_cnn_multilabel/gender/2many/0_Parade_marchingband_1_6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_multilabel/gender/2many/0_Parade_marchingband_1_6.jpg -------------------------------------------------------------------------------- /train_cnn_multilabel/gender/2many/0_Parade_marchingband_1_8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_multilabel/gender/2many/0_Parade_marchingband_1_8.jpg -------------------------------------------------------------------------------- /train_cnn_multilabel/gender/3other/6(2).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_multilabel/gender/3other/6(2).jpg -------------------------------------------------------------------------------- /train_cnn_multilabel/gender/3other/6(3).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_multilabel/gender/3other/6(3).jpg -------------------------------------------------------------------------------- /train_cnn_multilabel/gender/3other/6(4).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_multilabel/gender/3other/6(4).jpg -------------------------------------------------------------------------------- /train_cnn_multilabel/gender/3other/6(5).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_multilabel/gender/3other/6(5).jpg -------------------------------------------------------------------------------- /train_cnn_multilabel/gender/3other/6(6).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_multilabel/gender/3other/6(6).jpg -------------------------------------------------------------------------------- /train_cnn_multilabel/gender/3other/6(9).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_multilabel/gender/3other/6(9).jpg -------------------------------------------------------------------------------- /train_cnn_multilabel/lib/data_aug/__pycache__/data_aug.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_multilabel/lib/data_aug/__pycache__/data_aug.cpython-35.pyc -------------------------------------------------------------------------------- /train_cnn_multilabel/lib/data_aug/data_aug.py: -------------------------------------------------------------------------------- 1 | # coding=utf-8 2 | """ 3 | Created on 2017 10.17 4 | @author: liupeng 5 | wechat: lp9628 6 | blog: http://blog.csdn.net/u014365862/article/details/78422372 7 | """ 8 | 9 | import numpy as np 10 | import cv2 11 | from skimage import exposure 12 | 13 | class DataAugmenters(): 14 | 15 | def __init__(self, image): 16 | self.img = image 17 | 18 | def _random_fliplr(self, random_fliplr=True): 19 | if random_fliplr and np.random.choice([True, False]): 20 | self.img = np.fliplr(self.img) 21 | 22 | def _random_flipud(self, random_flipud=True): 23 | if random_flipud and np.random.choice([True, False]): 24 | self.img = np.fliplr(self.img) 25 | 26 | def _random_rotation(self, random_rotation=True): 27 | if random_rotation and np.random.choice([True, False]): 28 | w,h = self.img.shape[1], self.img.shape[0] 29 | angle = np.random.randint(0,360) 30 | rotate_matrix = cv2.getRotationMatrix2D(center=(self.img.shape[1]/2, self.img.shape[0]/2), angle=angle, scale=0.7) 31 | self.img = cv2.warpAffine(self.img, rotate_matrix, (w,h), borderMode=cv2.BORDER_REPLICATE) 32 | 33 | def _random_exposure(self, random_exposure=True): 34 | if random_exposure and np.random.choice([True, False]): 35 | e_rate = np.random.uniform(0.5,1.5) 36 | self.img = exposure.adjust_gamma(self.img, e_rate) 37 | 38 | # 裁剪 39 | def _random_crop(self, crop_size = 299, random_crop = True): 40 | if random_crop and np.random.choice([True, False]): 41 | if self.img.shape[1] > crop_size: 42 | sz1 = self.img.shape[1] // 2 43 | sz2 = crop_size // 2 44 | diff = sz1 - sz2 45 | (h, v) = (np.random.randint(0, diff + 1), np.random.randint(0, diff + 1)) 46 | self.img = self.img[v:(v + crop_size), h:(h + crop_size), :] 47 | 48 | def run(self): 49 | data_aug_list = [self._random_fliplr, self._random_flipud, self._random_rotation, self._random_exposure, self._random_crop] 50 | data_aug_func = np.random.choice(data_aug_list, 2) 51 | for func in data_aug_func: 52 | func() 53 | return self.img 54 | -------------------------------------------------------------------------------- /train_cnn_multilabel/lib/data_load/__pycache__/data_load_from_txt_mullabel.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_multilabel/lib/data_load/__pycache__/data_load_from_txt_mullabel.cpython-35.pyc -------------------------------------------------------------------------------- /train_cnn_multilabel/lib/data_load/data_load_from_txt_mullabel.py: -------------------------------------------------------------------------------- 1 | # coding=utf-8 2 | """ 3 | Created on 2017 10.17 4 | @author: liupeng 5 | wechat: lp9628 6 | blog: http://blog.csdn.net/u014365862/article/details/78422372 7 | """ 8 | 9 | from lib.utils.multi_label_utils import shuffle_train_data 10 | 11 | class data_load_from_txt_mullabel(object): 12 | 13 | def __init__(self, img_dir, train_rate): 14 | self.img_dir = img_dir 15 | self.train_imgs = [] 16 | self.train_labels = [] 17 | self.train_rate = train_rate 18 | self.note_label = [] 19 | 20 | def _gen_img_path(self): 21 | data_lines = open(self.img_dir, 'r').readlines() 22 | for line in data_lines: 23 | img_path = line.split(' ')[0] 24 | img_label = line.split(' ')[1] 25 | img_label = img_label.split('\n')[0] 26 | img_label = img_label.split(',') 27 | k = [] 28 | for label in img_label: 29 | k += [int(label)] 30 | self.train_imgs.append(img_path) 31 | self.train_labels.append(k) 32 | self.train_imgs, self.train_labels = shuffle_train_data(self.train_imgs, self.train_labels) 33 | 34 | def gen_train_valid(self): 35 | self._gen_img_path() 36 | image_n = len(self.train_imgs) 37 | train_n = int(image_n*self.train_rate) 38 | valid_n = int(image_n*(1-self.train_rate)) 39 | train_data, train_label = self.train_imgs[0:train_n], self.train_labels[0:train_n] 40 | valid_data, valid_label = self.train_imgs[train_n:image_n], self.train_labels[train_n:image_n] 41 | 42 | return train_data, train_label, valid_data, valid_label, train_n, valid_n, self.note_label 43 | 44 | # 以下测试用 45 | if __name__ == '__main__': 46 | data = data_load_from_txt('train.txt', 0.9) 47 | train_data, train_label, valid_data, valid_label, train_n, valid_n = data.gen_train_valid() 48 | print (train_data) 49 | print (train_label) 50 | -------------------------------------------------------------------------------- /train_cnn_multilabel/lib/loss/__pycache__/loss.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_multilabel/lib/loss/__pycache__/loss.cpython-35.pyc -------------------------------------------------------------------------------- /train_cnn_multilabel/lib/model/alexnet/__pycache__/alexnet.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_multilabel/lib/model/alexnet/__pycache__/alexnet.cpython-35.pyc -------------------------------------------------------------------------------- /train_cnn_multilabel/lib/model/attention/__pycache__/attention.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_multilabel/lib/model/attention/__pycache__/attention.cpython-35.pyc -------------------------------------------------------------------------------- /train_cnn_multilabel/lib/model/attention/attention.py: -------------------------------------------------------------------------------- 1 | # coding=utf-8 2 | 3 | import tensorflow as tf 4 | 5 | def attention(inputs, attention_size, time_major=False): 6 | if isinstance(inputs, tuple): 7 | # In case of Bi-RNN, concatenate the forward and the backward RNN outputs. 8 | inputs = tf.concat(inputs, 2) 9 | 10 | if time_major: 11 | # (T,B,D) => (B,T,D) 12 | inputs = tf.transpose(inputs, [1, 0, 2]) 13 | 14 | inputs_shape = inputs.shape 15 | sequence_length = inputs_shape[1].value # the length of sequences processed in the antecedent RNN layer 16 | hidden_size = inputs_shape[2].value # hidden size of the RNN layer 17 | 18 | # Attention mechanism 19 | W_omega = tf.Variable(tf.random_normal([hidden_size, attention_size], stddev=0.1)) 20 | b_omega = tf.Variable(tf.random_normal([attention_size], stddev=0.1)) 21 | u_omega = tf.Variable(tf.random_normal([attention_size], stddev=0.1)) 22 | 23 | v = tf.tanh(tf.matmul(tf.reshape(inputs, [-1, hidden_size]), W_omega) + tf.reshape(b_omega, [1, -1])) 24 | vu = tf.matmul(v, tf.reshape(u_omega, [-1, 1])) 25 | exps = tf.reshape(tf.exp(vu), [-1, sequence_length]) 26 | alphas = exps / tf.reshape(tf.reduce_sum(exps, 1), [-1, 1]) 27 | 28 | # Output of Bi-RNN is reduced with attention vector 29 | output = tf.reduce_sum(inputs * tf.reshape(alphas, [-1, sequence_length, 1]), 1) 30 | 31 | return output 32 | -------------------------------------------------------------------------------- /train_cnn_multilabel/lib/model/build_model/__pycache__/build_net.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_multilabel/lib/model/build_model/__pycache__/build_net.cpython-35.pyc -------------------------------------------------------------------------------- /train_cnn_multilabel/lib/model/inception_v4/__pycache__/inception_utils.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_multilabel/lib/model/inception_v4/__pycache__/inception_utils.cpython-35.pyc -------------------------------------------------------------------------------- /train_cnn_multilabel/lib/model/inception_v4/__pycache__/inception_v4.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_multilabel/lib/model/inception_v4/__pycache__/inception_v4.cpython-35.pyc -------------------------------------------------------------------------------- /train_cnn_multilabel/lib/model/inception_v4/inception_utils.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | Created on 2017 10.17 4 | @author: liupeng 5 | wechat: lp9628 6 | blog: http://blog.csdn.net/u014365862/article/details/78422372 7 | """ 8 | 9 | from __future__ import absolute_import 10 | from __future__ import division 11 | from __future__ import print_function 12 | 13 | import tensorflow as tf 14 | 15 | slim = tf.contrib.slim 16 | 17 | 18 | def inception_arg_scope(weight_decay=0.00004, 19 | use_batch_norm=True, 20 | batch_norm_decay=0.9997, 21 | batch_norm_epsilon=0.001): 22 | """Defines the default arg scope for inception models. 23 | Args: 24 | weight_decay: The weight decay to use for regularizing the model. 25 | use_batch_norm: "If `True`, batch_norm is applied after each convolution. 26 | batch_norm_decay: Decay for batch norm moving average. 27 | batch_norm_epsilon: Small float added to variance to avoid dividing by zero 28 | in batch norm. 29 | Returns: 30 | An `arg_scope` to use for the inception models. 31 | """ 32 | batch_norm_params = { 33 | # Decay for the moving averages. 34 | 'decay': batch_norm_decay, 35 | # epsilon to prevent 0s in variance. 36 | 'epsilon': batch_norm_epsilon, 37 | # collection containing update_ops. 38 | 'updates_collections': tf.GraphKeys.UPDATE_OPS, 39 | } 40 | if use_batch_norm: 41 | normalizer_fn = slim.batch_norm 42 | normalizer_params = batch_norm_params 43 | else: 44 | normalizer_fn = None 45 | normalizer_params = {} 46 | # Set weight_decay for weights in Conv and FC layers. 47 | with slim.arg_scope([slim.conv2d, slim.fully_connected], 48 | weights_regularizer=slim.l2_regularizer(weight_decay)): 49 | with slim.arg_scope( 50 | [slim.conv2d], 51 | weights_initializer=slim.variance_scaling_initializer(), 52 | activation_fn=tf.nn.relu, 53 | normalizer_fn=normalizer_fn, 54 | normalizer_params=normalizer_params) as sc: 55 | return sc 56 | -------------------------------------------------------------------------------- /train_cnn_multilabel/lib/model/lp_net/__pycache__/lp_net.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_multilabel/lib/model/lp_net/__pycache__/lp_net.cpython-35.pyc -------------------------------------------------------------------------------- /train_cnn_multilabel/lib/model/lp_net/lp_net.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | Created on 2017 10.17 4 | @author: liupeng 5 | wechat: lp9628 6 | blog: http://blog.csdn.net/u014365862/article/details/78422372 7 | """ 8 | 9 | from __future__ import absolute_import 10 | from __future__ import division 11 | from __future__ import print_function 12 | 13 | import tensorflow as tf 14 | 15 | slim = tf.contrib.slim 16 | 17 | def lp_net_arg_scope(weight_decay=0.00004, 18 | use_batch_norm=True, 19 | batch_norm_decay=0.9997, 20 | batch_norm_epsilon=0.001): 21 | batch_norm_params = {'decay': batch_norm_decay,'epsilon': batch_norm_epsilon,'updates_collections': tf.GraphKeys.UPDATE_OPS,} 22 | if use_batch_norm: 23 | normalizer_fn = slim.batch_norm 24 | normalizer_params = batch_norm_params 25 | else: 26 | normalizer_fn = None 27 | normalizer_params = {} 28 | with slim.arg_scope([slim.conv2d, slim.fully_connected], weights_regularizer=slim.l2_regularizer(weight_decay)): 29 | with slim.arg_scope( 30 | [slim.conv2d], 31 | weights_initializer=slim.variance_scaling_initializer(), 32 | activation_fn=tf.nn.relu, 33 | normalizer_fn=normalizer_fn, 34 | normalizer_params=normalizer_params) as sc: 35 | return sc 36 | 37 | def lp_net(inputs, 38 | num_classes=None, 39 | is_training=True, 40 | dropout_keep_prob=0.5, 41 | spatial_squeeze=True, 42 | scope='lp_net'): 43 | with tf.variable_scope(scope, 'lp_net', [inputs]) as sc: 44 | end_points_collection = sc.name + '_end_points' 45 | # Collect outputs for conv2d, fully_connected and max_pool2d. 46 | with slim.arg_scope([slim.conv2d, slim.fully_connected, slim.max_pool2d], 47 | outputs_collections=[end_points_collection]): 48 | net = slim.conv2d(inputs, 64, [11, 11], 4, padding='VALID',scope='conv1') 49 | net = slim.max_pool2d(net, [3, 3], 2, scope='pool1') 50 | net = slim.conv2d(net, 192, [5, 5], scope='conv2') 51 | net = slim.max_pool2d(net, [3, 3], 2, scope='pool2') 52 | net = slim.conv2d(net, 384, [3, 3], scope='conv3') 53 | net = slim.conv2d(net, 384, [3, 3], scope='conv4') 54 | net = slim.conv2d(net, 256, [3, 3], scope='conv5') 55 | net = slim.max_pool2d(net, [3, 3], 2, scope='pool5') 56 | end_points = slim.utils.convert_collection_to_dict(end_points_collection) 57 | if num_classes is not None: 58 | with slim.arg_scope([slim.conv2d],weights_initializer=trunc_normal(0.005),biases_initializer=tf.constant_initializer(0.1)): 59 | # net = slim.conv2d(net, 4096, [5, 5], padding='VALID',scope='fc6') 60 | net = slim.conv2d(net, 4096, net.get_shape()[1:3], padding='VALID',scope='fc6') 61 | net = slim.dropout(net, dropout_keep_prob, is_training=is_training,scope='dropout6') 62 | net = slim.conv2d(net, 4096, [1, 1], scope='fc7') 63 | net = slim.dropout(net, dropout_keep_prob, is_training=is_training,scope='dropout7') 64 | net = slim.conv2d(net, num_classes, [1, 1],activation_fn=None,normalizer_fn=None,biases_initializer=tf.zeros_initializer(),scope='fc8') 65 | if spatial_squeeze: 66 | net = tf.squeeze(net, [1, 2], name='fc8/squeezed') 67 | end_points[sc.name + '/fc8'] = net 68 | else: 69 | net = net 70 | end_points = end_points 71 | return net, end_points 72 | 73 | -------------------------------------------------------------------------------- /train_cnn_multilabel/lib/model/resnet_v2/__pycache__/resnet_utils.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_multilabel/lib/model/resnet_v2/__pycache__/resnet_utils.cpython-35.pyc -------------------------------------------------------------------------------- /train_cnn_multilabel/lib/model/resnet_v2/__pycache__/resnet_v2.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_multilabel/lib/model/resnet_v2/__pycache__/resnet_v2.cpython-35.pyc -------------------------------------------------------------------------------- /train_cnn_multilabel/lib/model/vgg/__pycache__/vgg.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_multilabel/lib/model/vgg/__pycache__/vgg.cpython-35.pyc -------------------------------------------------------------------------------- /train_cnn_multilabel/lib/optimizer/__pycache__/optimizer.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_multilabel/lib/optimizer/__pycache__/optimizer.cpython-35.pyc -------------------------------------------------------------------------------- /train_cnn_multilabel/lib/optimizer/__pycache__/optimizer_minimize.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_multilabel/lib/optimizer/__pycache__/optimizer_minimize.cpython-35.pyc -------------------------------------------------------------------------------- /train_cnn_multilabel/lib/optimizer/optimizer.py: -------------------------------------------------------------------------------- 1 | # coding=utf-8 2 | """ 3 | Created on 2017 10.17 4 | @author: liupeng 5 | wechat: lp9628 6 | blog: http://blog.csdn.net/u014365862/article/details/78422372 7 | """ 8 | 9 | import tensorflow as tf 10 | import numpy as np 11 | 12 | def adam_optimizer(learning_rate, adam_beta1=0.9, adam_beta2=0.999, opt_epsilon=1e-08): 13 | optimizer = tf.train.AdamOptimizer(learning_rate, beta1=adam_beta1, beta2=adam_beta2, epsilon=opt_epsilon) 14 | return optimizer 15 | 16 | def adadelta_optimizer(learning_rate, adadelta_rho=0.95, opt_epsilon=1e-08): 17 | optimizer = tf.train.AdadeltaOptimizer(learning_rate, rho=adadelta_rho, epsilon=opt_epsilon) 18 | return optimizer 19 | 20 | def adagrad_optimizer(learning_rate, adagrad_initial_accumulator_value=0.1): 21 | optimizer = tf.train.AdagradOptimizer(learning_rate, initial_accumulator_value=adagrad_initial_accumulator_value) 22 | return optimizer 23 | 24 | def ftrl_optimizer(learning_rate, ftrl_learning_rate_power=-0.5, ftrl_initial_accumulator_value=0.1, ftrl_l1=0.0, ftrl_l2=0.0): 25 | optimizer = tf.train.FtrlOptimizer(learning_rate, learning_rate_power=ftrl_learning_rate_power, initial_accumulator_value=ftrl_initial_accumulator_value, l1_regularization_strength=ftrl_l1, l2_regularization_strength=ftrl_l2) 26 | return optimizer 27 | 28 | def momentum_optimizer(learning_rate, momentum): 29 | optimizer = tf.train.MomentumOptimizer(learning_rate, momentum=momentum, name='Momentum') 30 | return optimizer 31 | 32 | def rmsprop_optimizer(learning_rate, rmsprop_decay=0.9, rmsprop_momentum=0.0, opt_epsilon=1e-10): 33 | optimizer = tf.train.RMSPropOptimizer(learning_rate, decay=rmsprop_decay, momentum=rmsprop_momentum, epsilon=opt_epsilon) 34 | return optimizer 35 | 36 | def sgd_optimizer(learning_rate): 37 | optimizer = tf.train.GradientDescentOptimizer(learning_rate) 38 | return optimizer 39 | 40 | 41 | 42 | def _configure_optimizer(learning_rate): 43 | """Configures the optimizer used for training. 44 | Args: 45 | learning_rate: A scalar or `Tensor` learning rate. 46 | Returns: 47 | An instance of an optimizer. 48 | Raises: 49 | ValueError: if FLAGS.optimizer is not recognized. 50 | """ 51 | if FLAGS.optimizer == 'adadelta': 52 | optimizer = tf.train.AdadeltaOptimizer( 53 | learning_rate, 54 | rho=FLAGS.adadelta_rho, 55 | epsilon=FLAGS.opt_epsilon) 56 | elif FLAGS.optimizer == 'adagrad': 57 | optimizer = tf.train.AdagradOptimizer( 58 | learning_rate, 59 | initial_accumulator_value=FLAGS.adagrad_initial_accumulator_value) 60 | elif FLAGS.optimizer == 'adam': 61 | optimizer = tf.train.AdamOptimizer( 62 | learning_rate, 63 | beta1=FLAGS.adam_beta1, 64 | beta2=FLAGS.adam_beta2, 65 | epsilon=FLAGS.opt_epsilon) 66 | elif FLAGS.optimizer == 'ftrl': 67 | optimizer = tf.train.FtrlOptimizer( 68 | learning_rate, 69 | learning_rate_power=FLAGS.ftrl_learning_rate_power, 70 | initial_accumulator_value=FLAGS.ftrl_initial_accumulator_value, 71 | l1_regularization_strength=FLAGS.ftrl_l1, 72 | l2_regularization_strength=FLAGS.ftrl_l2) 73 | elif FLAGS.optimizer == 'momentum': 74 | optimizer = tf.train.MomentumOptimizer( 75 | learning_rate, 76 | momentum=FLAGS.momentum, 77 | name='Momentum') 78 | elif FLAGS.optimizer == 'rmsprop': 79 | optimizer = tf.train.RMSPropOptimizer( 80 | learning_rate, 81 | decay=FLAGS.rmsprop_decay, 82 | momentum=FLAGS.rmsprop_momentum, 83 | epsilon=FLAGS.opt_epsilon) 84 | elif FLAGS.optimizer == 'sgd': 85 | optimizer = tf.train.GradientDescentOptimizer(learning_rate) 86 | else: 87 | raise ValueError('Optimizer [%s] was not recognized', FLAGS.optimizer) 88 | return optimizer 89 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /train_cnn_multilabel/lib/optimizer/optimizer_minimize.py: -------------------------------------------------------------------------------- 1 | # coding=utf-8 2 | """ 3 | Created on 2017 10.17 4 | @author: liupeng 5 | wechat: lp9628 6 | blog: http://blog.csdn.net/u014365862/article/details/78422372 7 | """ 8 | 9 | import tensorflow as tf 10 | import numpy as np 11 | 12 | 13 | def optimizer_minimize(optimizer, loss, global_step=tf.train.get_global_step(), var_list=tf.all_variables()): 14 | opt_op = optimizer.minimize(loss, var_list=var_list) 15 | return opt_op 16 | 17 | 18 | def optimizer_apply_gradients(optimizer, loss, global_step=tf.train.get_global_step(), var_list=tf.all_variables()): 19 | gradients = tf.gradients(loss, var_list) 20 | opt_op = optimizer.apply_gradients(zip(gradients, var_list), global_step=global_step) 21 | return opt_op 22 | -------------------------------------------------------------------------------- /train_cnn_multilabel/lib/train/__pycache__/train_multi_label.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_multilabel/lib/train/__pycache__/train_multi_label.cpython-35.pyc -------------------------------------------------------------------------------- /train_cnn_multilabel/lib/utils/__pycache__/multi_label_utils.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_multilabel/lib/utils/__pycache__/multi_label_utils.cpython-35.pyc -------------------------------------------------------------------------------- /train_cnn_multilabel/main.py: -------------------------------------------------------------------------------- 1 | # coding=utf-8 2 | """ 3 | Created on 2017 10.17 4 | @author: liupeng 5 | """ 6 | 7 | import numpy as np 8 | import os 9 | import tensorflow as tf 10 | slim = tf.contrib.slim 11 | from lib.data_load.data_load_from_txt_mullabel import data_load_from_txt_mullabel 12 | from lib.model.build_model.build_net import net_arch 13 | from lib.utils.multi_label_utils import g_parameter 14 | from lib.utils.multi_label_utils import to_one_hot 15 | # from lib.train.train3 import train3 as train 16 | from keras.utils import np_utils 17 | import config 18 | os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID" 19 | os.environ["CUDA_VISIBLE_DEVICES"] = "0" 20 | 21 | sample_dir = config.sample_dir 22 | tfRecord = config.tfRecord 23 | num_classes = config.num_classes 24 | batch_size = config.batch_size 25 | arch_model = config.arch_model 26 | checkpoint_exclude_scopes = config.checkpoint_exclude_scopes 27 | dropout_prob = config.dropout_prob 28 | train_rate = config.train_rate 29 | epoch = config.epoch 30 | # 是否使用提前终止训练 31 | early_stop = config.early_stop 32 | EARLY_STOP_PATIENCE = config.EARLY_STOP_PATIENCE 33 | # 是否使用learning_rate 34 | learning_r_decay = config.learning_r_decay 35 | learning_rate_base = config.learning_rate_base 36 | decay_rate = config.decay_rate 37 | height, width = config.height, config.width 38 | # 模型保存的路径 39 | train_dir = config.train_dir 40 | # 是否进行fine-tune。 选择fine-tune的的参数 41 | fine_tune = config.fine_tune 42 | # 训练所有层的参数 43 | train_all_layers = config.train_all_layers 44 | # 迁移学习的网络模型 45 | checkpoint_path = config.checkpoint_path 46 | 47 | 48 | from lib.train.train_multi_label import train_multi_label as train 49 | from lib.train.train_multi_label_tfRecords import train_multi_label_tfRecords as train_tfRecords 50 | train_data, train_label, valid_data, valid_label, train_n, valid_n, note_label = data_load_from_txt_mullabel(sample_dir, train_rate).gen_train_valid() 51 | 52 | print ('note_label', note_label) 53 | print (train_data) 54 | print (train_label) 55 | if arch_model!='arch_seg_vgg16_conv' and arch_model!='arch_vgg16_ocr': 56 | # train_label = np_utils.to_categorical(train_label, num_classes) 57 | # valid_label = np_utils.to_categorical(valid_label, num_classes) 58 | train_label = to_one_hot(train_label, num_classes) 59 | valid_label = to_one_hot(valid_label, num_classes) 60 | print (train_label) 61 | if not os.path.isdir(train_dir): 62 | os.makedirs(train_dir) 63 | if tfRecord: 64 | train_file_tfRecord = 'img_train.tfrecords' 65 | valid_file_tfRecord = 'img_test.tfrecords' 66 | train_tfRecords(train_file_tfRecord,valid_file_tfRecord,train_dir,num_classes,batch_size,arch_model,learning_r_decay,learning_rate_base,decay_rate,dropout_prob,epoch,height,width,checkpoint_exclude_scopes,early_stop,EARLY_STOP_PATIENCE,fine_tune,train_all_layers,checkpoint_path,train_n,valid_n,g_parameter) 67 | else: 68 | train(train_data,train_label,valid_data,valid_label,train_dir,num_classes,batch_size,arch_model,learning_r_decay,learning_rate_base,decay_rate,dropout_prob,epoch,height,width,checkpoint_exclude_scopes,early_stop,EARLY_STOP_PATIENCE,fine_tune,train_all_layers,checkpoint_path,train_n,valid_n,g_parameter) 69 | 70 | -------------------------------------------------------------------------------- /train_cnn_multilabel/pretrain/README.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | # 预训练好的模型放在这里。 4 | 5 | ## arch_inception_v4 download inception_v4 model: http://download.tensorflow.org/models/inception_v4_2016_09_09.tar.gz 6 | wget http://download.tensorflow.org/models/inception_v4_2016_09_09.tar.gz 7 | tar zxvf inception_v4_2016_09_09.tar.gz 8 | 9 | cd pretrain 10 | 11 | mkdir inception_v4 12 | 13 | mv .../inception_v4.ckpt inception_v4 14 | 15 | ## arch_vgg16 download vgg model: http://download.tensorflow.org/models/vgg_16_2016_08_28.tar.gz 16 | wget http://download.tensorflow.org/models/vgg_16_2016_08_28.tar.gz 17 | 18 | tar zxvf vgg_16_2016_08_28.tar.gz 19 | 20 | cd pretrain 21 | 22 | mkdir vgg 23 | 24 | mv .../vgg_16.ckpt vgg 25 | 26 | ## arch_resnet_v2_50 download resnet_v2_50 model: http://download.tensorflow.org/models/resnet_v2_50_2017_04_14.tar.gz 27 | wget http://download.tensorflow.org/models/resnet_v2_50_2017_04_14.tar.gz 28 | tar zxvf resnet_v2_50_2017_04_14.tar.gz 29 | 30 | cd pretrain 31 | 32 | mkdir resnet_v2 33 | 34 | mv .../resnet_v2_50.ckpt resnet_v2 35 | 36 | -------------------------------------------------------------------------------- /train_cnn_multilabel/test_accuracy.py: -------------------------------------------------------------------------------- 1 | # coding = utf-8 2 | 3 | """ 4 | Created on 2017 10.17 5 | @author: liupeng 6 | wechat: lp9628 7 | blog: http://blog.csdn.net/u014365862/article/details/78422372 8 | """ 9 | 10 | import tensorflow as tf 11 | from tensorflow.python.framework import graph_util 12 | from lib.data_load.data_load_from_txt_mullabel import data_load_from_txt_mullabel 13 | from lib.utils.multi_label_utils import get_next_batch_from_path, shuffle_train_data 14 | from lib.utils.multi_label_utils import input_placeholder, build_net_multi_label, cost, train_op, model_mAP 15 | from keras.utils import np_utils 16 | import cv2 17 | import numpy as np 18 | import os 19 | import sys 20 | import config 21 | 22 | num_classes = config.num_classes 23 | height, width = config.height, config.width 24 | arch_model = config.arch_model 25 | batch_size = config.batch_size 26 | sample_dir = 'val.txt' 27 | train_rate = 1.0 28 | test_data, test_label, valid_data, valid_label, test_n, valid_n, note_label = data_load_from_txt_mullabel(sample_dir, train_rate).gen_train_valid() 29 | print ('test_n', test_n) 30 | print ('valid_n', valid_n) 31 | # test_label = np_utils.to_categorical(test_label, num_classes) 32 | # valid_label = np_utils.to_categorical(valid_label, num_classes) 33 | 34 | X, Y, is_train, keep_prob_fc = input_placeholder(height, width, num_classes) 35 | net, _ = build_net_multi_label(X, num_classes, keep_prob_fc, is_train,arch_model) 36 | loss = cost(Y, net) 37 | pre = tf.nn.sigmoid(net) 38 | accuracy = model_mAP(pre, Y) 39 | # predict = tf.reshape(net, [-1, num_classes], name='predictions') 40 | 41 | 42 | 43 | if __name__ == '__main__': 44 | train_dir = 'model' 45 | latest = tf.train.latest_checkpoint(train_dir) 46 | if not latest: 47 | print ("No checkpoint to continue from in", train_dir) 48 | sys.exit(1) 49 | print ("resume", latest) 50 | sess = tf.Session() 51 | saver = tf.train.Saver(tf.global_variables()) 52 | saver.restore(sess, latest) 53 | test_ls = 0 54 | test_acc = 0 55 | for batch_i in range(int(test_n/batch_size)): 56 | images_test, labels_test = get_next_batch_from_path(test_data, test_label, batch_i, height, width, batch_size=batch_size, training=False) 57 | epoch_ls, epoch_acc, pred = sess.run([loss, accuracy, pre], feed_dict={X: images_test, Y: labels_test, keep_prob_fc:1.0, is_train:False}) 58 | print (epoch_acc) 59 | print (pred) 60 | test_ls = test_ls + epoch_ls 61 | test_acc = test_acc + epoch_acc 62 | print('Epoch: {:>2}: Validation loss: {:>3.5f}, Validation accuracy: {:>3.5f}'.format(0, test_ls/int(test_n/batch_size), test_acc/int(test_n/batch_size))) 63 | -------------------------------------------------------------------------------- /train_cnn_multilabel/test_tfRecords.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import numpy as np 4 | import tensorflow as tf 5 | import argparse 6 | import os 7 | 8 | from PIL import Image 9 | 10 | FLAGS = None 11 | 12 | batch_size = 64 13 | 14 | def read_image(file_queue, num_classes): 15 | reader = tf.TFRecordReader() 16 | key, value = reader.read(file_queue) 17 | _, serialized_example = reader.read(file_queue) 18 | features = tf.parse_single_example( 19 | serialized_example, 20 | features={ 21 | 'img': tf.FixedLenFeature([], tf.string), 22 | 'label': tf.FixedLenFeature([20], tf.float32), 23 | #'height': tf.FixedLenFeature([], tf.string), 24 | #'width': tf.FixedLenFeature([], tf.string), 25 | }) 26 | image = tf.decode_raw(features['img'], tf.uint8) 27 | #h = tf.decode_raw(features['height'], tf.int64) 28 | #w = tf.decode_raw(features['width'], tf.int64) 29 | # image_shape = tf.stack([h, w, 3]) 30 | image = tf.reshape(image, [299,299,3]) 31 | # image = tf.image.resize_images(image, (299, 299), method=0) 32 | # image = tf.cast(image, tf.float32) 33 | 34 | label = features['label'] 35 | print (label) 36 | # label = tf.cast(features['label'], tf.string) 37 | # label = tf.reshape(label, [num_classes]) 38 | # label = tf.cast(label, tf.float32) 39 | return image, label 40 | 41 | def read_image_batch(file_queue, num_classes, batchsize): 42 | img, label = read_image(file_queue, num_classes) 43 | min_after_dequeue = 2 44 | capacity = min_after_dequeue + 3 * batchsize 45 | # image_batch, label_batch = tf.train.batch([img, label], batch_size=batchsize, capacity=capacity) 46 | image_batch, label_batch = tf.train.shuffle_batch([img, label], batch_size=batchsize, capacity=capacity, min_after_dequeue=min_after_dequeue) 47 | label_batch = tf.to_float(label_batch) 48 | return image_batch, label_batch 49 | 50 | 51 | def main(_): 52 | 53 | train_file_path = "img_train.tfrecords" 54 | test_file_path = "img_test.tfrecords" 55 | model_path = "cnn_jisuanshi_model" 56 | 57 | train_image_filename_queue = tf.train.string_input_producer(tf.train.match_filenames_once(train_file_path)) 58 | img, label = read_image(train_image_filename_queue, 20) 59 | train_images, train_labels = read_image_batch(train_image_filename_queue, 20,batch_size) 60 | 61 | sess = tf.InteractiveSession() 62 | tf.local_variables_initializer().run() 63 | tf.global_variables_initializer().run() 64 | 65 | # start queue runner 66 | coord = tf.train.Coordinator() 67 | threads = tf.train.start_queue_runners(sess=sess, coord=coord) 68 | 69 | for i in range(2): 70 | images, labels = sess.run([img, label]) 71 | print (images, labels) 72 | images = tf.reshape(images, [299,299, 3]) 73 | images = tf.image.convert_image_dtype(images, dtype=tf.uint8) 74 | images = tf.image.encode_jpeg(images) 75 | # print(sess.run(labels)) 76 | with tf.gfile.GFile('pic_%d.jpg' % i, 'wb') as f: 77 | f.write(sess.run(images)) 78 | #img=Image.fromarray(images, 'RGB')#这里Image是之前提到的 79 | #img.save(str(i)+'_''Label_'+str(i)+'.jpg')#存下图片 80 | 81 | coord.request_stop() 82 | coord.join(threads) 83 | sess.close() 84 | 85 | if __name__ == '__main__': 86 | tf.app.run(main=main) 87 | 88 | 89 | -------------------------------------------------------------------------------- /train_cnn_v0/README.md: -------------------------------------------------------------------------------- 1 | 2 | > 自己搭建的一个框架,包含模型有:vgg(vgg16,vgg19), resnet(resnet_v2_50,resnet_v2_101,resnet_v2_152), inception_v4, inception_resnet_v2等。 3 | 4 | > 5 | 此框架主要针对分类任务, 后面会陆续搭建多任务多标签、检测、以及rnn等框架,欢迎关注。 6 | 使用说明: 7 | 搭建时使用的环境为:Python3.5, tensorflow1.4 8 | 9 | 变量设置参考config.py。 10 | 详细说明参见config.py。 11 | 12 | ( mkdir pretrain/inception_v4, 下载预训练模型, cp到pretrain/inception_v4/ ) 13 | 14 | 运行代码: python main.py 15 | 16 | 其中,z_ckpt_pb:ckpt转pb的代码,和测试接口。 17 | 18 | 另外如果想使用tensorboard,请使用train_net下面的train_tensorboard.py。将在工程目录下生成 xxx_log 的文件。 19 | 然后使用:tensorboard --logdir arch_inceion_v4_log查看。 20 | 后续有时间会把其它的功能加上,并且每个代码文件都会进行封装,用类的形式呈现。 21 | 22 | 23 | 对dl感兴趣,还可以关注我的博客,这是我的博客目录:(地址: http://blog.csdn.net/u014365862/article/details/78422372 ) 24 | 本文为博主原创文章,未经博主允许不得转载。有问题可以加微信:lp9628(注明CSDN)。 25 | 26 | -------------------------------------------------------------------------------- /train_cnn_v0/config.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | Created on 2017 10.17 4 | @author: liupeng 5 | wechat: lp9628 6 | blog: http://blog.csdn.net/u014365862/article/details/78422372 7 | """ 8 | 9 | # inception_v4:299 10 | # resnet_v2:224 11 | # vgg:224 12 | 13 | IMAGE_HEIGHT = 299 14 | IMAGE_WIDTH = 299 15 | num_classes = 4 16 | # epoch 17 | epoch = 1000 18 | batch_size = 1 19 | # 模型的学习率 20 | learning_rate = 0.00001 21 | keep_prob = 0.8 22 | 23 | 24 | # 设置训练样本的占总样本的比例: 25 | train_rate = 0.9 26 | 27 | # 每个类别保存到一个文件中,放在此目录下,只要是二级目录就可以。 28 | craterDir = "sample_train" 29 | 30 | # 选择需要的模型 31 | # arch_model="arch_inception_v4"; 32 | # arch_model="arch_resnet_v2_50" 33 | # arch_model="vgg_16" 34 | arch_model="arch_inception_v4" 35 | 36 | # 设置要更新的参数和加载的参数,目前是非此即彼,可以自己修改哦 37 | checkpoint_exclude_scopes = "Logits_out" 38 | 39 | # 迁移学习模型参数, 下载训练好模型:https://github.com/MachineLP/models/tree/master/research/slim 40 | # checkpoint_path="pretrain/inception_v4/inception_v4.ckpt"; 41 | # checkpoint_path="pretrain/resnet_v2_50/resnet_v2_50.ckpt" 42 | checkpoint_path="pretrain/inception_v4/inception_v4.ckpt" 43 | 44 | #训练好的模型参数在model文件夹下。 45 | 46 | # 接下来可以添加的功能: 47 | # 图像归一化:默认的是归一化到[-1,1]:(load_image/load_image.py:get_next_batch_from_path) (可以自行加一些设置参数,在此处设置) 48 | # 需要加入模型 需修改 (train_net/train.py) 49 | # 设置GPU使用, train_net/train.py (多GPU), main.py 50 | # 设置学习率衰减:learningRate_1 = tf.train.exponential_decay(lr1_init, tf.subtract(global_step, 1), decay_steps, decay_rate, True) 51 | # 加入tensorboard 可视化 52 | # 需要修改参数更新的方法请参考:(train_net/train.py) 53 | ''' 54 | def _configure_optimizer(learning_rate): 55 | """Configures the optimizer used for training. 56 | 57 | Args: 58 | learning_rate: A scalar or `Tensor` learning rate. 59 | 60 | Returns: 61 | An instance of an optimizer. 62 | 63 | Raises: 64 | ValueError: if FLAGS.optimizer is not recognized. 65 | """ 66 | if FLAGS.optimizer == 'adadelta': 67 | optimizer = tf.train.AdadeltaOptimizer( 68 | learning_rate, 69 | rho=FLAGS.adadelta_rho, 70 | epsilon=FLAGS.opt_epsilon) 71 | elif FLAGS.optimizer == 'adagrad': 72 | optimizer = tf.train.AdagradOptimizer( 73 | learning_rate, 74 | initial_accumulator_value=FLAGS.adagrad_initial_accumulator_value) 75 | elif FLAGS.optimizer == 'adam': 76 | optimizer = tf.train.AdamOptimizer( 77 | learning_rate, 78 | beta1=FLAGS.adam_beta1, 79 | beta2=FLAGS.adam_beta2, 80 | epsilon=FLAGS.opt_epsilon) 81 | elif FLAGS.optimizer == 'ftrl': 82 | optimizer = tf.train.FtrlOptimizer( 83 | learning_rate, 84 | learning_rate_power=FLAGS.ftrl_learning_rate_power, 85 | initial_accumulator_value=FLAGS.ftrl_initial_accumulator_value, 86 | l1_regularization_strength=FLAGS.ftrl_l1, 87 | l2_regularization_strength=FLAGS.ftrl_l2) 88 | elif FLAGS.optimizer == 'momentum': 89 | optimizer = tf.train.MomentumOptimizer( 90 | learning_rate, 91 | momentum=FLAGS.momentum, 92 | name='Momentum') 93 | elif FLAGS.optimizer == 'rmsprop': 94 | optimizer = tf.train.RMSPropOptimizer( 95 | learning_rate, 96 | decay=FLAGS.rmsprop_decay, 97 | momentum=FLAGS.rmsprop_momentum, 98 | epsilon=FLAGS.opt_epsilon) 99 | elif FLAGS.optimizer == 'sgd': 100 | optimizer = tf.train.GradientDescentOptimizer(learning_rate) 101 | else: 102 | raise ValueError('Optimizer [%s] was not recognized', FLAGS.optimizer) 103 | 104 | 105 | return optimizer''' 106 | -------------------------------------------------------------------------------- /train_cnn_v0/data_aug/data_aug.py: -------------------------------------------------------------------------------- 1 | 2 | # -*- coding: utf-8 -*- 3 | """ 4 | Created on 2017 10.17 5 | @author: liupeng 6 | wechat: lp9628 7 | blog: http://blog.csdn.net/u014365862/article/details/78422372 8 | """ 9 | 10 | import numpy as np 11 | import tensorflow as tf 12 | import numpy as np 13 | import os 14 | from PIL import Image 15 | import cv2 16 | from skimage import exposure 17 | 18 | 19 | # 完成图像的左右镜像 20 | def random_flip(image, random_flip=True): 21 | if random_flip and np.random.choice([True, False]): 22 | image = np.fliplr(image) # 左右 23 | if random_flip and np.random.choice([True, False]): 24 | image = np.flipud(image) # 上下 25 | return image 26 | 27 | # 改变光照 28 | # 光照调节也可以用log, 参数调节和gamma相反; 29 | # img = exposure.adjust_log(img, 1.3) 30 | ''' 31 | if random_exposure and np.random.choice([True, False]): 32 | image = exposure.adjust_gamma(image, 1.1) # 调暗 33 | if random_exposure and np.random.choice([True, False]): 34 | image = exposure.adjust_gamma(image, 1.3) # 调暗 35 | if random_exposure and np.random.choice([True, False]): 36 | image = exposure.adjust_gamma(image, 1.5) # 调暗 37 | if random_exposure and np.random.choice([True, False]): 38 | image = exposure.adjust_gamma(image, 0.9) # 调亮 39 | if random_exposure and np.random.choice([True, False]): 40 | image = exposure.adjust_gamma(image, 0.8) # 调亮 41 | if random_exposure and np.random.choice([True, False]): 42 | image = exposure.adjust_gamma(image, 0.7) # 调亮 43 | if random_exposure and np.random.choice([True, False]): 44 | image = exposure.adjust_gamma(image, 0.5) # 调亮 45 | ''' 46 | def random_exposure(image, random_exposure=True): 47 | if random_exposure and np.random.choice([True, False]): 48 | e_rate = np.random.uniform(0.5,1.5) 49 | image = exposure.adjust_gamma(image, e_rate) 50 | return image 51 | 52 | def random_rotation(image, random_rotation=True): 53 | if random_rotation and np.random.choice([True, False]): 54 | w,h = image.shape[1], image.shape[0] 55 | # 0-180随机产生旋转角度。 56 | angle = np.random.randint(0,10) 57 | RotateMatrix = cv2.getRotationMatrix2D(center=(image.shape[1]/2, image.shape[0]/2), angle=angle, scale=0.7) 58 | # image = cv2.warpAffine(image, RotateMatrix, (w,h), borderValue=(129,137,130)) 59 | image = cv2.warpAffine(image, RotateMatrix, (w,h), borderMode=cv2.BORDER_REPLICATE) 60 | return image 61 | 62 | def random_crop(image, crop_size=299, random_crop=True): 63 | if random_crop and np.random.choice([True, False]): 64 | if image.shape[1] > crop_size: 65 | sz1 = image.shape[1] // 2 66 | sz2 = crop_size // 2 67 | diff = sz1 - sz2 68 | (h, v) = (np.random.randint(0, diff + 1), np.random.randint(0, diff + 1)) 69 | image = image[v:(v + crop_size), h:(h + crop_size), :] 70 | 71 | return image 72 | -------------------------------------------------------------------------------- /train_cnn_v0/load_image/load_image.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | Created on 2017 10.17 4 | @author: liupeng 5 | wechat: lp9628 6 | blog: http://blog.csdn.net/u014365862/article/details/78422372 7 | """ 8 | 9 | import numpy as np 10 | import tensorflow as tf 11 | import numpy as np 12 | import os 13 | from PIL import Image 14 | import cv2 15 | try: 16 | from data_aug import random_flip, random_exposure, random_rotation, random_crop 17 | except: 18 | from data_aug.data_aug import random_flip, random_exposure, random_rotation, random_crop 19 | 20 | # 适用于二级目录 。。。/图片类别文件/图片(.png ,jpg等) 21 | 22 | def load_img_path(imgDir,imgFoldName, img_label): 23 | imgs = os.listdir(imgDir+imgFoldName) 24 | imgNum = len(imgs) 25 | data = [] 26 | label = [] 27 | for i in range (imgNum): 28 | img_path = imgDir+imgFoldName+"/"+imgs[i] 29 | # 用来检测图片是否有效,放在这里会太费时间。 30 | # img = cv2.imread(img_path) 31 | # if img is not None: 32 | data.append(img_path) 33 | label.append(int(img_label)) 34 | return data,label 35 | 36 | def shuffle_train_data(train_imgs, train_labels): 37 | index = [i for i in range(len(train_imgs))] 38 | np.random.shuffle(index) 39 | train_imgs = np.asarray(train_imgs) 40 | train_labels = np.asarray(train_labels) 41 | train_imgs = train_imgs[index] 42 | train_labels = train_labels[index] 43 | return train_imgs, train_labels 44 | 45 | def load_database_path(imgDir): 46 | img_path = os.listdir(imgDir) 47 | train_imgs = [] 48 | train_labels = [] 49 | for i, path in enumerate(img_path): 50 | craterDir = imgDir + '/' 51 | foldName = path 52 | data, label = load_img_path(craterDir,foldName, i) 53 | train_imgs.extend(data) 54 | train_labels.extend(label) 55 | print ("文件名对应的label:") 56 | print (path, i) 57 | #打乱数据集 58 | train_imgs, train_labels = shuffle_train_data(train_imgs, train_labels) 59 | return train_imgs, train_labels 60 | 61 | #------------------------------------------------# 62 | # 功能:按照图像最小的边进行缩放 63 | # 输入:img:图像,resize_size:需要的缩放大小 64 | # 输出:缩放后的图像 65 | #------------------------------------------------# 66 | def img_crop_pre(img, resize_size=336): 67 | h, w, _ = img.shape 68 | deta = h if h < w else w 69 | alpha = resize_size / float(deta) 70 | # print (alpha) 71 | img = cv2.resize(img, (int(h*alpha), int(w*alpha))) 72 | return img 73 | 74 | def get_next_batch_from_path(image_path, image_labels, pointer, IMAGE_HEIGHT=299, IMAGE_WIDTH=299, batch_size=64, is_train=True): 75 | batch_x = np.zeros([batch_size, IMAGE_HEIGHT,IMAGE_WIDTH,3]) 76 | num_classes = len(image_labels[0]) 77 | batch_y = np.zeros([batch_size, num_classes]) 78 | for i in range(batch_size): 79 | image = cv2.imread(image_path[i+pointer*batch_size]) 80 | image = cv2.resize(image, (int(IMAGE_HEIGHT*1.5), int(IMAGE_WIDTH*1.5))) 81 | image = img_crop_pre(image, resize_size=336) 82 | if is_train: 83 | image = random_flip(image) 84 | image = random_rotation(image) 85 | image = random_crop(image) 86 | image = random_exposure(image) 87 | image = cv2.resize(image, (IMAGE_HEIGHT, IMAGE_WIDTH)) 88 | # 选择自己预处理方式: 89 | ''' 90 | m = image.mean() 91 | s = image.std() 92 | min_s = 1.0/(np.sqrt(image.shape[0]*image.shape[1])) 93 | std = max(min_s, s) 94 | image = (image-m)/std''' 95 | # image = (image-127.5) 96 | image = image / 255.0 97 | image = image - 0.5 98 | image = image * 2 99 | 100 | batch_x[i,:,:,:] = image 101 | # print labels[i+pointer*batch_size] 102 | batch_y[i] = image_labels[i+pointer*batch_size] 103 | return batch_x, batch_y 104 | 105 | 106 | def test(): 107 | 108 | craterDir = "train" 109 | data, label = load_database(craterDir) 110 | print (data.shape) 111 | print (len(data)) 112 | print (data[0].shape) 113 | print (label[0]) 114 | batch_x, batch_y = get_next_batch_from_path(data, label, 0, IMAGE_HEIGHT=299, IMAGE_WIDTH=299, batch_size=64, is_train=True) 115 | print (batch_x) 116 | print (batch_y) 117 | 118 | if __name__ == '__main__': 119 | test() 120 | 121 | -------------------------------------------------------------------------------- /train_cnn_v0/main.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | Created on 2017 10.17 4 | @author: liupeng 5 | wechat: lp9628 6 | blog: http://blog.csdn.net/u014365862/article/details/78422372 7 | """ 8 | 9 | import numpy as np 10 | import tensorflow as tf 11 | slim = tf.contrib.slim 12 | import numpy as np 13 | import argparse 14 | import os 15 | from PIL import Image 16 | from datetime import datetime 17 | import math 18 | import time 19 | try: 20 | from load_image import load_database_path, get_next_batch_from_path 21 | except: 22 | from load_image.load_image import load_database_path, get_next_batch_from_path 23 | try: 24 | from train import train 25 | except: 26 | from train_net.train import train 27 | import cv2 28 | import os 29 | from keras.utils import np_utils 30 | os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID" 31 | os.environ["CUDA_VISIBLE_DEVICES"] = "0" 32 | 33 | import config 34 | 35 | if __name__ == '__main__': 36 | 37 | IMAGE_HEIGHT = config.IMAGE_HEIGHT 38 | IMAGE_WIDTH = config.IMAGE_WIDTH 39 | num_classes = config.num_classes 40 | # epoch 41 | epoch = config.epoch 42 | batch_size = config.batch_size 43 | # 模型的学习率 44 | learning_rate = config.learning_rate 45 | keep_prob = config.keep_prob 46 | 47 | ##----------------------------------------------------------------------------## 48 | # 设置训练样本的占总样本的比例: 49 | train_rate = config.train_rate 50 | # 每个类别保存到一个文件中,放在此目录下,只要是二级目录就可以。 51 | craterDir = config.craterDir 52 | 53 | # 选择需要的模型 54 | # arch_model="arch_inception_v4"; arch_model="arch_resnet_v2_50"; arch_model="vgg_16" 55 | arch_model=config.arch_model 56 | # 设置要更新的参数和加载的参数,目前是非此即彼,可以自己修改哦 57 | checkpoint_exclude_scopes = config.checkpoint_exclude_scopes 58 | # 迁移学习模型参数 59 | checkpoint_path=config.checkpoint_path 60 | 61 | ##----------------------------------------------------------------------------## 62 | print ("-----------------------------load_image.py start--------------------------") 63 | # 准备训练数据 64 | X_sample, Y_sample = load_database_path(craterDir) 65 | image_n = len(X_sample) 66 | # 样本的总数量 67 | print ("样本的总数量:") 68 | print (image_n) 69 | # 定义90%作为训练样本 70 | train_n = int(image_n*train_rate) 71 | valid_n = int(image_n*(1-train_rate)) 72 | train_data, train_label = X_sample[0:train_n], Y_sample[0:train_n] 73 | # 定位10%作为测试样本 74 | valid_data, valid_label = X_sample[train_n:image_n], Y_sample[train_n:image_n] 75 | # ont-hot 76 | train_label = np_utils.to_categorical(train_label, num_classes) 77 | valid_label = np_utils.to_categorical(valid_label, num_classes) 78 | ##----------------------------------------------------------------------------## 79 | 80 | print ("-----------------------------train.py start--------------------------") 81 | train(train_data,train_label,valid_data,valid_label,train_n,valid_n,IMAGE_HEIGHT,IMAGE_WIDTH,learning_rate,num_classes,epoch,batch_size,keep_prob, 82 | arch_model, checkpoint_exclude_scopes, checkpoint_path) 83 | -------------------------------------------------------------------------------- /train_cnn_v0/model/README.md: -------------------------------------------------------------------------------- 1 | 2 | # 训练好的模型在这里。 -------------------------------------------------------------------------------- /train_cnn_v0/net/cifarnet/cifarnet.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | Created on 2017 10.17 4 | @author: liupeng 5 | wechat: lp9628 6 | blog: http://blog.csdn.net/u014365862/article/details/78422372 7 | """ 8 | 9 | from __future__ import absolute_import 10 | from __future__ import division 11 | from __future__ import print_function 12 | 13 | import tensorflow as tf 14 | 15 | slim = tf.contrib.slim 16 | 17 | trunc_normal = lambda stddev: tf.truncated_normal_initializer(stddev=stddev) 18 | 19 | 20 | def cifarnet(images, num_classes=10, is_training=False, 21 | dropout_keep_prob=0.5, 22 | prediction_fn=slim.softmax, 23 | scope='CifarNet'): 24 | """Creates a variant of the CifarNet model. 25 | 26 | Note that since the output is a set of 'logits', the values fall in the 27 | interval of (-infinity, infinity). Consequently, to convert the outputs to a 28 | probability distribution over the characters, one will need to convert them 29 | using the softmax function: 30 | 31 | logits = cifarnet.cifarnet(images, is_training=False) 32 | probabilities = tf.nn.softmax(logits) 33 | predictions = tf.argmax(logits, 1) 34 | 35 | Args: 36 | images: A batch of `Tensors` of size [batch_size, height, width, channels]. 37 | num_classes: the number of classes in the dataset. 38 | is_training: specifies whether or not we're currently training the model. 39 | This variable will determine the behaviour of the dropout layer. 40 | dropout_keep_prob: the percentage of activation values that are retained. 41 | prediction_fn: a function to get predictions out of logits. 42 | scope: Optional variable_scope. 43 | 44 | Returns: 45 | logits: the pre-softmax activations, a tensor of size 46 | [batch_size, `num_classes`] 47 | end_points: a dictionary from components of the network to the corresponding 48 | activation. 49 | """ 50 | end_points = {} 51 | 52 | with tf.variable_scope(scope, 'CifarNet', [images, num_classes]): 53 | net = slim.conv2d(images, 64, [5, 5], scope='conv1') 54 | end_points['conv1'] = net 55 | net = slim.max_pool2d(net, [2, 2], 2, scope='pool1') 56 | end_points['pool1'] = net 57 | net = tf.nn.lrn(net, 4, bias=1.0, alpha=0.001/9.0, beta=0.75, name='norm1') 58 | net = slim.conv2d(net, 64, [5, 5], scope='conv2') 59 | end_points['conv2'] = net 60 | net = tf.nn.lrn(net, 4, bias=1.0, alpha=0.001/9.0, beta=0.75, name='norm2') 61 | net = slim.max_pool2d(net, [2, 2], 2, scope='pool2') 62 | end_points['pool2'] = net 63 | net = slim.flatten(net) 64 | end_points['Flatten'] = net 65 | net = slim.fully_connected(net, 384, scope='fc3') 66 | end_points['fc3'] = net 67 | net = slim.dropout(net, dropout_keep_prob, is_training=is_training, 68 | scope='dropout3') 69 | net = slim.fully_connected(net, 192, scope='fc4') 70 | end_points['fc4'] = net 71 | logits = slim.fully_connected(net, num_classes, 72 | biases_initializer=tf.zeros_initializer(), 73 | weights_initializer=trunc_normal(1/192.0), 74 | weights_regularizer=None, 75 | activation_fn=None, 76 | scope='logits') 77 | 78 | end_points['Logits'] = logits 79 | end_points['Predictions'] = prediction_fn(logits, scope='Predictions') 80 | 81 | return logits, end_points 82 | cifarnet.default_image_size = 32 83 | 84 | 85 | def cifarnet_arg_scope(weight_decay=0.004): 86 | """Defines the default cifarnet argument scope. 87 | 88 | Args: 89 | weight_decay: The weight decay to use for regularizing the model. 90 | 91 | Returns: 92 | An `arg_scope` to use for the inception v3 model. 93 | """ 94 | with slim.arg_scope( 95 | [slim.conv2d], 96 | weights_initializer=tf.truncated_normal_initializer(stddev=5e-2), 97 | activation_fn=tf.nn.relu): 98 | with slim.arg_scope( 99 | [slim.fully_connected], 100 | biases_initializer=tf.constant_initializer(0.1), 101 | weights_initializer=trunc_normal(0.04), 102 | weights_regularizer=slim.l2_regularizer(weight_decay), 103 | activation_fn=tf.nn.relu) as sc: 104 | return sc 105 | -------------------------------------------------------------------------------- /train_cnn_v0/net/inception_v4/__pycache__/inception_utils.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_v0/net/inception_v4/__pycache__/inception_utils.cpython-35.pyc -------------------------------------------------------------------------------- /train_cnn_v0/net/inception_v4/__pycache__/inception_v4.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_v0/net/inception_v4/__pycache__/inception_v4.cpython-35.pyc -------------------------------------------------------------------------------- /train_cnn_v0/net/inception_v4/inception_utils.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | Created on 2017 10.17 4 | @author: liupeng 5 | wechat: lp9628 6 | blog: http://blog.csdn.net/u014365862/article/details/78422372 7 | """ 8 | 9 | from __future__ import absolute_import 10 | from __future__ import division 11 | from __future__ import print_function 12 | 13 | import tensorflow as tf 14 | 15 | slim = tf.contrib.slim 16 | 17 | 18 | def inception_arg_scope(weight_decay=0.00004, 19 | use_batch_norm=True, 20 | batch_norm_decay=0.9997, 21 | batch_norm_epsilon=0.001): 22 | """Defines the default arg scope for inception models. 23 | Args: 24 | weight_decay: The weight decay to use for regularizing the model. 25 | use_batch_norm: "If `True`, batch_norm is applied after each convolution. 26 | batch_norm_decay: Decay for batch norm moving average. 27 | batch_norm_epsilon: Small float added to variance to avoid dividing by zero 28 | in batch norm. 29 | Returns: 30 | An `arg_scope` to use for the inception models. 31 | """ 32 | batch_norm_params = { 33 | # Decay for the moving averages. 34 | 'decay': batch_norm_decay, 35 | # epsilon to prevent 0s in variance. 36 | 'epsilon': batch_norm_epsilon, 37 | # collection containing update_ops. 38 | 'updates_collections': tf.GraphKeys.UPDATE_OPS, 39 | } 40 | if use_batch_norm: 41 | normalizer_fn = slim.batch_norm 42 | normalizer_params = batch_norm_params 43 | else: 44 | normalizer_fn = None 45 | normalizer_params = {} 46 | # Set weight_decay for weights in Conv and FC layers. 47 | with slim.arg_scope([slim.conv2d, slim.fully_connected], 48 | weights_regularizer=slim.l2_regularizer(weight_decay)): 49 | with slim.arg_scope( 50 | [slim.conv2d], 51 | weights_initializer=slim.variance_scaling_initializer(), 52 | activation_fn=tf.nn.relu, 53 | normalizer_fn=normalizer_fn, 54 | normalizer_params=normalizer_params) as sc: 55 | return sc 56 | -------------------------------------------------------------------------------- /train_cnn_v0/net/resnet_v2/__pycache__/resnet_utils.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_v0/net/resnet_v2/__pycache__/resnet_utils.cpython-35.pyc -------------------------------------------------------------------------------- /train_cnn_v0/net/resnet_v2/__pycache__/resnet_v2.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_v0/net/resnet_v2/__pycache__/resnet_v2.cpython-35.pyc -------------------------------------------------------------------------------- /train_cnn_v0/net/vgg/__pycache__/vgg.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_v0/net/vgg/__pycache__/vgg.cpython-35.pyc -------------------------------------------------------------------------------- /train_cnn_v0/pretrain/README.md: -------------------------------------------------------------------------------- 1 | 2 | # 预训练好的模型放在这里。 3 | 4 | ## arch_inception_v4 download inception_v4 model: http://download.tensorflow.org/models/inception_v4_2016_09_09.tar.gz 5 | wget http://download.tensorflow.org/models/inception_v4_2016_09_09.tar.gz 6 | tar zxvf inception_v4_2016_09_09.tar.gz 7 | 8 | cd pretrain 9 | 10 | mkdir inception_v4 11 | 12 | mv .../inception_v4.ckpt inception_v4 13 | 14 | ## arch_vgg16 download vgg model: http://download.tensorflow.org/models/vgg_16_2016_08_28.tar.gz 15 | wget http://download.tensorflow.org/models/vgg_16_2016_08_28.tar.gz 16 | 17 | tar zxvf vgg_16_2016_08_28.tar.gz 18 | 19 | cd pretrain 20 | 21 | mkdir vgg 22 | 23 | mv .../vgg_16.ckpt vgg 24 | 25 | ## arch_resnet_v2_50 download resnet_v2_50 model: http://download.tensorflow.org/models/resnet_v2_50_2017_04_14.tar.gz 26 | wget http://download.tensorflow.org/models/resnet_v2_50_2017_04_14.tar.gz 27 | tar zxvf resnet_v2_50_2017_04_14.tar.gz 28 | 29 | cd pretrain 30 | 31 | mkdir resnet_v2 32 | 33 | mv .../resnet_v2_50.ckpt resnet_v2 34 | -------------------------------------------------------------------------------- /train_cnn_v0/sample_train/0male/0(1).jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_v0/sample_train/0male/0(1).jpeg -------------------------------------------------------------------------------- /train_cnn_v0/sample_train/0male/0(1).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_v0/sample_train/0male/0(1).jpg -------------------------------------------------------------------------------- /train_cnn_v0/sample_train/0male/0(2).jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_v0/sample_train/0male/0(2).jpeg -------------------------------------------------------------------------------- /train_cnn_v0/sample_train/0male/0(2).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_v0/sample_train/0male/0(2).jpg -------------------------------------------------------------------------------- /train_cnn_v0/sample_train/0male/0(3).jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_v0/sample_train/0male/0(3).jpeg -------------------------------------------------------------------------------- /train_cnn_v0/sample_train/0male/0(3).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_v0/sample_train/0male/0(3).jpg -------------------------------------------------------------------------------- /train_cnn_v0/sample_train/1female/1(1).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_v0/sample_train/1female/1(1).jpg -------------------------------------------------------------------------------- /train_cnn_v0/sample_train/1female/1(2).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_v0/sample_train/1female/1(2).jpg -------------------------------------------------------------------------------- /train_cnn_v0/sample_train/1female/1(3).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_v0/sample_train/1female/1(3).jpg -------------------------------------------------------------------------------- /train_cnn_v0/sample_train/1female/1(4).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_v0/sample_train/1female/1(4).jpg -------------------------------------------------------------------------------- /train_cnn_v0/sample_train/1female/1(5).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_v0/sample_train/1female/1(5).jpg -------------------------------------------------------------------------------- /train_cnn_v0/sample_train/1female/1(6).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_v0/sample_train/1female/1(6).jpg -------------------------------------------------------------------------------- /train_cnn_v0/sample_train/2many/0_Parade_marchingband_1_12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_v0/sample_train/2many/0_Parade_marchingband_1_12.jpg -------------------------------------------------------------------------------- /train_cnn_v0/sample_train/2many/0_Parade_marchingband_1_13.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_v0/sample_train/2many/0_Parade_marchingband_1_13.jpg -------------------------------------------------------------------------------- /train_cnn_v0/sample_train/2many/0_Parade_marchingband_1_17.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_v0/sample_train/2many/0_Parade_marchingband_1_17.jpg -------------------------------------------------------------------------------- /train_cnn_v0/sample_train/2many/0_Parade_marchingband_1_5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_v0/sample_train/2many/0_Parade_marchingband_1_5.jpg -------------------------------------------------------------------------------- /train_cnn_v0/sample_train/2many/0_Parade_marchingband_1_6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_v0/sample_train/2many/0_Parade_marchingband_1_6.jpg -------------------------------------------------------------------------------- /train_cnn_v0/sample_train/2many/0_Parade_marchingband_1_8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_v0/sample_train/2many/0_Parade_marchingband_1_8.jpg -------------------------------------------------------------------------------- /train_cnn_v0/sample_train/3other/6(2).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_v0/sample_train/3other/6(2).jpg -------------------------------------------------------------------------------- /train_cnn_v0/sample_train/3other/6(3).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_v0/sample_train/3other/6(3).jpg -------------------------------------------------------------------------------- /train_cnn_v0/sample_train/3other/6(4).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_v0/sample_train/3other/6(4).jpg -------------------------------------------------------------------------------- /train_cnn_v0/sample_train/3other/6(5).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_v0/sample_train/3other/6(5).jpg -------------------------------------------------------------------------------- /train_cnn_v0/sample_train/3other/6(6).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_v0/sample_train/3other/6(6).jpg -------------------------------------------------------------------------------- /train_cnn_v0/sample_train/3other/6(9).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_v0/sample_train/3other/6(9).jpg -------------------------------------------------------------------------------- /train_cnn_v0/sample_train/README.md: -------------------------------------------------------------------------------- 1 | 2 | # 训练前要对数据筛选一下;判断时候为空;并且另存为jpg格式; 3 | # 调用z_ckpt_pb的img_preprocessing.py代码。 4 | -------------------------------------------------------------------------------- /train_cnn_v0/z_ckpt_pb/inception_utils.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | Created on 2017 10.17 4 | @author: liupeng 5 | wechat: lp9628 6 | blog: http://blog.csdn.net/u014365862/article/details/78422372 7 | """ 8 | 9 | from __future__ import absolute_import 10 | from __future__ import division 11 | from __future__ import print_function 12 | 13 | import tensorflow as tf 14 | 15 | slim = tf.contrib.slim 16 | 17 | 18 | def inception_arg_scope(weight_decay=0.00004, 19 | use_batch_norm=True, 20 | batch_norm_decay=0.9997, 21 | batch_norm_epsilon=0.001): 22 | """Defines the default arg scope for inception models. 23 | Args: 24 | weight_decay: The weight decay to use for regularizing the model. 25 | use_batch_norm: "If `True`, batch_norm is applied after each convolution. 26 | batch_norm_decay: Decay for batch norm moving average. 27 | batch_norm_epsilon: Small float added to variance to avoid dividing by zero 28 | in batch norm. 29 | Returns: 30 | An `arg_scope` to use for the inception models. 31 | """ 32 | batch_norm_params = { 33 | # Decay for the moving averages. 34 | 'decay': batch_norm_decay, 35 | # epsilon to prevent 0s in variance. 36 | 'epsilon': batch_norm_epsilon, 37 | # collection containing update_ops. 38 | 'updates_collections': tf.GraphKeys.UPDATE_OPS, 39 | } 40 | if use_batch_norm: 41 | normalizer_fn = slim.batch_norm 42 | normalizer_params = batch_norm_params 43 | else: 44 | normalizer_fn = None 45 | normalizer_params = {} 46 | # Set weight_decay for weights in Conv and FC layers. 47 | with slim.arg_scope([slim.conv2d, slim.fully_connected], 48 | weights_regularizer=slim.l2_regularizer(weight_decay)): 49 | with slim.arg_scope( 50 | [slim.conv2d], 51 | weights_initializer=slim.variance_scaling_initializer(), 52 | activation_fn=tf.nn.relu, 53 | normalizer_fn=normalizer_fn, 54 | normalizer_params=normalizer_params) as sc: 55 | return sc 56 | -------------------------------------------------------------------------------- /train_cnn_v0/z_ckpt_pb/test.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | Created on 2017 10.17 4 | @author: liupeng""" 5 | 6 | import numpy as np 7 | import numpy as np 8 | import os 9 | from PIL import Image 10 | import cv2 11 | 12 | import csv 13 | import argparse, json, textwrap 14 | import sys 15 | import csv 16 | 17 | 18 | def result2num(out, image_path): 19 | # print (out) 20 | dc = out[image_path] 21 | # print (dc) 22 | 23 | if dc.get("help", ""): 24 | print ("help is true!") 25 | dc.pop('help') 26 | print (">>>>>>>>", dc) 27 | 28 | def dict2list(dic:dict): 29 | ''''' 将字典转化为列表 ''' 30 | keys = dic.keys() 31 | vals = dic.values() 32 | lst = [(key, val) for key, val in zip(keys, vals)] 33 | return lst 34 | dc = sorted(dict2list(dc), key=lambda d:d[1], reverse=True) 35 | # print (dc[0][0]) 36 | if dc[0][0] == 'NG1': 37 | return 0 38 | if dc[0][0] == 'NG2': 39 | return 1 40 | if dc[0][0] == 'OK': 41 | return 2 42 | 43 | file = open("output.csv", "r") 44 | 45 | err_num = 0 46 | sample_num = 0 47 | for r in file: 48 | sample_num = sample_num + 1 49 | # 转为字典 50 | r = eval(r) 51 | # 转为列表 52 | image_path = list(r.keys()) 53 | la = 888888888888888 54 | label = str (str(image_path[0]).split('/')[1]) 55 | # print (label) 56 | if label == 'NG1': 57 | la = 0 58 | if label == 'NG2': 59 | la = 1 60 | if label == 'OK': 61 | la = 2 62 | print (la) 63 | 64 | image_path = str(image_path[0]) 65 | res = result2num(r, image_path) 66 | print (res) 67 | 68 | if (la != res): 69 | err_num = err_num + 1 70 | print (sample_num) 71 | print (err_num) 72 | acc_num = sample_num - err_num 73 | print ('accuracy >>> ', acc_num/sample_num) 74 | -------------------------------------------------------------------------------- /train_cnn_v1/README.md: -------------------------------------------------------------------------------- 1 | 2 | 使用方法: 3 | 训 练: python main.py (通过config.PY设置参数) 4 | 可视化:python vis_cam.py 5 | 6 | 7 | 8 | 训练平台搭建代码说明: 9 | 10 | 1. gender文件: 11 | 存放样本,不同的类别已不同的文件夹存放。 12 | 13 | 2. lib文件: 14 | (1)model文件: 15 | 各网络。 16 | (2)data_aug文件: 17 | 用于图像增强, 里边包含两种方法。 18 | (3)grad_cam文件: 19 | 可视化模块。 20 | (4)data_load文件: 21 | 加载训练数据。 22 | (5)train_文件: 23 | 构建训练。 24 | (6)utils文件: 25 | 。。。 26 | (7) loss文件: 27 | 策略:损失函数。 28 | (8)optimizer文件: 29 | 优化方法。 30 | 31 | 3. model文件: 32 | 存放训练过程中的保存的模型。 33 | 34 | 4. pretrain文件: 35 | 迁移学习中的预训练模型。 36 | 37 | 5. config.py文件: 38 | 调整训练过程的参数。 39 | 40 | 6. main.py文件: 41 | 启动训练: python main.py 42 | 43 | 7. vis_cam.py文件: 44 | 可视化: python vis_cam.py 45 | 8. ckpt_pb.py文件: 46 | ckpt转pb的。 47 | 9. test文件: 48 | 用于模型的测试。 -------------------------------------------------------------------------------- /train_cnn_v1/ckpt_pb.py: -------------------------------------------------------------------------------- 1 | # coding = utf-8 2 | 3 | import tensorflow as tf 4 | from tensorflow.python.framework import graph_util 5 | from lib.utils.utils import input_placeholder, g_parameter, build_net 6 | import cv2 7 | import numpy as np 8 | import os 9 | import sys 10 | import config 11 | os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID" 12 | os.environ["CUDA_VISIBLE_DEVICES"] = "1" 13 | 14 | MODEL_DIR = "model/" 15 | MODEL_NAME = "frozen_model.pb" 16 | if not tf.gfile.Exists(MODEL_DIR): #创建目录 17 | tf.gfile.MakeDirs(MODEL_DIR) 18 | 19 | height, width = config.height, config.width 20 | num_classes = config.num_classes 21 | arch_model = config.arch_model 22 | 23 | X = tf.placeholder(tf.float32, [None, height, width, 3], name = "inputs_placeholder") 24 | net, net_vis = build_net(X, num_classes, 1.0, False, arch_model) 25 | net = tf.nn.softmax(net) 26 | predict = tf.reshape(net, [-1, num_classes], name='predictions') 27 | 28 | 29 | def freeze_graph(model_folder): 30 | #checkpoint = tf.train.get_checkpoint_state(model_folder) #检查目录下ckpt文件状态是否可用 31 | #input_checkpoint = checkpoint.model_checkpoint_path #得ckpt文件路径 32 | input_checkpoint = model_folder 33 | output_graph = os.path.join(MODEL_DIR, MODEL_NAME) #PB模型保存路径 34 | 35 | output_node_names = "predictions" #原模型输出操作节点的名字 36 | #saver = tf.train.import_meta_graph(input_checkpoint + '.meta', clear_devices=True) #得到图、clear_devices :Whether or not to clear the device field for an `Operation` or `Tensor` during import. 37 | saver = tf.train.Saver() 38 | 39 | graph = tf.get_default_graph() #获得默认的图 40 | input_graph_def = graph.as_graph_def() #返回一个序列化的图代表当前的图 41 | 42 | with tf.Session() as sess: 43 | sess.run(tf.initialize_all_variables()) 44 | saver.restore(sess, input_checkpoint) #恢复图并得到数据 45 | 46 | #print "predictions : ", sess.run("predictions:0", feed_dict={"input_holder:0": [10.0]}) # 测试读出来的模型是否正确,注意这里传入的是输出 和输入 节点的 tensor的名字,不是操作节点的名字 47 | 48 | output_graph_def = graph_util.convert_variables_to_constants( #模型持久化,将变量值固定 49 | sess, 50 | input_graph_def, 51 | output_node_names.split(",") #如果有多个输出节点,以逗号隔开 52 | ) 53 | with tf.gfile.GFile(output_graph, "wb") as f: #保存模型 54 | f.write(output_graph_def.SerializeToString()) #序列化输出 55 | print("%d ops in the final graph." % len(output_graph_def.node)) #得到当前图有几个操作节点 56 | 57 | for op in graph.get_operations(): 58 | #print(op.name, op.values()) 59 | print("name:",op.name) 60 | print ("success!") 61 | 62 | 63 | #下面是用于测试, 读取pd模型,答应每个变量的名字。 64 | graph = load_graph("model/frozen_model.pb") 65 | for op in graph.get_operations(): 66 | #print(op.name, op.values()) 67 | print("name111111111111:",op.name) 68 | pred = graph.get_tensor_by_name('prefix/inputs_placeholder:0') 69 | print (pred) 70 | temp = graph.get_tensor_by_name('prefix/predictions:0') 71 | print (temp) 72 | 73 | def load_graph(frozen_graph_filename): 74 | # We load the protobuf file from the disk and parse it to retrieve the 75 | # unserialized graph_def 76 | with tf.gfile.GFile(frozen_graph_filename, "rb") as f: 77 | graph_def = tf.GraphDef() 78 | graph_def.ParseFromString(f.read()) 79 | 80 | # Then, we can use again a convenient built-in function to import a graph_def into the 81 | # current default Graph 82 | with tf.Graph().as_default() as graph: 83 | tf.import_graph_def( 84 | graph_def, 85 | input_map=None, 86 | return_elements=None, 87 | name="prefix", 88 | op_dict=None, 89 | producer_op_list=None 90 | ) 91 | return graph 92 | 93 | 94 | if __name__ == '__main__': 95 | train_dir = 'model' 96 | latest = tf.train.latest_checkpoint(train_dir) 97 | if not latest: 98 | print ("No checkpoint to continue from in", train_dir) 99 | sys.exit(1) 100 | print ("resume", latest) 101 | # saver2.restore(sess, latest) 102 | # model_folder = './model/model.ckpt-0' 103 | model_folder = latest 104 | freeze_graph(model_folder) 105 | 106 | -------------------------------------------------------------------------------- /train_cnn_v1/ckpt_pb3.py: -------------------------------------------------------------------------------- 1 | # coding = utf-8 2 | 3 | import tensorflow as tf 4 | from tensorflow.python.framework import graph_util 5 | from lib.utils.utils import input_placeholder, g_parameter, build_net 6 | import cv2 7 | import numpy as np 8 | import os 9 | import sys 10 | import config 11 | MODEL_DIR = "model/" 12 | MODEL_NAME = "frozen_model.pb" 13 | if not tf.gfile.Exists(MODEL_DIR): #创建目录 14 | tf.gfile.MakeDirs(MODEL_DIR) 15 | 16 | height, width = config.height, config.width 17 | num_classes = config.num_classes 18 | arch_model = config.arch_model 19 | 20 | X = tf.placeholder(tf.float32, [None, height, width, 3], name = "inputs_placeholder") 21 | net, net_vis = build_net(X, num_classes, 1.0, False, arch_model) 22 | net = tf.nn.softmax(net) 23 | predict = tf.reshape(net, [-1, num_classes], name='predictions') 24 | 25 | 26 | def freeze_graph(model_folder): 27 | #checkpoint = tf.train.get_checkpoint_state(model_folder) #检查目录下ckpt文件状态是否可用 28 | #input_checkpoint = checkpoint.model_checkpoint_path #得ckpt文件路径 29 | input_checkpoint = model_folder 30 | output_graph = os.path.join(MODEL_DIR, MODEL_NAME) #PB模型保存路径 31 | 32 | output_node_names = "predictions" #原模型输出操作节点的名字 33 | #saver = tf.train.import_meta_graph(input_checkpoint + '.meta', clear_devices=True) #得到图、clear_devices :Whether or not to clear the device field for an `Operation` or `Tensor` during import. 34 | saver = tf.train.Saver() 35 | 36 | graph = tf.get_default_graph() #获得默认的图 37 | input_graph_def = graph.as_graph_def() #返回一个序列化的图代表当前的图 38 | 39 | with tf.Session() as sess: 40 | sess.run(tf.initialize_all_variables()) 41 | saver.restore(sess, input_checkpoint) #恢复图并得到数据 42 | 43 | #print "predictions : ", sess.run("predictions:0", feed_dict={"input_holder:0": [10.0]}) # 测试读出来的模型是否正确,注意这里传入的是输出 和输入 节点的 tensor的名字,不是操作节点的名字 44 | 45 | output_graph_def = graph_util.convert_variables_to_constants( #模型持久化,将变量值固定 46 | sess, 47 | input_graph_def, 48 | output_node_names.split(",") #如果有多个输出节点,以逗号隔开 49 | ) 50 | with tf.gfile.GFile(output_graph, "wb") as f: #保存模型 51 | f.write(output_graph_def.SerializeToString()) #序列化输出 52 | print("%d ops in the final graph." % len(output_graph_def.node)) #得到当前图有几个操作节点 53 | 54 | for op in graph.get_operations(): 55 | #print(op.name, op.values()) 56 | print("name:",op.name) 57 | print ("success!") 58 | 59 | 60 | #下面是用于测试, 读取pd模型,答应每个变量的名字。 61 | graph = load_graph("model/frozen_model.pb") 62 | for op in graph.get_operations(): 63 | #print(op.name, op.values()) 64 | print("name111111111111:",op.name) 65 | pred = graph.get_tensor_by_name('prefix/inputs_placeholder:0') 66 | print (pred) 67 | temp = graph.get_tensor_by_name('prefix/predictions:0') 68 | print (temp) 69 | 70 | def load_graph(frozen_graph_filename): 71 | # We load the protobuf file from the disk and parse it to retrieve the 72 | # unserialized graph_def 73 | with tf.gfile.GFile(frozen_graph_filename, "rb") as f: 74 | graph_def = tf.GraphDef() 75 | graph_def.ParseFromString(f.read()) 76 | 77 | # Then, we can use again a convenient built-in function to import a graph_def into the 78 | # current default Graph 79 | with tf.Graph().as_default() as graph: 80 | tf.import_graph_def( 81 | graph_def, 82 | input_map=None, 83 | return_elements=None, 84 | name="prefix", 85 | op_dict=None, 86 | producer_op_list=None 87 | ) 88 | return graph 89 | 90 | 91 | if __name__ == '__main__': 92 | train_dir = 'model' 93 | latest = tf.train.latest_checkpoint(train_dir) 94 | if not latest: 95 | print ("No checkpoint to continue from in", train_dir) 96 | sys.exit(1) 97 | print ("resume", latest) 98 | # saver2.restore(sess, latest) 99 | # model_folder = './model/model.ckpt-0' 100 | model_folder = latest 101 | freeze_graph(model_folder) 102 | 103 | -------------------------------------------------------------------------------- /train_cnn_v1/config.py: -------------------------------------------------------------------------------- 1 | # coding=utf-8 2 | 3 | # 训练文件夹 4 | sample_dir = "gender" 5 | # 需要分类的类别数量 6 | num_classes = 4 7 | # 最小批训练的大小 8 | batch_size = 2 9 | # 选择使用的模型 10 | arch_model="arch_inception_v4" 11 | # arch_model="arch_multi_alexnet_v2" 12 | # arch_model="arch_multi_vgg16_conv" 13 | # 选择训练的网络层 14 | checkpoint_exclude_scopes = "Logits_out" 15 | # dropout的大小 16 | dropout_prob = 0.8 17 | # 选择训练样本的比例 18 | train_rate = 0.9 19 | # 整个训练集上进行多少次迭代 20 | epoch = 2000 21 | # 是否使用提前终止训练 22 | early_stop = True 23 | EARLY_STOP_PATIENCE = 1000 24 | # 是否使用learning_rate 25 | learning_r_decay = True 26 | learning_rate_base = 0.0001 27 | decay_rate = 0.95 28 | height, width = 299, 299 29 | # 模型保存的路径 30 | train_dir = 'model' 31 | # 是否进行fine-tune。 选择fine-tune的的参数 32 | fine_tune = False 33 | # 是否训练所有层的参数 34 | train_all_layers = True 35 | # 迁移学习的网络模 36 | checkpoint_path = 'pretrain/inception_v4/inception_v4.ckpt' 37 | -------------------------------------------------------------------------------- /train_cnn_v1/gender/0male/0(1).jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_v1/gender/0male/0(1).jpeg -------------------------------------------------------------------------------- /train_cnn_v1/gender/0male/0(1).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_v1/gender/0male/0(1).jpg -------------------------------------------------------------------------------- /train_cnn_v1/gender/0male/0(2).jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_v1/gender/0male/0(2).jpeg -------------------------------------------------------------------------------- /train_cnn_v1/gender/0male/0(2).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_v1/gender/0male/0(2).jpg -------------------------------------------------------------------------------- /train_cnn_v1/gender/0male/0(3).jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_v1/gender/0male/0(3).jpeg -------------------------------------------------------------------------------- /train_cnn_v1/gender/0male/0(3).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_v1/gender/0male/0(3).jpg -------------------------------------------------------------------------------- /train_cnn_v1/gender/1female/1(1).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_v1/gender/1female/1(1).jpg -------------------------------------------------------------------------------- /train_cnn_v1/gender/1female/1(2).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_v1/gender/1female/1(2).jpg -------------------------------------------------------------------------------- /train_cnn_v1/gender/1female/1(3).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_v1/gender/1female/1(3).jpg -------------------------------------------------------------------------------- /train_cnn_v1/gender/1female/1(4).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_v1/gender/1female/1(4).jpg -------------------------------------------------------------------------------- /train_cnn_v1/gender/1female/1(5).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_v1/gender/1female/1(5).jpg -------------------------------------------------------------------------------- /train_cnn_v1/gender/1female/1(6).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_v1/gender/1female/1(6).jpg -------------------------------------------------------------------------------- /train_cnn_v1/gender/2many/0_Parade_marchingband_1_12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_v1/gender/2many/0_Parade_marchingband_1_12.jpg -------------------------------------------------------------------------------- /train_cnn_v1/gender/2many/0_Parade_marchingband_1_13.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_v1/gender/2many/0_Parade_marchingband_1_13.jpg -------------------------------------------------------------------------------- /train_cnn_v1/gender/2many/0_Parade_marchingband_1_17.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_v1/gender/2many/0_Parade_marchingband_1_17.jpg -------------------------------------------------------------------------------- /train_cnn_v1/gender/2many/0_Parade_marchingband_1_5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_v1/gender/2many/0_Parade_marchingband_1_5.jpg -------------------------------------------------------------------------------- /train_cnn_v1/gender/2many/0_Parade_marchingband_1_6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_v1/gender/2many/0_Parade_marchingband_1_6.jpg -------------------------------------------------------------------------------- /train_cnn_v1/gender/2many/0_Parade_marchingband_1_8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_v1/gender/2many/0_Parade_marchingband_1_8.jpg -------------------------------------------------------------------------------- /train_cnn_v1/gender/3other/6(2).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_v1/gender/3other/6(2).jpg -------------------------------------------------------------------------------- /train_cnn_v1/gender/3other/6(3).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_v1/gender/3other/6(3).jpg -------------------------------------------------------------------------------- /train_cnn_v1/gender/3other/6(4).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_v1/gender/3other/6(4).jpg -------------------------------------------------------------------------------- /train_cnn_v1/gender/3other/6(5).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_v1/gender/3other/6(5).jpg -------------------------------------------------------------------------------- /train_cnn_v1/gender/3other/6(6).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_v1/gender/3other/6(6).jpg -------------------------------------------------------------------------------- /train_cnn_v1/gender/3other/6(9).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_v1/gender/3other/6(9).jpg -------------------------------------------------------------------------------- /train_cnn_v1/lib/data_aug/data_aug.py: -------------------------------------------------------------------------------- 1 | # coding=utf-8 2 | 3 | import numpy as np 4 | import cv2 5 | from skimage import exposure 6 | 7 | class DataAugmenters(): 8 | 9 | def __init__(self, image): 10 | self.img = image 11 | 12 | def _random_fliplr(self, random_fliplr=True): 13 | if random_fliplr and np.random.choice([True, False]): 14 | self.img = np.fliplr(self.img) 15 | 16 | def _random_flipud(self, random_flipud=True): 17 | if random_flipud and np.random.choice([True, False]): 18 | self.img = np.fliplr(self.img) 19 | 20 | def _random_rotation(self, random_rotation=True): 21 | if random_rotation and np.random.choice([True, False]): 22 | w,h = self.img.shape[1], self.img.shape[0] 23 | angle = np.random.randint(0,360) 24 | rotate_matrix = cv2.getRotationMatrix2D(center=(self.img.shape[1]/2, self.img.shape[0]/2), angle=angle, scale=0.7) 25 | self.img = cv2.warpAffine(self.img, rotate_matrix, (w,h), borderMode=cv2.BORDER_REPLICATE) 26 | 27 | def _random_exposure(self, random_exposure=True): 28 | if random_exposure and np.random.choice([True, False]): 29 | e_rate = np.random.uniform(0.5,1.5) 30 | self.img = exposure.adjust_gamma(self.img, e_rate) 31 | 32 | # 裁剪 33 | def _random_crop(self, crop_size = 299, random_crop = True): 34 | if random_crop and np.random.choice([True, False]): 35 | if self.img.shape[1] > crop_size: 36 | sz1 = self.img.shape[1] // 2 37 | sz2 = crop_size // 2 38 | diff = sz1 - sz2 39 | (h, v) = (np.random.randint(0, diff + 1), np.random.randint(0, diff + 1)) 40 | self.img = self.img[v:(v + crop_size), h:(h + crop_size), :] 41 | 42 | def run(self): 43 | data_aug_list = [self._random_fliplr, self._random_flipud, self._random_rotation, self._random_exposure, self._random_crop] 44 | data_aug_func = np.random.choice(data_aug_list, 2) 45 | for func in data_aug_func: 46 | func() 47 | return self.img 48 | -------------------------------------------------------------------------------- /train_cnn_v1/lib/data_load/data_load.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | Created on 2017 10.17 4 | @author: liupeng 5 | """ 6 | 7 | import sys 8 | import tensorflow as tf 9 | import numpy as np 10 | import os 11 | import cv2 12 | from skimage import exposure 13 | from lib.utils.utils import shuffle_train_data 14 | 15 | class load_image(object): 16 | 17 | def __init__(self, img_dir, train_rate): 18 | self.img_dir = img_dir 19 | self.train_rate = train_rate 20 | self.train_imgs = [] 21 | self.train_labels = [] 22 | self.note_label = [] 23 | 24 | # 遍历所有文件下的图片, 可以参考:https://github.com/MachineLP/py_workSpace/blob/master/data_load.py 25 | def _load_img_path(self, img_sub_dir, img_label): 26 | img_all_path = os.listdir(os.path.join(self.img_dir, img_sub_dir)) 27 | img_num = len(img_all_path) 28 | data = [] 29 | label = [] 30 | for i in range (img_num): 31 | img_path = os.path.join(self.img_dir, img_sub_dir, img_all_path[i]) 32 | data.append(img_path) 33 | # print (img_path) 34 | label.append(int(img_label)) 35 | return data, label 36 | 37 | def _load_database_path(self): 38 | file_path = os.listdir(self.img_dir) 39 | for i, path in enumerate(file_path): 40 | if os.path.isfile(os.path.join(self.img_dir, path)): 41 | continue 42 | data, label = self._load_img_path(path, i) 43 | self.train_imgs.extend(data) 44 | self.train_labels.extend(label) 45 | self.note_label.append([path, i]) 46 | # print (path, i) 47 | self.train_imgs, self.train_labels = shuffle_train_data(self.train_imgs, self.train_labels) 48 | 49 | def gen_train_valid(self): 50 | self._load_database_path() 51 | image_n = len(self.train_imgs) 52 | train_n = int(image_n*self.train_rate) 53 | valid_n = int(image_n*(1-self.train_rate)) 54 | train_data, train_label = self.train_imgs[0:train_n], self.train_labels[0:train_n] 55 | valid_data, valid_label = self.train_imgs[train_n:image_n], self.train_labels[train_n:image_n] 56 | return train_data, train_label, valid_data, valid_label, train_n, valid_n, self.note_label 57 | 58 | 59 | 60 | -------------------------------------------------------------------------------- /train_cnn_v1/lib/data_load/data_load_from_txt.py: -------------------------------------------------------------------------------- 1 | #coding=utf-8 2 | 3 | from lib.utils.utils import shuffle_train_data 4 | 5 | class data_load_from_txt(object): 6 | 7 | def __init__(self, img_dir, train_rate): 8 | self.img_dir = img_dir 9 | self.train_imgs = [] 10 | self.train_labels = [] 11 | self.train_rate = train_rate 12 | 13 | def _gen_img_path(self): 14 | data_lines = open(self.img_dir, 'r').readlines() 15 | for line in data_lines: 16 | img_path = line.split(' ')[0] 17 | img_label = line.split(' ')[1] 18 | img_label = img_label.split('\n')[0] 19 | self.train_imgs.append(img_path) 20 | self.train_labels.append(img_label) 21 | self.train_imgs, self.train_labels = shuffle_train_data(self.train_imgs, self.train_labels) 22 | 23 | def gen_train_valid(self): 24 | self._gen_img_path() 25 | image_n = len(self.train_imgs) 26 | train_n = int(image_n*self.train_rate) 27 | valid_n = int(image_n*(1-self.train_rate)) 28 | train_data, train_label = self.train_imgs[0:train_n], self.train_labels[0:train_n] 29 | valid_data, valid_label = self.train_imgs[train_n:image_n], self.train_labels[train_n:image_n] 30 | return train_data, train_label, valid_data, valid_label, train_n, valid_n 31 | 32 | # 以下测试用 33 | if __name__ == '__main__': 34 | data = data_load_from_txt('train.txt', 0.9) 35 | train_data, train_label, valid_data, valid_label, train_n, valid_n = data.gen_train_valid() 36 | print (train_data) 37 | print (train_label) -------------------------------------------------------------------------------- /train_cnn_v1/lib/data_load/data_load_from_txt_nolabel.py: -------------------------------------------------------------------------------- 1 | #coding=utf-8 2 | 3 | from lib.utils.utils import shuffle_train_data 4 | 5 | class data_load_from_txt_nolabel(object): 6 | 7 | def __init__(self, img_dir, train_rate): 8 | self.img_dir = img_dir 9 | self.train_imgs = [] 10 | self.train_rate = train_rate 11 | 12 | def _gen_img_path(self): 13 | data_lines = open(self.img_dir, 'r').readlines() 14 | for line in data_lines: 15 | img_path = line.split(' ')[0] 16 | img_path = img_path.split('\n')[0] 17 | self.train_imgs.append(img_path) 18 | 19 | def gen_train_valid(self): 20 | self._gen_img_path() 21 | image_n = len(self.train_imgs) 22 | train_n = int(image_n*self.train_rate) 23 | valid_n = int(image_n*(1-self.train_rate)) 24 | train_data = self.train_imgs[0:train_n] 25 | valid_data = self.train_imgs[train_n:image_n] 26 | return train_data, valid_data, train_n, valid_n 27 | 28 | # 以下测试用 29 | if __name__ == '__main__': 30 | data = data_load_from_txt_nolabel('train.txt', 0.9) 31 | train_data, valid_data, train_n, valid_n = data.gen_train_valid() 32 | print (train_data) 33 | print (valid_data) -------------------------------------------------------------------------------- /train_cnn_v1/lib/grad_cam/grad_cam.py: -------------------------------------------------------------------------------- 1 | # coding=utf-8 2 | 3 | import tensorflow as tf 4 | from skimage.transform import resize 5 | import numpy as np 6 | 7 | class vis: 8 | 9 | def __init__(self): 10 | pass 11 | 12 | def grad_cam(self, img_input, X_, keep_prob_fc, is_train, net_layers, net, sess, predicted_class, nb_classes): 13 | ''' 14 | img_input : 需要预测类别的图像。 (cv2.imread()) 15 | X_ : 输入占位符 (模型的输入) 16 | keep_prob_fc : dropout 17 | is_train : False 18 | net_layers : 卷积层的输出 (一般都是卷积最后一层的输出) 19 | net : 模型的输出, softmax之前 20 | sess : 21 | predicted_class : 模型预测的类别 22 | nb_classes : 总类别 23 | ''' 24 | 25 | conv_layer = net_layers 26 | one_hot = tf.sparse_to_dense(predicted_class, [nb_classes], 1.0) 27 | signal = tf.multiply(net, one_hot) 28 | 29 | loss = tf.reduce_mean(signal) 30 | grads = tf.gradients(loss, conv_layer)[0] 31 | 32 | norm_grads = tf.div(grads, tf.sqrt(tf.reduce_mean(tf.square(grads))) + tf.constant(1e-5)) 33 | 34 | output, grads_val = sess.run([conv_layer, norm_grads], feed_dict={X_: [img_input], keep_prob_fc:1.0, is_train:False}) 35 | 36 | output = output[0] # [8,8,1536] 37 | grads_val = grads_val[0] 38 | 39 | weights = np.mean(grads_val, axis = (0, 1)) # [1536] 40 | cam = np.ones(output.shape[0 : 2], dtype = np.float32) # [8,8] 41 | 42 | for i, w in enumerate(weights): 43 | cam += w * output[:, :, i] 44 | 45 | cam = np.maximum(cam, 0) 46 | cam = cam / np.max(cam) 47 | cam = resize(cam, (299,299)) 48 | 49 | cam3 = np.expand_dims(cam, axis=2) 50 | cam3 = np.tile(cam3,[1,1,3]) 51 | 52 | return cam3 -------------------------------------------------------------------------------- /train_cnn_v1/lib/model/alexnet/__pycache__/alexnet.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_v1/lib/model/alexnet/__pycache__/alexnet.cpython-35.pyc -------------------------------------------------------------------------------- /train_cnn_v1/lib/model/attention/__pycache__/attention.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_v1/lib/model/attention/__pycache__/attention.cpython-35.pyc -------------------------------------------------------------------------------- /train_cnn_v1/lib/model/attention/attention.py: -------------------------------------------------------------------------------- 1 | # coding=utf-8 2 | 3 | import tensorflow as tf 4 | 5 | def attention(inputs, attention_size, time_major=False): 6 | if isinstance(inputs, tuple): 7 | # In case of Bi-RNN, concatenate the forward and the backward RNN outputs. 8 | inputs = tf.concat(inputs, 2) 9 | 10 | if time_major: 11 | # (T,B,D) => (B,T,D) 12 | inputs = tf.transpose(inputs, [1, 0, 2]) 13 | 14 | inputs_shape = inputs.shape 15 | sequence_length = inputs_shape[1].value # the length of sequences processed in the antecedent RNN layer 16 | hidden_size = inputs_shape[2].value # hidden size of the RNN layer 17 | 18 | # Attention mechanism 19 | W_omega = tf.Variable(tf.random_normal([hidden_size, attention_size], stddev=0.1)) 20 | b_omega = tf.Variable(tf.random_normal([attention_size], stddev=0.1)) 21 | u_omega = tf.Variable(tf.random_normal([attention_size], stddev=0.1)) 22 | 23 | v = tf.tanh(tf.matmul(tf.reshape(inputs, [-1, hidden_size]), W_omega) + tf.reshape(b_omega, [1, -1])) 24 | vu = tf.matmul(v, tf.reshape(u_omega, [-1, 1])) 25 | exps = tf.reshape(tf.exp(vu), [-1, sequence_length]) 26 | alphas = exps / tf.reshape(tf.reduce_sum(exps, 1), [-1, 1]) 27 | 28 | # Output of Bi-RNN is reduced with attention vector 29 | output = tf.reduce_sum(inputs * tf.reshape(alphas, [-1, sequence_length, 1]), 1) 30 | 31 | return output 32 | -------------------------------------------------------------------------------- /train_cnn_v1/lib/model/build_model/__pycache__/build_net.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_v1/lib/model/build_model/__pycache__/build_net.cpython-35.pyc -------------------------------------------------------------------------------- /train_cnn_v1/lib/model/cifarnet/cifarnet.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | Created on 2017 10.17 4 | @author: liupeng 5 | wechat: lp9628 6 | blog: http://blog.csdn.net/u014365862/article/details/78422372 7 | """ 8 | 9 | from __future__ import absolute_import 10 | from __future__ import division 11 | from __future__ import print_function 12 | 13 | import tensorflow as tf 14 | 15 | slim = tf.contrib.slim 16 | 17 | trunc_normal = lambda stddev: tf.truncated_normal_initializer(stddev=stddev) 18 | 19 | 20 | def cifarnet(images, num_classes=10, is_training=False, 21 | dropout_keep_prob=0.5, 22 | prediction_fn=slim.softmax, 23 | scope='CifarNet'): 24 | """Creates a variant of the CifarNet model. 25 | 26 | Note that since the output is a set of 'logits', the values fall in the 27 | interval of (-infinity, infinity). Consequently, to convert the outputs to a 28 | probability distribution over the characters, one will need to convert them 29 | using the softmax function: 30 | 31 | logits = cifarnet.cifarnet(images, is_training=False) 32 | probabilities = tf.nn.softmax(logits) 33 | predictions = tf.argmax(logits, 1) 34 | 35 | Args: 36 | images: A batch of `Tensors` of size [batch_size, height, width, channels]. 37 | num_classes: the number of classes in the dataset. 38 | is_training: specifies whether or not we're currently training the model. 39 | This variable will determine the behaviour of the dropout layer. 40 | dropout_keep_prob: the percentage of activation values that are retained. 41 | prediction_fn: a function to get predictions out of logits. 42 | scope: Optional variable_scope. 43 | 44 | Returns: 45 | logits: the pre-softmax activations, a tensor of size 46 | [batch_size, `num_classes`] 47 | end_points: a dictionary from components of the network to the corresponding 48 | activation. 49 | """ 50 | end_points = {} 51 | 52 | with tf.variable_scope(scope, 'CifarNet', [images, num_classes]): 53 | net = slim.conv2d(images, 64, [5, 5], scope='conv1') 54 | end_points['conv1'] = net 55 | net = slim.max_pool2d(net, [2, 2], 2, scope='pool1') 56 | end_points['pool1'] = net 57 | net = tf.nn.lrn(net, 4, bias=1.0, alpha=0.001/9.0, beta=0.75, name='norm1') 58 | net = slim.conv2d(net, 64, [5, 5], scope='conv2') 59 | end_points['conv2'] = net 60 | net = tf.nn.lrn(net, 4, bias=1.0, alpha=0.001/9.0, beta=0.75, name='norm2') 61 | net = slim.max_pool2d(net, [2, 2], 2, scope='pool2') 62 | end_points['pool2'] = net 63 | net = slim.flatten(net) 64 | end_points['Flatten'] = net 65 | net = slim.fully_connected(net, 384, scope='fc3') 66 | end_points['fc3'] = net 67 | net = slim.dropout(net, dropout_keep_prob, is_training=is_training, 68 | scope='dropout3') 69 | net = slim.fully_connected(net, 192, scope='fc4') 70 | end_points['fc4'] = net 71 | logits = slim.fully_connected(net, num_classes, 72 | biases_initializer=tf.zeros_initializer(), 73 | weights_initializer=trunc_normal(1/192.0), 74 | weights_regularizer=None, 75 | activation_fn=None, 76 | scope='logits') 77 | 78 | end_points['Logits'] = logits 79 | end_points['Predictions'] = prediction_fn(logits, scope='Predictions') 80 | 81 | return logits, end_points 82 | cifarnet.default_image_size = 32 83 | 84 | 85 | def cifarnet_arg_scope(weight_decay=0.004): 86 | """Defines the default cifarnet argument scope. 87 | 88 | Args: 89 | weight_decay: The weight decay to use for regularizing the model. 90 | 91 | Returns: 92 | An `arg_scope` to use for the inception v3 model. 93 | """ 94 | with slim.arg_scope( 95 | [slim.conv2d], 96 | weights_initializer=tf.truncated_normal_initializer(stddev=5e-2), 97 | activation_fn=tf.nn.relu): 98 | with slim.arg_scope( 99 | [slim.fully_connected], 100 | biases_initializer=tf.constant_initializer(0.1), 101 | weights_initializer=trunc_normal(0.04), 102 | weights_regularizer=slim.l2_regularizer(weight_decay), 103 | activation_fn=tf.nn.relu) as sc: 104 | return sc 105 | -------------------------------------------------------------------------------- /train_cnn_v1/lib/model/inception_v4/__pycache__/inception_utils.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_v1/lib/model/inception_v4/__pycache__/inception_utils.cpython-35.pyc -------------------------------------------------------------------------------- /train_cnn_v1/lib/model/inception_v4/__pycache__/inception_v4.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_v1/lib/model/inception_v4/__pycache__/inception_v4.cpython-35.pyc -------------------------------------------------------------------------------- /train_cnn_v1/lib/model/inception_v4/inception_utils.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | Created on 2017 10.17 4 | @author: liupeng 5 | wechat: lp9628 6 | blog: http://blog.csdn.net/u014365862/article/details/78422372 7 | """ 8 | 9 | from __future__ import absolute_import 10 | from __future__ import division 11 | from __future__ import print_function 12 | 13 | import tensorflow as tf 14 | 15 | slim = tf.contrib.slim 16 | 17 | 18 | def inception_arg_scope(weight_decay=0.00004, 19 | use_batch_norm=True, 20 | batch_norm_decay=0.9997, 21 | batch_norm_epsilon=0.001): 22 | """Defines the default arg scope for inception models. 23 | Args: 24 | weight_decay: The weight decay to use for regularizing the model. 25 | use_batch_norm: "If `True`, batch_norm is applied after each convolution. 26 | batch_norm_decay: Decay for batch norm moving average. 27 | batch_norm_epsilon: Small float added to variance to avoid dividing by zero 28 | in batch norm. 29 | Returns: 30 | An `arg_scope` to use for the inception models. 31 | """ 32 | batch_norm_params = { 33 | # Decay for the moving averages. 34 | 'decay': batch_norm_decay, 35 | # epsilon to prevent 0s in variance. 36 | 'epsilon': batch_norm_epsilon, 37 | # collection containing update_ops. 38 | 'updates_collections': tf.GraphKeys.UPDATE_OPS, 39 | } 40 | if use_batch_norm: 41 | normalizer_fn = slim.batch_norm 42 | normalizer_params = batch_norm_params 43 | else: 44 | normalizer_fn = None 45 | normalizer_params = {} 46 | # Set weight_decay for weights in Conv and FC layers. 47 | with slim.arg_scope([slim.conv2d, slim.fully_connected], 48 | weights_regularizer=slim.l2_regularizer(weight_decay)): 49 | with slim.arg_scope( 50 | [slim.conv2d], 51 | weights_initializer=slim.variance_scaling_initializer(), 52 | activation_fn=tf.nn.relu, 53 | normalizer_fn=normalizer_fn, 54 | normalizer_params=normalizer_params) as sc: 55 | return sc 56 | -------------------------------------------------------------------------------- /train_cnn_v1/lib/model/resnet_v2/__pycache__/resnet_utils.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_v1/lib/model/resnet_v2/__pycache__/resnet_utils.cpython-35.pyc -------------------------------------------------------------------------------- /train_cnn_v1/lib/model/resnet_v2/__pycache__/resnet_v2.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_v1/lib/model/resnet_v2/__pycache__/resnet_v2.cpython-35.pyc -------------------------------------------------------------------------------- /train_cnn_v1/lib/model/vgg/__pycache__/vgg.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_v1/lib/model/vgg/__pycache__/vgg.cpython-35.pyc -------------------------------------------------------------------------------- /train_cnn_v1/lib/optimizer/optimizer.py: -------------------------------------------------------------------------------- 1 | # coding=utf-8 2 | 3 | import tensorflow as tf 4 | import numpy as np 5 | 6 | def adam_optimizer(learning_rate, adam_beta1=0.9, adam_beta2=0.999, opt_epsilon=1e-08): 7 | optimizer = tf.train.AdamOptimizer(learning_rate, beta1=adam_beta1, beta2=adam_beta2, epsilon=opt_epsilon) 8 | return optimizer 9 | 10 | def adadelta_optimizer(learning_rate, adadelta_rho=0.95, opt_epsilon=1e-08): 11 | optimizer = tf.train.AdadeltaOptimizer(learning_rate, rho=adadelta_rho, epsilon=opt_epsilon) 12 | return optimizer 13 | 14 | def adagrad_optimizer(learning_rate, adagrad_initial_accumulator_value=0.1): 15 | optimizer = tf.train.AdagradOptimizer(learning_rate, initial_accumulator_value=adagrad_initial_accumulator_value) 16 | return optimizer 17 | 18 | def ftrl_optimizer(learning_rate, ftrl_learning_rate_power=-0.5, ftrl_initial_accumulator_value=0.1, ftrl_l1=0.0, ftrl_l2=0.0): 19 | optimizer = tf.train.FtrlOptimizer(learning_rate, learning_rate_power=ftrl_learning_rate_power, initial_accumulator_value=ftrl_initial_accumulator_value, l1_regularization_strength=ftrl_l1, l2_regularization_strength=ftrl_l2) 20 | return optimizer 21 | 22 | def momentum_optimizer(learning_rate, momentum): 23 | optimizer = tf.train.MomentumOptimizer(learning_rate, momentum=momentum, name='Momentum') 24 | return optimizer 25 | 26 | def rmsprop_optimizer(learning_rate, rmsprop_decay=0.9, rmsprop_momentum=0.0, opt_epsilon=1e-10): 27 | optimizer = tf.train.RMSPropOptimizer(learning_rate, decay=rmsprop_decay, momentum=rmsprop_momentum, epsilon=opt_epsilon) 28 | return optimizer 29 | 30 | def sgd_optimizer(learning_rate): 31 | optimizer = tf.train.GradientDescentOptimizer(learning_rate) 32 | return optimizer 33 | 34 | 35 | 36 | def _configure_optimizer(learning_rate): 37 | """Configures the optimizer used for training. 38 | Args: 39 | learning_rate: A scalar or `Tensor` learning rate. 40 | Returns: 41 | An instance of an optimizer. 42 | Raises: 43 | ValueError: if FLAGS.optimizer is not recognized. 44 | """ 45 | if FLAGS.optimizer == 'adadelta': 46 | optimizer = tf.train.AdadeltaOptimizer( 47 | learning_rate, 48 | rho=FLAGS.adadelta_rho, 49 | epsilon=FLAGS.opt_epsilon) 50 | elif FLAGS.optimizer == 'adagrad': 51 | optimizer = tf.train.AdagradOptimizer( 52 | learning_rate, 53 | initial_accumulator_value=FLAGS.adagrad_initial_accumulator_value) 54 | elif FLAGS.optimizer == 'adam': 55 | optimizer = tf.train.AdamOptimizer( 56 | learning_rate, 57 | beta1=FLAGS.adam_beta1, 58 | beta2=FLAGS.adam_beta2, 59 | epsilon=FLAGS.opt_epsilon) 60 | elif FLAGS.optimizer == 'ftrl': 61 | optimizer = tf.train.FtrlOptimizer( 62 | learning_rate, 63 | learning_rate_power=FLAGS.ftrl_learning_rate_power, 64 | initial_accumulator_value=FLAGS.ftrl_initial_accumulator_value, 65 | l1_regularization_strength=FLAGS.ftrl_l1, 66 | l2_regularization_strength=FLAGS.ftrl_l2) 67 | elif FLAGS.optimizer == 'momentum': 68 | optimizer = tf.train.MomentumOptimizer( 69 | learning_rate, 70 | momentum=FLAGS.momentum, 71 | name='Momentum') 72 | elif FLAGS.optimizer == 'rmsprop': 73 | optimizer = tf.train.RMSPropOptimizer( 74 | learning_rate, 75 | decay=FLAGS.rmsprop_decay, 76 | momentum=FLAGS.rmsprop_momentum, 77 | epsilon=FLAGS.opt_epsilon) 78 | elif FLAGS.optimizer == 'sgd': 79 | optimizer = tf.train.GradientDescentOptimizer(learning_rate) 80 | else: 81 | raise ValueError('Optimizer [%s] was not recognized', FLAGS.optimizer) 82 | return optimizer 83 | 84 | 85 | 86 | -------------------------------------------------------------------------------- /train_cnn_v1/lib/optimizer/optimizer_minimize.py: -------------------------------------------------------------------------------- 1 | # coding=utf-8 2 | 3 | import tensorflow as tf 4 | import numpy as np 5 | 6 | 7 | def optimizer_minimize(optimizer, loss, global_step=tf.train.get_global_step(), var_list=tf.all_variables()): 8 | opt_op = optimizer.minimize(loss, var_list=var_list) 9 | return opt_op 10 | 11 | 12 | def optimizer_apply_gradients(optimizer, loss, global_step=tf.train.get_global_step(), var_list=tf.all_variables()): 13 | gradients = tf.gradients(loss, var_list) 14 | opt_op = optimizer.apply_gradients(zip(gradients, var_list), global_step=global_step) 15 | return opt_op 16 | -------------------------------------------------------------------------------- /train_cnn_v1/lib/train/train.py: -------------------------------------------------------------------------------- 1 | # coding=utf-8 2 | """ 3 | Created on 2017 10.17 4 | @author: liupeng 5 | """ 6 | 7 | import numpy as np 8 | import tensorflow as tf 9 | slim = tf.contrib.slim 10 | from lib.utils.utils import get_next_batch_from_path, shuffle_train_data 11 | from lib.utils.utils import input_placeholder, build_net, cost, train_op, model_accuracy 12 | import os 13 | 14 | def train(train_data,train_label,valid_data,valid_label,train_n,valid_n,train_dir,num_classes,batch_size,arch_model,learning_r_decay,learning_rate_base,decay_rate,dropout_prob,epoch,height,width,checkpoint_exclude_scopes,early_stop,EARLY_STOP_PATIENCE,fine_tune,train_all_layers,checkpoint_path,g_parameter): 15 | # ---------------------------------------------------------------------------------# 16 | # X, Y, is_train, keep_prob_fc = input_placeholder(height, width, num_classes) 17 | # net, _ = build_net(X, num_classes, keep_prob_fc, is_train,arch_model) 18 | #---------------------------------------train---------------------------------------------# 19 | net, _ = build_net(train_data, num_classes, dropout_prob, True, arch_model) 20 | # 可以添加moving average的用法:http://www.cnblogs.com/hrlnw/p/8067214.html 21 | variables_to_restore,variables_to_train = g_parameter(checkpoint_exclude_scopes) 22 | loss = cost(train_label, net) 23 | global_step = tf.Variable(0, trainable=False) 24 | if learning_r_decay: 25 | learning_rate = tf.train.exponential_decay( 26 | learning_rate_base, 27 | global_step * batch_size, 28 | 1000, # 多少次衰减一次 29 | decay_rate, 30 | staircase=True) 31 | else: 32 | learning_rate = learning_rate_base 33 | if train_all_layers: 34 | variables_to_train = [] 35 | optimizer = train_op(learning_rate, loss, variables_to_train, global_step) 36 | accuracy = model_accuracy(net, train_label, num_classes) 37 | #---------------------------------------valid---------------------------------------------# 38 | with tf.variable_scope("", reuse=tf.AUTO_REUSE) as scope: 39 | # valid_net, _ = build_net(valid_data, num_classes, dropout_prob, False, arch_model) 40 | valid_net, _ = build_net(valid_data, num_classes, 1.0, False, arch_model) 41 | valid_loss = cost(valid_label, valid_net) 42 | valid_accuracy = model_accuracy(valid_net, valid_label, num_classes) 43 | #------------------------------------------------------------------------------------# 44 | sess = tf.InteractiveSession() 45 | tf.local_variables_initializer().run() 46 | tf.global_variables_initializer().run() 47 | saver2 = tf.train.Saver(tf.global_variables()) 48 | # if not train_all_layers: 49 | saver_net = tf.train.Saver(variables_to_restore) 50 | saver_net.restore(sess, checkpoint_path) 51 | 52 | if fine_tune: 53 | # saver2.restore(sess, fine_tune_dir) 54 | latest = tf.train.latest_checkpoint(train_dir) 55 | if not latest: 56 | print ("No checkpoint to continue from in", train_dir) 57 | sys.exit(1) 58 | print ("resume", latest) 59 | saver2.restore(sess, latest) 60 | 61 | # Start the queue runners. 62 | tf.train.start_queue_runners(sess= sess) 63 | 64 | # early stopping 65 | best_valid = np.inf 66 | best_valid_epoch = 0 67 | 68 | for epoch_i in range(epoch): 69 | for batch_i in range(int(train_n/batch_size)): 70 | los, _ = sess.run([loss,optimizer]) 71 | # print (los) 72 | if batch_i%100==0: 73 | loss_, acc_ = sess.run([loss, accuracy]) 74 | print('Batch: {:>2}: Training loss: {:>3.5f}, Training accuracy: {:>3.5f}'.format(batch_i, loss_, acc_)) 75 | 76 | if batch_i%500==0: 77 | ls, acc = sess.run([valid_loss, valid_accuracy]) 78 | print('Batch: {:>2}: Validation loss: {:>3.5f}, Validation accuracy: {:>3.5f}'.format(batch_i, ls, acc)) 79 | if batch_i%500==0: 80 | checkpoint_path = os.path.join(train_dir, 'model.ckpt') 81 | saver2.save(sess, checkpoint_path, global_step=epoch_i, write_meta_graph=False) 82 | sess.close() 83 | -------------------------------------------------------------------------------- /train_cnn_v1/main.py: -------------------------------------------------------------------------------- 1 | # coding=utf-8 2 | """ 3 | Created on 2017 10.17 4 | @author: liupeng 5 | """ 6 | 7 | import numpy as np 8 | import os 9 | import tensorflow as tf 10 | slim = tf.contrib.slim 11 | from lib.data_load.data_loader import read_inputs 12 | from lib.model.build_model.build_net import net_arch 13 | from lib.utils.utils import g_parameter 14 | # from lib.train.train3 import train3 as train 15 | from keras.utils import np_utils 16 | import config 17 | os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID" 18 | os.environ["CUDA_VISIBLE_DEVICES"] = "0" 19 | 20 | sample_dir = config.sample_dir 21 | num_classes = config.num_classes 22 | batch_size = config.batch_size 23 | arch_model = config.arch_model 24 | checkpoint_exclude_scopes = config.checkpoint_exclude_scopes 25 | dropout_prob = config.dropout_prob 26 | train_rate = config.train_rate 27 | epoch = config.epoch 28 | # 是否使用提前终止训练 29 | early_stop = config.early_stop 30 | EARLY_STOP_PATIENCE = config.EARLY_STOP_PATIENCE 31 | # 是否使用learning_rate 32 | learning_r_decay = config.learning_r_decay 33 | learning_rate_base = config.learning_rate_base 34 | decay_rate = config.decay_rate 35 | height, width = config.height, config.width 36 | # 模型保存的路径 37 | train_dir = config.train_dir 38 | # 是否进行fine-tune。 选择fine-tune的的参数 39 | fine_tune = config.fine_tune 40 | # 训练所有层的参数 41 | train_all_layers = config.train_all_layers 42 | # 迁移学习的网络模型 43 | checkpoint_path = config.checkpoint_path 44 | 45 | if arch_model=='arch_multi_alexnet_v2' or arch_model=='arch_multi_vgg16' or arch_model=='arch_multi_vgg16_conv': 46 | from lib.train.train3 import train3 as train 47 | else: 48 | from lib.train.train import train as train 49 | 50 | 51 | train_data, train_label, valid_data, valid_label, train_n, valid_n = read_inputs(sample_dir, train_rate, batch_size, is_training=True, num_threads=20) 52 | 53 | print (train_data, train_label, valid_data, valid_label) 54 | 55 | if not os.path.isdir(train_dir): 56 | os.makedirs(train_dir) 57 | 58 | train(train_data,train_label,valid_data,valid_label,train_n,valid_n,train_dir,num_classes,batch_size,arch_model,learning_r_decay,learning_rate_base,decay_rate,dropout_prob,epoch,height,width,checkpoint_exclude_scopes,early_stop,EARLY_STOP_PATIENCE,fine_tune,train_all_layers,checkpoint_path,g_parameter) 59 | 60 | -------------------------------------------------------------------------------- /train_cnn_v1/model/README.md: -------------------------------------------------------------------------------- 1 | 2 | # 训练好的模型在这里。 -------------------------------------------------------------------------------- /train_cnn_v1/pretrain/README.md: -------------------------------------------------------------------------------- 1 | 2 | # 预训练好的模型放在这里。 3 | 4 | ## arch_inception_v4 download inception_v4 model: http://download.tensorflow.org/models/inception_v4_2016_09_09.tar.gz 5 | wget http://download.tensorflow.org/models/inception_v4_2016_09_09.tar.gz 6 | tar zxvf inception_v4_2016_09_09.tar.gz 7 | 8 | cd pretrain 9 | 10 | mkdir inception_v4 11 | 12 | mv .../inception_v4.ckpt inception_v4 13 | 14 | ## arch_vgg16 download vgg model: http://download.tensorflow.org/models/vgg_16_2016_08_28.tar.gz 15 | wget http://download.tensorflow.org/models/vgg_16_2016_08_28.tar.gz 16 | 17 | tar zxvf vgg_16_2016_08_28.tar.gz 18 | 19 | cd pretrain 20 | 21 | mkdir vgg 22 | 23 | mv .../vgg_16.ckpt vgg 24 | 25 | ## arch_resnet_v2_50 download resnet_v2_50 model: http://download.tensorflow.org/models/resnet_v2_50_2017_04_14.tar.gz 26 | wget http://download.tensorflow.org/models/resnet_v2_50_2017_04_14.tar.gz 27 | tar zxvf resnet_v2_50_2017_04_14.tar.gz 28 | 29 | cd pretrain 30 | 31 | mkdir resnet_v2 32 | 33 | mv .../resnet_v2_50.ckpt resnet_v2 34 | 35 | 36 | -------------------------------------------------------------------------------- /train_cnn_v1/start.sh: -------------------------------------------------------------------------------- 1 | nohup python -u main.py > output.log 2>&1 & 2 | tail -f output.log -------------------------------------------------------------------------------- /train_cnn_v1/test/lp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MachineLP/train_arch/f78aabffdfb65dd1d40ede40dde81de3b04f2144/train_cnn_v1/test/lp.png -------------------------------------------------------------------------------- /train_cnn_v1/test/test_interface .py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | Created on 2017 10.17 4 | @author: liupeng 5 | """ 6 | 7 | import numpy as np 8 | import numpy as np 9 | import os 10 | from PIL import Image 11 | import cv2 12 | #from predict_cnn import * 13 | #from predict import * 14 | from predict import * 15 | 16 | import csv 17 | import argparse, json, textwrap 18 | import sys 19 | alg_core = TEAlg(pb_path_1="model/frozen_model.pb") 20 | 21 | File = open("output.csv", "w") 22 | 23 | 24 | def load_img(imgDir,imgFoldName, img_label): 25 | imgs = os.listdir(imgDir+imgFoldName) 26 | imgNum = len(imgs) 27 | data = []#np.empty((imgNum,224,224,3),dtype="float32") 28 | label = []#np.empty((imgNum,),dtype="uint8") 29 | for i in range (imgNum): 30 | image_path = imgDir+imgFoldName+"/"+imgs[i] 31 | img = cv2.imread(image_path) 32 | #for j in range(1): 33 | if img is not None: 34 | result_dict = ProjectInterface({image_path: image_path}, proxy=alg_core) 35 | print (result_dict) 36 | # print(result_dict.keys(), result_dict.values()) 37 | #print ('Img_dir:{},label:{},prediction:{}'.format(result_dict.keys(), img_label, result_dict.values())) 38 | File.write(str(result_dict) + "\n") 39 | return data,label 40 | ''' 41 | craterDir = "train/" 42 | foldName = "0male" 43 | data, label = load_Img(craterDir,foldName, 0) 44 | 45 | print (data[0].shape) 46 | print (label[0])''' 47 | 48 | 49 | def load_database(imgDir): 50 | img_path = os.listdir(imgDir) 51 | train_imgs = [] 52 | train_labels = [] 53 | for i, path in enumerate(img_path): 54 | craterDir = imgDir + '/' 55 | foldName = path 56 | data, label = load_img(craterDir,foldName, i) 57 | train_imgs.extend(data) 58 | train_labels.extend(label) 59 | #打乱数据集 60 | index = [i for i in range(len(train_imgs))] 61 | np.random.shuffle(index) 62 | train_imgs = np.asarray(train_imgs) 63 | train_labels = np.asarray(train_labels) 64 | train_imgs = train_imgs[index] 65 | train_labels = train_labels[index] 66 | return train_imgs, train_labels 67 | 68 | 69 | def test(): 70 | # train 71 | craterDir = "train_black18117" 72 | global dir_path 73 | dir_path = "train_crop/" 74 | #dir_path = "train/" 75 | data, label = load_database(craterDir) 76 | #dir = "/1female" 77 | #data, label = load_img(craterDir,dir,0) 78 | File.close() 79 | print (data.shape) 80 | print (len(data)) 81 | print (data[0].shape) 82 | print (label[0]) 83 | 84 | 85 | if __name__ == '__main__': 86 | test() 87 | -------------------------------------------------------------------------------- /train_cnn_v1/vis_cam.py: -------------------------------------------------------------------------------- 1 | # coding = utf-8 2 | 3 | import tensorflow as tf 4 | from lib.utils.utils import input_placeholder, g_parameter, build_net 5 | from lib.grad_cam.grad_cam import vis 6 | from skimage import io 7 | from matplotlib import pyplot as plt 8 | import cv2 9 | import numpy as np 10 | import config 11 | 12 | arch_model = config.arch_model 13 | 14 | def main(img, height, width, num_classes, mode_dir): 15 | X, Y, is_train, keep_prob_fc = input_placeholder(height, width, num_classes) 16 | net, net_vis = build_net(X, num_classes, keep_prob_fc, is_train, arch_model) 17 | 18 | net_ = tf.nn.softmax(net) 19 | predict = tf.reshape(net_, [-1, num_classes]) 20 | model_output = tf.argmax(predict, 1) 21 | 22 | sess = tf.Session() 23 | saver = tf.train.Saver(tf.global_variables()) 24 | saver.restore(sess, mode_dir) 25 | 26 | predicted_class = sess.run(model_output, feed_dict={X: [img], keep_prob_fc:1.0, is_train:False}) 27 | 28 | cam3 = vis().grad_cam(img, X, keep_prob_fc, is_train, net_vis, net, sess, predicted_class[0], num_classes) 29 | img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) 30 | img = img.astype(float) 31 | img /= img.max() 32 | # Superimposing the visualization with the image. 33 | cam3 = cv2.applyColorMap(np.uint8(255*cam3), cv2.COLORMAP_JET) 34 | cam3 = cv2.cvtColor(cam3, cv2.COLOR_BGR2RGB) 35 | 36 | alpha = 0.0025 37 | new_img = img+alpha*cam3 38 | # new_img = img+3*cam3 39 | new_img /= new_img.max() 40 | 41 | # Display and save 42 | io.imshow(new_img) 43 | plt.show() 44 | io.imsave('vis.jpg', new_img) 45 | 46 | def vis_conv(img, height, width, num_classes, mode_dir): 47 | X, Y, is_train, keep_prob_fc = input_placeholder(height, width, num_classes) 48 | net, net_vis = build_net(X, num_classes, keep_prob_fc, is_train, arch_model) 49 | 50 | net_ = tf.nn.softmax(net) 51 | predict = tf.reshape(net_, [-1, num_classes]) 52 | model_output = tf.argmax(predict, 1) 53 | 54 | sess = tf.Session() 55 | saver = tf.train.Saver(tf.global_variables()) 56 | saver.restore(sess, mode_dir) 57 | 58 | predicted_class = sess.run(model_output, feed_dict={X: [img], keep_prob_fc:1.0, is_train:False}) 59 | 60 | cam3 = vis().grad_cam(img, X, keep_prob_fc, is_train, net_vis, net, sess, predicted_class[0], num_classes) 61 | 62 | img = img.astype(float) 63 | img /= img.max() 64 | cam3 = cv2.applyColorMap(np.uint8(255*cam3), cv2.COLORMAP_JET) 65 | # cam3 = cv2.cvtColor(cam3, cv2.COLOR_BGR2RGB) 66 | alpha = 0.0025 67 | new_img = img+alpha*cam3 68 | new_img /= new_img.max() 69 | return new_img 70 | 71 | 72 | 73 | if __name__ == '__main__': 74 | img = cv2.imread('./lp.jpg') 75 | height, width = config.height, config.width 76 | num_classes = config.num_classes 77 | ''' 78 | train_dir = './model' 79 | latest = tf.train.latest_checkpoint(train_dir) 80 | if not latest: 81 | print ("No checkpoint to continue from in", train_dir) 82 | sys.exit(1) 83 | print ("resume", latest) 84 | mode_dir = latest 85 | ''' 86 | mode_dir = './model/model.ckpt-0' 87 | img = cv2.resize(img, (height, width)) 88 | # main(img, height, width, num_classes, mode_dir) 89 | vis_image = vis_conv(img, height, width, num_classes, mode_dir) 90 | cv2.imshow('vis_image', vis_image) 91 | cv2.waitKey(0) 92 | 93 | --------------------------------------------------------------------------------