@@ -1,2 +1,93 @@
Image data augmentation util for Caffe
Data augmentation is the best trick when you are training a deep network. the project implements several frequently-used methods for image task. Caffe's prefetching method makes my method costless with time. During training, u can try combinations of multiple diffrent processing , they do boost the performance. the most important things is that it is easy to set up and do any modification by yourself.
Now, the methods in the utils include :
-
Color
-
Contrast
-
Brightness
-
Rotation
1 add two files
1) data_augment.hpp --> include/caffe/util/ 2) data_augment.cpp --> src/caffe/util/ 2 modify include/caffe/data_transformer.hpp
1) + #include "caffe/util/data_augmenter.hpp" 2) protected: + DataAugmenter<Dtype> aug_; 3 modify src/caffe/data_transformer.cpp
1) template<typename Dtype> DataTransformer<Dtype>:: DataTransformer(const TransformationParameter& param,Phase phase) : param_(param), phase_(phase) + ,aug_( param) { 2) template<typename Dtype> void DataTransformer<Dtype>:: Transform(const cv::Mat& cv_img,Blob<Dtype>* transformed_blob){ ... + if ( phase_ == TRAIN) { + aug_.Transform(cv_cropped_img); + } CHECK(cv_cropped_img.data); 4 modify src/proto/caffe.proto
1) message TransformationParameter{ ... + optional bool color = 9 [default = false]; + optional bool contrast = 10 [default = false]; + optional bool brightness = 11 [default = false]; + optional int32 rotation_angle_interval = 12 [default = 0]; + optional bool show_augment_info = 13 [default = false]; + optional string dir_to_save_augmented_imgs = 15; 5 compile
1) cd build 2) cmake .. 3) make -j8 layer {
name: "data" type: "ImageData" top: "data" top: "label" include { phase: TRAIN } transform_param { mirror: true crop_size: 227 mean_file: "imagenet_mean.binaryproto" color: true contrast: true brightness: true rotation_angle_interval: 10 # show_augment_info: true # dir_to_save_augmented_imgs: "path" }
image_data_param { source: "/home/your/image/list.txt" batch_size: 32 shuffle:true new_height:256 new_width: 256 } }
the implementation of rotation is based on @kevinlin311tw 's caffe-augmentation if u think it's a nice project, just Star it!